Wikibooks
enwikibooks
https://en.wikibooks.org/wiki/Main_Page
MediaWiki 1.47.0-wmf.24
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
Wikibooks:Requests for deletion
4
385
4676294
4676115
2026-10-15T18:51:12Z
Codename Noreste
3441010
/* A-level Computing AQA Paper 1 Skeleton program 2027 */ Closing as redirected. ([[:m:User:Max/MaxEdit.js|MaxEdit]])
4676294
wikitext
text/x-wiki
__NEWSECTIONLINK__
[[Category:Wikibooks deletion|{{PAGENAME}}]]
{{Discussion Rooms}}
{{TOCleft}}
{{shortcut|WB:RFD}}
{{Requests for deletion/New deletion}}
{{Requests for deletion/Deletion intro}}
<!-- New deletion nominations go at the bottom of page. -->
== [[Salute, Jonathan!]] and its translations ==
<div style="column-count: 7;">
* [[Salute, Jonathan!|Interlingue/Occidental]] ([[w:en:Occidental|w]], original)
* [[Òla, Ionatà!|Audià]]
* [[Holo, Jonathan!|Cristianés]]
* [[Terve, Jonathan!|Ekumenski]]
* [[Hej, Jonathan! (Germanisch)|Germanisch]]
* [[Salom, Jonatan!|Globasa]]
* [[Àlŏ, Jonathan!|Guosa]] ([[w:en:Guosa|w]])
* [[Salut, Jonathan!|Idiom Neutral]] ([[w:en:Idiom Neutral|w]])
* [[Saluto, Jonathan! (Ido)|Ido]] ([[w:en:Ido|w]])
* [[Hallo, Jonathan!|Interlingua]] ([[w:en:Interlingua|w]])
* [[Salut, Jonathan! (Interocidental)|Interocidental]]
* [[Bune Ğonatan!|Lingaust]]
* [[Oila, Jonatan!|Lingue Simple]]
* [[Haloo, Jonatan!|Lingwa de Planeta]] ([[w:en:Lingwa de Planeta|w]])
* [[Sin Chao, Jonathan!|Masa Tang]]
* [[Salut, ionatano!|Meteza]]
* [[Salu, Jon!|Mini]]
* [[Hay, Jonathan!|Mirad]]
* [[Hai, Jon!|Monav]]
* [[Sesan Jon!|Monkel]]
* [[Salam, Jonathan!|Mundeze]]
* [[Dag, Jonathan!|Negerhollands]] ([[w:en:Negerhollands|w]])
* [[Salut Jonathan!|Neo]] ([[w:en:Neo|w]])
* [[Hej, Jonathan!|Nordien]]
* [[Saluto, Jonathan!|Novial]] ([[w:en:Novial|w]])
* [[Salute, Jonathan! (Novlingue)|Novlingue]]
* [[Alo, Jonathan!|Numo]]
* [[Hela, Jonathan!|Proyo]]
* [[Salute, Jonathan! (Romanica)|Romanica]] ([[w:en:Romanica|w]])
* [[Simi, Jonathan!|Solresol]] ([[w:en:Solresol|w]])
* [[Toki a, jan Jonatan!|Toki Pona]] ([[w:en:Toki Pona|w]])
* [[Glidis, o Jonathan!|Volapük]] ([[w:en:Volapük|w]])
</div>
There are a couple of issues here:
# Beyond their introductions, all of these books are written in languages which are not English, making them out of scope for the English Wikibooks.
# All but one of these books are in fact written in constructed languages, most of them in recently created conlangs. In some cases (e.g. [[Sin Chao, Jonathan!]]), I can't find any reliable sources describing the target language outside of the translation itself.
# Most of the translations (i.e. other than [[Salute, Jonathan!]] itself) were abandoned within the first five or so chapters (out of 100); none of them are complete, and there seems to be little effort to complete any of them.
While I recognize that this is an unusual project, and potentially one which could have some value, it's not at all clear to me that the English Wikibooks is the right place for it. — [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 00:24, 29 September 2024 (UTC)
: I'm really not sure what to do about these ones. While I recognize that this approach is certainly one method of teaching a language, I'm not sure that it constitutes an educational textbook. We do require that the English Wikibooks be written in English—for language-learning books, this typically means that the instructional parts are in English while the exercises are in the language being taught. I do think that if the language doesn't have much supporting evidence outside the book itself, it can safely be deleted. — [[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:01, 29 September 2024 (UTC)
: Author of the book here. I originally wanted to put it in the Interlingue Wikibooks https://ie.wikibooks.org/wiki/Principal_p%C3%A1gine but it somehow got locked when I wasn't paying attention and so I ended up putting it here. Getting it unlocked requires going through the process of starting an Incubator and all the rest so I opted for here and then started putting some English-only content once it was done. It's sort of in the same vein as books like Lingua Latina per se Illustrata that have separate versions with teacher notes and whatnot. [[Salute, Jonathan!/Capitul 1 - with notes]] After it was done the auxlang community really took to it which was a nice surprise. I think Ido has the largest number of chapters at the moment at 15.
:If the vast content of this book could be used to justify a quick reopening of the Interlingue Wikibooks to move it there, I'd love to do that. I imagine that an incubator with 100+ book chapters would be enough to open a Wikibooks and that's what this is. — [[User:Mithridates|Mithridates]] ([[User talk:Mithridates|discuss]] • [[Special:Contributions/Mithridates|contribs]]) 06:02, 29 September 2024 (UTC)
: Ah, I just realized that we do have a proposal to reopen the Interlingue Wikibooks: https://meta.wikimedia.org/wiki/Requests_for_new_languages/Wikibooks_Interlingue along with an Incubator page here. https://incubator.wikimedia.org/wiki/Wb/ie/Principal_p%C3%A1gine
: How easy would it be to migrate the entirety of Salute Jonathan to there? — [[User:Mithridates|Mithridates]] ([[User talk:Mithridates|discuss]] • [[Special:Contributions/Mithridates|contribs]]) 06:30, 29 September 2024 (UTC)
:: Hi @[[User:Mithridates|Mithridates]]! I'm not sure how incubator projects work, but I fully support migrating these books there. You may want to inquire over there and link to this discussion to support your request to move the content over there. Cheers! — [[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:16, 29 September 2024 (UTC)
::: Hi! Actually I have a third idea to propose after thinking about this again today (haven't been here much since I finished the book): I noticed that there is more English content than I remember and that might make it an awkward fit for the Interlingue Wikibooks. I definitely agree that having all the auxlang translations for new auxlang projects goes well beyond the scope of this Wikibooks. Finally, there are some auxlangs that are notable with their own Wikipedias.
::: So the idea is the following:
:::# Leave the original here and I can continue the work on the version with English notes and grammar. That will make it the same as Lingua Latina per se Illustrata, English by the Nature Method, Athenaze and all the rest.
:::# The Interlingua one can move to the Interlingua Wikibooks (maybe Romanica too if they want as it is sort of a dialect of Interlingua).
:::# For Ido and Lingua Franca Nova which have a Wikipedia but not a Wikibooks, I'm a little bit unsure...technically they could have their own version like the original one but would require English explanations. I could let them know and see if they are willing to do so and see what they think (work on adding English to the books vs. move the content elsewhere).
:::# The rest can move to a Github repo, then be deleted, and the front page of this book can have a single link to the repo.
::: Any thoughts on that? Adding the extra English content will be easy as it is my book and I know it inside and out.
::: Edit: [https://en.wikibooks.org/wiki/Salute,_Jonathan!/Grammar_(pronouns) this page] I just added. — [[User:Mithridates|Mithridates]] ([[User talk:Mithridates|discuss]] • [[Special:Contributions/Mithridates|contribs]]) 13:50, 29 September 2024 (UTC)
:::: Thanks for taking the time to consider this! Here are my responses/questions:
::::* Is the original [[Salute, Jonathan!]] (Occidental)? Since that one is quite fleshed out, I agree that if you edit it so the primary language of the book (e.g. headers, instructions, etc) are written in English while leaving the actual story in Occidental, it would be okay and fit in more with instructional language textbooks.
::::* For your points 2 and 3, I'm not sure how those other projects work, so I'll leave it up to them. I'm not quite sure why they would need to move, since in theory they could be revised with English as the language of instruction? Although, they have been left incomplete for a long time.
::::* For your point 4, I have no problem with that. Cheers! — [[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 16:51, 29 September 2024 (UTC)
::::: Hello again, it's the weekend so I have a bit more time to work on this. I've decided to merge the extra content from the following five chapters since the difference is fairly small and the original chapters should now have this English content. Could you delete these five pages now that they are no longer needed? [[User:Mithridates|Mithridates]] ([[User talk:Mithridates|discuss]] • [[Special:Contributions/Mithridates|contribs]]) 14:02, 5 October 2024 (UTC)
::::: [[Salute, Jonathan!/Capitul 1 - with notes]]
::::: [[Salute, Jonathan!/Capitul 2 - with notes]]
::::: [[Salute, Jonathan!/Capitul 3 - with notes]]
::::: [[Salute, Jonathan!/Capitul 4 - with notes]]
::::: [[Salute, Jonathan!/Capitul 5 - with notes]] [[User:Mithridates|Mithridates]] ([[User talk:Mithridates|discuss]] • [[Special:Contributions/Mithridates|contribs]]) 14:02, 5 October 2024 (UTC)
:::::: [[File:Yes_check.svg|{{#ifeq:|small|8|15}}px|link=|alt=]] {{#ifeq:|small|<small>|}}'''Done'''{{#ifeq:|small|</small>|}} — [[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 23:34, 5 October 2024 (UTC)
::::::: Hi again! No luck trying to find a home for the random language translations on other auxlang wikis, can't find one that is actively maintained.
::::::: The thought struck me that maybe I could just put those ones on a sub page of my user page, would that be permitted? If not, I think I'll just stick them somewhere in GitHub and call it a day since none of the people who started the translations seem to care enough to do anything about them. I'd rather not see them outright disappear but since they aren't mine I don't care enough about them to do much more work than copy and paste them somewhere.
::::::: (I would leave the ones in languages with an ISO-639 code and Wikipedia here, of course) — [[User:Mithridates|Mithridates]] ([[User talk:Mithridates|discuss]] • [[Special:Contributions/Mithridates|contribs]]) 14:13, 9 November 2024 (UTC)
:::::::: Thank you for checking! I don't personally see an issue with moving them to your user space right now. Cheers — [[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 17:21, 9 November 2024 (UTC)
::::::::: Thanks a lot! I've started a single page where I will put them all here [[User:Mithridates/SJ]] and will proceed slowly due to lack of time and also to avoid stepping on any toes / asking you to delete too much at a time and possibly deleting the wrong content.
::::::::: For this week I have put the content for the languages Audia, Cristianès, Guosa, Lingaust, Mini, Mirad, and Monav on that page as they all have a single page of content and didn't take much time to move. Please delete those. Once they are gone I will add a note on the main page letting people know where they have gone (in addition to a thank you for their interest in the book! I do love how many people have recognized it as a good source material for teaching a language). — [[User:Mithridates|Mithridates]] ([[User talk:Mithridates|discuss]] • [[Special:Contributions/Mithridates|contribs]]) 04:09, 10 November 2024 (UTC)
: {{keep}} the translations for languages that have an article on the English Wikipedia, i.e. Guosa, Idiom Neutral, Ido, Interlingua, Lingwa de Planeta, Negerhollands, Neo, Novial, Occidental, Romanica, Solresol, Toki Pona, and Volapük.
: Translations for languages that don't have an article can be kept if they have reliable sources, which I was able to find for the following languages (if you think they are not reliable, please let me know):
:* Globasa: [https://www.languagesandnumbers.com/how-to-count-in-globasa/en/globasa/] [https://greyson.conlang.org/2020/01/29/shouting-out-globasa-and-pandunia/]
:* Mini: [https://jprogr.github.io/mini] [https://www.omniglot.com/language/phrases/mini.htm] [https://www.languagesandnumbers.com/how-to-count-in-mini/en/mini/]
: {{del}} and move to [[User:Mithridates/SJ]] the rest of the translations, i.e. Audià/Audian, Cristianés, Ekumenski, Germanisch, Interocidental, Lingaust, Lingue Simple, Masa Tang, Mirad, Monav, Monkel, Mundeze, Nordien, Novlingue, Numo, Proyo, and Scuian/Meteza. If you can find reliable sources for those languages, please let me know.
: In particular, I could not find resources for Audià/Audian and Monav after searching through 15 and 17 pages on Google, respectively. It doesn't help that [[Òla, Ionatà!|their]] [[Hai, Jon!|translations]] don't explain what those languages are and where to find resources for them. This makes contributing to those translations almost impossible until @[[User:Caro de Segeda|Caro de Segeda]] can provide resources to us. It's possible that the resources may have disappared from the Internet, or that those languages were created by Caro de Segeda him/herself. If you can find resources for Audià/Audian and Monav, please let me know.
: I'm notifying the primary contributors of the translations: @[[User:Caro de Segeda|Caro de Segeda]], @[[User:Frzzl|Frzzl]], @[[User:Greatscotteh|Greatscotteh]], @[[User:IHateNumbers234|IHateNumbers234]], @[[User:Jayeless2|Jayeless2]], @[[User:Morozof|Morozof]], @[[User:Omnihom|Omnihom]], @[[User:Omoutuazn|Omoutuazn]], @[[User:PovriNaivon|PovriNaivon]], @[[User:Sir Beluga|Sir Beluga]] and @[[User:Tyoyafud|Tyoyafud]]. — [[User:EJPPhilippines|EJPPhilippines]] ([[User talk:EJPPhilippines|discuss]] • [[Special:Contributions/EJPPhilippines|contribs]]) 09:52, 30 June 2025 (UTC)
:: Caro de Segeda said on [https://www.reddit.com/r/conlangs/comments/1lcnz9g/comment/n0sc3wx/ Reddit] that Monav was created by him/her and that he/she didn't publish any resources about it other than [[Hai, Jon!]]. With '''zero''' other resources to rely on for contributing to the translation, and the fact that Monav is in [[User:Mithridates/SJ]], [[Hai, Jon!]] should be speedy deleted. — [[User:EJPPhilippines|EJPPhilippines]] ([[User talk:EJPPhilippines|discuss]] • [[Special:Contributions/EJPPhilippines|contribs]]) 01:38, 3 July 2025 (UTC)
::: I've undone the speedy deletion as Caro de Segeda posted a [https://prexins.wordpress.com/2025/07/04/monav/ resource] for Monav. — [[User:EJPPhilippines|EJPPhilippines]] ([[User talk:EJPPhilippines|discuss]] • [[Special:Contributions/EJPPhilippines|contribs]]) 07:18, 4 July 2025 (UTC)
:::: You can delete all the ones that I have created myself, I have already moved them to other places. — [[User:Caro de Segeda|Caro de Segeda]] ([[User talk:Caro de Segeda|discuss]] • [[Special:Contributions/Caro de Segeda|contribs]]) 12:39, 5 July 2025 (UTC)
{{outdent|::::}}I don't know if this is helpful since it wouldn't apply to most of these, but [[s:mul:]] could hold some of these. — [[User:Arlo Barnes|Arlo Barnes]] ([[User talk:Arlo Barnes|discuss]] • [[Special:Contributions/Arlo Barnes|contribs]]) 09:18, 30 November 2025 (UTC)
: I don't think that would be within the scope of that project. I'm not aware of any other situation where Wikisource publishes translations of texts created on Wikimedia projects - that's usually left up to other language editions of the same project. — [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 05:34, 1 December 2025 (UTC)
:: In this situation there isn't a separate [[s:ie:]] distinct from Multilingual Wikisource (see [[meta:Wikisource#List of Wikisources]]). In fact, there are very few multilingual wikis in the Wikimedia sphere; while this project ''could'' move to a Miraheze-hosted or similar wiki farm location, I think it would be a missed opportunity. I suppose an [[Interlingue]] book could be started in [[shelf:Constructed languages]] which would have all 100 chapters as an appendix (and likewise for the other languages), but that also seems non-ideal since it requires an English-language text that doesn't currently exist to be created. [[WB:AT]] seems to describe a similar situation to this one and prescribe Wikisource as the solution, and [[WB:SOURCE]] mentions fiction as out-of-scope for Wikibooks (even as in this case, language-educational fiction). [[s:mul:Wikisource:about Wikisource]] simply speaks of source texts and doesn't mention publication requirements, so maybe that is specific to some of the monolingual editions? — [[User:Arlo Barnes|Arlo Barnes]] ([[User talk:Arlo Barnes|discuss]] • [[Special:Contributions/Arlo Barnes|contribs]]) 22:28, 5 December 2025 (UTC)
:{{keep}} 100% keep. These books are a core part of language textbooks on Wikibooks and have been for years. Not sure why this is even being debated.--[[User:Xania|Xania]] [[Image:Flag_of_Estonia.svg|15px]] [[Image:Flag_of_Ukraine.svg|15px]] [[User talk:Xania|<sup>talk</sup>]] 17:55, 16 May 2026 (UTC)
::With all due respect, some of the books included in this nomination (like [[Sin Chao, Jonathan!]]) are written in constructed languages which are not substantially attested anywhere else. I struggle to imagine any educational purpose for such a book. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 00:12, 17 May 2026 (UTC)
== [[International Baccalaureate]] ==
Not actually a book in and of itself; rather, it is just a compilation of links to other books —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 23:24, 18 October 2024 (UTC)
: Could this be salvaged as a shelf? [[User:Pppery|Pppery]] ([[User talk:Pppery|discuss]] • [[Special:Contributions/Pppery|contribs]]) 05:23, 27 January 2025 (UTC)
::Probably, but are the linked books even useful? IB exams change from year to year - sometimes quite dramatically - so an old exam guide is of very limited value. Many of these books were written 10-15 years ago, and some of them (like [[IB French]]) even have comments indicating that they're no longer applicable. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 02:18, 8 December 2025 (UTC)
:I would be interested in a book that explains what an [[International Baccalaureate]] is. They may be books about it in the real world, but they are not free and with the online world becoming a fortress of paywalls I wonder how much longer one would be able to find such information on the web. This is what the wikipedia article says:
:* This article '''is missing information''' about the educational programs and curricula. Please expand the article to include this information. Further details may exist on the [[wikipedia:Talk:International_Baccalaureate#|talk page]]. ''(March 2025)''
:[[Special:Contributions/~2026-40500-29|~2026-40500-29]] ([[User talk:~2026-40500-29|talk]]) 02:05, 13 October 2026 (UTC)
== [[Character List for Baxter&Sagart]] ==
Seems completely out of scope as an educational book; it's just a list of characters and outlinks —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 23:53, 18 October 2024 (UTC)
:Adding [[Character List for Karlgren's GSR]] and [[Character List for Schuessler's CGSR]] for the same reason —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 23:55, 18 October 2024 (UTC)
:These three books do make a package and I agree they should be considered together. However, I strongly object to deleting them. They are really extremely useful resources. I use them every week and I know that many people who do work on Old Chinese phonology do so. There are lots of books out there that are lists of characters, these are called dictionaries. For example Axel Schuessler's ABC Etymological Dictionary of Old Chinese, or Pulleyblank's Lexicon of Reconstructed Pronunciation in Early Middle Chinese, Late Middle Chinese, and Early Mandarin. I see it as entirely a good thing for reference works of this kind to be available free online rather than only in expensive books in university research libraries. If this is in violation of a Wikibooks policy, I would at least like that policy to be drawn to my attention and to have some constructive comment offered about which Wikiproject such a resource should fall under. I will also say on a personal note that I have put literally hundreds of hours of work into these projects and it would grieve me a lot to see this work simply vanish, in particular when I know that colleagues around the world use these books. --[[User:Tibetologist|Tibetologist]] ([[User talk:Tibetologist|discuss]] • [[Special:Contributions/Tibetologist|contribs]]) 07:27, 1 November 2024 (UTC)
::Hi @[[User:Tibetologist|Tibetologist]], and thank you for the feedback! Official Wikibooks policy does not permit standalone dictionaries (see [[WB:DICT]]), though I understand the argument that it is a useful resource. I am wondering if there might be a home for it at [[Wiktionary:Wiktionary:Welcome, newcomers|Wiktionary]] or [[Wikiversity:Wikiversity:SHARE|Wikiversity]]? Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 12:14, 1 November 2024 (UTC)
:::The policy says to use Wiktionary, but these books cannot be moved there. In fact they link there, you can understand me as having made an index to wiktionary, if you like, where the ORDER of the characters is extremely important, information that would be lost in Wiktionary.
:::Wikiversity is not a project I participate in, and in any event my books here are older than it, so this option was not available for me at the relevant moment. If you are offering to move my books to Wikiversity, that is very kind of you and I will very graciously accept. [[User:Tibetologist|Tibetologist]] ([[User talk:Tibetologist|discuss]] • [[Special:Contributions/Tibetologist|contribs]]) 14:10, 1 November 2024 (UTC)
::::I have pinged over at Wikiversity Colloquium to ask about suitability and have looped you into the conversation over there. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 18:20, 1 November 2024 (UTC)
::I concur. I'm just an undergrad who tries to learn about Sino-Tibetan historical linguistics in his free time but I've found this wikibook to be incredibly useful, and I keep it open in one tab while I watch Professor Nathan Hill's lectures that he uploads to youtube in another tab, and another tab for taking notes. In fact if I remember correctly Professor Hill actually pointed his students to this wikibook.
::I'm not familiar with [[wikiversity:Wikiversity:SHARE|Wikiversity]] but if all the content were as accessible there as it is here then I think that could work. [[User:ChromeBones|ChromeBones]] ([[User talk:ChromeBones|discuss]] • [[Special:Contributions/ChromeBones|contribs]]) 02:43, 9 July 2025 (UTC)
:Per [[:v:Wikiversity:Colloquium#Import_Resource_From_Wikibooks?]], I recommend copying and pasting, including attribution via the edit summary and talk page, add appropriate categories and links, and then it could be deleted locally. —[[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> 22:32, 3 November 2024 (UTC)
== [[Suomen kieli käyttöön]] ==
Multiple pages in this book are written entirely in Finnish, which is out of the enWB scope. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 00:09, 19 October 2024 (UTC)
:I was going to say whether we should ask any fiwikibooks sysop to maybe see if this could be transwikied to fiwb if it's within the scope there. But [[:fi:Toiminnot:Käyttäjät/sysop]] indicates that there are only 3 sysops, and only {{u|Anr}} and {{u|Zache}} have made edits this ''year''. If they deem it to be salvageable, then transwiki + delete, otherwise straight-up delete. --[[User:SHB2000|SHB2000]] ([[User talk:SHB2000|discuss]] • [[Special:Contributions/SHB2000|contribs]]) 11:24, 14 November 2024 (UTC)
::It seems that the idea behind the book was for the pages to be bilingual, as it’s a language learning book. That’s why there are Finnish texts included intentionally even on the pages that are complete. There are similar books in dewikibooks and ruwikibooks as well. For the English version, I think the easiest way to proceed would be to clean up and adjust the page layout to fit enwikibooks better, and then translate the missing parts. By the way, if anyone wants to update the book’s name in English, it can be titled ''"Using the Finnish Language"'' or ''"Put Finnish Language into Use"'' for a direct translation. [[User:Zache|Zache]] ([[User talk:Zache|discuss]] • [[Special:Contributions/Zache|contribs]]) 11:57, 14 November 2024 (UTC)
== [[AT&T Mobility FAQ]] ==
* [[AT&T Mobility FAQ]]
* [[AT&T Mobility FAQ/MEdia Net Configuration]]
* [[AT&T Mobility FAQ/Data Connect Configuration]]
An ''extremely'' outdated FAQ on AT&T's cell phone services. Most of this document was written 20+ years ago as a Usenet FAQ; very little of it is accurate or useful anymore (particularly the two subpages, which have to do with obsolete configurations for "tethering" a computer to a cell phone). No objection if someone wants to update it, but there's clearly been no appetite to do that. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 22:20, 30 December 2024 (UTC)
:I'm wondering if it might make sense for us to develop some kind of policy on archiving books here. There are many like this one that have a good deal of content but are extremely out of date and just not useful as originally intended. ——[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 22:34, 30 December 2024 (UTC)
::@[[User:Kittycataclysm|Kittycataclysm]]: See the newly developed [[Wikibooks:Outdated books]]. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 00:16, 31 December 2024 (UTC)
:::Ooh, thanks - something like that seems like it could be an appropriate way to handle this book. A lot of the other outdated books I've tagged have been so incomplete that they wouldn't have been particularly useful even as historical references; this one might at least have some interest.
:::Any chance we can get a separate namespace (maybe "Archive:") set up for archived book content? That'd make it possible to do things like exclude them from on-site search by default. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 21:07, 31 December 2024 (UTC)
::::I think this might be a more extended discussion, so I'll bump it over to the [[Wikibooks talk:Outdated books|talk page of the draft policy]]! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 21:54, 31 December 2024 (UTC)
== Algebra/Chapter 10/Symmetric Polynomials ==
I personally believe that [[Algebra/Chapter 10/Symmetric Polynomials|this]], and all of the sections should be deleted for the fact that this goes WAY beyond the scope of what was intended for the Chapter (Algebra II level polynomials). [[User:GoreyCat|GoreyCat]] ([[User talk:GoreyCat|discuss]] • [[Special:Contributions/GoreyCat|contribs]]) 15:07, 6 February 2025 (UTC)
:'''Split''': Deletion here is not the best solution (see [[w:WP:ATD]]). Instead, this page and its subpages should be moved to another book, most likely [[Abstract Algebra]]. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 17:35, 6 February 2025 (UTC)
:{{keep}} since there is a good amount of content. If [[Abstract Algebra]] is appropriate, it seems like a fine idea to move there. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 22:59, 7 February 2025 (UTC)
::Eh, yeah, I supposed moving it is better. I just don't think it's suitable for where it appears. [[User:GoreyCat|GoreyCat]] ([[User talk:GoreyCat|discuss]] • [[Special:Contributions/GoreyCat|contribs]]) 01:40, 8 February 2025 (UTC)
== [[Puredyne]] ==
Development of Puredyne Linux was discontinued in 2012, and the software no longer appears to be available for download anywhere. (An archive of the web site is still up - with a bunch of embedded spam links - but the download links are all dead.) Is this a suitable candidate for archival (cf. [[Wikibooks:Outdated books]]), or should it just be deleted? [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 04:35, 5 March 2025 (UTC)
:I'd just archive stuff like this. Looks like a decent bit of work went into it, and you never know when someone might need to use Puredyne for some obscure project. I'd be willing to bet mirrors exist of it somewhere, or someone has it on a drive. If you want to find some stuff worth deleting, comb through [[:Category:Allbooks categories]]. [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 11:30, 5 March 2025 (UTC)
== [[Template:Qr-twwp]] ==
This isn't exactly a request to delete the template, but rather to merge it with {{tlx|Copypaste}}. The {{tlx|Qr-twwp}} template serves the same purpose as {{tlx|Copypaste}}, but without the seven-day period after which the page is deleted. This leads to confusion, as well as a perpetually full [[:Category:Queried pages]]. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 17:37, 30 March 2025 (UTC)
== [[Ghouls of the Miskatonic]] ==
I don't think that a plot summary of a book is in-scope here. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 18:43, 20 August 2025 (UTC)
:{{vd}} - at least, not a summary of ''this'' book. A summary and/or study guide to a notable work of literature might be in scope, but this is certainly not one. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 21:23, 25 August 2025 (UTC)
::Hi. I am the creator of the pages of this book. If I understand correctly, it has to be a summary of a notable work of literature? So what exactly is defined as such? I only started this as I thought it would be fun, interesting and encouraging to others who read the Arkham Horror novels, and I thought it was permitted as I've seen other summaries of books on wikibooks. [[User:Dayne90|Dayne90]] ([[User talk:Dayne90|discuss]] • [[Special:Contributions/Dayne90|contribs]]) 13:27, 26 August 2025 (UTC)
:::Your problem is it is just the plot... it needs to include an educational textual analysis to be in scope [[User:MarcGarver|MarcGarver]] ([[User talk:MarcGarver|discuss]] • [[Special:Contributions/MarcGarver|contribs]]) 12:47, 28 August 2025 (UTC)
::::And ideally it'd be a text which has ''already'' been the subject of literary analysis, such that the analysis on Wikibooks isn't original research. A notable work of literature like ''Frankenstein'' or ''Moby-Dick'' would easily meet that requirement; a tie-in novel for a tabletop RPG probably does not. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 22:08, 29 August 2025 (UTC)
== [[A-level Computing AQA Paper 1 Skeleton program 2027]] ==
{{closed|Considering the recent comments and due to no objections, I converted it to a soft redirect until another admin decides if the page can be deleted. CC to [[user:MrBerard|MrBerard]]. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:51, 15 October 2026 (UTC)
This was proposed for speedy deletion by [[User:Omphalographer]] as 'not being a book'. However, I think this page's future requires further discussion from the community. Maybe some input would be appreciated?[[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 23:51, 21 September 2026 (UTC)
:As best I can tell, this is a page students are using to collaborate on solutions for a standardized test. There are a number of similar pages for other years linked from [[A-level Computing/AQA/Paper 1/Skeleton program]].
:This is not a good fit for Wikibooks. If these students are interested in this kind of collaboration, it should take place elsewhere. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 00:14, 22 September 2026 (UTC)
::The project can be moved to Wikiversity, I think. If the students can contribute it and make sure it complies with Wikibooks' guidelines, it can stay here. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 00:17, 22 September 2026 (UTC)
:::@[[User:Omphalographer|Omphalographer]] @[[User:TechVindicator|TechVindicator]]
:::There's been a Wikibook on this every single year, as I mentioned in my comment on the deletion notice. That doesn't mean that this shouldn't be on Wikiversity, just that there is ample precedent of it being a Wikibook. Dunno if this matter to those kind of editorial decisions, though. [[Special:Contributions/~2026-51010-27|~2026-51010-27]] ([[User talk:~2026-51010-27|talk]]) 13:39, 22 September 2026 (UTC)
::::@[[User:~2026-51010-27|~2026-51010-27]]: How would the page comply with [[WB:What is Wikibooks?|Wikibooks' mission]]?. Could you provide an explanation of what the project is? If it's a collaborative project to work on solutions for a standardized test (like @[[User:Omphalographer|Omphalographer]] said), it would be more suitable for Wikiversity. If it's a textbook about A-level computing, then it would be suitable here. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 13:58, 22 September 2026 (UTC)
:::::Hi,
:::::This is definitely the former, not the latter. As I said, I don't particularly think this should be on Wikibooks, it just happens the previous years had been, and clearly they weren't subject to this degree of scrutiny 😅
:::::I have created https://en.wikiversity.org/wiki/A-level_Computer_Science_AQA_Paper_1_Skeleton_program_2027 - I'll delete the content of the page and put the link at the top. If there is a more appropriate banner to indicate the migration, please make it look how it should :D [[User:MrBerard|MrBerard]] ([[User talk:MrBerard|discuss]] • [[Special:Contributions/MrBerard|contribs]]) 10:23, 29 September 2026 (UTC)
::::::I can't seem to put a link without the edit being deemed destructive, so I'll let you trusted people do what's needed. [[User:MrBerard|MrBerard]] ([[User talk:MrBerard|discuss]] • [[Special:Contributions/MrBerard|contribs]]) 10:27, 29 September 2026 (UTC)
: {{comment}}: I cannot determine consensus in this request on whether or not it should either be deleted or imported to English Wikiversity. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:28, 13 October 2026 (UTC)
::I've actioned the migration to Wikiversity as per my comment of 29 sep. I'd rather this stayed in as a stub with a link to the Wikiversity entry, for a couple of months, though I'm sure search engines are still vaguely good enough that this shouldn't matter too much. [[User:MrBerard|MrBerard]] ([[User talk:MrBerard|discuss]] • [[Special:Contributions/MrBerard|contribs]]) 14:35, 13 October 2026 (UTC)
{{end closed}}
== [[Talmudic aramic]] ==
{{closed|Deleted per consensus below. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:18, 13 October 2026 (UTC)}}
Per the user's other mass-created pages, I concur with the AI flagging that Kittycataclysm placed on the page. I believe this to be LLM-generated, and it should thus be deleted. [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 03:29, 30 September 2026 (UTC)
:{{vd}}, LLM spam. [[User:Ternera|Ternera]] ([[User talk:Ternera|discuss]] • [[Special:Contributions/Ternera|contribs]]) 13:22, 30 September 2026 (UTC)
:{{vd}} - like most LLM-generated books, this is heavy on structure and light on substance. Most of the content amounts to a poorly organized glossary, and there are a lot of pieces missing. (For instance, there is no discussion of the grammar of the language beyond a couple of fixed expressions.) [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 19:11, 1 October 2026 (UTC)
:{{vd}} per stated reasoning. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 14:43, 12 October 2026 (UTC)
{{end closed}}
== [[Job Search]] ==
{{closed|Per minimal consensus, I deleted these books, but I only kept the main pages of these books by creating them as redirects for [[Find Employment]]. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:24, 13 October 2026 (UTC)}}
* as well as [[Job Search Automation for College Students]].
Neither of these books contains any useful information. The first book seems to be written primarily to funnel users to the second, and the second to funnel users to [[PlanoTse Handbook for Job Search Automation]], which was deleted last year. (The deletion request doesn't seem to have been archived.)
The sum total of information in these two books is, essentially, "you can search for jobs online", which is insultingly trivial. The second book's suggestion that users automate the job search process is of no practical value; most web search engines and job search sites nowadays will detect and block automated access.
[[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 18:36, 1 October 2026 (UTC)
: {{vd}} and redirect to [[Find Employment]]. ‑‑[[User:Kai Burghardt|Kai Burghardt]] ([[User talk:Kai Burghardt|discuss]] • [[Special:Contributions/Kai Burghardt|contribs]]) 05:14, 2 October 2026 (UTC)
{{end closed}}
== [[Wikipage]] ==
{{closed|Deleted per minimal consensus below. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:26, 13 October 2026 (UTC)}}
Like a few other books created by this user, the purpose of this book appears to have been to promote a piece of software written by the author ([[User:Planotse]]). The software is no longer available, and there is no actual content in the book.
[[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 18:40, 1 October 2026 (UTC)
:{{Vd}} ―[[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> 15:30, 12 October 2026 (UTC)
{{end closed}}
== [[Becoming a Linguistic Mastermind]] ==
{{closed|Deleted. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 00:11, 15 October 2026 (UTC)}}
Old book (created 2007) with no substantial content. The intent of this book appears to have been to create a single textbook encompassing ''all'' languages, with sub-courses for each language at [[Becoming a Linguistic Mastermind/The courses]], but no such courses were ever created. An analogous project on dewikibooks [[:b:de:Wikibooks:Löschkandidaten/ 2011-04#Der einfache Weg zum Sprachgenie|was deleted in 2011 for similar reasons]]. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 21:20, 7 October 2026 (UTC)
:{{Vd}} ―[[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> 15:30, 12 October 2026 (UTC)
{{end closed}}
== [[The Permanent Advantage]] ==
{{closed|Speedily deleted —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 20:15, 14 October 2026 (UTC)}}
Probably LLM-generated, given broken templates, references to Claude, and section identifiers. This could probably be speedied, but not 100% sure so throwing it to RfD. Even regardless of whether it's LLM-generated or not, I can't see any way it's really suitable for the project. [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 07:49, 10 October 2026 (UTC)
:{{vd}} - a book ''about'' chess problems isn't necessarily out of scope, but there needs to be some written content to accompany the problems. And I'm not sure these are even meaningful problems - the few problems with viewable Lichess links appear to be in the early game, so there aren't necessarily objective "solutions" to them. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 19:51, 10 October 2026 (UTC)
:{{vd}}, the Claude references throughout the book support that it's LLM-generated. [[User:Ternera|Ternera]] ([[User talk:Ternera|discuss]] • [[Special:Contributions/Ternera|contribs]]) 14:55, 11 October 2026 (UTC)
:This looked like a speedy to me, so I went ahead and deleted it. Thanks! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 20:14, 14 October 2026 (UTC)
{{end closed}}
== [[Digital Synthora]] ==
Not within WB scope since it seems to be entirely fabricated by the editor. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 14:20, 12 October 2026 (UTC)
:{{vd}} While some amount of original research is allowed here, completely fabricated topics aren't. This is just fiction writing, which is nice, but not within our scope. ―[[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> 15:30, 12 October 2026 (UTC)
:{{vd}} - per my initial tag, this appears to be an invention of the page creator; I can't find anything relevant online beyond the empty https://synthoraactstuff.fandom.com/. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 01:32, 13 October 2026 (UTC)
s7w5b6feoeimbmrvv70572eakzkbgmg
4676295
4676294
2026-10-15T18:51:39Z
Codename Noreste
3441010
/* A-level Computing AQA Paper 1 Skeleton program 2027 */
4676295
wikitext
text/x-wiki
__NEWSECTIONLINK__
[[Category:Wikibooks deletion|{{PAGENAME}}]]
{{Discussion Rooms}}
{{TOCleft}}
{{shortcut|WB:RFD}}
{{Requests for deletion/New deletion}}
{{Requests for deletion/Deletion intro}}
<!-- New deletion nominations go at the bottom of page. -->
== [[Salute, Jonathan!]] and its translations ==
<div style="column-count: 7;">
* [[Salute, Jonathan!|Interlingue/Occidental]] ([[w:en:Occidental|w]], original)
* [[Òla, Ionatà!|Audià]]
* [[Holo, Jonathan!|Cristianés]]
* [[Terve, Jonathan!|Ekumenski]]
* [[Hej, Jonathan! (Germanisch)|Germanisch]]
* [[Salom, Jonatan!|Globasa]]
* [[Àlŏ, Jonathan!|Guosa]] ([[w:en:Guosa|w]])
* [[Salut, Jonathan!|Idiom Neutral]] ([[w:en:Idiom Neutral|w]])
* [[Saluto, Jonathan! (Ido)|Ido]] ([[w:en:Ido|w]])
* [[Hallo, Jonathan!|Interlingua]] ([[w:en:Interlingua|w]])
* [[Salut, Jonathan! (Interocidental)|Interocidental]]
* [[Bune Ğonatan!|Lingaust]]
* [[Oila, Jonatan!|Lingue Simple]]
* [[Haloo, Jonatan!|Lingwa de Planeta]] ([[w:en:Lingwa de Planeta|w]])
* [[Sin Chao, Jonathan!|Masa Tang]]
* [[Salut, ionatano!|Meteza]]
* [[Salu, Jon!|Mini]]
* [[Hay, Jonathan!|Mirad]]
* [[Hai, Jon!|Monav]]
* [[Sesan Jon!|Monkel]]
* [[Salam, Jonathan!|Mundeze]]
* [[Dag, Jonathan!|Negerhollands]] ([[w:en:Negerhollands|w]])
* [[Salut Jonathan!|Neo]] ([[w:en:Neo|w]])
* [[Hej, Jonathan!|Nordien]]
* [[Saluto, Jonathan!|Novial]] ([[w:en:Novial|w]])
* [[Salute, Jonathan! (Novlingue)|Novlingue]]
* [[Alo, Jonathan!|Numo]]
* [[Hela, Jonathan!|Proyo]]
* [[Salute, Jonathan! (Romanica)|Romanica]] ([[w:en:Romanica|w]])
* [[Simi, Jonathan!|Solresol]] ([[w:en:Solresol|w]])
* [[Toki a, jan Jonatan!|Toki Pona]] ([[w:en:Toki Pona|w]])
* [[Glidis, o Jonathan!|Volapük]] ([[w:en:Volapük|w]])
</div>
There are a couple of issues here:
# Beyond their introductions, all of these books are written in languages which are not English, making them out of scope for the English Wikibooks.
# All but one of these books are in fact written in constructed languages, most of them in recently created conlangs. In some cases (e.g. [[Sin Chao, Jonathan!]]), I can't find any reliable sources describing the target language outside of the translation itself.
# Most of the translations (i.e. other than [[Salute, Jonathan!]] itself) were abandoned within the first five or so chapters (out of 100); none of them are complete, and there seems to be little effort to complete any of them.
While I recognize that this is an unusual project, and potentially one which could have some value, it's not at all clear to me that the English Wikibooks is the right place for it. — [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 00:24, 29 September 2024 (UTC)
: I'm really not sure what to do about these ones. While I recognize that this approach is certainly one method of teaching a language, I'm not sure that it constitutes an educational textbook. We do require that the English Wikibooks be written in English—for language-learning books, this typically means that the instructional parts are in English while the exercises are in the language being taught. I do think that if the language doesn't have much supporting evidence outside the book itself, it can safely be deleted. — [[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:01, 29 September 2024 (UTC)
: Author of the book here. I originally wanted to put it in the Interlingue Wikibooks https://ie.wikibooks.org/wiki/Principal_p%C3%A1gine but it somehow got locked when I wasn't paying attention and so I ended up putting it here. Getting it unlocked requires going through the process of starting an Incubator and all the rest so I opted for here and then started putting some English-only content once it was done. It's sort of in the same vein as books like Lingua Latina per se Illustrata that have separate versions with teacher notes and whatnot. [[Salute, Jonathan!/Capitul 1 - with notes]] After it was done the auxlang community really took to it which was a nice surprise. I think Ido has the largest number of chapters at the moment at 15.
:If the vast content of this book could be used to justify a quick reopening of the Interlingue Wikibooks to move it there, I'd love to do that. I imagine that an incubator with 100+ book chapters would be enough to open a Wikibooks and that's what this is. — [[User:Mithridates|Mithridates]] ([[User talk:Mithridates|discuss]] • [[Special:Contributions/Mithridates|contribs]]) 06:02, 29 September 2024 (UTC)
: Ah, I just realized that we do have a proposal to reopen the Interlingue Wikibooks: https://meta.wikimedia.org/wiki/Requests_for_new_languages/Wikibooks_Interlingue along with an Incubator page here. https://incubator.wikimedia.org/wiki/Wb/ie/Principal_p%C3%A1gine
: How easy would it be to migrate the entirety of Salute Jonathan to there? — [[User:Mithridates|Mithridates]] ([[User talk:Mithridates|discuss]] • [[Special:Contributions/Mithridates|contribs]]) 06:30, 29 September 2024 (UTC)
:: Hi @[[User:Mithridates|Mithridates]]! I'm not sure how incubator projects work, but I fully support migrating these books there. You may want to inquire over there and link to this discussion to support your request to move the content over there. Cheers! — [[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 13:16, 29 September 2024 (UTC)
::: Hi! Actually I have a third idea to propose after thinking about this again today (haven't been here much since I finished the book): I noticed that there is more English content than I remember and that might make it an awkward fit for the Interlingue Wikibooks. I definitely agree that having all the auxlang translations for new auxlang projects goes well beyond the scope of this Wikibooks. Finally, there are some auxlangs that are notable with their own Wikipedias.
::: So the idea is the following:
:::# Leave the original here and I can continue the work on the version with English notes and grammar. That will make it the same as Lingua Latina per se Illustrata, English by the Nature Method, Athenaze and all the rest.
:::# The Interlingua one can move to the Interlingua Wikibooks (maybe Romanica too if they want as it is sort of a dialect of Interlingua).
:::# For Ido and Lingua Franca Nova which have a Wikipedia but not a Wikibooks, I'm a little bit unsure...technically they could have their own version like the original one but would require English explanations. I could let them know and see if they are willing to do so and see what they think (work on adding English to the books vs. move the content elsewhere).
:::# The rest can move to a Github repo, then be deleted, and the front page of this book can have a single link to the repo.
::: Any thoughts on that? Adding the extra English content will be easy as it is my book and I know it inside and out.
::: Edit: [https://en.wikibooks.org/wiki/Salute,_Jonathan!/Grammar_(pronouns) this page] I just added. — [[User:Mithridates|Mithridates]] ([[User talk:Mithridates|discuss]] • [[Special:Contributions/Mithridates|contribs]]) 13:50, 29 September 2024 (UTC)
:::: Thanks for taking the time to consider this! Here are my responses/questions:
::::* Is the original [[Salute, Jonathan!]] (Occidental)? Since that one is quite fleshed out, I agree that if you edit it so the primary language of the book (e.g. headers, instructions, etc) are written in English while leaving the actual story in Occidental, it would be okay and fit in more with instructional language textbooks.
::::* For your points 2 and 3, I'm not sure how those other projects work, so I'll leave it up to them. I'm not quite sure why they would need to move, since in theory they could be revised with English as the language of instruction? Although, they have been left incomplete for a long time.
::::* For your point 4, I have no problem with that. Cheers! — [[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 16:51, 29 September 2024 (UTC)
::::: Hello again, it's the weekend so I have a bit more time to work on this. I've decided to merge the extra content from the following five chapters since the difference is fairly small and the original chapters should now have this English content. Could you delete these five pages now that they are no longer needed? [[User:Mithridates|Mithridates]] ([[User talk:Mithridates|discuss]] • [[Special:Contributions/Mithridates|contribs]]) 14:02, 5 October 2024 (UTC)
::::: [[Salute, Jonathan!/Capitul 1 - with notes]]
::::: [[Salute, Jonathan!/Capitul 2 - with notes]]
::::: [[Salute, Jonathan!/Capitul 3 - with notes]]
::::: [[Salute, Jonathan!/Capitul 4 - with notes]]
::::: [[Salute, Jonathan!/Capitul 5 - with notes]] [[User:Mithridates|Mithridates]] ([[User talk:Mithridates|discuss]] • [[Special:Contributions/Mithridates|contribs]]) 14:02, 5 October 2024 (UTC)
:::::: [[File:Yes_check.svg|{{#ifeq:|small|8|15}}px|link=|alt=]] {{#ifeq:|small|<small>|}}'''Done'''{{#ifeq:|small|</small>|}} — [[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 23:34, 5 October 2024 (UTC)
::::::: Hi again! No luck trying to find a home for the random language translations on other auxlang wikis, can't find one that is actively maintained.
::::::: The thought struck me that maybe I could just put those ones on a sub page of my user page, would that be permitted? If not, I think I'll just stick them somewhere in GitHub and call it a day since none of the people who started the translations seem to care enough to do anything about them. I'd rather not see them outright disappear but since they aren't mine I don't care enough about them to do much more work than copy and paste them somewhere.
::::::: (I would leave the ones in languages with an ISO-639 code and Wikipedia here, of course) — [[User:Mithridates|Mithridates]] ([[User talk:Mithridates|discuss]] • [[Special:Contributions/Mithridates|contribs]]) 14:13, 9 November 2024 (UTC)
:::::::: Thank you for checking! I don't personally see an issue with moving them to your user space right now. Cheers — [[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 17:21, 9 November 2024 (UTC)
::::::::: Thanks a lot! I've started a single page where I will put them all here [[User:Mithridates/SJ]] and will proceed slowly due to lack of time and also to avoid stepping on any toes / asking you to delete too much at a time and possibly deleting the wrong content.
::::::::: For this week I have put the content for the languages Audia, Cristianès, Guosa, Lingaust, Mini, Mirad, and Monav on that page as they all have a single page of content and didn't take much time to move. Please delete those. Once they are gone I will add a note on the main page letting people know where they have gone (in addition to a thank you for their interest in the book! I do love how many people have recognized it as a good source material for teaching a language). — [[User:Mithridates|Mithridates]] ([[User talk:Mithridates|discuss]] • [[Special:Contributions/Mithridates|contribs]]) 04:09, 10 November 2024 (UTC)
: {{keep}} the translations for languages that have an article on the English Wikipedia, i.e. Guosa, Idiom Neutral, Ido, Interlingua, Lingwa de Planeta, Negerhollands, Neo, Novial, Occidental, Romanica, Solresol, Toki Pona, and Volapük.
: Translations for languages that don't have an article can be kept if they have reliable sources, which I was able to find for the following languages (if you think they are not reliable, please let me know):
:* Globasa: [https://www.languagesandnumbers.com/how-to-count-in-globasa/en/globasa/] [https://greyson.conlang.org/2020/01/29/shouting-out-globasa-and-pandunia/]
:* Mini: [https://jprogr.github.io/mini] [https://www.omniglot.com/language/phrases/mini.htm] [https://www.languagesandnumbers.com/how-to-count-in-mini/en/mini/]
: {{del}} and move to [[User:Mithridates/SJ]] the rest of the translations, i.e. Audià/Audian, Cristianés, Ekumenski, Germanisch, Interocidental, Lingaust, Lingue Simple, Masa Tang, Mirad, Monav, Monkel, Mundeze, Nordien, Novlingue, Numo, Proyo, and Scuian/Meteza. If you can find reliable sources for those languages, please let me know.
: In particular, I could not find resources for Audià/Audian and Monav after searching through 15 and 17 pages on Google, respectively. It doesn't help that [[Òla, Ionatà!|their]] [[Hai, Jon!|translations]] don't explain what those languages are and where to find resources for them. This makes contributing to those translations almost impossible until @[[User:Caro de Segeda|Caro de Segeda]] can provide resources to us. It's possible that the resources may have disappared from the Internet, or that those languages were created by Caro de Segeda him/herself. If you can find resources for Audià/Audian and Monav, please let me know.
: I'm notifying the primary contributors of the translations: @[[User:Caro de Segeda|Caro de Segeda]], @[[User:Frzzl|Frzzl]], @[[User:Greatscotteh|Greatscotteh]], @[[User:IHateNumbers234|IHateNumbers234]], @[[User:Jayeless2|Jayeless2]], @[[User:Morozof|Morozof]], @[[User:Omnihom|Omnihom]], @[[User:Omoutuazn|Omoutuazn]], @[[User:PovriNaivon|PovriNaivon]], @[[User:Sir Beluga|Sir Beluga]] and @[[User:Tyoyafud|Tyoyafud]]. — [[User:EJPPhilippines|EJPPhilippines]] ([[User talk:EJPPhilippines|discuss]] • [[Special:Contributions/EJPPhilippines|contribs]]) 09:52, 30 June 2025 (UTC)
:: Caro de Segeda said on [https://www.reddit.com/r/conlangs/comments/1lcnz9g/comment/n0sc3wx/ Reddit] that Monav was created by him/her and that he/she didn't publish any resources about it other than [[Hai, Jon!]]. With '''zero''' other resources to rely on for contributing to the translation, and the fact that Monav is in [[User:Mithridates/SJ]], [[Hai, Jon!]] should be speedy deleted. — [[User:EJPPhilippines|EJPPhilippines]] ([[User talk:EJPPhilippines|discuss]] • [[Special:Contributions/EJPPhilippines|contribs]]) 01:38, 3 July 2025 (UTC)
::: I've undone the speedy deletion as Caro de Segeda posted a [https://prexins.wordpress.com/2025/07/04/monav/ resource] for Monav. — [[User:EJPPhilippines|EJPPhilippines]] ([[User talk:EJPPhilippines|discuss]] • [[Special:Contributions/EJPPhilippines|contribs]]) 07:18, 4 July 2025 (UTC)
:::: You can delete all the ones that I have created myself, I have already moved them to other places. — [[User:Caro de Segeda|Caro de Segeda]] ([[User talk:Caro de Segeda|discuss]] • [[Special:Contributions/Caro de Segeda|contribs]]) 12:39, 5 July 2025 (UTC)
{{outdent|::::}}I don't know if this is helpful since it wouldn't apply to most of these, but [[s:mul:]] could hold some of these. — [[User:Arlo Barnes|Arlo Barnes]] ([[User talk:Arlo Barnes|discuss]] • [[Special:Contributions/Arlo Barnes|contribs]]) 09:18, 30 November 2025 (UTC)
: I don't think that would be within the scope of that project. I'm not aware of any other situation where Wikisource publishes translations of texts created on Wikimedia projects - that's usually left up to other language editions of the same project. — [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 05:34, 1 December 2025 (UTC)
:: In this situation there isn't a separate [[s:ie:]] distinct from Multilingual Wikisource (see [[meta:Wikisource#List of Wikisources]]). In fact, there are very few multilingual wikis in the Wikimedia sphere; while this project ''could'' move to a Miraheze-hosted or similar wiki farm location, I think it would be a missed opportunity. I suppose an [[Interlingue]] book could be started in [[shelf:Constructed languages]] which would have all 100 chapters as an appendix (and likewise for the other languages), but that also seems non-ideal since it requires an English-language text that doesn't currently exist to be created. [[WB:AT]] seems to describe a similar situation to this one and prescribe Wikisource as the solution, and [[WB:SOURCE]] mentions fiction as out-of-scope for Wikibooks (even as in this case, language-educational fiction). [[s:mul:Wikisource:about Wikisource]] simply speaks of source texts and doesn't mention publication requirements, so maybe that is specific to some of the monolingual editions? — [[User:Arlo Barnes|Arlo Barnes]] ([[User talk:Arlo Barnes|discuss]] • [[Special:Contributions/Arlo Barnes|contribs]]) 22:28, 5 December 2025 (UTC)
:{{keep}} 100% keep. These books are a core part of language textbooks on Wikibooks and have been for years. Not sure why this is even being debated.--[[User:Xania|Xania]] [[Image:Flag_of_Estonia.svg|15px]] [[Image:Flag_of_Ukraine.svg|15px]] [[User talk:Xania|<sup>talk</sup>]] 17:55, 16 May 2026 (UTC)
::With all due respect, some of the books included in this nomination (like [[Sin Chao, Jonathan!]]) are written in constructed languages which are not substantially attested anywhere else. I struggle to imagine any educational purpose for such a book. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 00:12, 17 May 2026 (UTC)
== [[International Baccalaureate]] ==
Not actually a book in and of itself; rather, it is just a compilation of links to other books —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 23:24, 18 October 2024 (UTC)
: Could this be salvaged as a shelf? [[User:Pppery|Pppery]] ([[User talk:Pppery|discuss]] • [[Special:Contributions/Pppery|contribs]]) 05:23, 27 January 2025 (UTC)
::Probably, but are the linked books even useful? IB exams change from year to year - sometimes quite dramatically - so an old exam guide is of very limited value. Many of these books were written 10-15 years ago, and some of them (like [[IB French]]) even have comments indicating that they're no longer applicable. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 02:18, 8 December 2025 (UTC)
:I would be interested in a book that explains what an [[International Baccalaureate]] is. They may be books about it in the real world, but they are not free and with the online world becoming a fortress of paywalls I wonder how much longer one would be able to find such information on the web. This is what the wikipedia article says:
:* This article '''is missing information''' about the educational programs and curricula. Please expand the article to include this information. Further details may exist on the [[wikipedia:Talk:International_Baccalaureate#|talk page]]. ''(March 2025)''
:[[Special:Contributions/~2026-40500-29|~2026-40500-29]] ([[User talk:~2026-40500-29|talk]]) 02:05, 13 October 2026 (UTC)
== [[Character List for Baxter&Sagart]] ==
Seems completely out of scope as an educational book; it's just a list of characters and outlinks —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 23:53, 18 October 2024 (UTC)
:Adding [[Character List for Karlgren's GSR]] and [[Character List for Schuessler's CGSR]] for the same reason —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 23:55, 18 October 2024 (UTC)
:These three books do make a package and I agree they should be considered together. However, I strongly object to deleting them. They are really extremely useful resources. I use them every week and I know that many people who do work on Old Chinese phonology do so. There are lots of books out there that are lists of characters, these are called dictionaries. For example Axel Schuessler's ABC Etymological Dictionary of Old Chinese, or Pulleyblank's Lexicon of Reconstructed Pronunciation in Early Middle Chinese, Late Middle Chinese, and Early Mandarin. I see it as entirely a good thing for reference works of this kind to be available free online rather than only in expensive books in university research libraries. If this is in violation of a Wikibooks policy, I would at least like that policy to be drawn to my attention and to have some constructive comment offered about which Wikiproject such a resource should fall under. I will also say on a personal note that I have put literally hundreds of hours of work into these projects and it would grieve me a lot to see this work simply vanish, in particular when I know that colleagues around the world use these books. --[[User:Tibetologist|Tibetologist]] ([[User talk:Tibetologist|discuss]] • [[Special:Contributions/Tibetologist|contribs]]) 07:27, 1 November 2024 (UTC)
::Hi @[[User:Tibetologist|Tibetologist]], and thank you for the feedback! Official Wikibooks policy does not permit standalone dictionaries (see [[WB:DICT]]), though I understand the argument that it is a useful resource. I am wondering if there might be a home for it at [[Wiktionary:Wiktionary:Welcome, newcomers|Wiktionary]] or [[Wikiversity:Wikiversity:SHARE|Wikiversity]]? Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 12:14, 1 November 2024 (UTC)
:::The policy says to use Wiktionary, but these books cannot be moved there. In fact they link there, you can understand me as having made an index to wiktionary, if you like, where the ORDER of the characters is extremely important, information that would be lost in Wiktionary.
:::Wikiversity is not a project I participate in, and in any event my books here are older than it, so this option was not available for me at the relevant moment. If you are offering to move my books to Wikiversity, that is very kind of you and I will very graciously accept. [[User:Tibetologist|Tibetologist]] ([[User talk:Tibetologist|discuss]] • [[Special:Contributions/Tibetologist|contribs]]) 14:10, 1 November 2024 (UTC)
::::I have pinged over at Wikiversity Colloquium to ask about suitability and have looped you into the conversation over there. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 18:20, 1 November 2024 (UTC)
::I concur. I'm just an undergrad who tries to learn about Sino-Tibetan historical linguistics in his free time but I've found this wikibook to be incredibly useful, and I keep it open in one tab while I watch Professor Nathan Hill's lectures that he uploads to youtube in another tab, and another tab for taking notes. In fact if I remember correctly Professor Hill actually pointed his students to this wikibook.
::I'm not familiar with [[wikiversity:Wikiversity:SHARE|Wikiversity]] but if all the content were as accessible there as it is here then I think that could work. [[User:ChromeBones|ChromeBones]] ([[User talk:ChromeBones|discuss]] • [[Special:Contributions/ChromeBones|contribs]]) 02:43, 9 July 2025 (UTC)
:Per [[:v:Wikiversity:Colloquium#Import_Resource_From_Wikibooks?]], I recommend copying and pasting, including attribution via the edit summary and talk page, add appropriate categories and links, and then it could be deleted locally. —[[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> 22:32, 3 November 2024 (UTC)
== [[Suomen kieli käyttöön]] ==
Multiple pages in this book are written entirely in Finnish, which is out of the enWB scope. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 00:09, 19 October 2024 (UTC)
:I was going to say whether we should ask any fiwikibooks sysop to maybe see if this could be transwikied to fiwb if it's within the scope there. But [[:fi:Toiminnot:Käyttäjät/sysop]] indicates that there are only 3 sysops, and only {{u|Anr}} and {{u|Zache}} have made edits this ''year''. If they deem it to be salvageable, then transwiki + delete, otherwise straight-up delete. --[[User:SHB2000|SHB2000]] ([[User talk:SHB2000|discuss]] • [[Special:Contributions/SHB2000|contribs]]) 11:24, 14 November 2024 (UTC)
::It seems that the idea behind the book was for the pages to be bilingual, as it’s a language learning book. That’s why there are Finnish texts included intentionally even on the pages that are complete. There are similar books in dewikibooks and ruwikibooks as well. For the English version, I think the easiest way to proceed would be to clean up and adjust the page layout to fit enwikibooks better, and then translate the missing parts. By the way, if anyone wants to update the book’s name in English, it can be titled ''"Using the Finnish Language"'' or ''"Put Finnish Language into Use"'' for a direct translation. [[User:Zache|Zache]] ([[User talk:Zache|discuss]] • [[Special:Contributions/Zache|contribs]]) 11:57, 14 November 2024 (UTC)
== [[AT&T Mobility FAQ]] ==
* [[AT&T Mobility FAQ]]
* [[AT&T Mobility FAQ/MEdia Net Configuration]]
* [[AT&T Mobility FAQ/Data Connect Configuration]]
An ''extremely'' outdated FAQ on AT&T's cell phone services. Most of this document was written 20+ years ago as a Usenet FAQ; very little of it is accurate or useful anymore (particularly the two subpages, which have to do with obsolete configurations for "tethering" a computer to a cell phone). No objection if someone wants to update it, but there's clearly been no appetite to do that. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 22:20, 30 December 2024 (UTC)
:I'm wondering if it might make sense for us to develop some kind of policy on archiving books here. There are many like this one that have a good deal of content but are extremely out of date and just not useful as originally intended. ——[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 22:34, 30 December 2024 (UTC)
::@[[User:Kittycataclysm|Kittycataclysm]]: See the newly developed [[Wikibooks:Outdated books]]. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 00:16, 31 December 2024 (UTC)
:::Ooh, thanks - something like that seems like it could be an appropriate way to handle this book. A lot of the other outdated books I've tagged have been so incomplete that they wouldn't have been particularly useful even as historical references; this one might at least have some interest.
:::Any chance we can get a separate namespace (maybe "Archive:") set up for archived book content? That'd make it possible to do things like exclude them from on-site search by default. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 21:07, 31 December 2024 (UTC)
::::I think this might be a more extended discussion, so I'll bump it over to the [[Wikibooks talk:Outdated books|talk page of the draft policy]]! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 21:54, 31 December 2024 (UTC)
== Algebra/Chapter 10/Symmetric Polynomials ==
I personally believe that [[Algebra/Chapter 10/Symmetric Polynomials|this]], and all of the sections should be deleted for the fact that this goes WAY beyond the scope of what was intended for the Chapter (Algebra II level polynomials). [[User:GoreyCat|GoreyCat]] ([[User talk:GoreyCat|discuss]] • [[Special:Contributions/GoreyCat|contribs]]) 15:07, 6 February 2025 (UTC)
:'''Split''': Deletion here is not the best solution (see [[w:WP:ATD]]). Instead, this page and its subpages should be moved to another book, most likely [[Abstract Algebra]]. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 17:35, 6 February 2025 (UTC)
:{{keep}} since there is a good amount of content. If [[Abstract Algebra]] is appropriate, it seems like a fine idea to move there. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 22:59, 7 February 2025 (UTC)
::Eh, yeah, I supposed moving it is better. I just don't think it's suitable for where it appears. [[User:GoreyCat|GoreyCat]] ([[User talk:GoreyCat|discuss]] • [[Special:Contributions/GoreyCat|contribs]]) 01:40, 8 February 2025 (UTC)
== [[Puredyne]] ==
Development of Puredyne Linux was discontinued in 2012, and the software no longer appears to be available for download anywhere. (An archive of the web site is still up - with a bunch of embedded spam links - but the download links are all dead.) Is this a suitable candidate for archival (cf. [[Wikibooks:Outdated books]]), or should it just be deleted? [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 04:35, 5 March 2025 (UTC)
:I'd just archive stuff like this. Looks like a decent bit of work went into it, and you never know when someone might need to use Puredyne for some obscure project. I'd be willing to bet mirrors exist of it somewhere, or someone has it on a drive. If you want to find some stuff worth deleting, comb through [[:Category:Allbooks categories]]. [[User:MediaKyle|MediaKyle]] ([[User talk:MediaKyle|discuss]] • [[Special:Contributions/MediaKyle|contribs]]) 11:30, 5 March 2025 (UTC)
== [[Template:Qr-twwp]] ==
This isn't exactly a request to delete the template, but rather to merge it with {{tlx|Copypaste}}. The {{tlx|Qr-twwp}} template serves the same purpose as {{tlx|Copypaste}}, but without the seven-day period after which the page is deleted. This leads to confusion, as well as a perpetually full [[:Category:Queried pages]]. [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 17:37, 30 March 2025 (UTC)
== [[Ghouls of the Miskatonic]] ==
I don't think that a plot summary of a book is in-scope here. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 18:43, 20 August 2025 (UTC)
:{{vd}} - at least, not a summary of ''this'' book. A summary and/or study guide to a notable work of literature might be in scope, but this is certainly not one. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 21:23, 25 August 2025 (UTC)
::Hi. I am the creator of the pages of this book. If I understand correctly, it has to be a summary of a notable work of literature? So what exactly is defined as such? I only started this as I thought it would be fun, interesting and encouraging to others who read the Arkham Horror novels, and I thought it was permitted as I've seen other summaries of books on wikibooks. [[User:Dayne90|Dayne90]] ([[User talk:Dayne90|discuss]] • [[Special:Contributions/Dayne90|contribs]]) 13:27, 26 August 2025 (UTC)
:::Your problem is it is just the plot... it needs to include an educational textual analysis to be in scope [[User:MarcGarver|MarcGarver]] ([[User talk:MarcGarver|discuss]] • [[Special:Contributions/MarcGarver|contribs]]) 12:47, 28 August 2025 (UTC)
::::And ideally it'd be a text which has ''already'' been the subject of literary analysis, such that the analysis on Wikibooks isn't original research. A notable work of literature like ''Frankenstein'' or ''Moby-Dick'' would easily meet that requirement; a tie-in novel for a tabletop RPG probably does not. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 22:08, 29 August 2025 (UTC)
== [[A-level Computing AQA Paper 1 Skeleton program 2027]] ==
{{closed|Considering the recent comments and due to no objections, I converted it to a soft redirect until another admin decides if the page can be deleted. CC to [[user:MrBerard|MrBerard]]. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:51, 15 October 2026 (UTC)}}
This was proposed for speedy deletion by [[User:Omphalographer]] as 'not being a book'. However, I think this page's future requires further discussion from the community. Maybe some input would be appreciated?[[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 23:51, 21 September 2026 (UTC)
:As best I can tell, this is a page students are using to collaborate on solutions for a standardized test. There are a number of similar pages for other years linked from [[A-level Computing/AQA/Paper 1/Skeleton program]].
:This is not a good fit for Wikibooks. If these students are interested in this kind of collaboration, it should take place elsewhere. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 00:14, 22 September 2026 (UTC)
::The project can be moved to Wikiversity, I think. If the students can contribute it and make sure it complies with Wikibooks' guidelines, it can stay here. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 00:17, 22 September 2026 (UTC)
:::@[[User:Omphalographer|Omphalographer]] @[[User:TechVindicator|TechVindicator]]
:::There's been a Wikibook on this every single year, as I mentioned in my comment on the deletion notice. That doesn't mean that this shouldn't be on Wikiversity, just that there is ample precedent of it being a Wikibook. Dunno if this matter to those kind of editorial decisions, though. [[Special:Contributions/~2026-51010-27|~2026-51010-27]] ([[User talk:~2026-51010-27|talk]]) 13:39, 22 September 2026 (UTC)
::::@[[User:~2026-51010-27|~2026-51010-27]]: How would the page comply with [[WB:What is Wikibooks?|Wikibooks' mission]]?. Could you provide an explanation of what the project is? If it's a collaborative project to work on solutions for a standardized test (like @[[User:Omphalographer|Omphalographer]] said), it would be more suitable for Wikiversity. If it's a textbook about A-level computing, then it would be suitable here. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 13:58, 22 September 2026 (UTC)
:::::Hi,
:::::This is definitely the former, not the latter. As I said, I don't particularly think this should be on Wikibooks, it just happens the previous years had been, and clearly they weren't subject to this degree of scrutiny 😅
:::::I have created https://en.wikiversity.org/wiki/A-level_Computer_Science_AQA_Paper_1_Skeleton_program_2027 - I'll delete the content of the page and put the link at the top. If there is a more appropriate banner to indicate the migration, please make it look how it should :D [[User:MrBerard|MrBerard]] ([[User talk:MrBerard|discuss]] • [[Special:Contributions/MrBerard|contribs]]) 10:23, 29 September 2026 (UTC)
::::::I can't seem to put a link without the edit being deemed destructive, so I'll let you trusted people do what's needed. [[User:MrBerard|MrBerard]] ([[User talk:MrBerard|discuss]] • [[Special:Contributions/MrBerard|contribs]]) 10:27, 29 September 2026 (UTC)
: {{comment}}: I cannot determine consensus in this request on whether or not it should either be deleted or imported to English Wikiversity. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:28, 13 October 2026 (UTC)
::I've actioned the migration to Wikiversity as per my comment of 29 sep. I'd rather this stayed in as a stub with a link to the Wikiversity entry, for a couple of months, though I'm sure search engines are still vaguely good enough that this shouldn't matter too much. [[User:MrBerard|MrBerard]] ([[User talk:MrBerard|discuss]] • [[Special:Contributions/MrBerard|contribs]]) 14:35, 13 October 2026 (UTC)
{{end closed}}
== [[Talmudic aramic]] ==
{{closed|Deleted per consensus below. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:18, 13 October 2026 (UTC)}}
Per the user's other mass-created pages, I concur with the AI flagging that Kittycataclysm placed on the page. I believe this to be LLM-generated, and it should thus be deleted. [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 03:29, 30 September 2026 (UTC)
:{{vd}}, LLM spam. [[User:Ternera|Ternera]] ([[User talk:Ternera|discuss]] • [[Special:Contributions/Ternera|contribs]]) 13:22, 30 September 2026 (UTC)
:{{vd}} - like most LLM-generated books, this is heavy on structure and light on substance. Most of the content amounts to a poorly organized glossary, and there are a lot of pieces missing. (For instance, there is no discussion of the grammar of the language beyond a couple of fixed expressions.) [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 19:11, 1 October 2026 (UTC)
:{{vd}} per stated reasoning. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 14:43, 12 October 2026 (UTC)
{{end closed}}
== [[Job Search]] ==
{{closed|Per minimal consensus, I deleted these books, but I only kept the main pages of these books by creating them as redirects for [[Find Employment]]. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:24, 13 October 2026 (UTC)}}
* as well as [[Job Search Automation for College Students]].
Neither of these books contains any useful information. The first book seems to be written primarily to funnel users to the second, and the second to funnel users to [[PlanoTse Handbook for Job Search Automation]], which was deleted last year. (The deletion request doesn't seem to have been archived.)
The sum total of information in these two books is, essentially, "you can search for jobs online", which is insultingly trivial. The second book's suggestion that users automate the job search process is of no practical value; most web search engines and job search sites nowadays will detect and block automated access.
[[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 18:36, 1 October 2026 (UTC)
: {{vd}} and redirect to [[Find Employment]]. ‑‑[[User:Kai Burghardt|Kai Burghardt]] ([[User talk:Kai Burghardt|discuss]] • [[Special:Contributions/Kai Burghardt|contribs]]) 05:14, 2 October 2026 (UTC)
{{end closed}}
== [[Wikipage]] ==
{{closed|Deleted per minimal consensus below. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:26, 13 October 2026 (UTC)}}
Like a few other books created by this user, the purpose of this book appears to have been to promote a piece of software written by the author ([[User:Planotse]]). The software is no longer available, and there is no actual content in the book.
[[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 18:40, 1 October 2026 (UTC)
:{{Vd}} ―[[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> 15:30, 12 October 2026 (UTC)
{{end closed}}
== [[Becoming a Linguistic Mastermind]] ==
{{closed|Deleted. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 00:11, 15 October 2026 (UTC)}}
Old book (created 2007) with no substantial content. The intent of this book appears to have been to create a single textbook encompassing ''all'' languages, with sub-courses for each language at [[Becoming a Linguistic Mastermind/The courses]], but no such courses were ever created. An analogous project on dewikibooks [[:b:de:Wikibooks:Löschkandidaten/ 2011-04#Der einfache Weg zum Sprachgenie|was deleted in 2011 for similar reasons]]. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 21:20, 7 October 2026 (UTC)
:{{Vd}} ―[[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> 15:30, 12 October 2026 (UTC)
{{end closed}}
== [[The Permanent Advantage]] ==
{{closed|Speedily deleted —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 20:15, 14 October 2026 (UTC)}}
Probably LLM-generated, given broken templates, references to Claude, and section identifiers. This could probably be speedied, but not 100% sure so throwing it to RfD. Even regardless of whether it's LLM-generated or not, I can't see any way it's really suitable for the project. [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 07:49, 10 October 2026 (UTC)
:{{vd}} - a book ''about'' chess problems isn't necessarily out of scope, but there needs to be some written content to accompany the problems. And I'm not sure these are even meaningful problems - the few problems with viewable Lichess links appear to be in the early game, so there aren't necessarily objective "solutions" to them. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 19:51, 10 October 2026 (UTC)
:{{vd}}, the Claude references throughout the book support that it's LLM-generated. [[User:Ternera|Ternera]] ([[User talk:Ternera|discuss]] • [[Special:Contributions/Ternera|contribs]]) 14:55, 11 October 2026 (UTC)
:This looked like a speedy to me, so I went ahead and deleted it. Thanks! —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 20:14, 14 October 2026 (UTC)
{{end closed}}
== [[Digital Synthora]] ==
Not within WB scope since it seems to be entirely fabricated by the editor. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 14:20, 12 October 2026 (UTC)
:{{vd}} While some amount of original research is allowed here, completely fabricated topics aren't. This is just fiction writing, which is nice, but not within our scope. ―[[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> 15:30, 12 October 2026 (UTC)
:{{vd}} - per my initial tag, this appears to be an invention of the page creator; I can't find anything relevant online beyond the empty https://synthoraactstuff.fandom.com/. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 01:32, 13 October 2026 (UTC)
dae1l15ia5ba8gonut5xzq0ur6r7px8
Wikibooks:Requests for permissions
4
840
4676312
4674990
2026-10-15T23:15:32Z
Codename Noreste
3441010
/* TechVindicator (discuss · contribs · count · SUL account · logs · block log · rfps · rights) (Reviewer) */ ([[:m:User:Max/MaxEdit.js|MaxEdit]])
4676312
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 —though discussion is welcome— 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|TechVindicator}} (Reviewer)==
I am requesting reviewer permissions because I believe it is necessary to have the rollback tool in order to revert vandalism much more quickly. I tend to revert vandalism/petty edits when they shows up, such as in this [[Special:Diff/4672915]]. I have also largely met the criteria for reviewer permissions, and with 70% (and possibly more) of reviewer accounts being inactive, I had to step up. Regards, [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 14:05, 3 October 2026 (UTC)
:{{support}} Seems reasonable and this is safe enough to try. ―[[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:37, 3 October 2026 (UTC)
: {{comment}}; considering [[phab:T440519]], I believe <code>editor</code> will soon be discontinued (per discontinuation of FlaggedRevs), but once the <code>patroller</code> user group goes live (with the restoration of MediaWiki's page patrol system), I will grant you the latter user group once done. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 23:06, 7 October 2026 (UTC)
:{{done}}. I have granted you the patroller user group, but the <code>autopatrol</code> user group remains, oddly enough. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 23:15, 15 October 2026 (UTC)
i98o0qyi63cw7aqls2c72rz09elppqh
LaTeX
0
21004
4676268
4676030
2026-10-15T14:16:43Z
Magnuscarlsen45r
3627727
Nothing
4676268
wikitext
text/x-wiki
{{featured book|PDF=LaTeX}}
{{DISPLAYTITLE:{{LaTeX}}}}
__NOTOC__
Latex is a guided full functioning Book that can help Learn New types like Proggraming,coding etc.
{{Book Search}}
This is a guide to the '''LaTeX''' {{w|typesetting}} system. It is intended as a useful resource for everybody, from new users who wish to learn, to old hands who need a quick references.
'''TeX and LaTeX'''
TeX is a typesetting computer program created by {{w|Donald Knuth}}, originally for his magnum opus, ''{{w|The Art of Computer Programming}}''. It takes a "plain" text file and converts it into a high-quality document for printing or on-screen viewing. LaTeX is a macro system built on top of TeX that aims to simplify its use and automate many common formatting tasks. It is the de-facto standard for academic journals and books in several fields, such as mathematics and physics, and provides some of the best typography free software has to offer.
This book is organized into different parts:
* ''Getting Started'' will provide you with the very first steps to print your first document, from installing the needed software to basic concepts and syntax.
* ''Common Elements'' discusses common features you would expect from a document processor, including fonts, layout, colors, lists, and figures.
* ''Mechanics'' are some topics that are not really necessary to write a basic document, but could help you understand how some parts of the system work. These topics are required for fine-tuning documents. Use them as support for various chapters, as they are often being referred to.
* ''Technical Text'' focuses on different specialized matters, mostly for scientific work.
* ''Special Pages'' is for the structured pages usually put in appendices.
* ''Special Documents'': this part tackles other kind of documents different from the classic article style.
* ''Creating Graphics'' is for the process of ''writing'' graphics from a LaTeX document.
* ''Programming'' or how to create your own macros and packages.
* ''Miscellaneous'' contains everything that does not fit in the previous parts, like project management and other subjects related to LaTeX but not inherent to LaTeX itself.
* ''Help and Recommendations'' : the FAQ encompasses very common pitfalls and important recommendations for everyone, ''we urge you to read it''; the Tips and Tricks are much more specific matters.
* ''Appendices''.
by the end of the Book you will learning
{{clear}}
==Contents==
[[Image:LaTeX_cover.svg|right|400px]]{{collection}}
{{PDF version|LaTeX|Created with LaTeX}}
{{E-Book Reader PDF version|LaTeX Ebook Reader.pdf}}
{{wikipedia|TeX|LaTeX}}
{{SideBox|If you have questions related to LaTeX, ask at the [[/Q&A/]].}}
{{LaTeX/Contents|stage=true}}
<small>[{{fullurl:Template:LaTeX/Contents|action=edit}} Edit the TOC or the stages]</small>
==Other Wikibooks==
* [[TeX]]
* [[Yet Another Haskell Tutorial/Modules#LaTeX-scripts|LaTeX in Haskell]]
* [[ConTeXt]]
{{Shelves|Markup languages}}
{{alphabetical|L}}
{{status|100%}}
[[bn:লাটেক]]
[[de:LaTeX-Kompendium]]
[[es:Manual de LaTeX]]
[[fa:لاتک]]
[[fr:LaTeX]]
[[hy:ԼաՏեԽ]]
[[he:לאטך]]
[[nl:LaTeX]]
[[ja:TeX/LaTeX入門]]
[[pl:LaTeX]]
[[pt:Latex]]
[[ro:LaTeX]]
[[ru:LaTeX]]
[[sr:LaTeX]]
[[tr:Latex]]
[[vi:LaTex]]
[[zh:LaTeX]]
9qdwq39v295zcpyudq8wkxik3dun0iu
Adventist Youth Honors Answer Book/Household Arts/Nutrition
0
60015
4676288
4657572
2026-10-15T17:54:22Z
JessiK818
3628495
/* 1. Draw the food pyramid guide. List the number of servings required from each group per day. Why is it important to eat a balanced diet? */
4676288
wikitext
text/x-wiki
{{honor_header|1|1981|Household Arts|General Conference}}
{{AY Master|Homemaker}}
==1. Draw the food pyramid guide. List the number of servings required from each group per day. Why is it important to eat a balanced diet?==
The USDA has a new food icon, (as of 2026) and it's a pyramid again — turned upside down. Protein, dairy, and healthy fats share the top spot with vegetables and fruits. Whole grains sit alone at the point.
But look past the shape and the serving goals barely moved: 3 vegetables, 2 fruits, 2–4 whole grains, 3 dairy. What changed is the framing — real food, minimally processed — and three numbers: protein, dairy fat, and added sugar.
Those numbers need care. The Guidelines set protein intake at 1.2–1.6 g/kg, while the RDA remains 0.8 g/kg. They recommend full-fat dairy ''and'' cap saturated fat at 10% of calories — about 22 grams. Three cups of whole milk and a 10-ounce steak already put you at 28. The math gets confusing fast. So this handout with worksheets helps everyone understand the limits on saturated fat and sugar, along with how to tell what an ultra-processed food looks like.
If you wish to continue teaching the food pyramid concept, you could use the Loma Linda University Vegetarian Food Pyramid instead. Both are shown below:
{| border="0"
|-
|[[File:New U.S. Food Pyramid (2025-2030).png|left|thumb|400x400px|2026 Version of the USDA nutrition guide]]
|[[File:Loma Linda University Vegetarian Food Pyramid.jpg|400px|thumb|right|Loma Linda University Vegetarian Food Pyramid]]
|}
{{clear}}
Important facts always eat a balanced diet
==2. Explain the difference between the following==
The prefix ''lacto'' means ''milk'', and can be found in words such as ''lactose'' (a chemical found in milk).
The prefix ''ovo'' means ''egg'', and can be found in words such as ''oval'' (which means ''egg-shaped'').
These prefixes are used to describe the exceptions to a vegetarian diet as follows:
===a. Lacto-ovo vegetarian===
A lacto-ovo vegetarian is a person who eats no animal products (such as meat) except for milk (and milk products such as cheese, ice cream, and yogurt), and eggs.
===b. Ovo vegetarian===
An ovo vegetarian is a person who eats no animal products (no meat and no milk) except for eggs.
===c. Vegan vegetarian===
A vegan is a vegetarian who eats no animal products at all.
==3. Plan a two-day menu, containing a balanced lacto-ovo vegetarian diet utilizing the food pyramid guide.==
To do this using the current version of the USDA food pyramid, you must first go to [http://choosemyplate.gov ChooseMyPlate.gov] and enter the Pathfinder's profile (age, sex, and physical activity). This will tell you how much of each food category the Pathfinder should eat.
The values in the table below are for children who are physically active for 60 minutes or more per day. Use the USDA website for adults and less active children.
{| border="1" cellspacing="0" cellpadding="4"
|+ '''USDA Food Pyramid'''
|Food Group
|Grains
|Vegetables
|Fruits
|Milk
|Meat & Beans
|-
!style="background:#C0C0FF;{{Text default color}};"|10 year-old Male
!style="background:#C0C0FF;{{Text default color}};"|7 oz
!style="background:#C0C0FF;{{Text default color}};"|3 cups
!style="background:#C0C0FF;{{Text default color}};"|2 cups
!style="background:#C0C0FF;{{Text default color}};"|3 cups
!style="background:#C0C0FF;{{Text default color}};"|6 ounces
|-
!style="background:#FFC0C0;{{Text default color}};"|10 year-old Female
!style="background:#FFC0C0;{{Text default color}};"|6 oz
!style="background:#FFC0C0;{{Text default color}};"|2.5 cups
!style="background:#FFC0C0;{{Text default color}};"|2 cups
!style="background:#FFC0C0;{{Text default color}};"|3 cups
!style="background:#FFC0C0;{{Text default color}};"|5.5 ounces
|-
!style="background:#C0C0FF;{{Text default color}};"|11 year-old Male
!style="background:#C0C0FF;{{Text default color}};"|7 oz
!style="background:#C0C0FF;{{Text default color}};"|3 cups
!style="background:#C0C0FF;{{Text default color}};"|2 cups
!style="background:#C0C0FF;{{Text default color}};"|3 cups
!style="background:#C0C0FF;{{Text default color}};"|6 ounces
|-
!style="background:#FFC0C0;{{Text default color}};"|11 year-old Female
!style="background:#FFC0C0;{{Text default color}};"|6 oz
!style="background:#FFC0C0;{{Text default color}};"|2.5 cups
!style="background:#FFC0C0;{{Text default color}};"|2 cups
!style="background:#FFC0C0;{{Text default color}};"|3 cups
!style="background:#FFC0C0;{{Text default color}};"|5.5 ounces
|-
!style="background:#C0C0FF;{{Text default color}};"|12 year-old Male
!style="background:#C0C0FF;{{Text default color}};"|8 oz
!style="background:#C0C0FF;{{Text default color}};"|3 cups
!style="background:#C0C0FF;{{Text default color}};"|2 cups
!style="background:#C0C0FF;{{Text default color}};"|3 cups
!style="background:#C0C0FF;{{Text default color}};"|6.5 ounces
|-
!style="background:#FFC0C0;{{Text default color}};"|12 year-old Female
!style="background:#FFC0C0;{{Text default color}};"|7 oz
!style="background:#FFC0C0;{{Text default color}};"|3 cups
!style="background:#FFC0C0;{{Text default color}};"|2 cups
!style="background:#FFC0C0;{{Text default color}};"|3 cups
!style="background:#FFC0C0;{{Text default color}};"|6 ounces
|-
!style="background:#C0C0FF;{{Text default color}};"|13 year-old Male
!style="background:#C0C0FF;{{Text default color}};"|9 oz
!style="background:#C0C0FF;{{Text default color}};"|3.5 cups
!style="background:#C0C0FF;{{Text default color}};"|2 cups
!style="background:#C0C0FF;{{Text default color}};"|3 cups
!style="background:#C0C0FF;{{Text default color}};"|6.5 ounces
|-
!style="background:#FFC0C0;{{Text default color}};"|13 year-old Female
!style="background:#FFC0C0;{{Text default color}};"|7 oz
!style="background:#FFC0C0;{{Text default color}};"|3 cups
!style="background:#FFC0C0;{{Text default color}};"|2 cups
!style="background:#FFC0C0;{{Text default color}};"|3 cups
!style="background:#FFC0C0;{{Text default color}};"|6 ounces
|-
!style="background:#C0C0FF;{{Text default color}};"|14 year-old Male
!style="background:#C0C0FF;{{Text default color}};"|10 oz
!style="background:#C0C0FF;{{Text default color}};"|3.5 cups
!style="background:#C0C0FF;{{Text default color}};"|2.5 cups
!style="background:#C0C0FF;{{Text default color}};"|3 cups
!style="background:#C0C0FF;{{Text default color}};"|7 ounces
|-
!style="background:#FFC0C0;{{Text default color}};"|14 year-old Female
!style="background:#FFC0C0;{{Text default color}};"|8 oz
!style="background:#FFC0C0;{{Text default color}};"|3 cups
!style="background:#FFC0C0;{{Text default color}};"|2 cups
!style="background:#FFC0C0;{{Text default color}};"|3 cups
!style="background:#FFC0C0;{{Text default color}};"|6.5 ounces
|-
!style="background:#C0C0FF;{{Text default color}};"|15 year-old Male
!style="background:#C0C0FF;{{Text default color}};"|10 oz
!style="background:#C0C0FF;{{Text default color}};"|5 cups
!style="background:#C0C0FF;{{Text default color}};"|2.5 cups
!style="background:#C0C0FF;{{Text default color}};"|3 cups
!style="background:#C0C0FF;{{Text default color}};"|7 ounces
|-
!style="background:#FFC0C0;{{Text default color}};"|15 year-old Female
!style="background:#FFC0C0;{{Text default color}};"|8 oz
!style="background:#FFC0C0;{{Text default color}};"|3 cups
!style="background:#FFC0C0;{{Text default color}};"|2 cups
!style="background:#FFC0C0;{{Text default color}};"|3 cups
!style="background:#FFC0C0;{{Text default color}};"|6.5 ounces
|}
==4. What is another name for Vitamin B<sub>1</sub> and B<sub>2</sub>?==
'''Vitamin B<sub>1</sub>''' is also known as '''thiamine.''' Beriberi is disease cause by a vitamin B<sub>1</sub> deficiency.
'''Vitamin B<sub>2</sub>''' is also known as '''riboflavin.''' It is required for red blood cell formation.
==5. List at least three significant food sources of the following nutrients==
*'''a. Vitamin C:''' Citrus fruits (lime, lemon, orange, grapefruit), tomatoes, and potatoes are good common sources of vitamin C. Other foods that are good sources of vitamin C include papaya, broccoli, brussels sprouts, black currants, strawberries, cauliflower, spinach, cantaloupe, and kiwifruit. Also, cranberries and red peppers are good sources of the vitamin.
*'''b. Vitamin A:''' Milk and eggs are both animal sources of vitamin A. Carrots and spinach are both good plant sources of vitamin A.
*'''c. Vitamin B<sub>1</sub>:''' Good sources of vitamin B<sub>1</sub> include whole grains (wheat, oats, rice, etc.), apricots, pineapples, legumes, turnip greens, and pistachio nuts.
*'''d. Vitamin B<sub>2</sub>:''' Milk, cheese, leafy green vegetables, liver, yeast, almonds and mature soybeans are good sources of Vitamin B<sub>2</sub>, but exposure to light will destroy the riboflavin in these natural sources.
*'''e. Iron:''' Good sources of dietary iron include meat, fish, poultry, lentils, beans, leaf vegetables, tofu, chickpeas, black-eyed pea, strawberries and farina.
*'''f. Calcium:''' Dairy products, such as milk and cheese, are a well known source of calcium. However, some individuals are allergic to dairy and even more people, particularly those of non-European descent, are lactose-intolerant, leaving them unable to consume dairy. Fortunately, many other good sources of calcium exist. This includes nuts and seeds (like almonds and sesame), beans; whole wheat; collard greens; okra; rutabaga; broccoli; and fortified products such as orange juice and bread.
==6. Why is it important to drink plenty of water every day? How much water should you drink every day?==
It is important to drink plenty of water so that you do not get dehydrated. Your body needs water to help eliminate waste and to keep the cells in the body hydrated.
Here are some ways to increase your water intake:
* Drink a glass of water when you first get up in the morning, in the evening when you get home, and again before you go to bed at night.
* Keep a bottle of water beside your desk at work. Drink often throughout the day.
* Drink before, during, and after any physical activity, such as walking, hiking, or biking.
* Carry water with you when you travel. Drink often when flying, as the cabin air is very dry.
* If your water doesn’t taste good, add a lemon or lime slice to improve the flavor. You can filter your water and keep a pitcher in the fridge. Or, buy bottled water if the improved taste helps you drink more.
You should drink water whenever you are thirsty. A persistent myth is that a person needs to drink 8 eight ounce glasses of water every day. While following this rule will cause no harm, it is completely unsupported by scientific evidence {{ref|snopes}} {{ref|intelihealth}}. A person should replace the same amount of water he or she loses in a day. Water is lost through urination, bowel elimination, sweating, and breathing. Remember that drinking is not the only way to replace lost water: food contains a lot of water, and your body can absorb water through the skin. Again, the general rule is to drink water whenever you are thirsty or whenever you want some.
#{{note|snopes}}[http://www.snopes.com/medical/myths/8glasses.asp Urban Legends]
#{{note|intelihealth}}[http://www.intelihealth.com/IH/ihtIH/WSIHW000/35320/35323/358636.html?d=dmtHMSContent Intelihealth.com]
==7. Name three common diseases that can be controlled by diet.==
'''Diabetes:''' The most important forms of diabetes are due to decreased or the complete absence of the production of insulin (type 1 diabetes), or decreased sensitivity of body tissues to insulin (type 2 diabetes, the more common form). The former requires insulin injections for survival; the latter is generally managed with diet, weight reduction and exercise in about 20% of cases, though the majority require these strategies plus oral medication (insulin is used if the tablets are ineffective).
'''Cardiovascular Disease:''' Attempts to prevent cardiovascular disease take the form of modifying risk factors. Some, such as gender, age, and family history, cannot be modified. Smoking cessation (or abstinence) is one of the most effective and easily modifiable changes. Also important is a low-fat, low-calorie diet, which helps one to maintain a healthy body mass index (BMI) and preventing obesity. Regular cardiovascular exercise (aerobic exercise) complements the healthful eating habits. Sometimes, the combination of diet and exercise will improve lipoprotein (cholesterol) levels; if not, a physician may prescribe "cholesterol-lowering" drugs, such as the statins. Treatment of cardiovascular disease depends on the specific form of the disease in each patient, but effective treatment always includes preventative lifestyle changes discussed above. Medications, such as blood pressure reducing medications, aspirin and other treatments may be involved.
'''Cancer:''' The consensus on diet and cancer is that obesity increases the risk of developing cancer. Particular dietary practices often explain differences in cancer incidence in different countries (e.g. gastric cancer is more common in Japan, while colon cancer is more common in the United States). Studies have shown that immigrants develop the risk of their new country, suggesting a link between diet and cancer rather than a genetic basis.
==8. What is the difference between whole wheat flour and white flour, and which one has the higher nutritive value?==
The two biggest differences between white flour and whole wheat are the processing and the nutritional value. Whole wheat flour has the higher nutritive value.
Flour is made from wheat berries. The wheat berry is made up of the bran, the germ and the endosperm. All parts are filled with nutrients and are used in whole wheat flour.
White flour on the other hand, uses only the endosperm - the starchy inner layer. There are a total of 30 nutrients present in whole wheat flour that are missing in white flour. The nutritional difference is immense and has measurable impact on our health.
The fiber content of whole wheat bread has several health benefits.
Fiber helps the digestive system. It also creates a 'full'
sensation and thus can help with weight control. Research has
been conducted by Harvard and other organizations that shows men
and women who eat high-fiber foods are less likely to have heart attacks and
strokes as compared to those who don't.
There is also an increased risk of diabetes in children who eat
refined white flour - a risk that has been proven by the increase
in cases of childhood diabetes.
==9. What does RDA stand for? What does it mean?==
'''Recommended Dietary Allowance''' (RDA) is the daily dietary intake level of a nutrient that is considered sufficient to meet the requirements of nearly all (97-98%) healthy individuals in each life-stage and gender group. The RDAs are established by the Food and Nutrition Board of the (US) National Academy of Sciences.
==10. Why is it important not to take excessive amounts of some vitamins and minerals?==
Fat-soluble vitamins may be stored in the body and can cause toxicity when taken in excess. Water-soluble vitamins are not stored in the body, with the exception of Vitamin B<sub>12</sub>, which is stored in the liver.
Some of the most common causes of vitamin poisoning are vitamins A, B<sub>3</sub> and B<sub>6</sub>. Conversely, certain vitamins do not produce toxicity in excess levels: vitamin C has been used in clinical trials in dosages over 100,000 mg — over 1000 times the daily recommended intake — without ill effects.
Excess doses of mineral supplements can also lead to poisoning. Either or both of vitamin poisoning and mineral supplement poisoning can occur due to excessive intake of multivitamin supplements.
==References==
*[[w:Recommended Dietary Allowance|Wikipedia article on Recommended Dietary Allowance]]
*[[w:Vitamins|Wikipedia article on Vitamins]]
*[[w:Vitamin Poisoning|Wikipedia article on Vitamin Poisoning]]
*[[w:Cancer|Wikipedia article on Cancer]]
*[[w:Cardiovascular Disease|Wikipedia article on Cardiovascular Disease]]
*[[w:Diabetes|Wikipedia article on Diabetes]]
[[{{BOOKCATEGORY|Adventist Youth Honors Answer Book}}|{{SUBPAGENAME}}]]
[[{{BOOKCATEGORY|Adventist Youth Honors Answer Book}}/Completed Honors|{{SUBPAGENAME}}]]
l75kpv72h3whbv48cx7as2uw9aulv4l
Wikibooks:Bureaucrats
4
98532
4676313
4607696
2026-10-15T23:20:41Z
Codename Noreste
3441010
([[:m:User:Max/MaxEdit.js|MaxEdit]])
4676313
wikitext
text/x-wiki
[[File:Wikibooks bureaucrat.png|150px|right]]
{{mbox|text=English Wikibooks currently has no local bureaucrats.}}
{{shortcut|WB:CRAT}}
'''Bureaucrats''' were a group of Wikibooks administrators with the technical ability to perform the following actions:
* '''Add (but not remove) the following [[Wikibooks:User groups|user groups]] to a user account:''' [[Wikibooks:Administrators|administrator]] and bureaucrat.
* '''Add and remove the following user groups from a user account:''' [[Wikibooks:Account creators|account creator]], [[Wikibooks:Bots|bot]], [[Wikibooks:Confirmed users|confirmed user]], and [[Wikibooks:Interface administrators|interface administrator]].
Some of the above abilities overlap with administrators who are able to add and remove the account creator and confirmed user groups.
Bureaucrats were responsible for judging community consensus in granting advanced permissions listed at [[Wikibooks:Requests for permissions]].
{{User groups}}
8h6wy8uw3le4fjnjo316xfde9fh8xmu
4676314
4676313
2026-10-15T23:23:20Z
Codename Noreste
3441010
4676314
wikitext
text/x-wiki
{{historical project page|English Wikibooks currently has no local bureaucrats.}}
[[File:Wikibooks bureaucrat.png|150px|right]]
'''Bureaucrats''' were a group of Wikibooks administrators with the technical ability to perform the following actions:
* '''Add (but not remove) the following [[Wikibooks:User groups|user groups]] to a user account:''' [[Wikibooks:Administrators|administrator]] and bureaucrat.
* '''Add and remove the following user groups from a user account:''' [[Wikibooks:Account creators|account creator]], [[Wikibooks:Bots|bot]], [[Wikibooks:Confirmed users|confirmed user]], and [[Wikibooks:Interface administrators|interface administrator]].
Some of the above abilities overlap with administrators who are able to add and remove the account creator and confirmed user groups.
Bureaucrats were responsible for judging community consensus in granting advanced permissions listed at [[Wikibooks:Requests for permissions]].
{{User groups}}
k6r0t8w39yj6vfskjh28k96a29ylfkh
Wikijunior:Alphabet/M
110
102503
4676279
4656751
2026-10-15T17:15:19Z
~2026-55579-15
3628496
4676279
wikitext
text/x-wiki
<div style="text-align: center; font-size: 400%;">'''M''' is for '''M'''ango</div>
[[File:Mangos - single and halved.jpg|500px|center]]
{{ {{BOOKTEMPLATE}} }}
[[az:Vikiuşaq:Əlifba/M]]
[[fr:Wikijunior:Alphabet/M]]
2ww2in775opj53l7yjwkfnrzrfevip0
Adventist Youth Honors Answer Book/Food pyramid
0
105427
4676282
3250763
2026-10-15T17:27:34Z
JessiK818
3628495
food guide pyramid from myplate
4676282
wikitext
text/x-wiki
The food pyramid guide is updated and published by the United States Department of Agriculture (USDA). The 2026 version is shown here:
[[File:The New Food Pyramid.png|left|thumb|600x600px|2026 Version of the USDA Food Pyramid]]
{{clear}}
The USDA has a new food icon, and it's a pyramid again (Jan/2026)— turned upside down. Protein, dairy, and healthy fats share the top spot with vegetables and fruits. Whole grains sit alone at the point.
But look past the shape and the serving goals barely moved: 3 vegetables, 2 fruits, 2–4 whole grains, 3 dairy. What changed is the framing — real food, minimally processed — and three numbers: protein, dairy fat, and added sugar.
The values in the table below are for children who are physically active for 60 minutes or more per day. Use the USDA website for adults and for less active children.
{{:Adventist Youth Honors Answer Book/Food pyramid chart}}
{{BookCat}}
l9b94dga3xl3vbuigsv2ixbbno05ivy
Wikibooks:Reading room/General
4
112405
4676337
4675844
2026-10-16T08:10:42Z
ArchiverBot
1227662
Bot: Archiving 1 thread (older than 60 days) to [[Wikibooks:Reading room/Archives/2026/August]]
4676337
wikitext
text/x-wiki
__NEWSECTIONLINK__ {{Discussion Rooms}} {{Shortcut|WB:CHAT|WB:RR/G|WB:GENERAL}} {{TOC left|limit=3}}
{{User:MiszaBot/config
|archive = Wikibooks:Reading room/Archives/%(year)d/%(monthname)s
|algo = old(60d)
|counter = 1
|minthreadstoarchive = 1
|minthreadsleft = 1
|key = 7a0ac23cf8049e4d9ff70cabb5649d1a
}}
Welcome to the '''General reading room'''. On this page, Wikibookians are free to talk about the Wikibooks project in general. For proposals for improving Wikibooks, see the [[../Proposals/]] reading room.
{{clear}}
[[Category:Reading room]]
== Call for administrators ==
Any experienced editor who has a good understanding of Wikibooks' policies should consider applying for administrator permissions at [[Wikibooks:Requests for permissions]]. Thank you. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 22:10, 5 August 2026 (UTC)
:Is there a page here that describes what admins do? I am curious because I checked [https://en.wikibooks.org/wiki/Special:ListUsers?username=&group=sysop&wpsubmit=&wpFormIdentifier=mw-listusers-form&limit=50 List of admins] and I see that there are already quite a few admins here and wonder which areas have a shortage.
:Just curious. [[Special:Contributions/~2026-40500-29|~2026-40500-29]] ([[User talk:~2026-40500-29|talk]]) 00:56, 16 September 2026 (UTC)
::[[Wikibooks:Administrators]]. ―[[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> 01:09, 16 September 2026 (UTC)
== Wikibooks project is not defined by goal ==
If it is for texbooks why is it called Wikibooks? It should be called Wikitextbooks! If it is for textbooks why does it contain cookbooks? For textbooks it's not supposed to have a [[Wikibooks:Featured books]]. [[User:Vivairan2|Vivairan2]] ([[User talk:Vivairan2|discuss]] • [[Special:Contributions/Vivairan2|contribs]]) 09:20, 1 September 2026 (UTC)
:It's "textbooks" broadly construed: guides, manuals, how-tos, etc. ―[[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:15, 1 September 2026 (UTC)
::So we should change "Wikibooks:Featured books" to "Wikibooks:Featured texts". [[User:Vivairan2|Vivairan2]] ([[User talk:Vivairan2|discuss]] • [[Special:Contributions/Vivairan2|contribs]]) 11:17, 1 September 2026 (UTC)
:::I disagree and even if I agreed, it would be priority #49,389. ―[[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:20, 1 September 2026 (UTC)
::::It's according to community consensus that says this website contains textbooks not books. [[User:Vivairan2|Vivairan2]] ([[User talk:Vivairan2|discuss]] • [[Special:Contributions/Vivairan2|contribs]]) 11:23, 1 September 2026 (UTC)
:::::"[[wb:WIW|Simply, Wikibooks is a collection of open-content textbooks.]]" [[User:Vivairan2|Vivairan2]] ([[User talk:Vivairan2|discuss]] • [[Special:Contributions/Vivairan2|contribs]]) 11:26, 1 September 2026 (UTC)
:Most textbooks are made by collaboration of some authors, co-authors and editors. Wikibooks help pages and guidelines remain silent when it comes to stages of writing a new texbooks. Even [[Using Wikibooks]] is not complete emough for enthusiasts. --[[User:Vivairan2|Vivairan2]] ([[User talk:Vivairan2|discuss]] • [[Special:Contributions/Vivairan2|contribs]]) 18:13, 3 September 2026 (UTC)
:@[[User:Vivairan2|Vivairan2]], In my opinion this is a good question. I wish more users would chime in. [[Special:Contributions/~2026-40500-29|~2026-40500-29]] ([[User talk:~2026-40500-29|talk]]) 16:10, 19 September 2026 (UTC)
== Wishlist 2027, invitation to share feedback ==
Hi, I’m [[m:User:SPerry-WMF|Sonja]] and I lead some of the [[mw:Contributors|teams]] at the Foundation who will be responsible for picking up wish work under the new wishlist process.
As you may know, the [[m:Community_Wishlist|Community Wishlist]] started out as an annual process through which Wikimedia contributors submit and vote on technical improvements they would like the Wikimedia Foundation to work on. The main goal of it is and has been to improve the editing experience by making changes and features the community asks for specifically.
In recent years, the process behind the wishlist has changed, and we’ve heard from many of you that it no longer meets many community members’ needs. So now, the Foundation is designing a new process with the community to improve how wishes are triaged, voted on, and prioritized in a way that is transparent, balanced across project families and language editions, and takes into account what the Foundation can deliver.
I would like to get community input specifically on these three stages of the Wishlist process:
* The [[m:Special:MyLanguage/Community_Wishlist/Community_Wishlist_2027#triage|'''triage stage''']], meaning how wishes are fleshed out, organized and filtered prior to voting
** We recommend to have a working group, including volunteers from various wikis and Wikimedia Foundation staff to work through this together
* The [[m:Special:MyLanguage/Community_Wishlist/Community_Wishlist_2027#vote|'''voting stage''']], including who may vote and how votes are structured
* The [[m:Special:MyLanguage/Community_Wishlist/Community_Wishlist_2027#postvote|'''post-vote stage''']], including how to bring equity into what work is prioritized
** One way to do this is to rank wishes within 3 categories: Large Wikipedias or covering all wikis, small and medium-sized Wikipedias, and '''sister projects''', so that top-voted wishes from smaller projects also get attention
This message is an abstract of the full proposed process. As you [[m:Special:MyLanguage/Community_Wishlist/Community_Wishlist_2027|read the proposed ideas on Meta]] (available in your language), please speak up about whether you think this will work well or if there are ways to make it stronger.
Regarding the timeline, this consultation is open for two weeks. You can post your feedback on Meta (in your preferred language) or in response below.
For this year’s cycle, [[m:Special:MyLanguage/Community_Wishlist/Community_Wishlist_2027#timeline|we plan]] to have the wish submission period in late October/early November and the triage process completed by late November. To respect the end-of-year holiday season, voting would happen in early to mid January. This first voting cycle is meant as a first step to try out a new process, and there will be more opportunities to provide feedback along the way, so that we can figure out the best process for future years together.
[[oldwikisource:M:User:SPerry-WMF|SPerry-WMF]], delivered by [[User:Trizek (WMF)|Trizek (WMF)]] ([[User talk:Trizek (WMF)|discuss]] • [[Special:Contributions/Trizek (WMF)|contribs]]) 13:52, 1 September 2026 (UTC)
:Thank you to everyone who engaged in the discussion around [[m:Talk:Community_Wishlist/Community_Wishlist_2027|the proposal from August 26]]. We've processed your feedback and [https://meta.wikimedia.org/w/index.php?title=Community_Wishlist/Community_Wishlist_2027&diff=prev&oldid=31041090 made changes] accordingly. Note that we weren’t able to implement all of it for this cycle, mostly for logistical reasons, but this is merely meant to be a first step and we will continue to improve this process with you all before we run through the next cycle. We plan to use [[m:Community_Wishlist/Community_Wishlist_2027#Updated_Community_Wishlist_Process_2027/2028|this updated version]] for the Wishlist 2027, and we look forward to hearing from you all during the submission and voting periods.
:[[:M:User:SPerry-WMF|SPerry-WMF]], delivered by [[User:Trizek (WMF)|Trizek (WMF)]] ([[User talk:Trizek (WMF)|discuss]] • [[Special:Contributions/Trizek (WMF)|contribs]]) 14:49, 17 September 2026 (UTC)
::@[[User:SPerry-WMF|User:SPerry-WMF]],@[[User:Trizek (WMF)|Trizek (WMF)]]: Thank you for posting info regarding the wishlist to the English Wikibooks. I am sure there are many new users here who can benefit.
::I used to participate in those discussions years ago and I know a lot of effort goes into making discussions useful not only for users of wikipedia, but also for the many language versions of the smaller wikimedia projects such as Wikibooks. [[Special:Contributions/~2026-40500-29|~2026-40500-29]] ([[User talk:~2026-40500-29|talk]]) 16:28, 19 September 2026 (UTC)
== How Do I Get My Book On A Shelf? ==
Help, I don't know how shelves work. I don't know how to put my book on a shelf. Can anyone help?
The book is called''' Art And AI''' [[User:3MMPEYTON|3MMPEYTON]] ([[User talk:3MMPEYTON|discuss]] • [[Special:Contributions/3MMPEYTON|contribs]]) 23:00, 8 September 2026 (UTC)
: Which shelf are you referring? [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:45, 10 September 2026 (UTC)
== Who is allowed to delete pages here? ==
On Aug 14, 2026 a user by the name of Max deleted a page I created in my user space. I don't see max in the list of admins here. Do they have the right to delete pages? Is there any documentation here I can consult?
Thanks in advance, [[Special:Contributions/~2026-40500-29|~2026-40500-29]] ([[User talk:~2026-40500-29|talk]]) 22:38, 15 September 2026 (UTC)
:We have local admins who have the technical ability to delete pages and virtually all material deleted here would be done by us (I'm one of them). A fairly small amount of users have global rights across all Wikimedia Foundation wikis and they will very rarely make deletions (e.g. if there are some kind of legal implications to material). [[User:Ottawahitech/American politics]] was deleted by [[User:Max]], who has [[Special:UserRights/Max|no special rights here]] but is one of the [[:m:Global sysops|global sysops]] I mentioned earlier. ―[[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> 22:55, 15 September 2026 (UTC)
: Probably unrelated to the above, but Ottawahitech should do that with their account, unless if they are blocked. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 23:33, 15 September 2026 (UTC)
::Agreed and [[User:Ottawahitech]] is not blocked here, so no idea why he's using a temp account. ―[[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> 23:43, 15 September 2026 (UTC)
:::There may be many reasons registered users are "editing" without logging in. Is it possible that they want to go about peacefully without attracting too much attention? [[Special:Contributions/~2026-40500-29|~2026-40500-29]] ([[User talk:~2026-40500-29|talk]]) 15:01, 16 September 2026 (UTC)
:::: We neither have a policy nor a guideline about this, probably. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:12, 20 September 2026 (UTC)
::::Notwithstanding a claim that the temp account is actually User:Ottawahitech, we have no idea that they are the same person. If the temp account is the same person, and they want to have a user space page, they can create temp account ones. The registered user account pages are intended for that registered user account and not as a dumping ground for anyone to create pages. [[User:MarcGarver|MarcGarver]] ([[User talk:MarcGarver|discuss]] • [[Special:Contributions/MarcGarver|contribs]]) 08:29, 13 October 2026 (UTC)
== Assistance to get page reviewed ==
My page is a translation page: [[Baiyi Zhuan]]
It is a single page, it is translated according to my own ability and familiarity with the language with a disclosure on external tools. I would like it to get reviewed if possible as I do not have the rights. [[User:Taitesena|Taitesena]] ([[User talk:Taitesena|discuss]] • [[Special:Contributions/Taitesena|contribs]]) 11:19, 18 September 2026 (UTC)
== Translation of books ==
Hello,
I would like to translate books from other Wikibooks into English. Are there any guidelines regarding how to do this? [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 00:34, 20 September 2026 (UTC)
: This has yet to be expanded, but you might want to take a look at [[Wikibooks:Content translation]]. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:13, 20 September 2026 (UTC)
== Feedback on Wikibooks redirect ==
I would like your feedback on my proposal to make [[Wikibooks:Username|this page]] redirect to [[Using Wikibooks/Setting Up A User Account#Choosing a Username|this page]]? I would do it myself, but it is not possible due to the fact that [[Wikibooks:Username]] can only be made by admins. This is because [[Wikibooks:Username policy]] also links to [[Using Wikibooks/Setting Up A User Account#Choosing a Username|this page]]. Regards, [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 04:37, 21 September 2026 (UTC)
:{{support}} ―[[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> 00:00, 22 September 2026 (UTC)
:This seems like a good idea to me. [[User:Alextejthompson|''Alextejthompson'']] (''Ping me or leave a message on my [[User talk:Alextejthompson|talk page]]'') 17:49, 21 September 2026 (UTC)
: {{done}}, I restored the redirect per consensus here. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:03, 13 October 2026 (UTC)
== Pages created by [[User:Sisterian]] ==
I have checked with AI checkers (GPTZero, ZeroGPT) and they claim that these pages have been made with the use of GenAI. I do not know whether this is correct or not; because yes, AI checkers can and do make mistakes. I have tried reaching out to the person via talk page, to no response. I am asking for input just to see what the future of these pages are. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 12:00, 22 September 2026 (UTC)
:Thank you for flagging this @[[User:TechVindicator|TechVindicator]]. I have looked at these pages personally, and there is fairly conclusive evidence that this user has been using genAI/LLMs for their contributions. I have warned them accordingly. Cheers —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 20:50, 22 September 2026 (UTC)
== I'm in the process of creating a separate page describing the removal of admin permissions ==
As the section title says, please see [[User:Codename Noreste/sandbox]] and feel free to make any adjustments. We might consider moving this to [[Wikibooks:Administrators/De-adminship]] someday. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:05, 24 September 2026 (UTC)
== Your feedback wanted: Remove ''(Language link added:) and similar'' edits from Special:RecentChanges ==
''(Apologies for posting in English. You can help by translating it)''
Hello, I’m Danny from [[:en:w:Wikimedia_Deutschland|Wikimedia Deutschland’s]] [[m:Wikidata_For_Wikimedia_Projects|Wikidata For Wikimedia Projects]] team.<br/>
We have been investigating and examining how Wikidata’s use in the [[Special:RecentChanges]] and [[Special:Watchlist]] pages can be made to be more useful, or less ‘noisy’ (fewer edits that have little value to the reader).
We are currently exploring to make a change in the volume and the type of Wikidata edits that appear in these pages, and '''we need your feedback''' to help us ensure this is a positive change for the Wikis and won’t disrupt your workflows.<br/>
Language links are also known as sitelinks or interlanguage links and describe when a Wikidata item is connected to a Wiki, adding it to the language dropdown tool for other connected Wikis.
[[File:Types of Lang Link changes.png|x350px|frame|A variety of "Language Link" edits as seen in the Recent Changes feed]]
The request for feedback is whether you support the removal of these language link edits from the Recent Changes and Watchlist feed, or would you oppose such a change and if so, why?
Please share you thoughts on the dedicated '''[[m:Talk:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Hide_Language_Link_edits|metawiki Talk page]]'''.
Further information about this change: [[m:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Hide_Language_Link_edits|m:Wikidata_For_Wikimedia_Projects/Hide_Language_Link_edits]]
Thank you for any participation or feedback you give, -- [[m:User:Danny_Benjafield_(WMDE)|User:Danny Benjafield (WMDE)]] 11:46, 25 September 2026 (UTC)
<!-- Message sent by User:Danny Benjafield (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Danny_Benjafield_(WMDE)/MassMessage_test_list&oldid=31080832 -->
== FlaggedRevs again ==
<div class="cd-moveMark">''Moved to [[Wikibooks:Reading room/Proposals#FlaggedRevs again]]. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:01, 1 October 2026 (UTC)''</div>
== Wikidata Sitelink changes in Recent Changes and Watchlist ==
''(Apologies for cross-posting in English, translating it will help spread the message)''
Editors on group 1 wikis, including Wikiquote, Wikibooks, Wikiversity, Wikivoyage, and Wikisource, will no longer see notifications on [[Special:RecentChanges|Recent Changes]] and [[Special:Watchlist|Watchlist]] when a link to ''another'' language version of a page is added, removed, or changed in its Wikidata item. This change will begin on '''October 5 at 07:00 UTC''' as a two-week trial to reduce high-volume, low-value notifications and make higher-value changes easier to identify. Editors who rely on these notifications should be aware of the change and can share feedback or concerns on the [[m:Wikidata For Wikimedia Projects/Clearer Wikidata Edit Summaries/Hide Language Link edits|project]] or [[m:Talk:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Hide_Language_Link_edits|talk page]].<br/>Please reach out if you have any questions, thank you! -- [[User:Danny_Benjafield_(WMDE)|Danny Benjafield (WMDE)]] ([[User_talk:Danny_Benjafield_(WMDE)|talk]]) sent via [[User:MediaWiki message delivery|MediaWiki message delivery]] ([[User talk:MediaWiki message delivery|discuss]] • [[Special:Contributions/MediaWiki message delivery|contribs]]) 12:42, 1 October 2026 (UTC)
<!-- Message sent by User:Danny Benjafield (WMDE)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=User:Danny_Benjafield_(WMDE)/MassMessage_test_list&oldid=31106967 -->
== Approved Revs extension ==
If we were to have this extension, we should only limit this to the Wikijunior namespace, since we will eventually stop using FlaggedRevs, unless if we want Approved Revs to work in another namespace.
Remember, this is not a vote, but an overall discussion. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 01:17, 11 October 2026 (UTC)
mzc5ix5j9jwtqg9b7wmh4lrbblxqgk6
Spanish/Exercises/¿Qué comes?
0
116743
4676269
4585218
2026-10-15T14:59:08Z
~2026-55400-82
3628482
/* Adjectives */
4676269
wikitext
text/x-wiki
Welcome to the exercises related to [[Spanish/Lessons/¿Qué comes?|lesson 6]] of ¡Aprovéchalo! The answers can be found [[Spanish/Answers/¿Qué comes?|here]]. Also, try translating [[Spanish/Lessons/¿Qué comes?#Dialogue|the dialogue at the top]] of the lesson page.
== Food and Drink ==
Match the English to the Spanish.
{|
| 1. Un pepino || a. Water
|-
| 2. Queso || b. The carrots
|-
| 3. Una manzana || c. Rice
|-
| 4. Las peras || d. White wine
|-
| 5. Té || e. An egg
|-
| 6. Las zanahorias || f. A cucumber
|-
| 7. Un huevo || g. Tea
|-
| 8. Agua || h. Cheese
|-
| 9. Arroz || i. The pears
|-
| 10. Vino blanco || j. An apple
|}
== What do you eat? ==
*Conjugate the verb ''beber'' ("to drink") and ''cenar'' ("to dine") below:
*# ..............
*# ..............
*# ..............
*# ..............
*# ..............
*# ..............
*# ..............
*# ..............
*# ..............
*# ..............
*# ..............
*# ..............
== A bottle of wine ==
Match up the following to make sentences that make sense.
{|
| 1. Un kilo y medio de... || a. ...vino tinto
|-
| 2. Algo de... || b. ...leche
|-
| 3. Una copa de... || c. ...patatas
|-
| 4. Un vaso de... || d. ...pan
|-
| 5. Una barra de... || e. ...pasta
|}
== In the shop ==
Pretend that you are a customer in a shop. In the following dialogue, fill in your part.
: ''Buenos días.''
: .........................
: ''Muy bien, gracias. ¿Qué quisieras?''
: .........................
: ''Vale. Ahí están.''
: .........................
: ''Cuestan tres euros.''
: .........................
: ''¡Adiós!''
== Adjectives ==
* Correct the following sentences.
** Ahí está tres tomates verde.
** Los mujeres son difíciles.
** Me gusta hombres amable.
** Odie pepinos.
** No les gustan comer patatas con queso.
* Translate the following between Spanish and English.
** I hate eating tomatoes: they're boring.
** No come queso o bebe leche porque es vegano. [ vegano = vegan ]
** I don't drink milk because it's white.
** ¿Querrías comprar una manzana?
** Does she like pasta with tomatoes and carrots?
{{BookCat}}
dk32viig6l3j5c6biuwzn4apzsdfjj6
Wikibooks:Reading room/Administrative Assistance
4
140081
4676251
4676062
2026-10-15T12:26:28Z
MathXplore
3097823
Reporting Rudrashares01
4676251
wikitext
text/x-wiki
{{/Header}} {{User:MiszaBot/config
|archive = Wikibooks:Reading room/Administrative Assistance/Archives/%(year)d/%(monthname)s
|algo = old(14d)
|counter = 1
|minthreadstoarchive = 1
|minthreadsleft = 1
}}
== Tunde akinlabi reported by MathXplore ==
* {{userlinks|Tunde akinlabi}}
Spam <!-- USERREPORTED:/Tunde akinlabi/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:18, 1 October 2026 (UTC)
: Page was deleted by another admin. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:11, 2 October 2026 (UTC)
== Barakat isiaka reported by MathXplore ==
* {{userlinks|Barakat isiaka}}
Spam <!-- USERREPORTED:/Barakat isiaka/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:19, 1 October 2026 (UTC)
: Page was deleted by another admin. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:11, 2 October 2026 (UTC)
== Roconpaas01 reported by MathXplore ==
* {{userlinks|Roconpaas01}}
Link spam, [[Special:AbuseLog/315913]] <!-- USERREPORTED:/Roconpaas01/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:19, 2 October 2026 (UTC)
: {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:10, 2 October 2026 (UTC)
== Diiminstitute reported by MathXplore ==
* {{userlinks|Diiminstitute}}
Link spam, [[Special:AbuseLog/315963]] <!-- USERREPORTED:/Diiminstitute/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 02:34, 4 October 2026 (UTC)
:{{done}} --[[User:SHB|SHB]] ([[User talk:SHB|discuss]] • [[Special:Contributions/SHB|contribs]]) 02:58, 4 October 2026 (UTC)
== ~2026-51118-27 reported by EggRoll97 ==
* {{anonlinks|~2026-51118-27}}
Vandalism <!-- USERREPORTED:/~2026-51118-27/ --> [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 07:28, 4 October 2026 (UTC)
: {{done}} by NDG (GS). [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:13, 4 October 2026 (UTC)
== ~2026-53393-86 reported by MathXplore ==
* {{anonlinks|~2026-53393-86}}
Vandalism <!-- USERREPORTED:/~2026-53393-86/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:37, 5 October 2026 (UTC)
:Various contributions deleted—watching to see how this develops. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 19:15, 5 October 2026 (UTC)
== [[CustomChessTheory]] ==
Reason for reporting: Wrong title, renaming needed. [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:45, 5 October 2026 (UTC)
: {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 15:21, 8 October 2026 (UTC)
== Siddhgiritubes reported by MathXplore ==
* {{userlinks|Siddhgiritubes}}
Spam <!-- USERREPORTED:/Siddhgiritubes/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:31, 7 October 2026 (UTC)
: Page deleted by JJPMaster. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 15:09, 8 October 2026 (UTC)
== Editbots reported by MathXplore ==
* {{userlinks|Editbots}}
Link spam ([[Special:AbuseLog/316068]], [[Special:Contributions/~2026-54143-79]]) <!-- USERREPORTED:/Editbots/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:13, 8 October 2026 (UTC)
: {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 15:10, 8 October 2026 (UTC)
== Lenawalker1 reported by TechVindicator ==
* {{userlinks|Lenawalker1}}
Spam <!-- USERREPORTED:/Lenawalker1/ --> [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 04:07, 10 October 2026 (UTC)
:{{done|Dealt with}} by SHB —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 04:31, 11 October 2026 (UTC)
== Cleanwipes reported by MathXplore ==
* {{userlinks|Cleanwipes}}
Link spam, [[Special:AbuseLog/316154]] <!-- USERREPORTED:/Cleanwipes/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:21, 14 October 2026 (UTC)
: {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 15:20, 14 October 2026 (UTC)
== Suniluv2026 reported by MathXplore ==
* {{userlinks|Suniluv2026}}
Link spam, [[Special:AbuseLog/316149]] <!-- USERREPORTED:/Suniluv2026/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:22, 14 October 2026 (UTC)
: {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 15:21, 14 October 2026 (UTC)
== Rudrashares01 reported by MathXplore ==
* {{userlinks|Rudrashares01}}
Spam <!-- USERREPORTED:/Rudrashares01/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:26, 15 October 2026 (UTC)
lew7a6u8uvdbva29sluiz8qe8go7mw1
4676299
4676251
2026-10-15T19:25:11Z
Koavf
16549
/* Rudrashares01 reported by MathXplore */ Reply
4676299
wikitext
text/x-wiki
{{/Header}} {{User:MiszaBot/config
|archive = Wikibooks:Reading room/Administrative Assistance/Archives/%(year)d/%(monthname)s
|algo = old(14d)
|counter = 1
|minthreadstoarchive = 1
|minthreadsleft = 1
}}
== Tunde akinlabi reported by MathXplore ==
* {{userlinks|Tunde akinlabi}}
Spam <!-- USERREPORTED:/Tunde akinlabi/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:18, 1 October 2026 (UTC)
: Page was deleted by another admin. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:11, 2 October 2026 (UTC)
== Barakat isiaka reported by MathXplore ==
* {{userlinks|Barakat isiaka}}
Spam <!-- USERREPORTED:/Barakat isiaka/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:19, 1 October 2026 (UTC)
: Page was deleted by another admin. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:11, 2 October 2026 (UTC)
== Roconpaas01 reported by MathXplore ==
* {{userlinks|Roconpaas01}}
Link spam, [[Special:AbuseLog/315913]] <!-- USERREPORTED:/Roconpaas01/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:19, 2 October 2026 (UTC)
: {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:10, 2 October 2026 (UTC)
== Diiminstitute reported by MathXplore ==
* {{userlinks|Diiminstitute}}
Link spam, [[Special:AbuseLog/315963]] <!-- USERREPORTED:/Diiminstitute/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 02:34, 4 October 2026 (UTC)
:{{done}} --[[User:SHB|SHB]] ([[User talk:SHB|discuss]] • [[Special:Contributions/SHB|contribs]]) 02:58, 4 October 2026 (UTC)
== ~2026-51118-27 reported by EggRoll97 ==
* {{anonlinks|~2026-51118-27}}
Vandalism <!-- USERREPORTED:/~2026-51118-27/ --> [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 07:28, 4 October 2026 (UTC)
: {{done}} by NDG (GS). [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:13, 4 October 2026 (UTC)
== ~2026-53393-86 reported by MathXplore ==
* {{anonlinks|~2026-53393-86}}
Vandalism <!-- USERREPORTED:/~2026-53393-86/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:37, 5 October 2026 (UTC)
:Various contributions deleted—watching to see how this develops. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 19:15, 5 October 2026 (UTC)
== [[CustomChessTheory]] ==
Reason for reporting: Wrong title, renaming needed. [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:45, 5 October 2026 (UTC)
: {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 15:21, 8 October 2026 (UTC)
== Siddhgiritubes reported by MathXplore ==
* {{userlinks|Siddhgiritubes}}
Spam <!-- USERREPORTED:/Siddhgiritubes/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:31, 7 October 2026 (UTC)
: Page deleted by JJPMaster. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 15:09, 8 October 2026 (UTC)
== Editbots reported by MathXplore ==
* {{userlinks|Editbots}}
Link spam ([[Special:AbuseLog/316068]], [[Special:Contributions/~2026-54143-79]]) <!-- USERREPORTED:/Editbots/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:13, 8 October 2026 (UTC)
: {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 15:10, 8 October 2026 (UTC)
== Lenawalker1 reported by TechVindicator ==
* {{userlinks|Lenawalker1}}
Spam <!-- USERREPORTED:/Lenawalker1/ --> [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 04:07, 10 October 2026 (UTC)
:{{done|Dealt with}} by SHB —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 04:31, 11 October 2026 (UTC)
== Cleanwipes reported by MathXplore ==
* {{userlinks|Cleanwipes}}
Link spam, [[Special:AbuseLog/316154]] <!-- USERREPORTED:/Cleanwipes/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:21, 14 October 2026 (UTC)
: {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 15:20, 14 October 2026 (UTC)
== Suniluv2026 reported by MathXplore ==
* {{userlinks|Suniluv2026}}
Link spam, [[Special:AbuseLog/316149]] <!-- USERREPORTED:/Suniluv2026/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:22, 14 October 2026 (UTC)
: {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 15:21, 14 October 2026 (UTC)
== Rudrashares01 reported by MathXplore ==
* {{userlinks|Rudrashares01}}
Spam <!-- USERREPORTED:/Rudrashares01/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:26, 15 October 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> 19:25, 15 October 2026 (UTC)
tjz3kw9tq80ptm27hfjdvg2z5l9ay0h
4676330
4676299
2026-10-16T06:06:27Z
Morkoz
3607239
Reporting Rimshad12
4676330
wikitext
text/x-wiki
{{/Header}} {{User:MiszaBot/config
|archive = Wikibooks:Reading room/Administrative Assistance/Archives/%(year)d/%(monthname)s
|algo = old(14d)
|counter = 1
|minthreadstoarchive = 1
|minthreadsleft = 1
}}
== Tunde akinlabi reported by MathXplore ==
* {{userlinks|Tunde akinlabi}}
Spam <!-- USERREPORTED:/Tunde akinlabi/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:18, 1 October 2026 (UTC)
: Page was deleted by another admin. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:11, 2 October 2026 (UTC)
== Barakat isiaka reported by MathXplore ==
* {{userlinks|Barakat isiaka}}
Spam <!-- USERREPORTED:/Barakat isiaka/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:19, 1 October 2026 (UTC)
: Page was deleted by another admin. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:11, 2 October 2026 (UTC)
== Roconpaas01 reported by MathXplore ==
* {{userlinks|Roconpaas01}}
Link spam, [[Special:AbuseLog/315913]] <!-- USERREPORTED:/Roconpaas01/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:19, 2 October 2026 (UTC)
: {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:10, 2 October 2026 (UTC)
== Diiminstitute reported by MathXplore ==
* {{userlinks|Diiminstitute}}
Link spam, [[Special:AbuseLog/315963]] <!-- USERREPORTED:/Diiminstitute/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 02:34, 4 October 2026 (UTC)
:{{done}} --[[User:SHB|SHB]] ([[User talk:SHB|discuss]] • [[Special:Contributions/SHB|contribs]]) 02:58, 4 October 2026 (UTC)
== ~2026-51118-27 reported by EggRoll97 ==
* {{anonlinks|~2026-51118-27}}
Vandalism <!-- USERREPORTED:/~2026-51118-27/ --> [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 07:28, 4 October 2026 (UTC)
: {{done}} by NDG (GS). [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:13, 4 October 2026 (UTC)
== ~2026-53393-86 reported by MathXplore ==
* {{anonlinks|~2026-53393-86}}
Vandalism <!-- USERREPORTED:/~2026-53393-86/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:37, 5 October 2026 (UTC)
:Various contributions deleted—watching to see how this develops. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 19:15, 5 October 2026 (UTC)
== [[CustomChessTheory]] ==
Reason for reporting: Wrong title, renaming needed. [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:45, 5 October 2026 (UTC)
: {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 15:21, 8 October 2026 (UTC)
== Siddhgiritubes reported by MathXplore ==
* {{userlinks|Siddhgiritubes}}
Spam <!-- USERREPORTED:/Siddhgiritubes/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:31, 7 October 2026 (UTC)
: Page deleted by JJPMaster. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 15:09, 8 October 2026 (UTC)
== Editbots reported by MathXplore ==
* {{userlinks|Editbots}}
Link spam ([[Special:AbuseLog/316068]], [[Special:Contributions/~2026-54143-79]]) <!-- USERREPORTED:/Editbots/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:13, 8 October 2026 (UTC)
: {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 15:10, 8 October 2026 (UTC)
== Lenawalker1 reported by TechVindicator ==
* {{userlinks|Lenawalker1}}
Spam <!-- USERREPORTED:/Lenawalker1/ --> [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 04:07, 10 October 2026 (UTC)
:{{done|Dealt with}} by SHB —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 04:31, 11 October 2026 (UTC)
== Cleanwipes reported by MathXplore ==
* {{userlinks|Cleanwipes}}
Link spam, [[Special:AbuseLog/316154]] <!-- USERREPORTED:/Cleanwipes/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:21, 14 October 2026 (UTC)
: {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 15:20, 14 October 2026 (UTC)
== Suniluv2026 reported by MathXplore ==
* {{userlinks|Suniluv2026}}
Link spam, [[Special:AbuseLog/316149]] <!-- USERREPORTED:/Suniluv2026/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:22, 14 October 2026 (UTC)
: {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 15:21, 14 October 2026 (UTC)
== Rudrashares01 reported by MathXplore ==
* {{userlinks|Rudrashares01}}
Spam <!-- USERREPORTED:/Rudrashares01/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:26, 15 October 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> 19:25, 15 October 2026 (UTC)
== Rimshad12 reported by Morkoz ==
* {{userlinks|Rimshad12}}
Spam ([[:m:special:GlobalContributions/Rimshad12|cross-wiki]]) <!-- USERREPORTED:/Rimshad12/ --> [[User:Morkoz|Morkoz]] ([[User talk:Morkoz|discuss]] • [[Special:Contributions/Morkoz|contribs]]) 06:06, 16 October 2026 (UTC)
bus077xe980we5uyoxwuwl1frol6t3w
4676344
4676330
2026-10-16T11:41:11Z
SHB
3332924
/* Rimshad12 reported by Morkoz */ re
4676344
wikitext
text/x-wiki
{{/Header}} {{User:MiszaBot/config
|archive = Wikibooks:Reading room/Administrative Assistance/Archives/%(year)d/%(monthname)s
|algo = old(14d)
|counter = 1
|minthreadstoarchive = 1
|minthreadsleft = 1
}}
== Tunde akinlabi reported by MathXplore ==
* {{userlinks|Tunde akinlabi}}
Spam <!-- USERREPORTED:/Tunde akinlabi/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:18, 1 October 2026 (UTC)
: Page was deleted by another admin. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:11, 2 October 2026 (UTC)
== Barakat isiaka reported by MathXplore ==
* {{userlinks|Barakat isiaka}}
Spam <!-- USERREPORTED:/Barakat isiaka/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:19, 1 October 2026 (UTC)
: Page was deleted by another admin. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:11, 2 October 2026 (UTC)
== Roconpaas01 reported by MathXplore ==
* {{userlinks|Roconpaas01}}
Link spam, [[Special:AbuseLog/315913]] <!-- USERREPORTED:/Roconpaas01/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:19, 2 October 2026 (UTC)
: {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:10, 2 October 2026 (UTC)
== Diiminstitute reported by MathXplore ==
* {{userlinks|Diiminstitute}}
Link spam, [[Special:AbuseLog/315963]] <!-- USERREPORTED:/Diiminstitute/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 02:34, 4 October 2026 (UTC)
:{{done}} --[[User:SHB|SHB]] ([[User talk:SHB|discuss]] • [[Special:Contributions/SHB|contribs]]) 02:58, 4 October 2026 (UTC)
== ~2026-51118-27 reported by EggRoll97 ==
* {{anonlinks|~2026-51118-27}}
Vandalism <!-- USERREPORTED:/~2026-51118-27/ --> [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 07:28, 4 October 2026 (UTC)
: {{done}} by NDG (GS). [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:13, 4 October 2026 (UTC)
== ~2026-53393-86 reported by MathXplore ==
* {{anonlinks|~2026-53393-86}}
Vandalism <!-- USERREPORTED:/~2026-53393-86/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:37, 5 October 2026 (UTC)
:Various contributions deleted—watching to see how this develops. —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 19:15, 5 October 2026 (UTC)
== [[CustomChessTheory]] ==
Reason for reporting: Wrong title, renaming needed. [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:45, 5 October 2026 (UTC)
: {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 15:21, 8 October 2026 (UTC)
== Siddhgiritubes reported by MathXplore ==
* {{userlinks|Siddhgiritubes}}
Spam <!-- USERREPORTED:/Siddhgiritubes/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:31, 7 October 2026 (UTC)
: Page deleted by JJPMaster. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 15:09, 8 October 2026 (UTC)
== Editbots reported by MathXplore ==
* {{userlinks|Editbots}}
Link spam ([[Special:AbuseLog/316068]], [[Special:Contributions/~2026-54143-79]]) <!-- USERREPORTED:/Editbots/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:13, 8 October 2026 (UTC)
: {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 15:10, 8 October 2026 (UTC)
== Lenawalker1 reported by TechVindicator ==
* {{userlinks|Lenawalker1}}
Spam <!-- USERREPORTED:/Lenawalker1/ --> [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 04:07, 10 October 2026 (UTC)
:{{done|Dealt with}} by SHB —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 04:31, 11 October 2026 (UTC)
== Cleanwipes reported by MathXplore ==
* {{userlinks|Cleanwipes}}
Link spam, [[Special:AbuseLog/316154]] <!-- USERREPORTED:/Cleanwipes/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:21, 14 October 2026 (UTC)
: {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 15:20, 14 October 2026 (UTC)
== Suniluv2026 reported by MathXplore ==
* {{userlinks|Suniluv2026}}
Link spam, [[Special:AbuseLog/316149]] <!-- USERREPORTED:/Suniluv2026/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:22, 14 October 2026 (UTC)
: {{done}}. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 15:21, 14 October 2026 (UTC)
== Rudrashares01 reported by MathXplore ==
* {{userlinks|Rudrashares01}}
Spam <!-- USERREPORTED:/Rudrashares01/ --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:26, 15 October 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> 19:25, 15 October 2026 (UTC)
== Rimshad12 reported by Morkoz ==
* {{userlinks|Rimshad12}}
Spam ([[:m:special:GlobalContributions/Rimshad12|cross-wiki]]) <!-- USERREPORTED:/Rimshad12/ --> [[User:Morkoz|Morkoz]] ([[User talk:Morkoz|discuss]] • [[Special:Contributions/Morkoz|contribs]]) 06:06, 16 October 2026 (UTC)
:{{done|Locked}} --[[User:SHB|SHB]] ([[User talk:SHB|discuss]] • [[Special:Contributions/SHB|contribs]]) 11:41, 16 October 2026 (UTC)
fgmyy5hhjurkdw76o1llcsf51tv7f61
Wikibooks:Reading room/Proposals
4
155682
4676340
4675845
2026-10-16T10:01:00Z
~2026-55521-69
3628541
/* Shweta chandrakant pawar is real ratan tata who is lady */ new section
4676340
wikitext
text/x-wiki
__NEWSECTIONLINK__ {{Discussion Rooms}} {{Shortcut|WB:RFC|WB:PROPOSALS}} {{TOC left<!--|limit=2-->}}
Welcome to the '''Proposals reading room'''. On this page, Wikibookians are free to talk about suggestions for improving Wikibooks.
{{User:MiszaBot/config
|archive = Wikibooks:Reading room/Proposals/%(year)d/%(monthname)s
|algo = old(120d)
|counter = 1
|key = 1f2adc5eee951900b65c7b981b786191
|minthreadstoarchive = 1
|minthreadsleft = 1
}}
{{clear}}
<!--Take threads to archive below this line-->
<!--Add new threads to bottom of page-->
== New gadget to browse subpages ==
Hi all! I developed a gadget to easily browse subpages through a collapsible menu, that I think might be useful in Wikibooks. Here's a little demo video:
[[File:Subpages_gadget_demo.webm|frameless]]
To test it yourself, add the following to [[Special:MyPage/common.js|your common.js]]:
<syntaxhighlight lang="javascript">
mw.loader.load( '//www.mediawiki.org/w/load.php?modules=ext.gadget.Global-Subpages' );
</syntaxhighlight>
If you find it useful, I can enable it as a gadget to make it generally available from the preferences. Thoughts? Cheers! [[User:Sophivorus|Sophivorus]] ([[User talk:Sophivorus|discuss]] • [[Special:Contributions/Sophivorus|contribs]]) 16:02, 2 July 2026 (UTC)
:Wikibooks relies heavily on subpages, so this is a nice addition. Merci. ―[[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> 16:43, 2 July 2026 (UTC)
:This could be extremely useful for books here!! I'll note, though, that it doesn't work quite right with the vector legacy skin (what I use). —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:20, 3 July 2026 (UTC)
: @[[User:Sophivorus|Sophivorus]] I will be the one in charge installing this as a gadget since there is no objection, but what dependecies does this gadget need to use? You might also want to read Kittycataclysm's suggestion above. ''Muchos saludos''. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 23:08, 9 July 2026 (UTC)
::@[[User:Codename Noreste|Codename Noreste]] Hi! I just fixed the issue with Vector legacy and also for other skins. Regarding dependencies, this gadget requires <code>mediawiki.api</code> and <code>@wikimedia/codex</code>. If you want to take care of the installation, please do not copy-paste the source code, but rather load the global version using <code>mw.loader.load( '//www.mediawiki.org/w/load.php?modules=ext.gadget.Global-Subpages' );</code>, like other [[mw:Global gadgets|global gadgets]]. Thanks! [[User:Sophivorus|Sophivorus]] ([[User talk:Sophivorus|discuss]] • [[Special:Contributions/Sophivorus|contribs]]) 14:22, 22 July 2026 (UTC)
::: I put the code on the gadgets definition page @[[User:Sophivorus|Sophivorus]], but feel free to fix what I placed. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 21:45, 22 July 2026 (UTC)
== Breadcrumbs in the title ==
Hi! I think breadcrumbs would be more intuitive, compact and cleaner if they were integrated into the title rather than below it, like so:
<gallery>
Wikisource breadcrumbs proposal (before).png|Current breadcrumbs
Wikisource breadcrumbs proposal (after).png|Proposed breadcrumbs
</gallery>
What do you think? [[User:Sophivorus|Sophivorus]] ([[User talk:Sophivorus|discuss]] • [[Special:Contributions/Sophivorus|contribs]]) 16:02, 17 August 2026 (UTC)
:I appreciate the effort, but I don't see a big difference or that one would be more usable than another. ―[[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> 19:14, 17 August 2026 (UTC)
:I like proposal and I think it would be an improvement. Having the breadcrumbs twice, as in the current system, creates a redundant ui element. I also think the formatting around the forward slashes in the "new" version better conveys that they have specific technical meaning and are not part of the name of the page. --[[User:JCrue|JCrue]] ([[User talk:JCrue|discuss]] • [[Special:Contributions/JCrue|contribs]]) 14:52, 7 October 2026 (UTC)
== Approve [[Wikibooks:CheckUser]] as a local policy? ==
Some of the text was based off of the global CheckUser policy, but in this case, should we approve [[Wikibooks:CheckUser]] as a local policy? There is a special clause allowing stewards to perform checks even during non-emergency situations (as set in [[Wikibooks:Global rights policy]]). I have yet to include a part where users may request CU checks. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 21:55, 13 September 2026 (UTC)
:I'm somewhat just unsure on what the benefit of making this policy would be. Sure, there's strength in policy, of course. But this seems to be doing fine overall as an information page, no? It doesn't differ very much from the global CU policy, so I'm not sure that a page without any Wikibooks-specific information really benefits from policy status. [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 00:22, 14 September 2026 (UTC)
:I would {{support}} this. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 00:26, 20 September 2026 (UTC)
== FlaggedRevs again ==
<div class="cd-moveMark">''Moved from [[Wikibooks:Reading room/General#FlaggedRevs again]]. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:01, 1 October 2026 (UTC)''</div>
Hi all. I already know there were various topics over the years about this subject, but I was considering for the project on whether we should remove this extension from this project, and go back to using MediaWiki's page patrol system.
Currently, there is a backlog of more than 3000 unreviewed edits (some going back as far as a few years ago); that’s why I started this discussion here.
{{collapse top}}
* <code>autoreview</code> and <code>editor</code> would be <code>autopatrolled</code> and <code>patroller</code>, respectively.
* <code>wgUseNPPatrol</code> and <code>wgUseFilePatrol</code> would be re-enabled for English Wikibooks.
* <code>autopatrol</code> and <code>patrol</code> would be re-assigned back to sysops and their respective user groups.
* <code>patroller</code> would also have <code>rollback</code> and <code>suppressredirect</code> and its rate limit untouched.
{{collapse bottom}}
Best, [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 12:56, 30 September 2026 (UTC)
:{{s}} the removal of FlaggedRevs. Inasmuch as the extension works at all, it works best when it is used selectively on projects like Wikipedia, for individual high-traffic pages with lots of watchers which are subject to vandalism or controversy. Wikibooks is not a good use case for this extension. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 15:51, 1 October 2026 (UTC)
:{{s}} I don't see any way that backlog ever gets cleared, frankly, and if it isn't going to be cleared, we might as well go to something easier, which is the normal page patrol system, which works well off of [[Special:NewPages]] already. [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 00:31, 3 October 2026 (UTC)
:{{neutral}} - Wikibooks is not a good use case for this extension, and with 3000 unreviewed edits with no progress at all, it does make sense to remove it. On the other hand, there could be a WikiProject to review each of these edits. For this reason, I am voting neutral [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 13:41, 3 October 2026 (UTC)
:: There was the outdated [[Wikibooks:New page patrol]] before this project used FlaggedRevs. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:22, 3 October 2026 (UTC)
:{{support}} the removal of FlaggedRevs from Wikibooks. It's a redundant extension that's not useful in this wiki. --[[User:Agusbou2015|Agusbou2015]] ([[User talk:Agusbou2015|discuss]] • [[Special:Contributions/Agusbou2015|contribs]]) 21:53, 3 October 2026 (UTC)
:{{Support}}. Several years ago I spent hundreds of hours trying to do the first review of every page. I managed to get all the root pages done but only got as far as "E" for the other pages. While I was doing this I stopped reviewing changes - and in that time over a 1,000 out of date pages were in the list. I concluded it was an impossible task unless lots of people joined in the work but that didn't happen and I doubt it ever will. I do think it has value for Wikijunior in showing the last reviewed page rather than the possibly offensively vandalised latest revision, but other than that it's a waste of time. At some point the extension will get fully deprecated and we'll be forced to stop using it anyway. [[User:MarcGarver|MarcGarver]] ([[User talk:MarcGarver|discuss]] • [[Special:Contributions/MarcGarver|contribs]]) 09:53, 6 October 2026 (UTC)
:Will <code>patroller</code> be granted automatically? [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 13:24, 6 October 2026 (UTC)
:: Unfortunately, no. Since we will stop using FlaggedRevs, the patroller user group will not be granted automatically and thus will have to be manually given out by administrators. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:46, 6 October 2026 (UTC)
:::@[[User:Codename Noreste|Codename Noreste]]: And are we planning on giving back the <code>patroller</code> right to existing reviewers? Or will they have to manually reapply? [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 02:30, 8 October 2026 (UTC)
:::: I have a plan: any former reviewer who has been active recently in the past two years will have patroller rights. This will be done to reduce a huge amount of inactive former reviewers. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 12:26, 8 October 2026 (UTC)
::::Keep the name the same; just remove the reviewer right. After all, patrolling is a form of reviewing. [[User:Leaderboard|Leaderboard]] ([[User talk:Leaderboard|discuss]] • [[Special:Contributions/Leaderboard|contribs]]) 18:52, 8 October 2026 (UTC)
::::: Do we have to use the term {{tq|reviewing}} instead of {{tq|patrolling}}? [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:57, 8 October 2026 (UTC)
:::{{ping|Codename Noreste}} Is there a reason that we should not simply give the reviewer group the <code>patrol</code> right, and keep the auto-granting going? [[Wikibooks:Reviewers#Automatic criteria]] does not appear to be FlaggedRevs-specific, so auto-promotion should still be able to continue even without FlaggedRevs, and reviewers could simply become patrollers (in the technical sense). [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 07:55, 10 October 2026 (UTC)
:::: I believe that would require some additional code on InitialiseSettings.php, and as for <code>reviewer</code>, I'm not sure we should still use that user group term over <code>patroller</code> as per the point {{tq|Special groups on small wikis}} on [[m:Limits to configuration changes]]. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:58, 10 October 2026 (UTC)
: If you take a look at the extended content, I also included what I also proposed too. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:19, 6 October 2026 (UTC)
:{{comment}}. The [[mw:Extension:FlaggedRevs|FlaggedRevs extension]] is not recommended for production use, per Mediawiki. On this basis alone we should discontinue use of it. However, we haven't determined if page patrolling is the best replacement. There are [[mw:Content approval extensions|alternative extensions]] and the mediawiki page for FlaggedRevs specifically recommends [[mw:Extension:Approved Revs|'''Approved Revs extension''']]. We should determine which of page patrolling or these extensions is the most appropriate antivandalism tool first. (after all, according to [[Help:Tracking_changes#Reviewing_pages]], the purpose of FlaggedRevs is to be "our primary counter-vandalism tool"). --[[User:JCrue|JCrue]] ([[User talk:JCrue|discuss]] • [[Special:Contributions/JCrue|contribs]]) 14:48, 7 October 2026 (UTC)
:: Approved Revs would require significant testing and approval per [[mw:Writing an extension for deployment]]. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 16:35, 7 October 2026 (UTC)
== Disable (some) page creation by temporary accounts ==
Creating a new book, or adding a chapter to an existing book, is a significant action, and users performing this action should be available to discuss it. Additionally, in practice, most page creations by temp accounts are out of scope, if not outright vandalism. (See https://en.wikibooks.org/w/index.php?title=Special:Log&type=create for some examples.)
As such, I'd like to propose that the wiki require a registered account to create pages in any non-talk namespace. Temporary accounts will still be able to edit existing pages, or to create talk pages to start discussions. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 18:48, 1 October 2026 (UTC)
: From a technical point of view, this would require moving <code>createpage</code> from unregistered users (<code><nowiki>*</nowiki></code>) to registered users (<code>user</code>), but that would mean every non-registered user may not be able to create pages in every namespace, but talk pages.
: Another solution would be to add [[mw:Extension:ArticleCreationWorkflow]] to this project, but we don't have a system to create drafts (or similar).
: And a final solution would be to create an edit filter disallowing unregistered users from creating pages in mainspace. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:43, 1 October 2026 (UTC)
:: Just to note, please read the first point of [[m:Limits to configuration changes#Changes that are likely to be declined]] (Disable non-autoconfirmed page creation). [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:50, 1 October 2026 (UTC)
:::What I'm proposing is that we require a registered account for page creation, not autoconfirmed. enwiki (as well as a few other wikis) already use this configuration - it's not new. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 19:58, 1 October 2026 (UTC)
:::: Okay, but I provided some alternatives above. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 20:06, 1 October 2026 (UTC)
: In that case, I have no objections here. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:03, 6 October 2026 (UTC)
:I would propose the use of autoconfirmed, to better patrol new pages that are being created. There are countless advertisement pages being created on Wikibooks, usually in the user's userpage. The use of a registered account proposed by Omphalographer therefore may have some limitations. I agree with the proposal to make new pages strictly autoconfirmed. If a user wishes to create a page, there could be a feature for reviewers/patrollers to check such pages that are being created. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 13:36, 9 October 2026 (UTC)
:: You might want to read my point about limits to configuration changes. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:53, 9 October 2026 (UTC)
:Why turn off potential good contributors by telling them they must register AND log-in in order to contribute? The problem at Wikibooks right now is the dearth of contributions, not vandalism, I think (?).
:* Anons are already precluded from editing pages that have been "protected" by admins.
:* Anon user contributions are automatically marked for Review before they become public
:* There are less than 500 anon accounts that have contributed more than one edit to Wikibooks?
:Is it really necessary to stop us from contributing to Wikibooks? [[Special:Contributions/~2026-40500-29|~2026-40500-29]] ([[User talk:~2026-40500-29|talk]]) 00:19, 10 October 2026 (UTC)
:: {{ping|~2026-40500-29}} The initial question was not whether registered accounts can contribute, it is whether temporary accounts can create pages. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 00:48, 10 October 2026 (UTC)
:::Isn't the creation of new pages a subset of potential contributions to Wikibooks? Are you saying that some members in good standing of this community are only allowed to correct obvious spelling and grammar mistakes by others? [[Special:Contributions/~2026-40500-29|~2026-40500-29]] ([[User talk:~2026-40500-29|talk]]) 19:23, 11 October 2026 (UTC)
::::That message was to {{comment}} that this discussion was about creating pages, not about whether anonymous users can contribute. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 07:22, 13 October 2026 (UTC)
:Limiting page creation to registered users might reduce new spam/promotional/out of scope pages. I disagree with 2026-405000-29 that requiring account registration is unnecessarily burdensome for new editors.
:I don't know where the number >500 anon accounts have contributed more than one edit comes from and it seems unlikely to me: that would mean there have only been 23 anon editors per year since wikibooks was founded. Looking at Special:RecentChanges there seems to be four or five anon editors a day.
:Overall I think it is a reasonable restriction. I can't speak to the technical aspects of this change (re configuration changes, vs. autoconfirmed patrolling, etc) but if it is easy to implement I support it. [[User:JCrue|JCrue]] ([[User talk:JCrue|discuss]] • [[Special:Contributions/JCrue|contribs]]) 10:13, 12 October 2026 (UTC)
== Shweta chandrakant pawar is real ratan tata who is lady ==
British princess is Shweta chandrakant pawar real business women [[Special:Contributions/~2026-55521-69|~2026-55521-69]] ([[User talk:~2026-55521-69|talk]]) 10:01, 16 October 2026 (UTC)
bp9ed39xmp2e0waqkf0om6segjtmxz4
4676345
4676340
2026-10-16T11:41:47Z
SHB
3332924
[[WB:REVERT|Reverted]] edit by [[Special:Contributions/~2026-55521-69|~2026-55521-69]] ([[User talk:~2026-55521-69|talk]]) to last version by Codename Noreste
4675845
wikitext
text/x-wiki
__NEWSECTIONLINK__ {{Discussion Rooms}} {{Shortcut|WB:RFC|WB:PROPOSALS}} {{TOC left<!--|limit=2-->}}
Welcome to the '''Proposals reading room'''. On this page, Wikibookians are free to talk about suggestions for improving Wikibooks.
{{User:MiszaBot/config
|archive = Wikibooks:Reading room/Proposals/%(year)d/%(monthname)s
|algo = old(120d)
|counter = 1
|key = 1f2adc5eee951900b65c7b981b786191
|minthreadstoarchive = 1
|minthreadsleft = 1
}}
{{clear}}
<!--Take threads to archive below this line-->
<!--Add new threads to bottom of page-->
== New gadget to browse subpages ==
Hi all! I developed a gadget to easily browse subpages through a collapsible menu, that I think might be useful in Wikibooks. Here's a little demo video:
[[File:Subpages_gadget_demo.webm|frameless]]
To test it yourself, add the following to [[Special:MyPage/common.js|your common.js]]:
<syntaxhighlight lang="javascript">
mw.loader.load( '//www.mediawiki.org/w/load.php?modules=ext.gadget.Global-Subpages' );
</syntaxhighlight>
If you find it useful, I can enable it as a gadget to make it generally available from the preferences. Thoughts? Cheers! [[User:Sophivorus|Sophivorus]] ([[User talk:Sophivorus|discuss]] • [[Special:Contributions/Sophivorus|contribs]]) 16:02, 2 July 2026 (UTC)
:Wikibooks relies heavily on subpages, so this is a nice addition. Merci. ―[[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> 16:43, 2 July 2026 (UTC)
:This could be extremely useful for books here!! I'll note, though, that it doesn't work quite right with the vector legacy skin (what I use). —[[User:Kittycataclysm|Kittycataclysm]] ([[User talk:Kittycataclysm|discuss]] • [[Special:Contributions/Kittycataclysm|contribs]]) 01:20, 3 July 2026 (UTC)
: @[[User:Sophivorus|Sophivorus]] I will be the one in charge installing this as a gadget since there is no objection, but what dependecies does this gadget need to use? You might also want to read Kittycataclysm's suggestion above. ''Muchos saludos''. [[User:Codename Noreste|<span style="color:#0024FF">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 23:08, 9 July 2026 (UTC)
::@[[User:Codename Noreste|Codename Noreste]] Hi! I just fixed the issue with Vector legacy and also for other skins. Regarding dependencies, this gadget requires <code>mediawiki.api</code> and <code>@wikimedia/codex</code>. If you want to take care of the installation, please do not copy-paste the source code, but rather load the global version using <code>mw.loader.load( '//www.mediawiki.org/w/load.php?modules=ext.gadget.Global-Subpages' );</code>, like other [[mw:Global gadgets|global gadgets]]. Thanks! [[User:Sophivorus|Sophivorus]] ([[User talk:Sophivorus|discuss]] • [[Special:Contributions/Sophivorus|contribs]]) 14:22, 22 July 2026 (UTC)
::: I put the code on the gadgets definition page @[[User:Sophivorus|Sophivorus]], but feel free to fix what I placed. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] ([[User talk:Codename Noreste|discuss]] • [[Special:Contributions/Codename Noreste|contribs]]) 21:45, 22 July 2026 (UTC)
== Breadcrumbs in the title ==
Hi! I think breadcrumbs would be more intuitive, compact and cleaner if they were integrated into the title rather than below it, like so:
<gallery>
Wikisource breadcrumbs proposal (before).png|Current breadcrumbs
Wikisource breadcrumbs proposal (after).png|Proposed breadcrumbs
</gallery>
What do you think? [[User:Sophivorus|Sophivorus]] ([[User talk:Sophivorus|discuss]] • [[Special:Contributions/Sophivorus|contribs]]) 16:02, 17 August 2026 (UTC)
:I appreciate the effort, but I don't see a big difference or that one would be more usable than another. ―[[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> 19:14, 17 August 2026 (UTC)
:I like proposal and I think it would be an improvement. Having the breadcrumbs twice, as in the current system, creates a redundant ui element. I also think the formatting around the forward slashes in the "new" version better conveys that they have specific technical meaning and are not part of the name of the page. --[[User:JCrue|JCrue]] ([[User talk:JCrue|discuss]] • [[Special:Contributions/JCrue|contribs]]) 14:52, 7 October 2026 (UTC)
== Approve [[Wikibooks:CheckUser]] as a local policy? ==
Some of the text was based off of the global CheckUser policy, but in this case, should we approve [[Wikibooks:CheckUser]] as a local policy? There is a special clause allowing stewards to perform checks even during non-emergency situations (as set in [[Wikibooks:Global rights policy]]). I have yet to include a part where users may request CU checks. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 21:55, 13 September 2026 (UTC)
:I'm somewhat just unsure on what the benefit of making this policy would be. Sure, there's strength in policy, of course. But this seems to be doing fine overall as an information page, no? It doesn't differ very much from the global CU policy, so I'm not sure that a page without any Wikibooks-specific information really benefits from policy status. [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 00:22, 14 September 2026 (UTC)
:I would {{support}} this. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 00:26, 20 September 2026 (UTC)
== FlaggedRevs again ==
<div class="cd-moveMark">''Moved from [[Wikibooks:Reading room/General#FlaggedRevs again]]. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:01, 1 October 2026 (UTC)''</div>
Hi all. I already know there were various topics over the years about this subject, but I was considering for the project on whether we should remove this extension from this project, and go back to using MediaWiki's page patrol system.
Currently, there is a backlog of more than 3000 unreviewed edits (some going back as far as a few years ago); that’s why I started this discussion here.
{{collapse top}}
* <code>autoreview</code> and <code>editor</code> would be <code>autopatrolled</code> and <code>patroller</code>, respectively.
* <code>wgUseNPPatrol</code> and <code>wgUseFilePatrol</code> would be re-enabled for English Wikibooks.
* <code>autopatrol</code> and <code>patrol</code> would be re-assigned back to sysops and their respective user groups.
* <code>patroller</code> would also have <code>rollback</code> and <code>suppressredirect</code> and its rate limit untouched.
{{collapse bottom}}
Best, [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 12:56, 30 September 2026 (UTC)
:{{s}} the removal of FlaggedRevs. Inasmuch as the extension works at all, it works best when it is used selectively on projects like Wikipedia, for individual high-traffic pages with lots of watchers which are subject to vandalism or controversy. Wikibooks is not a good use case for this extension. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 15:51, 1 October 2026 (UTC)
:{{s}} I don't see any way that backlog ever gets cleared, frankly, and if it isn't going to be cleared, we might as well go to something easier, which is the normal page patrol system, which works well off of [[Special:NewPages]] already. [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 00:31, 3 October 2026 (UTC)
:{{neutral}} - Wikibooks is not a good use case for this extension, and with 3000 unreviewed edits with no progress at all, it does make sense to remove it. On the other hand, there could be a WikiProject to review each of these edits. For this reason, I am voting neutral [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 13:41, 3 October 2026 (UTC)
:: There was the outdated [[Wikibooks:New page patrol]] before this project used FlaggedRevs. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:22, 3 October 2026 (UTC)
:{{support}} the removal of FlaggedRevs from Wikibooks. It's a redundant extension that's not useful in this wiki. --[[User:Agusbou2015|Agusbou2015]] ([[User talk:Agusbou2015|discuss]] • [[Special:Contributions/Agusbou2015|contribs]]) 21:53, 3 October 2026 (UTC)
:{{Support}}. Several years ago I spent hundreds of hours trying to do the first review of every page. I managed to get all the root pages done but only got as far as "E" for the other pages. While I was doing this I stopped reviewing changes - and in that time over a 1,000 out of date pages were in the list. I concluded it was an impossible task unless lots of people joined in the work but that didn't happen and I doubt it ever will. I do think it has value for Wikijunior in showing the last reviewed page rather than the possibly offensively vandalised latest revision, but other than that it's a waste of time. At some point the extension will get fully deprecated and we'll be forced to stop using it anyway. [[User:MarcGarver|MarcGarver]] ([[User talk:MarcGarver|discuss]] • [[Special:Contributions/MarcGarver|contribs]]) 09:53, 6 October 2026 (UTC)
:Will <code>patroller</code> be granted automatically? [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 13:24, 6 October 2026 (UTC)
:: Unfortunately, no. Since we will stop using FlaggedRevs, the patroller user group will not be granted automatically and thus will have to be manually given out by administrators. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:46, 6 October 2026 (UTC)
:::@[[User:Codename Noreste|Codename Noreste]]: And are we planning on giving back the <code>patroller</code> right to existing reviewers? Or will they have to manually reapply? [[User:JJPMaster|JJP]]<sub>[[User talk:JJPMaster|Mas]]<sub>[[Special:Contributions/JJPMaster|ter]]</sub></sub> ([[wikt:she|she]]/[[wikt:they|they]]) 02:30, 8 October 2026 (UTC)
:::: I have a plan: any former reviewer who has been active recently in the past two years will have patroller rights. This will be done to reduce a huge amount of inactive former reviewers. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 12:26, 8 October 2026 (UTC)
::::Keep the name the same; just remove the reviewer right. After all, patrolling is a form of reviewing. [[User:Leaderboard|Leaderboard]] ([[User talk:Leaderboard|discuss]] • [[Special:Contributions/Leaderboard|contribs]]) 18:52, 8 October 2026 (UTC)
::::: Do we have to use the term {{tq|reviewing}} instead of {{tq|patrolling}}? [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:57, 8 October 2026 (UTC)
:::{{ping|Codename Noreste}} Is there a reason that we should not simply give the reviewer group the <code>patrol</code> right, and keep the auto-granting going? [[Wikibooks:Reviewers#Automatic criteria]] does not appear to be FlaggedRevs-specific, so auto-promotion should still be able to continue even without FlaggedRevs, and reviewers could simply become patrollers (in the technical sense). [[User:EggRoll97|EggRoll97]] ([[User talk:EggRoll97|discuss]] • [[Special:Contributions/EggRoll97|contribs]]) 07:55, 10 October 2026 (UTC)
:::: I believe that would require some additional code on InitialiseSettings.php, and as for <code>reviewer</code>, I'm not sure we should still use that user group term over <code>patroller</code> as per the point {{tq|Special groups on small wikis}} on [[m:Limits to configuration changes]]. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 13:58, 10 October 2026 (UTC)
: If you take a look at the extended content, I also included what I also proposed too. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 18:19, 6 October 2026 (UTC)
:{{comment}}. The [[mw:Extension:FlaggedRevs|FlaggedRevs extension]] is not recommended for production use, per Mediawiki. On this basis alone we should discontinue use of it. However, we haven't determined if page patrolling is the best replacement. There are [[mw:Content approval extensions|alternative extensions]] and the mediawiki page for FlaggedRevs specifically recommends [[mw:Extension:Approved Revs|'''Approved Revs extension''']]. We should determine which of page patrolling or these extensions is the most appropriate antivandalism tool first. (after all, according to [[Help:Tracking_changes#Reviewing_pages]], the purpose of FlaggedRevs is to be "our primary counter-vandalism tool"). --[[User:JCrue|JCrue]] ([[User talk:JCrue|discuss]] • [[Special:Contributions/JCrue|contribs]]) 14:48, 7 October 2026 (UTC)
:: Approved Revs would require significant testing and approval per [[mw:Writing an extension for deployment]]. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 16:35, 7 October 2026 (UTC)
== Disable (some) page creation by temporary accounts ==
Creating a new book, or adding a chapter to an existing book, is a significant action, and users performing this action should be available to discuss it. Additionally, in practice, most page creations by temp accounts are out of scope, if not outright vandalism. (See https://en.wikibooks.org/w/index.php?title=Special:Log&type=create for some examples.)
As such, I'd like to propose that the wiki require a registered account to create pages in any non-talk namespace. Temporary accounts will still be able to edit existing pages, or to create talk pages to start discussions. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 18:48, 1 October 2026 (UTC)
: From a technical point of view, this would require moving <code>createpage</code> from unregistered users (<code><nowiki>*</nowiki></code>) to registered users (<code>user</code>), but that would mean every non-registered user may not be able to create pages in every namespace, but talk pages.
: Another solution would be to add [[mw:Extension:ArticleCreationWorkflow]] to this project, but we don't have a system to create drafts (or similar).
: And a final solution would be to create an edit filter disallowing unregistered users from creating pages in mainspace. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:43, 1 October 2026 (UTC)
:: Just to note, please read the first point of [[m:Limits to configuration changes#Changes that are likely to be declined]] (Disable non-autoconfirmed page creation). [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:50, 1 October 2026 (UTC)
:::What I'm proposing is that we require a registered account for page creation, not autoconfirmed. enwiki (as well as a few other wikis) already use this configuration - it's not new. [[User:Omphalographer|Omphalographer]] ([[User talk:Omphalographer|discuss]] • [[Special:Contributions/Omphalographer|contribs]]) 19:58, 1 October 2026 (UTC)
:::: Okay, but I provided some alternatives above. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 20:06, 1 October 2026 (UTC)
: In that case, I have no objections here. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 19:03, 6 October 2026 (UTC)
:I would propose the use of autoconfirmed, to better patrol new pages that are being created. There are countless advertisement pages being created on Wikibooks, usually in the user's userpage. The use of a registered account proposed by Omphalographer therefore may have some limitations. I agree with the proposal to make new pages strictly autoconfirmed. If a user wishes to create a page, there could be a feature for reviewers/patrollers to check such pages that are being created. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 13:36, 9 October 2026 (UTC)
:: You might want to read my point about limits to configuration changes. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:53, 9 October 2026 (UTC)
:Why turn off potential good contributors by telling them they must register AND log-in in order to contribute? The problem at Wikibooks right now is the dearth of contributions, not vandalism, I think (?).
:* Anons are already precluded from editing pages that have been "protected" by admins.
:* Anon user contributions are automatically marked for Review before they become public
:* There are less than 500 anon accounts that have contributed more than one edit to Wikibooks?
:Is it really necessary to stop us from contributing to Wikibooks? [[Special:Contributions/~2026-40500-29|~2026-40500-29]] ([[User talk:~2026-40500-29|talk]]) 00:19, 10 October 2026 (UTC)
:: {{ping|~2026-40500-29}} The initial question was not whether registered accounts can contribute, it is whether temporary accounts can create pages. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 00:48, 10 October 2026 (UTC)
:::Isn't the creation of new pages a subset of potential contributions to Wikibooks? Are you saying that some members in good standing of this community are only allowed to correct obvious spelling and grammar mistakes by others? [[Special:Contributions/~2026-40500-29|~2026-40500-29]] ([[User talk:~2026-40500-29|talk]]) 19:23, 11 October 2026 (UTC)
::::That message was to {{comment}} that this discussion was about creating pages, not about whether anonymous users can contribute. [[User:TechVindicator|TechVindicator]] ([[User talk:TechVindicator|discuss]] • [[Special:Contributions/TechVindicator|contribs]]) 07:22, 13 October 2026 (UTC)
:Limiting page creation to registered users might reduce new spam/promotional/out of scope pages. I disagree with 2026-405000-29 that requiring account registration is unnecessarily burdensome for new editors.
:I don't know where the number >500 anon accounts have contributed more than one edit comes from and it seems unlikely to me: that would mean there have only been 23 anon editors per year since wikibooks was founded. Looking at Special:RecentChanges there seems to be four or five anon editors a day.
:Overall I think it is a reasonable restriction. I can't speak to the technical aspects of this change (re configuration changes, vs. autoconfirmed patrolling, etc) but if it is easy to implement I support it. [[User:JCrue|JCrue]] ([[User talk:JCrue|discuss]] • [[Special:Contributions/JCrue|contribs]]) 10:13, 12 October 2026 (UTC)
jx98ipssap0xpkceubxpwztaswdnze9
Structural Biochemistry/Proteins/NMR Spectroscopy
0
173765
4676244
4352662
2026-10-15T12:10:04Z
CommonsDelinker
49843
Replacing Ethyl_acetate_NMR.jpg with [[File:1H_NMR_Ethyl_Acetate_Coupling_shown_-_2.png]] (by [[:c:User:CommonsDelinker|CommonsDelinker]] because: Low-quality hand drawn 1H NMR replaced by better version).
4676244
wikitext
text/x-wiki
NMM spectroscopy is unique in being able to reveal the atomic structure of macromolecules in solution, provided that highly concentrated solution can be obtained. This technique depends on the fact that certain atomic nuclei are intrinsically magnetic. The chemical shift of nuclei depends on their local environment. Furthermore, the spins of neighboring nuclei interact with each other in ways that provide definitive structural information. This information can be used to determine complete three-dimensional structures of proteins.
== General Information ==
'''Nuclear Magnetic Resonance Spectroscopy (NMR)''' is an analytical technique which exploits the fact that certain nuclei possess a property called spin (I). NMR spectroscopy is possible due to the Zeeman Effect discovered first in the 1890s. The structures of proteins can be determined by NMR by first preparing the isotopically labeled samples. In the magnet, the "natural magnets" in the atoms of the sample line up with the magnetic field of the NMR magnet. Then, the sample is exposed to a series of radio wave pulses to disrupt the magnetic equilibrium of the atoms. The reaction of these nuclei can be observed to assess their chemical nature specifically, their chemical shift properties. Sets of experiments can be conducted to refine possible structures and present the average of the experiments as the final structure. It can have advantages over X-ray crystallography because the samples of proteins can be in solution rather than crystallized form and other properties of the sample protein, such as flexibility and interactions, can be determined while X-ray crystallography only reveals the structure of the protein.
It is the splitting of atomic energy levels when the atoms are placed in a magnetic field. This effect was later found to occur as a result of nuclear spin. In 1924, Wolfgang Pauli first suggested the theoretical basis of NMR when he concluded that some atomic nuclei should possess nuclear spin and these nuclei would split into degenerate energy levels when placed in a magnetic field. These nuclei have a magnetic moment, in and of themselves, which is called spin. Nuclei that possess spin are said to be NMR active. Some NMR active nuclei can be seen in Table 1, with italicized nuclei being those commonly studied in biological molecules. [[Image:NMR Active nuclei.jpg|500px|thumb|Table 1 NMR active nuclei]]
Separately, Bolch at Stanford and Purcell at Harvard in 1946 each translated the Zeeman effect into the first NMR spectrum. In 1949, Proctor and Yu at Stanford measured the first chemical shift and spin couplings. Initially, commercial NMR spectrometers were continuous wave type and were only able to detect the most sensitive nuclei, 1H & 19F.
NMR ‘active’ nuclei are active if the nuclear spin, I, is non zero.
To determine spin of nuclei:
Mass # is even and # neutrons is even, I=0, therefore no spin
Mass # is even and # neutrons is odd, I= integer, therefore spin
Mass # is odd and # neutrons is even or odd, I=half integer, therefore spin
The cause of spin can be visualized with the following analogy. A rotating charged particle (e.g. hydrogen nucleus aka proton) will produce a magnetic field perpendicular to the direction of rotation which is analogous to the magnetic field of a bar magnet, as seen in Figure 1.
[[Image:Spinning proton magnetic field lines.jpg|500px|thumb|Figure 1]]
Absent an external magnetic field (B¬0) these active nuclei are oriented in random directions, but in the presence of an external magnetic field (B¬0) these nuclei orient themselves either with or against the field, as seen in Figure 2.
[[Image:Nuclei in and out of magnetic field.jpg|500px|thumb|Figure 2]]
Nuclei are dispersed between states of different energies. The different energy levels are induced by the presence of the external magnetic field (B¬0). (For spin ½ nuclei two orientations are possible, with the higher energy orientation being ‘β spin state’ and the lower energy orientation being ‘α spin state’.) This is evident in the following equation where E=energy, h=Planck’s constant, ν=frequency, γ=gyromagnetic ratio (nucleus dependent), B0= external magnetic field:
ΔE= h ν = γ B0
To see this graphically see Figure 3.
[[Image:Magnetic field induced energy levels.jpg|500px|thumb|Figure 3]]
These induced energy level differences are what allow the use of NMR. At equilibrium, nuclei will occupy both levels of energy, low and high. However, according to the Maxwell-Boltzmann Distribution, the lower energy level will be occupied by a greater number of nuclei. This difference in the number of nuclei, between low and high energy levels, is what NMR exploits. The energy required to cause a spin flip, transition from low to high energy state, corresponds to the radio frequency range of the electromagnetic spectrum.
ΔE= h ν
A nucleus will only flip spins, absorb energy, when the frequency of electromagnetic radiation just matches the change in energy, ΔE. This is called the point of resonance. Nuclei will have differing resonant frequencies based on their local electronic environment. This can be seen in “A handmade example of a proton (1H) NMR spectrum.” All nuclei under observation are irradiated with radio waves to the higher energy state and are then allowed to decay back to the lower energy state. This decay is what is observed. A free induction decay signal is collected as the nuclei fall back to the lower energy state, Figure 4 depicts a generic FID.
[[Image:FID generic.jpg|500px|thumb|Figure 4]]
This FID is then subjected to a Fourier transform to convert from the time domain to the frequency domain, seen in Figure 5.
[[Image:NMR spectrum generic.jpg|500px|thumb|Figure 5]]
A change in the magnitude of the magnetic field will change the resonant frequency of the nucleus. Therefore, in order to compare spectra between instruments with varying size magnetic strength it is necessary to convert from frequency to parts per million, ppm. This can be done with the equation seen in Figure 6.
[[Image:Frequency to ppm.jpg|500px|thumb|Figure 6]]
With the arrival of Fourier Transform instruments in the 1970s it became possible to acquire spectra of nuclei that are not naturally abundant, such as 13C which is only 1.1% naturally occurring. This requires the acquisition of multiple spectra and adding them together to get a greater sensitivity. The signal to noise ratio (S/N) will increase as acquisitions increase, because the signal magnitude increases linearly with acquisition number while the noise magnitude increases as the square of the number acquisitions. So, the S/N will increase as the square of the number of acquisitions as seen in Figure 7.
[[Image:Signal to noise.jpg|500px|thumb|Figure 7]]
The Nobel Prize in Chemistry 2002 went partly to Kurt Wuthrich for “NMR Studies of Structure and Function of Biological Macromolecules,”[1] so NMR is important to structural biochemistry. Table 2 lists Nobel prizes awarded for discoveries related to NMR spectroscopy.
[[Image:NMR Nobel prizes.jpg|500px|thumb|Table 2]]
[[Image:nmr.jpg|500px|thumb|A handmade example of a proton (<sup>1</sup>H) NMR spectrum]]
NMR is a powerful technique that can be used to determine the structure of [[Structural Biochemistry/Proteins|proteins]] in highly concentrated solution, by analyzing the relative positions of certain atoms (Shriner 136). Protein NMR exploits the absence of zero net nuclear spin of the most abundant isotopes of carbon and oxygen (12 and 16) as well as the abundant isotope of Nitrogen (14) with a net nuclear spin of 1. NMR cannot be performed on an atom with zero net nuclear spin. Since there are many distinct nuclei present in a single protein much overlap is expected in the chemical shifts produced through the NMR analysis therefore a multidimensional approach is applied. Magnetization is applied to the protein and nuclei through electromagnetic pulses that can magnetize nuclei in two ways. The first involving magnetization through nuclei bonding and the second through open space. Each approach offers a different way to analyze the protein such as the first approach allowing for distinct nuclei to be targeted whereas the second approach allowing for structure calculation distance restraints and targeting an unlabeled protein.
Intrinsically magnetic nuclei display spinning properties that produce a magnetic moment. When an external magnetic field is applied to the system the magnetic moment can adopt either an alpha or beta state. The strength of the magnetic field determines the proportionality of alpha to beta with a tendency to favor alpha as it is aligned with the field and has a lower energy. By supplying an electromagnetic pulse alpha spin nuclei will change to beta and produce resonance. By keeping a constant magnetic field on the system and adjusting the frequency of the electromagnetic pulses a spectrum of resonance can be obtained.
Currently, NMR spectrometers use the Fourier transform method of pulse radiation. To change the nuclei in alpha state to beta, a strong pulse of radiation is used. Then the pulse of radiation is removed and the nuclei go back to their original alpha state, giving a decay signal. This signal is converted by the computer to a frequency domain spectrum in a very fast way. By storing many signals a more intense spectrum is produced. (Shriner 136)
Electrons around a magnetic nucleus produces a local magnetic field opposite to the applied magnetic field. Magnetic nuclei can absorb the electromagnetic pulses at specific frequencies coined "chemical shifts" (signal positions) expressed in parts per million (ppm). These chemical shifts are designated relative to a standard compound such as a derivative of tetramethylsilane (TMS) (CH<sub>3</sub>)<sub>4</sub>Si (which has a chemical shift of 0.0) that is soluble in water. NMR spectra that are produced through this assay can be analyzed, and with the combination of a multidimensional analysis the structure of the protein can be determined.
When an atomic nuclei is influenced by a magnetic field, it creates a magnetic moment which will give an orientation of spinning to itself. Different orientation of spinning, spin states, exist in different states of energy - alpha-state and beta-state - where alpha-state is found to be more stable with a lower energy through experiments as it has the same direction with the magnetic field. In order to transits alpha-state to beta-state (excited state), pulse of electromagnetic radiation is needed to increase the frequency of the electromagnetic radiation (through irradiation) to have the spinning nucleus to overcome the energy barrier and change its orientation. (See [http://en.wikipedia.org/wiki/Bohr_model Bohr Model] for more information) Thus, resonance will be obtained. It was discovered by American physicist Edward Mills Purcell and physicist Felix Bloch from Switzerland in 1946.
The difference between energy levels split by a magnetic field corresponds to the energy of radio waves. So, the electronics required for the NMR spectrometer weren’t developed until WWII when the government invested heavily into radar technology. Radar is simply the use of radio waves to detect location and direction of moving objects. Better frequency synthesizers, amplifiers, receivers and signal processors all contributed to advancements in the field of NMR spectroscopy.
The components of a NMR Spectrometer can be seen in Figure 8.
[[Image:NMR Spectrometer.jpg|500px|thumb|right|Figure 8]]
Some common 2D experiments can be seen in Table 3:
{| style="clear:none;float:left;margin:1em 0 1em 1em"
|-
! Common 20 experiments <sup>(Table 3)</sup>
|-
| '''COSY''' || '''Correlated Spectroscopy'''<br />Through bond H-H correlation
|-
| '''TOCSY''' || '''Total Correlation Spectroscopy'''<br />Extended through bond H-H correlation
|-
| '''1D NOE''' || '''Nuclear Overhauser Effect Spectroscopy'''<br />H-H through space correlation
|-
| '''NOESY''' || '''Nuclear Overhauser Effect Spectroscopy'''<br />H-H through space correlation
|-
| '''ROESY''' || '''Rotating Frame Overhauser Effect Spectroscopy'''<br />Similar to NOESY
|}<br style="clear:both"/>
==Magnets used for NMR==
The magnets used for NMR are very strong. Those used for high resolution protein structure determination range from 500 megahertz to 900 megahertz and generate magnetic fields thousands of times stronger than the Earth’s. Although the sample is exposed to a strong magnetic field, very little magnetic force gets out of the machine.
NMR magnets are superconductors, so they must be cooled with liquid helium, which is kept at 4 Kelvin. Liquid nitrogen, which is kept at 77 Kelvin, helps keep the liquid helium cold.
== Appropriate Isotopes ==
Only certain isotopes are capable for use in NMR. The most common isotope that is used in NMR is Hydrogen-1 (Proton NMR). Other commonly used isotopes are Carbon-13 and Nitrogen-15.
== Vector Model ==
The Vector Model only holds for uncoupled spins. Nuclei that are active under NMR spectroscopy have associated with them a nuclear spin magnetic moment, which means that these nuclei produce a small magnetic field. When these nuclei are placed in a magnetic field the energy of the interaction depends on the angle between the field and the magnetic moment. The highest energy interaction is when the magnetic field and the magnetic moment point in opposite directions, and the lowest energy interaction is when the magnetic field and magnetic moment point in the same direction.
Before a magnetic field is applied to a population of nuclei the magnetic moments of these nuclei are oriented randomly due to random thermal motion. After a magnetic field is applied one has to wait for the spins to come to equilibrium, a process known as relaxation. Pointing in the direction of the magnetic field is slightly energetically favored, and hence only a very small number of spins will do so, forming the bulk magnetization vector. The sample is hence magnetized. At equilibrium the bulk magnetization vector will point in the direction of the magnetic field (we will assume this is the z direction) and will be stationery. If the magnetization vector was tilted away from the axis it would precess at the Larmor frequency (-gyromagnetic ratio * magnetic field).
The purpose of a pulse is to quickly change the direction of the magnetization vector. This can be done by creating a much weaker magnetic field in the direction one desires, but allowing it to oscillate at the aforementioned Larmor frequency. This will result in the magnetization vector pointing in the direction one desires. This occurs because when the B1 field (the weaker field) oscillates near the Larmor Frequency, the result is that the strength of the B0 field (the stronger field in the z direction) appears to be reduced. Hence the resulting magnetic field (the effective field) can point very close to the direction of the B1 field if the B1 field is much larger than the reduced field.
An on resonance pulse involves changing the direction of the magnetization vector by applying the B1 field in a certain direction for a specific time. The angle through which the magnetization vector is rotated is given as the product of the frequency of the effective field and the time the pulse is applied. By applying different times one can rotate the magnetization vector to different angles.
For a real NMR experiment there are going to be more than one resonance frequencies in the sample. If one makes the B1 field strong enough it is possible to bring the magnetization vector very close to the desired orientation, which means we can bring it close to the ideal case of an on resonance pulse.
The vector model can be used to understand simple NMR experiments.
== Chemical shifts ==
'''Chemical shifts''' are the units used in Protein NMR analysis graphs. Chemical shift correlates to the different radiofrequency electromagnetic pulses sent through the protein sample. Each molecule that exhibits spin properties show different distinct chemical shifts. Chemical shifts can be observed by sending nuclear magnetic energy onto the protein sample. The electron clouds that surround each spin nuclei create a local magnetic field that opposes the applied magnetic field. When the electromagnetic pulse runs through the sample alpha spin nuclei that are hit with the correct amount of energy to switch to beta spin do so and subsequently cause resonance. This resonance can then be recorded and is reported for the different frequencies applied to sample as parts per million (ppm chemical shifts). For example, when the nuclear magnetic field strength sends out a frequency of 1 ppm (parts per million), CH<sub>3</sub> reacts to it and exhibits beta spin behavior from which the spectroscopy catches this signal and records it.
Most hydrogen absorptions in 300-MHz 1H NMR fall within a range of 3000 Hz. Rather than record the exact frequency of each resonance, we measure it relative to an internal standard, the compound tetramethylsilane, (CH<sub>3</sub>)<sub>4</sub>Si. Its 12 equivalent hydrogens are shielded relative to those in most organic molecules, resulting in a resonance line conveniently removed from the usual spectral range.
A problem with these numbers, however, is that they vary with the strength of the applied magnetic field. Because field strength and resonance frequency are directly proportional, doubling or tripling the field strength will double or triple the distance (in hertz) of the observed peaks relative to (CH<sub>3</sub>)<sub>4</sub>Si. To make it easier to compare reported literature spectra, we standardize the measured frequency by dividing the distance to (CH<sub>3</sub>)<sub>4</sub>Si (in hertz) by the frequency of the spectrometer. This procedure yields a field-independent number, the chemical shift δ.
== NMR in Characterizing Organometallics ==
NMR spectra uses superconducting magnets to many metal nuclei. Carbon 13 NMR has become increasingly useful in facilitating due to its low natural abundance and low sensitivity for NMR experiment. The integration of NMR peaks of organometallic complexes can provide the ratio of atoms in different environments. Since the relaxation times of the carbon atoms vary in organometallics, a great deal of inaccuracy result from this. However it does have its advantages as well. For example, terminal carbonyl peaks are frequently in the range of 195 to 225ppm, which allows it to be easily distinguished from other ligands. The 13C chemical shift correspond with the strength of the CO bond. The stronger the bond, the smaller the chemical shift. 13C in cyclopentadienyl ligands have a wide range of chemical shifts in paramagnetic compounds whereas it's narrower for diamagnetic compounds.
== Nuclei Spin States ==
In NMR, certain atomic nuclei must be magnetic by nature in order for this technique to be used. However, only a certain number of isotopes have this magnetic characteristic called spin. An example is hydrogen. When an external magnetic field is applied, hydrogen's spinning proton generates a magnetic moment which can take either the α or β spin state. The energy difference between the two states is directly proportional to the amount of external magnetic field applied. The α state is aligned with the applied field and has lower energy than the β state. When a pulse of electromagnetic radiation is applied to the α state, it can be excited to the β state, thus a resonance will be obtained.
The NMR is only able to detect certain atoms and only certain isotopes. For example, it can detect the Hydrogen molecules with a mass of 1 amu, but not the other isotopes. Most commonly the Hydrogen and Carbon NMR's are used. The information that can be determined by the NMR is immense. In the case of the Hydrogen NMR, one can use a certain amount of knowledge from a table to determine what each peak corresponds to which group within your sample. Interpreting NMR's can also be a little tricky in that one must understand splitting patterns. For example, the carbon atom you may be examining may have only one hydrogen attached, however if attached to a methyl group, it will appear as a quartet.
==Shielding and Deshielding==
Protons in different chemical environments are shielded by different amounts. When a nucleus surrounded by electrons is exposed to a magnetic field of strength H<sub>0</sub>,these electrons move in such a way as to generate a small local magnetic field, h<sub>local</sub>, opposing H<sub>0</sub>. As a consequence, the total field strength near the hydrogen nucleus is reduced, and the nucleus is thus said to be shielded from the magnetic field strength by its electron cloud. The degree of shielding depends on the amount of electron density surrounding the nucleus. dding electrons increases shielding; their removal, consequently, would cause deshielding. Also, a proton is deshielded when the induced field reinforces the applied field. For example, the induced field can reinforce the applied field. As a result, these protons are deshielded and their chemical shifts are at a higher value of ppm.
==Coupling==
'''J-coupling''' arises from the interaction of different spin states through the chemical bonds of a molecule and results in the splitting of NMR signals. This coupling provides detailed information about the connectivity of atoms and the structure of a molecule.
Spin-spin slitting is given by the '''N+1 Rule''': 1) H that is neighbored by one H resonnate as a doublet.2) H that is neighbored by two set of equivalent Hs resonate as trplet. 3) H that is neighbored by three equivalents of hydrogens resonate as a quartet.
A multiplet can be shown when there is a mixture of couple patterns, some of which could be broken down to small parts (i.e. qd- quartet of doublet). But for the most part, if a coupling pattern shows complexity not easily countable by N+1 rule, such pattern is called a multiplet.
In addition, functional groups containing alcohol (-OH) such as alcohol, carboxylic acid have a broad band on NMR spectra. This is due to the fact that Hydrogens on alcohol can hydrogenbond easily, thus being able to couple in broad spectra than other H's. Thus just by looking at the type of the spectra (such as multiple peaks or broad peak), one can easily categorize the functional group to which the H is associated with.
The ratio of the splitting peaks is given by a mathematical mnemonic device called Pascal's triangle. Each number in this triangle is the sum of the two numbers closest to it in the line above. It is important to remember that nonequivalent nuclei mutually split one another. In other words, the observation of one split absorption necessitates the presence of another split signal in the spectrum. Moreover, the coupling constants for these pattern must be the same. Double and triple bond characteristic chemical environments show complex splitting peaks. An alkyne for example, can have hydrogen splitting patterns an extra adjacent carbon away. An alkene depending on where the hydrogen is located (cis or trans) to a relative chemical environment, can show a slightly distorted peak.
==Integration==
'''Integration''' is very useful in NMR spectrum in determining the structure of a molecule. The relative integrated intensity of a signal is proportional to the relative number of nuclei giving rise to that absorption. Normally, an NMR spectrum plot will tell you very complex integration numbers. However, integration doesn’t have to be exact. You can just divide each integration number by the smallest number in your NMR spectrum. The ratio will help you get a big picture of the relative number of H’s represented by a peak. Combining the chemical shifts and the peak integration, you might be able to determine the structure of a molecule by using the ''chemical shift table''.
Researchers usually use NMR to check if the product they made from a reaction is what they really want. So they don’t have to figure out the structure of a molecule by looking at a complex spectrum. They know what the spectrum should look like if the reaction works. By comparing the actual spectrum to the ideal one, they are able to verify the molecule they want is in the product. Solvent used is usually CD<sub>2</sub>Cl<sub>2</sub>, since D would not show up in a H NMR spectrum. Combine with chemical shifts, they can be used to determine structure.
== Proton NMR interpretation ==
To interpret proton NMR, it is important to know where each type of proton lies. Below is a list of types of proton and their chemical shift on NMR.
[[Image:Table HNMR.jpg|Proton NMR frequency]]
It is important to know that proton NMR peaks only indicate the presence of protons (H). It does not show other atoms like Carbon, Oxygen...etc. As mentioned in the above section, proton peaks shows spliting because of coupling by the neighbor protons. The integration of each peak is the amount of proton relative to other proton on the NMR. When solving structure from the H NMR, it is important to write down the chemical shift, integration and the split of each peak. Then base on the chemical shift of the peak, write down the possible functional group and structure. Lastly, arrange and connect each structure so that it matches the split and the integration of proton NMR. Below are examples of hand drawn proton NMR and also the detail instruction to interprete proton NMR.
=== Example ===
The interpretation of each proton NMR is given right below of each graph. Try not to look at the structure, and only look at the molecular formula and proton NMR to interpret the structure of the compound. Note that the examples given are the basic and simple compound. The NMR of protein structures is much more complex than these examples. The goal of these examples is to give you an idea how proton NMR are interpreted.
[[Image:1H NMR Ethyl Acetate Coupling shown - 2.png|Proton NMR]]
Base on the chemical shift of proton NMR, there should be a ketone functional group or a structure that contains a carbonyl group at peak around 2.0. The peak around 1.3 could be a primary or secondary alkyl group.
Now look at the splitting of the peaks at chemical shift 1.3 (C), the triplet (3 peaks) shows that the proton is probably split by 2 neighbor protons (base on the n+1 rule mention in integration section). If it is split only by 1 neighbor proton, then it would be a doublet (2 peaks). Next, look at the peak at chemical shift 2.0 (B). The singlet (single peak) means that this proton environment probably has no neighbor proton. The peak at chemical shift 4.2 (A) is a quadruplet (4 peaks). This means there are about 3 neighbor proton next to proton environment A. Since it is known that B has no proton right next to it, and A and C both has neighbor protons, it is safe to assume that proton environment A is right next to proton environment C, which could be a -CH2CH3.
The following possible structures deduced above are a ketone and an ethyl group.
{|class="wikitable"
|+ Splitting analysis
|-
!Substructure
|[[File:Methyl group.svg|100px]]
|[[File:Ethyl group.svg|150px]]
|-
!Splitting pattern
|Singlet
|Quartet and triplet
|-
!Analysis
| C with no neighboring H
| C with three neighboring H<br>C with two neighboring H
|}
Note that the there are two oxygen atoms from the molecular formula. One of the oxygen is included in ketone. The other oxygen must be binding onto one of these two structures. Take a look at peak A, the chemical shift is near 4.0, which means it might be connected to a heteroatom like oxygen. Place the oxygen next to the -CH2CH3 and connect the structure together, you will get ethyl acetate as indicated below the proton NMR. Notice that the proton B does not have any neighbor proton. Proton A is split into 4 peaks by proton C (n+1 rule, n = 3 neighbor protons). Proton C is split into 3 peaks by proton A (n = 2 neighbor protons). The CH2, secondary alkyl, base on the proton frequency table should be around the chemical shift ~1.2 ppm, but instead it is at ~4.2 ppm. The reason for this is that the CH2 is attached to oxygen a heteroatom, which is a electron withdrawing group. The result is that the chemical shift is pulled left field resulting in a chemical shift of 4.2 ppm. Another way to look at this is to assume there is an ester functional group at chemical shift of 4.2 ppm, and the primary alkyl group is attached to the ester.
The integration of the proton NMR also matches the structure well. The methyl CH3 next to the carbonyl group has 3 protons, and the primary alkyl next to the CH2 has 3 protons as well. This explains why peak B has the same height as peak C (same amount of protons). Peak A has the lowest height because it only has two protons.
[[Image:3-methoxyphenol NMR.jpg|proton NMR]]
This proton NMR example looks more complicated than the first one, but it is actually easier. One important information from this proton NMR is that there are peaks around 6.0~ 7.0 ppm (F,B,D,E). This always almost indicates the presence of aromatic ring. Noticed that there are about 4 group of peaks from 6.0 to 7.0 ppm? This means that there are four protons attach to 4 carbons on the aromatic ring. This leaves 2 carbons of the aromatic ring free to attach to two substituents. The position of these substituents is clearly an ortho and para position on the aromatic ring. The reason is that two different substituents on ortho and para position of the aromatic ring would give 4 proton environments. If there are only two proton environments around 6.0~ 8.0 ppm with the same integration (height), it means that the aromatic ring is probably symmetric on both sides with double para substituents. Now look at the peak (A) at 5.5 ppm. The peak is a broad peak instead of sharp peak like the rest. This means that the proton of this environment is attached to a heteroatom. The only heteroatom present in the sample base on the molecular formula given is an oxygen atom. This means that the proton is directly attached to oxygen, which would be a alcohol group -OH (Note that the proton on the alcohol group can have the chemical shift range from 0.5 to 5.0 ppm). It is important to remember that the proton that attached to a heteroatom is also known as exchangeable proton. Exchangeable proton sometimes do not show up on H NMR, so do not worry when an expected exchangeable peak doesn’t appear on HMNR.
The peak (C) at the chemical shift of ~3.9 ppm has the highest integration (height) and is a singlet. Usually when such a high singlet peak is observed around 3.9 ppm with oxygen in the molecular formula, there is a high chance that it is a ether group, -OCH3. Since there is no neighbor proton next to the CH3 of the ether, it is a singlet peak. In addition, the height of the peak is high compare to the other peak, which indicate a possibility of CH3 with at least 3 times more protons than other proton environment. Base on the interpretations above, these are the possible function groups:
[[Image:3-methoxyphenol NMR1.jpg|possible proton structures]]
Attach the alcohol group and the ether group in ortho- para position will result in the correct structure of the compound.
== Nuclear Overhauser Enhancement Spectroscopy (NOESY) ==
[[File:Noesy.jpg|thumb|NOESY Spectrum of Codeine. Each peak correlates to a proton.]]
'''NOESY''' is a NMR technique that uses the Nuclear Overhauser effect to help understand the tertiary structure of proteins and other large molecules. The nuclear Overhauser effect is the interaction of nuclei at short distances from each other. The extent of the effect is approximately 5 Angstroms. This is a better analysis of tertiary structure for proteins that do not form crystalline structures and need to be analyzed in solution. Like in NMR, a magnetic field is produced around the molecule and RF waves at different frequencies are produced to produce resonance. The resonance is produced when the nucleus reverses spin. Unlike normal NMR, the aim of NOESY is to determine the effect of the resonance of one nucleus on the other nuclei in the area. The graph that is produced gives you an idea of where the nuclei are in relation to each other.
The NOESY experiment reveals the distance of protons relative to one another. Protons very close to each other, (about 3 Angstroms apart) will produce a very large signal. The limit of detection is about 5-6 Angstroms apart, and will produce only a very weak signal.
The graph has diagonal dots correspond to the placement of the nuclei on the one dimensional NMR. There are dots out side of this diagonal spectrum. These dots show what nuclei are in close proximity of each other. If a line was drawn horizontally and vertically from the outlaying dots, the dots, on the diagonal spectrum, that lay on the lines would be in close proximity to each other. Using the information from the NMR and the NOESY a tertiary structure of the macromolecules could be formed. However, the resulting tertiary structure would contain a family of structures. This happened for three reasons. The first is the approximation of the distance between the nuclei. Second, there may not have been enough constraints to produce a singular structure. Thirdly, the protein is in solution, and the solution contains many proteins.
This technique is mainly used for hydrogen atoms, because they are the most abundant atom in biological systems and are also the simplest.
==Protein NMR==
An NMR machine is essentially a huge magnet. Many atoms are essentially little magnets. When placed inside an NMR machine, all the little magnets orient themselves to line up with the big magnet. By harnessing this law of physics, NMR spectroscopists are able to figure out physical, chemical, electronic, and structural information about molecules.
NMR relies on the interaction between an applied magnetic field and the natural “little magnets” in certain atomic nuclei. For protein structure determination, spectroscopists concentrate on the atoms that are most common in proteins: hydrogen, carbon, and nitrogen. What researchers seek to learn through NMR is how this chain of amino acids wraps and folds around itself to create the three-dimensional, active protein. Solving a protein structure using NMR is a series of experiments, each of which provides partial clues about the nature of the atoms in the sample molecule, such as how close two atoms are to each other, whether these atoms are physically bonded to each other, or where the atoms lie within the same amino acid. Other experiments show links between adjacent amino acids or reveal flexible regions in the protein. Each new set of experiments further refines possible structures until finally the scientists carefully select 10 to 20 solution that best represent their data and present the average as their final structure.
'''Sample Preparation for NMR'''
In order to study protein structure by NMR, highly purified samples of the protein of interest must be prepared. The protein can either be isolated from natural sources, or expressed in host organisms such as E. Coli through recombinant DNA techniques. The bacteria with the recombinant gene coding for a specific protein are grown in minimal media with 15NH4Cl being the only source of nitrogen for the bacteria, and 13C-glucose offering the only source of carbon for the bacteria to make proteins. This way, when the bacteria produce the protein of interest, these proteins are labeled with 15N and 13C, both of which are NMR active. The protein of interest is then purified through various protein purification techniques (See protein purification techniques). Finally, the protein, in an appropriate buffer, is loaded into an NMR tube and is ready to be placed in the NMR magnet.[[File:Figure 1.pdf|thumb|Figure 1. General scheme for protein structure determination by NMR in solution phase.]]
'''NMR Experiments'''
'''2D Experiments'''There are many different types of NMR experiments one can run to help to reveal information about the structure of the protein. The experiments usually differ in what correlations are detected. For example, a 2D [1H-1H]-NOESY experiment will reveal hydrogen atoms that are within 0.5 nm apart. Protons that exhibit this interaction will show up as a cross peak on the 2D spectrum (Figure 2).[[File:Figure 2.pdf|thumb|Figure 2. Simplified example of 2D [1H-1H]-NOESY NMR spectrum. The dots on the diagonal represent the 1D spectrum of the molecule. There are two protons that are being examined, one at 9 ppm and the other at 8 ppm. The presence of the cross peak (circled) reveals that these two protons are within 0.5 nm apart.]]
Taking this information, theoretically, the protons at 8 ppm and 9 ppm on the 1D spectrum could be assigned to a certain residue in the amino acid sequence. For example, if Ala1 is the point at 8 ppm and Ala54 is at 9 ppm, and there is a crosspeak present, then the observation of this NOE reveals a circular structure for this polypeptide chain (Figure 3). [[File:Figure 3.pdf|thumb|Figure 3. Circular structure of polypeptide chain revealed by presence of NOE on 2D NOESY spectrum.]]
Because proteins are much more complicated than this example above, the 2D NOESY spectrum is often cluttered and crosspeaks cannot be made out clearly because many of these points may stack on top of one another. Other experiments are required to reveal the necessary information to determine the 3D structure of the protein, such as 3D experiments.
'''3D Experiments'''
3D experiments use a third dimension to reveal peaks that may be stacked on top of one another in the 2D spectrum. An example is 3D 15N-correlated [1H-1H]-NOESY (Figure 4).
There are many other experiments to correlate different nuclei and their neighbors.
[[File:Figure 4.pdf|thumb|Figure 4. Example of 3D 15N [1H-1H] NOESY. The peaks that would be stacked on top of one another in the 2D [1H-1H] NOESY are now drawn out in the third dimension by relating its 15N chemical shifts. This cleans up the spectrum and helps in resonance assignments.]]
==Protein NMR Advantages==
NMR is a good method in trying to solve the structure of a protein and the continued unanswered protein folding problem. However it is not the only method as crystallography is also a possible method for determining protein structure. However, NMR has its advantages over crystallography.
One instance is that it uses molecules in solution, so it is not limited to those that crystallize well since crystallization is a very uncertain and time-consuming step in X-ray crystallography. In addition, some proteins do not readily crystallize. Furthermore, although structures present in crystallized proteins very closely represent those of proteins free of the constraints imposed by the crystalline environment, structures in solution can be sources of additional insights. NMR also makes it fairly easy to study properties of a molecule besides its structure such as the flexibility of the molecule and how it interacts with other molecules. With crystallography, it is either impossible to study these aspects or it requires an entirely new crystal.
==Protein NMR Disadvantages==
Most NMR spectroscopists focus on molecules no larger than 20-30 kilodaltons. X-ray crystallographers have solved structures upto 2,500 kilodaltons.
==NMR in Real Life==
The 15 carbon compound viniferone found in grape seeds was isolated in 2004. Viniferone falls into a group of substances, grape seed, that are very active against radicals and oxidative stress. There was very little recovery of viniferone from an abundance of grape seeds (~40 mg of viniferone from 10.5 kg of grape seeds), so precautions had to be taken in the techniques used to obtain its structure. Most tests would destroy the minuscule amount proanthocyanidins t of viniferone obtained, so a combination of spectroscopic techniques were utilized (including NMR) to obtain viniferone's structure. Obtaining the <sup>1</sup>H and <sup>13</sup>C NMR data was critical in determining the structure of Viniferone. The variety of absorption signals at various chemical shifts helped determine the presence of alkenes and benzene rings. Correlation spectroscopy and eventually X-ray crystallography were used to verify the structural arrangement of Viniferone.<ref name ="Schore">Schore, Neil E. (2011). Organic Chemistry Structure and Function 6th Edition. W. H. Freeman</ref>
== References ==
{{Reflist|2}}
If you would like to learn more about interpreting NMR peaks, I highly suggest this website. [http://www.wfu.edu/~ylwong/chem/nmr/h1/ http://www.wfu.edu/~ylwong/chem/nmr/h1/]
<br> Berg, Jeremy M., Lubert Stryer, and John L. Tymoczko. Biochemistry. 6th ed. Boston: W. H. Freeman & Company, 2006. 98-101.
<br> Shriner, Christine K. F. Hermann, Terence C. Morrill, David Y. Curtin, Reynold C. Fuson. The Systematic Identification of Organic Compounds. 8th ed. U.S.A. John Wiley & Sons, Inc. 2004. 136-142.
<br> Vollhardt, K. Peter C., Schore, Neil E. Organic Chemistry - Structure and Function. 5th ed. New York: W. H. Freeman & Company, 2005. 398-432.
<br> Keeler, James. Understanding NMR Spectroscopy. West Sussex, England. John Wiley & Sons. 51-77.
<br>Clore, Marius G., Gronenborn, Angela M. “Chapter 34: Structures of Larger Proteins, Protein-Ligand, and Protein-DNA Complexes by Multidimensional Heteronuclear NMR.” Multidimensional NMR Methods for the Solution State. United Kingdom. John Wiley & Sons Ltd.
<br>Wuthrich, Kurt. “Chapter 33: Biological Macromolecules: Structure Determination in Solution.” Multidimensional NMR Methods for the Solution State. United Kingdom. John Wiley & Sons Ltd.
<br> National Institutes of Health, National Institute of General Medical Sciences, New York, 2007, 29-30, http://www.nigms.nih.gov.
{{BookCat}}
[1]"Kurt Wüthrich - Nobel Lecture". Nobelprize.org. 25 Oct 2010 http://nobelprize.org/nobel_prizes/chemistry/laureates/2002/wuthrich-lecture.html
huq4ltdvv4omj1n0ngoubh2f1mpwvno
4676252
4676244
2026-10-15T12:30:43Z
DMacks
94753
/* General Information */ Image was terrible quality and was also incorrect (leaning to the right; the nature of FID is that the function can never back-track along the x-axis)
4676252
wikitext
text/x-wiki
NMM spectroscopy is unique in being able to reveal the atomic structure of macromolecules in solution, provided that highly concentrated solution can be obtained. This technique depends on the fact that certain atomic nuclei are intrinsically magnetic. The chemical shift of nuclei depends on their local environment. Furthermore, the spins of neighboring nuclei interact with each other in ways that provide definitive structural information. This information can be used to determine complete three-dimensional structures of proteins.
== General Information ==
'''Nuclear Magnetic Resonance Spectroscopy (NMR)''' is an analytical technique which exploits the fact that certain nuclei possess a property called spin (I). NMR spectroscopy is possible due to the Zeeman Effect discovered first in the 1890s. The structures of proteins can be determined by NMR by first preparing the isotopically labeled samples. In the magnet, the "natural magnets" in the atoms of the sample line up with the magnetic field of the NMR magnet. Then, the sample is exposed to a series of radio wave pulses to disrupt the magnetic equilibrium of the atoms. The reaction of these nuclei can be observed to assess their chemical nature specifically, their chemical shift properties. Sets of experiments can be conducted to refine possible structures and present the average of the experiments as the final structure. It can have advantages over X-ray crystallography because the samples of proteins can be in solution rather than crystallized form and other properties of the sample protein, such as flexibility and interactions, can be determined while X-ray crystallography only reveals the structure of the protein.
It is the splitting of atomic energy levels when the atoms are placed in a magnetic field. This effect was later found to occur as a result of nuclear spin. In 1924, Wolfgang Pauli first suggested the theoretical basis of NMR when he concluded that some atomic nuclei should possess nuclear spin and these nuclei would split into degenerate energy levels when placed in a magnetic field. These nuclei have a magnetic moment, in and of themselves, which is called spin. Nuclei that possess spin are said to be NMR active. Some NMR active nuclei can be seen in Table 1, with italicized nuclei being those commonly studied in biological molecules. [[Image:NMR Active nuclei.jpg|500px|thumb|Table 1 NMR active nuclei]]
Separately, Bolch at Stanford and Purcell at Harvard in 1946 each translated the Zeeman effect into the first NMR spectrum. In 1949, Proctor and Yu at Stanford measured the first chemical shift and spin couplings. Initially, commercial NMR spectrometers were continuous wave type and were only able to detect the most sensitive nuclei, 1H & 19F.
NMR ‘active’ nuclei are active if the nuclear spin, I, is non zero.
To determine spin of nuclei:
Mass # is even and # neutrons is even, I=0, therefore no spin
Mass # is even and # neutrons is odd, I= integer, therefore spin
Mass # is odd and # neutrons is even or odd, I=half integer, therefore spin
The cause of spin can be visualized with the following analogy. A rotating charged particle (e.g. hydrogen nucleus aka proton) will produce a magnetic field perpendicular to the direction of rotation which is analogous to the magnetic field of a bar magnet, as seen in Figure 1.
[[Image:Spinning proton magnetic field lines.jpg|500px|thumb|Figure 1]]
Absent an external magnetic field (B¬0) these active nuclei are oriented in random directions, but in the presence of an external magnetic field (B¬0) these nuclei orient themselves either with or against the field, as seen in Figure 2.
[[Image:Nuclei in and out of magnetic field.jpg|500px|thumb|Figure 2]]
Nuclei are dispersed between states of different energies. The different energy levels are induced by the presence of the external magnetic field (B¬0). (For spin ½ nuclei two orientations are possible, with the higher energy orientation being ‘β spin state’ and the lower energy orientation being ‘α spin state’.) This is evident in the following equation where E=energy, h=Planck’s constant, ν=frequency, γ=gyromagnetic ratio (nucleus dependent), B0= external magnetic field:
ΔE= h ν = γ B0
To see this graphically see Figure 3.
[[Image:Magnetic field induced energy levels.jpg|500px|thumb|Figure 3]]
These induced energy level differences are what allow the use of NMR. At equilibrium, nuclei will occupy both levels of energy, low and high. However, according to the Maxwell-Boltzmann Distribution, the lower energy level will be occupied by a greater number of nuclei. This difference in the number of nuclei, between low and high energy levels, is what NMR exploits. The energy required to cause a spin flip, transition from low to high energy state, corresponds to the radio frequency range of the electromagnetic spectrum.
ΔE= h ν
A nucleus will only flip spins, absorb energy, when the frequency of electromagnetic radiation just matches the change in energy, ΔE. This is called the point of resonance. Nuclei will have differing resonant frequencies based on their local electronic environment. This can be seen in “A handmade example of a proton (1H) NMR spectrum.” All nuclei under observation are irradiated with radio waves to the higher energy state and are then allowed to decay back to the lower energy state. This decay is what is observed. A free induction decay signal is collected as the nuclei fall back to the lower energy state, Figure 4 depicts a generic FID.
[[File:Nmr fid good shim EN.svg|500px|thumb|Figure 4]]
This FID is then subjected to a Fourier transform to convert from the time domain to the frequency domain, seen in Figure 5.
[[Image:NMR spectrum generic.jpg|500px|thumb|Figure 5]]
A change in the magnitude of the magnetic field will change the resonant frequency of the nucleus. Therefore, in order to compare spectra between instruments with varying size magnetic strength it is necessary to convert from frequency to parts per million, ppm. This can be done with the equation seen in Figure 6.
[[Image:Frequency to ppm.jpg|500px|thumb|Figure 6]]
With the arrival of Fourier Transform instruments in the 1970s it became possible to acquire spectra of nuclei that are not naturally abundant, such as 13C which is only 1.1% naturally occurring. This requires the acquisition of multiple spectra and adding them together to get a greater sensitivity. The signal to noise ratio (S/N) will increase as acquisitions increase, because the signal magnitude increases linearly with acquisition number while the noise magnitude increases as the square of the number acquisitions. So, the S/N will increase as the square of the number of acquisitions as seen in Figure 7.
[[Image:Signal to noise.jpg|500px|thumb|Figure 7]]
The Nobel Prize in Chemistry 2002 went partly to Kurt Wuthrich for “NMR Studies of Structure and Function of Biological Macromolecules,”[1] so NMR is important to structural biochemistry. Table 2 lists Nobel prizes awarded for discoveries related to NMR spectroscopy.
[[Image:NMR Nobel prizes.jpg|500px|thumb|Table 2]]
[[Image:nmr.jpg|500px|thumb|A handmade example of a proton (<sup>1</sup>H) NMR spectrum]]
NMR is a powerful technique that can be used to determine the structure of [[Structural Biochemistry/Proteins|proteins]] in highly concentrated solution, by analyzing the relative positions of certain atoms (Shriner 136). Protein NMR exploits the absence of zero net nuclear spin of the most abundant isotopes of carbon and oxygen (12 and 16) as well as the abundant isotope of Nitrogen (14) with a net nuclear spin of 1. NMR cannot be performed on an atom with zero net nuclear spin. Since there are many distinct nuclei present in a single protein much overlap is expected in the chemical shifts produced through the NMR analysis therefore a multidimensional approach is applied. Magnetization is applied to the protein and nuclei through electromagnetic pulses that can magnetize nuclei in two ways. The first involving magnetization through nuclei bonding and the second through open space. Each approach offers a different way to analyze the protein such as the first approach allowing for distinct nuclei to be targeted whereas the second approach allowing for structure calculation distance restraints and targeting an unlabeled protein.
Intrinsically magnetic nuclei display spinning properties that produce a magnetic moment. When an external magnetic field is applied to the system the magnetic moment can adopt either an alpha or beta state. The strength of the magnetic field determines the proportionality of alpha to beta with a tendency to favor alpha as it is aligned with the field and has a lower energy. By supplying an electromagnetic pulse alpha spin nuclei will change to beta and produce resonance. By keeping a constant magnetic field on the system and adjusting the frequency of the electromagnetic pulses a spectrum of resonance can be obtained.
Currently, NMR spectrometers use the Fourier transform method of pulse radiation. To change the nuclei in alpha state to beta, a strong pulse of radiation is used. Then the pulse of radiation is removed and the nuclei go back to their original alpha state, giving a decay signal. This signal is converted by the computer to a frequency domain spectrum in a very fast way. By storing many signals a more intense spectrum is produced. (Shriner 136)
Electrons around a magnetic nucleus produces a local magnetic field opposite to the applied magnetic field. Magnetic nuclei can absorb the electromagnetic pulses at specific frequencies coined "chemical shifts" (signal positions) expressed in parts per million (ppm). These chemical shifts are designated relative to a standard compound such as a derivative of tetramethylsilane (TMS) (CH<sub>3</sub>)<sub>4</sub>Si (which has a chemical shift of 0.0) that is soluble in water. NMR spectra that are produced through this assay can be analyzed, and with the combination of a multidimensional analysis the structure of the protein can be determined.
When an atomic nuclei is influenced by a magnetic field, it creates a magnetic moment which will give an orientation of spinning to itself. Different orientation of spinning, spin states, exist in different states of energy - alpha-state and beta-state - where alpha-state is found to be more stable with a lower energy through experiments as it has the same direction with the magnetic field. In order to transits alpha-state to beta-state (excited state), pulse of electromagnetic radiation is needed to increase the frequency of the electromagnetic radiation (through irradiation) to have the spinning nucleus to overcome the energy barrier and change its orientation. (See [http://en.wikipedia.org/wiki/Bohr_model Bohr Model] for more information) Thus, resonance will be obtained. It was discovered by American physicist Edward Mills Purcell and physicist Felix Bloch from Switzerland in 1946.
The difference between energy levels split by a magnetic field corresponds to the energy of radio waves. So, the electronics required for the NMR spectrometer weren’t developed until WWII when the government invested heavily into radar technology. Radar is simply the use of radio waves to detect location and direction of moving objects. Better frequency synthesizers, amplifiers, receivers and signal processors all contributed to advancements in the field of NMR spectroscopy.
The components of a NMR Spectrometer can be seen in Figure 8.
[[Image:NMR Spectrometer.jpg|500px|thumb|right|Figure 8]]
Some common 2D experiments can be seen in Table 3:
{| style="clear:none;float:left;margin:1em 0 1em 1em"
|-
! Common 20 experiments <sup>(Table 3)</sup>
|-
| '''COSY''' || '''Correlated Spectroscopy'''<br />Through bond H-H correlation
|-
| '''TOCSY''' || '''Total Correlation Spectroscopy'''<br />Extended through bond H-H correlation
|-
| '''1D NOE''' || '''Nuclear Overhauser Effect Spectroscopy'''<br />H-H through space correlation
|-
| '''NOESY''' || '''Nuclear Overhauser Effect Spectroscopy'''<br />H-H through space correlation
|-
| '''ROESY''' || '''Rotating Frame Overhauser Effect Spectroscopy'''<br />Similar to NOESY
|}<br style="clear:both"/>
==Magnets used for NMR==
The magnets used for NMR are very strong. Those used for high resolution protein structure determination range from 500 megahertz to 900 megahertz and generate magnetic fields thousands of times stronger than the Earth’s. Although the sample is exposed to a strong magnetic field, very little magnetic force gets out of the machine.
NMR magnets are superconductors, so they must be cooled with liquid helium, which is kept at 4 Kelvin. Liquid nitrogen, which is kept at 77 Kelvin, helps keep the liquid helium cold.
== Appropriate Isotopes ==
Only certain isotopes are capable for use in NMR. The most common isotope that is used in NMR is Hydrogen-1 (Proton NMR). Other commonly used isotopes are Carbon-13 and Nitrogen-15.
== Vector Model ==
The Vector Model only holds for uncoupled spins. Nuclei that are active under NMR spectroscopy have associated with them a nuclear spin magnetic moment, which means that these nuclei produce a small magnetic field. When these nuclei are placed in a magnetic field the energy of the interaction depends on the angle between the field and the magnetic moment. The highest energy interaction is when the magnetic field and the magnetic moment point in opposite directions, and the lowest energy interaction is when the magnetic field and magnetic moment point in the same direction.
Before a magnetic field is applied to a population of nuclei the magnetic moments of these nuclei are oriented randomly due to random thermal motion. After a magnetic field is applied one has to wait for the spins to come to equilibrium, a process known as relaxation. Pointing in the direction of the magnetic field is slightly energetically favored, and hence only a very small number of spins will do so, forming the bulk magnetization vector. The sample is hence magnetized. At equilibrium the bulk magnetization vector will point in the direction of the magnetic field (we will assume this is the z direction) and will be stationery. If the magnetization vector was tilted away from the axis it would precess at the Larmor frequency (-gyromagnetic ratio * magnetic field).
The purpose of a pulse is to quickly change the direction of the magnetization vector. This can be done by creating a much weaker magnetic field in the direction one desires, but allowing it to oscillate at the aforementioned Larmor frequency. This will result in the magnetization vector pointing in the direction one desires. This occurs because when the B1 field (the weaker field) oscillates near the Larmor Frequency, the result is that the strength of the B0 field (the stronger field in the z direction) appears to be reduced. Hence the resulting magnetic field (the effective field) can point very close to the direction of the B1 field if the B1 field is much larger than the reduced field.
An on resonance pulse involves changing the direction of the magnetization vector by applying the B1 field in a certain direction for a specific time. The angle through which the magnetization vector is rotated is given as the product of the frequency of the effective field and the time the pulse is applied. By applying different times one can rotate the magnetization vector to different angles.
For a real NMR experiment there are going to be more than one resonance frequencies in the sample. If one makes the B1 field strong enough it is possible to bring the magnetization vector very close to the desired orientation, which means we can bring it close to the ideal case of an on resonance pulse.
The vector model can be used to understand simple NMR experiments.
== Chemical shifts ==
'''Chemical shifts''' are the units used in Protein NMR analysis graphs. Chemical shift correlates to the different radiofrequency electromagnetic pulses sent through the protein sample. Each molecule that exhibits spin properties show different distinct chemical shifts. Chemical shifts can be observed by sending nuclear magnetic energy onto the protein sample. The electron clouds that surround each spin nuclei create a local magnetic field that opposes the applied magnetic field. When the electromagnetic pulse runs through the sample alpha spin nuclei that are hit with the correct amount of energy to switch to beta spin do so and subsequently cause resonance. This resonance can then be recorded and is reported for the different frequencies applied to sample as parts per million (ppm chemical shifts). For example, when the nuclear magnetic field strength sends out a frequency of 1 ppm (parts per million), CH<sub>3</sub> reacts to it and exhibits beta spin behavior from which the spectroscopy catches this signal and records it.
Most hydrogen absorptions in 300-MHz 1H NMR fall within a range of 3000 Hz. Rather than record the exact frequency of each resonance, we measure it relative to an internal standard, the compound tetramethylsilane, (CH<sub>3</sub>)<sub>4</sub>Si. Its 12 equivalent hydrogens are shielded relative to those in most organic molecules, resulting in a resonance line conveniently removed from the usual spectral range.
A problem with these numbers, however, is that they vary with the strength of the applied magnetic field. Because field strength and resonance frequency are directly proportional, doubling or tripling the field strength will double or triple the distance (in hertz) of the observed peaks relative to (CH<sub>3</sub>)<sub>4</sub>Si. To make it easier to compare reported literature spectra, we standardize the measured frequency by dividing the distance to (CH<sub>3</sub>)<sub>4</sub>Si (in hertz) by the frequency of the spectrometer. This procedure yields a field-independent number, the chemical shift δ.
== NMR in Characterizing Organometallics ==
NMR spectra uses superconducting magnets to many metal nuclei. Carbon 13 NMR has become increasingly useful in facilitating due to its low natural abundance and low sensitivity for NMR experiment. The integration of NMR peaks of organometallic complexes can provide the ratio of atoms in different environments. Since the relaxation times of the carbon atoms vary in organometallics, a great deal of inaccuracy result from this. However it does have its advantages as well. For example, terminal carbonyl peaks are frequently in the range of 195 to 225ppm, which allows it to be easily distinguished from other ligands. The 13C chemical shift correspond with the strength of the CO bond. The stronger the bond, the smaller the chemical shift. 13C in cyclopentadienyl ligands have a wide range of chemical shifts in paramagnetic compounds whereas it's narrower for diamagnetic compounds.
== Nuclei Spin States ==
In NMR, certain atomic nuclei must be magnetic by nature in order for this technique to be used. However, only a certain number of isotopes have this magnetic characteristic called spin. An example is hydrogen. When an external magnetic field is applied, hydrogen's spinning proton generates a magnetic moment which can take either the α or β spin state. The energy difference between the two states is directly proportional to the amount of external magnetic field applied. The α state is aligned with the applied field and has lower energy than the β state. When a pulse of electromagnetic radiation is applied to the α state, it can be excited to the β state, thus a resonance will be obtained.
The NMR is only able to detect certain atoms and only certain isotopes. For example, it can detect the Hydrogen molecules with a mass of 1 amu, but not the other isotopes. Most commonly the Hydrogen and Carbon NMR's are used. The information that can be determined by the NMR is immense. In the case of the Hydrogen NMR, one can use a certain amount of knowledge from a table to determine what each peak corresponds to which group within your sample. Interpreting NMR's can also be a little tricky in that one must understand splitting patterns. For example, the carbon atom you may be examining may have only one hydrogen attached, however if attached to a methyl group, it will appear as a quartet.
==Shielding and Deshielding==
Protons in different chemical environments are shielded by different amounts. When a nucleus surrounded by electrons is exposed to a magnetic field of strength H<sub>0</sub>,these electrons move in such a way as to generate a small local magnetic field, h<sub>local</sub>, opposing H<sub>0</sub>. As a consequence, the total field strength near the hydrogen nucleus is reduced, and the nucleus is thus said to be shielded from the magnetic field strength by its electron cloud. The degree of shielding depends on the amount of electron density surrounding the nucleus. dding electrons increases shielding; their removal, consequently, would cause deshielding. Also, a proton is deshielded when the induced field reinforces the applied field. For example, the induced field can reinforce the applied field. As a result, these protons are deshielded and their chemical shifts are at a higher value of ppm.
==Coupling==
'''J-coupling''' arises from the interaction of different spin states through the chemical bonds of a molecule and results in the splitting of NMR signals. This coupling provides detailed information about the connectivity of atoms and the structure of a molecule.
Spin-spin slitting is given by the '''N+1 Rule''': 1) H that is neighbored by one H resonnate as a doublet.2) H that is neighbored by two set of equivalent Hs resonate as trplet. 3) H that is neighbored by three equivalents of hydrogens resonate as a quartet.
A multiplet can be shown when there is a mixture of couple patterns, some of which could be broken down to small parts (i.e. qd- quartet of doublet). But for the most part, if a coupling pattern shows complexity not easily countable by N+1 rule, such pattern is called a multiplet.
In addition, functional groups containing alcohol (-OH) such as alcohol, carboxylic acid have a broad band on NMR spectra. This is due to the fact that Hydrogens on alcohol can hydrogenbond easily, thus being able to couple in broad spectra than other H's. Thus just by looking at the type of the spectra (such as multiple peaks or broad peak), one can easily categorize the functional group to which the H is associated with.
The ratio of the splitting peaks is given by a mathematical mnemonic device called Pascal's triangle. Each number in this triangle is the sum of the two numbers closest to it in the line above. It is important to remember that nonequivalent nuclei mutually split one another. In other words, the observation of one split absorption necessitates the presence of another split signal in the spectrum. Moreover, the coupling constants for these pattern must be the same. Double and triple bond characteristic chemical environments show complex splitting peaks. An alkyne for example, can have hydrogen splitting patterns an extra adjacent carbon away. An alkene depending on where the hydrogen is located (cis or trans) to a relative chemical environment, can show a slightly distorted peak.
==Integration==
'''Integration''' is very useful in NMR spectrum in determining the structure of a molecule. The relative integrated intensity of a signal is proportional to the relative number of nuclei giving rise to that absorption. Normally, an NMR spectrum plot will tell you very complex integration numbers. However, integration doesn’t have to be exact. You can just divide each integration number by the smallest number in your NMR spectrum. The ratio will help you get a big picture of the relative number of H’s represented by a peak. Combining the chemical shifts and the peak integration, you might be able to determine the structure of a molecule by using the ''chemical shift table''.
Researchers usually use NMR to check if the product they made from a reaction is what they really want. So they don’t have to figure out the structure of a molecule by looking at a complex spectrum. They know what the spectrum should look like if the reaction works. By comparing the actual spectrum to the ideal one, they are able to verify the molecule they want is in the product. Solvent used is usually CD<sub>2</sub>Cl<sub>2</sub>, since D would not show up in a H NMR spectrum. Combine with chemical shifts, they can be used to determine structure.
== Proton NMR interpretation ==
To interpret proton NMR, it is important to know where each type of proton lies. Below is a list of types of proton and their chemical shift on NMR.
[[Image:Table HNMR.jpg|Proton NMR frequency]]
It is important to know that proton NMR peaks only indicate the presence of protons (H). It does not show other atoms like Carbon, Oxygen...etc. As mentioned in the above section, proton peaks shows spliting because of coupling by the neighbor protons. The integration of each peak is the amount of proton relative to other proton on the NMR. When solving structure from the H NMR, it is important to write down the chemical shift, integration and the split of each peak. Then base on the chemical shift of the peak, write down the possible functional group and structure. Lastly, arrange and connect each structure so that it matches the split and the integration of proton NMR. Below are examples of hand drawn proton NMR and also the detail instruction to interprete proton NMR.
=== Example ===
The interpretation of each proton NMR is given right below of each graph. Try not to look at the structure, and only look at the molecular formula and proton NMR to interpret the structure of the compound. Note that the examples given are the basic and simple compound. The NMR of protein structures is much more complex than these examples. The goal of these examples is to give you an idea how proton NMR are interpreted.
[[Image:1H NMR Ethyl Acetate Coupling shown - 2.png|Proton NMR]]
Base on the chemical shift of proton NMR, there should be a ketone functional group or a structure that contains a carbonyl group at peak around 2.0. The peak around 1.3 could be a primary or secondary alkyl group.
Now look at the splitting of the peaks at chemical shift 1.3 (C), the triplet (3 peaks) shows that the proton is probably split by 2 neighbor protons (base on the n+1 rule mention in integration section). If it is split only by 1 neighbor proton, then it would be a doublet (2 peaks). Next, look at the peak at chemical shift 2.0 (B). The singlet (single peak) means that this proton environment probably has no neighbor proton. The peak at chemical shift 4.2 (A) is a quadruplet (4 peaks). This means there are about 3 neighbor proton next to proton environment A. Since it is known that B has no proton right next to it, and A and C both has neighbor protons, it is safe to assume that proton environment A is right next to proton environment C, which could be a -CH2CH3.
The following possible structures deduced above are a ketone and an ethyl group.
{|class="wikitable"
|+ Splitting analysis
|-
!Substructure
|[[File:Methyl group.svg|100px]]
|[[File:Ethyl group.svg|150px]]
|-
!Splitting pattern
|Singlet
|Quartet and triplet
|-
!Analysis
| C with no neighboring H
| C with three neighboring H<br>C with two neighboring H
|}
Note that the there are two oxygen atoms from the molecular formula. One of the oxygen is included in ketone. The other oxygen must be binding onto one of these two structures. Take a look at peak A, the chemical shift is near 4.0, which means it might be connected to a heteroatom like oxygen. Place the oxygen next to the -CH2CH3 and connect the structure together, you will get ethyl acetate as indicated below the proton NMR. Notice that the proton B does not have any neighbor proton. Proton A is split into 4 peaks by proton C (n+1 rule, n = 3 neighbor protons). Proton C is split into 3 peaks by proton A (n = 2 neighbor protons). The CH2, secondary alkyl, base on the proton frequency table should be around the chemical shift ~1.2 ppm, but instead it is at ~4.2 ppm. The reason for this is that the CH2 is attached to oxygen a heteroatom, which is a electron withdrawing group. The result is that the chemical shift is pulled left field resulting in a chemical shift of 4.2 ppm. Another way to look at this is to assume there is an ester functional group at chemical shift of 4.2 ppm, and the primary alkyl group is attached to the ester.
The integration of the proton NMR also matches the structure well. The methyl CH3 next to the carbonyl group has 3 protons, and the primary alkyl next to the CH2 has 3 protons as well. This explains why peak B has the same height as peak C (same amount of protons). Peak A has the lowest height because it only has two protons.
[[Image:3-methoxyphenol NMR.jpg|proton NMR]]
This proton NMR example looks more complicated than the first one, but it is actually easier. One important information from this proton NMR is that there are peaks around 6.0~ 7.0 ppm (F,B,D,E). This always almost indicates the presence of aromatic ring. Noticed that there are about 4 group of peaks from 6.0 to 7.0 ppm? This means that there are four protons attach to 4 carbons on the aromatic ring. This leaves 2 carbons of the aromatic ring free to attach to two substituents. The position of these substituents is clearly an ortho and para position on the aromatic ring. The reason is that two different substituents on ortho and para position of the aromatic ring would give 4 proton environments. If there are only two proton environments around 6.0~ 8.0 ppm with the same integration (height), it means that the aromatic ring is probably symmetric on both sides with double para substituents. Now look at the peak (A) at 5.5 ppm. The peak is a broad peak instead of sharp peak like the rest. This means that the proton of this environment is attached to a heteroatom. The only heteroatom present in the sample base on the molecular formula given is an oxygen atom. This means that the proton is directly attached to oxygen, which would be a alcohol group -OH (Note that the proton on the alcohol group can have the chemical shift range from 0.5 to 5.0 ppm). It is important to remember that the proton that attached to a heteroatom is also known as exchangeable proton. Exchangeable proton sometimes do not show up on H NMR, so do not worry when an expected exchangeable peak doesn’t appear on HMNR.
The peak (C) at the chemical shift of ~3.9 ppm has the highest integration (height) and is a singlet. Usually when such a high singlet peak is observed around 3.9 ppm with oxygen in the molecular formula, there is a high chance that it is a ether group, -OCH3. Since there is no neighbor proton next to the CH3 of the ether, it is a singlet peak. In addition, the height of the peak is high compare to the other peak, which indicate a possibility of CH3 with at least 3 times more protons than other proton environment. Base on the interpretations above, these are the possible function groups:
[[Image:3-methoxyphenol NMR1.jpg|possible proton structures]]
Attach the alcohol group and the ether group in ortho- para position will result in the correct structure of the compound.
== Nuclear Overhauser Enhancement Spectroscopy (NOESY) ==
[[File:Noesy.jpg|thumb|NOESY Spectrum of Codeine. Each peak correlates to a proton.]]
'''NOESY''' is a NMR technique that uses the Nuclear Overhauser effect to help understand the tertiary structure of proteins and other large molecules. The nuclear Overhauser effect is the interaction of nuclei at short distances from each other. The extent of the effect is approximately 5 Angstroms. This is a better analysis of tertiary structure for proteins that do not form crystalline structures and need to be analyzed in solution. Like in NMR, a magnetic field is produced around the molecule and RF waves at different frequencies are produced to produce resonance. The resonance is produced when the nucleus reverses spin. Unlike normal NMR, the aim of NOESY is to determine the effect of the resonance of one nucleus on the other nuclei in the area. The graph that is produced gives you an idea of where the nuclei are in relation to each other.
The NOESY experiment reveals the distance of protons relative to one another. Protons very close to each other, (about 3 Angstroms apart) will produce a very large signal. The limit of detection is about 5-6 Angstroms apart, and will produce only a very weak signal.
The graph has diagonal dots correspond to the placement of the nuclei on the one dimensional NMR. There are dots out side of this diagonal spectrum. These dots show what nuclei are in close proximity of each other. If a line was drawn horizontally and vertically from the outlaying dots, the dots, on the diagonal spectrum, that lay on the lines would be in close proximity to each other. Using the information from the NMR and the NOESY a tertiary structure of the macromolecules could be formed. However, the resulting tertiary structure would contain a family of structures. This happened for three reasons. The first is the approximation of the distance between the nuclei. Second, there may not have been enough constraints to produce a singular structure. Thirdly, the protein is in solution, and the solution contains many proteins.
This technique is mainly used for hydrogen atoms, because they are the most abundant atom in biological systems and are also the simplest.
==Protein NMR==
An NMR machine is essentially a huge magnet. Many atoms are essentially little magnets. When placed inside an NMR machine, all the little magnets orient themselves to line up with the big magnet. By harnessing this law of physics, NMR spectroscopists are able to figure out physical, chemical, electronic, and structural information about molecules.
NMR relies on the interaction between an applied magnetic field and the natural “little magnets” in certain atomic nuclei. For protein structure determination, spectroscopists concentrate on the atoms that are most common in proteins: hydrogen, carbon, and nitrogen. What researchers seek to learn through NMR is how this chain of amino acids wraps and folds around itself to create the three-dimensional, active protein. Solving a protein structure using NMR is a series of experiments, each of which provides partial clues about the nature of the atoms in the sample molecule, such as how close two atoms are to each other, whether these atoms are physically bonded to each other, or where the atoms lie within the same amino acid. Other experiments show links between adjacent amino acids or reveal flexible regions in the protein. Each new set of experiments further refines possible structures until finally the scientists carefully select 10 to 20 solution that best represent their data and present the average as their final structure.
'''Sample Preparation for NMR'''
In order to study protein structure by NMR, highly purified samples of the protein of interest must be prepared. The protein can either be isolated from natural sources, or expressed in host organisms such as E. Coli through recombinant DNA techniques. The bacteria with the recombinant gene coding for a specific protein are grown in minimal media with 15NH4Cl being the only source of nitrogen for the bacteria, and 13C-glucose offering the only source of carbon for the bacteria to make proteins. This way, when the bacteria produce the protein of interest, these proteins are labeled with 15N and 13C, both of which are NMR active. The protein of interest is then purified through various protein purification techniques (See protein purification techniques). Finally, the protein, in an appropriate buffer, is loaded into an NMR tube and is ready to be placed in the NMR magnet.[[File:Figure 1.pdf|thumb|Figure 1. General scheme for protein structure determination by NMR in solution phase.]]
'''NMR Experiments'''
'''2D Experiments'''There are many different types of NMR experiments one can run to help to reveal information about the structure of the protein. The experiments usually differ in what correlations are detected. For example, a 2D [1H-1H]-NOESY experiment will reveal hydrogen atoms that are within 0.5 nm apart. Protons that exhibit this interaction will show up as a cross peak on the 2D spectrum (Figure 2).[[File:Figure 2.pdf|thumb|Figure 2. Simplified example of 2D [1H-1H]-NOESY NMR spectrum. The dots on the diagonal represent the 1D spectrum of the molecule. There are two protons that are being examined, one at 9 ppm and the other at 8 ppm. The presence of the cross peak (circled) reveals that these two protons are within 0.5 nm apart.]]
Taking this information, theoretically, the protons at 8 ppm and 9 ppm on the 1D spectrum could be assigned to a certain residue in the amino acid sequence. For example, if Ala1 is the point at 8 ppm and Ala54 is at 9 ppm, and there is a crosspeak present, then the observation of this NOE reveals a circular structure for this polypeptide chain (Figure 3). [[File:Figure 3.pdf|thumb|Figure 3. Circular structure of polypeptide chain revealed by presence of NOE on 2D NOESY spectrum.]]
Because proteins are much more complicated than this example above, the 2D NOESY spectrum is often cluttered and crosspeaks cannot be made out clearly because many of these points may stack on top of one another. Other experiments are required to reveal the necessary information to determine the 3D structure of the protein, such as 3D experiments.
'''3D Experiments'''
3D experiments use a third dimension to reveal peaks that may be stacked on top of one another in the 2D spectrum. An example is 3D 15N-correlated [1H-1H]-NOESY (Figure 4).
There are many other experiments to correlate different nuclei and their neighbors.
[[File:Figure 4.pdf|thumb|Figure 4. Example of 3D 15N [1H-1H] NOESY. The peaks that would be stacked on top of one another in the 2D [1H-1H] NOESY are now drawn out in the third dimension by relating its 15N chemical shifts. This cleans up the spectrum and helps in resonance assignments.]]
==Protein NMR Advantages==
NMR is a good method in trying to solve the structure of a protein and the continued unanswered protein folding problem. However it is not the only method as crystallography is also a possible method for determining protein structure. However, NMR has its advantages over crystallography.
One instance is that it uses molecules in solution, so it is not limited to those that crystallize well since crystallization is a very uncertain and time-consuming step in X-ray crystallography. In addition, some proteins do not readily crystallize. Furthermore, although structures present in crystallized proteins very closely represent those of proteins free of the constraints imposed by the crystalline environment, structures in solution can be sources of additional insights. NMR also makes it fairly easy to study properties of a molecule besides its structure such as the flexibility of the molecule and how it interacts with other molecules. With crystallography, it is either impossible to study these aspects or it requires an entirely new crystal.
==Protein NMR Disadvantages==
Most NMR spectroscopists focus on molecules no larger than 20-30 kilodaltons. X-ray crystallographers have solved structures upto 2,500 kilodaltons.
==NMR in Real Life==
The 15 carbon compound viniferone found in grape seeds was isolated in 2004. Viniferone falls into a group of substances, grape seed, that are very active against radicals and oxidative stress. There was very little recovery of viniferone from an abundance of grape seeds (~40 mg of viniferone from 10.5 kg of grape seeds), so precautions had to be taken in the techniques used to obtain its structure. Most tests would destroy the minuscule amount proanthocyanidins t of viniferone obtained, so a combination of spectroscopic techniques were utilized (including NMR) to obtain viniferone's structure. Obtaining the <sup>1</sup>H and <sup>13</sup>C NMR data was critical in determining the structure of Viniferone. The variety of absorption signals at various chemical shifts helped determine the presence of alkenes and benzene rings. Correlation spectroscopy and eventually X-ray crystallography were used to verify the structural arrangement of Viniferone.<ref name ="Schore">Schore, Neil E. (2011). Organic Chemistry Structure and Function 6th Edition. W. H. Freeman</ref>
== References ==
{{Reflist|2}}
If you would like to learn more about interpreting NMR peaks, I highly suggest this website. [http://www.wfu.edu/~ylwong/chem/nmr/h1/ http://www.wfu.edu/~ylwong/chem/nmr/h1/]
<br> Berg, Jeremy M., Lubert Stryer, and John L. Tymoczko. Biochemistry. 6th ed. Boston: W. H. Freeman & Company, 2006. 98-101.
<br> Shriner, Christine K. F. Hermann, Terence C. Morrill, David Y. Curtin, Reynold C. Fuson. The Systematic Identification of Organic Compounds. 8th ed. U.S.A. John Wiley & Sons, Inc. 2004. 136-142.
<br> Vollhardt, K. Peter C., Schore, Neil E. Organic Chemistry - Structure and Function. 5th ed. New York: W. H. Freeman & Company, 2005. 398-432.
<br> Keeler, James. Understanding NMR Spectroscopy. West Sussex, England. John Wiley & Sons. 51-77.
<br>Clore, Marius G., Gronenborn, Angela M. “Chapter 34: Structures of Larger Proteins, Protein-Ligand, and Protein-DNA Complexes by Multidimensional Heteronuclear NMR.” Multidimensional NMR Methods for the Solution State. United Kingdom. John Wiley & Sons Ltd.
<br>Wuthrich, Kurt. “Chapter 33: Biological Macromolecules: Structure Determination in Solution.” Multidimensional NMR Methods for the Solution State. United Kingdom. John Wiley & Sons Ltd.
<br> National Institutes of Health, National Institute of General Medical Sciences, New York, 2007, 29-30, http://www.nigms.nih.gov.
{{BookCat}}
[1]"Kurt Wüthrich - Nobel Lecture". Nobelprize.org. 25 Oct 2010 http://nobelprize.org/nobel_prizes/chemistry/laureates/2002/wuthrich-lecture.html
797vxcduee7c5ldcqcpvl1foy3fl6i5
4676253
4676252
2026-10-15T12:36:15Z
DMacks
94753
/* General Information */ Replace image-of-text with text (step 1: import table from [[:w:en:Chemical shift]])
4676253
wikitext
text/x-wiki
NMM spectroscopy is unique in being able to reveal the atomic structure of macromolecules in solution, provided that highly concentrated solution can be obtained. This technique depends on the fact that certain atomic nuclei are intrinsically magnetic. The chemical shift of nuclei depends on their local environment. Furthermore, the spins of neighboring nuclei interact with each other in ways that provide definitive structural information. This information can be used to determine complete three-dimensional structures of proteins.
== General Information ==
'''Nuclear Magnetic Resonance Spectroscopy (NMR)''' is an analytical technique which exploits the fact that certain nuclei possess a property called spin (I). NMR spectroscopy is possible due to the Zeeman Effect discovered first in the 1890s. The structures of proteins can be determined by NMR by first preparing the isotopically labeled samples. In the magnet, the "natural magnets" in the atoms of the sample line up with the magnetic field of the NMR magnet. Then, the sample is exposed to a series of radio wave pulses to disrupt the magnetic equilibrium of the atoms. The reaction of these nuclei can be observed to assess their chemical nature specifically, their chemical shift properties. Sets of experiments can be conducted to refine possible structures and present the average of the experiments as the final structure. It can have advantages over X-ray crystallography because the samples of proteins can be in solution rather than crystallized form and other properties of the sample protein, such as flexibility and interactions, can be determined while X-ray crystallography only reveals the structure of the protein.
It is the splitting of atomic energy levels when the atoms are placed in a magnetic field. This effect was later found to occur as a result of nuclear spin. In 1924, Wolfgang Pauli first suggested the theoretical basis of NMR when he concluded that some atomic nuclei should possess nuclear spin and these nuclei would split into degenerate energy levels when placed in a magnetic field. These nuclei have a magnetic moment, in and of themselves, which is called spin. Nuclei that possess spin are said to be NMR active. Some NMR active nuclei can be seen in Table 1, with italicized nuclei being those commonly studied in biological molecules.
{| class="wikitable" style="margin:auto;"
|+Table 1. Magnetic properties of common nuclei<ref>{{cite book|title=CRC Handbook of Chemistry and Physics|edition=65th|title-link=CRC Handbook of Chemistry and Physics}}</ref>
|-
![[Isotope]]
! [[Natural abundance|Occurrence<br> in nature]]<br> (%)
! [[Spin (physics)|Spin number]] {{mvar|I}}
! [[Magnetic moment]] {{mvar|μ}}<br>({{math|[[nuclear magneton|''μ''<sub>N</sub>]]}})
! Electric quadrupole moment<br> ({{mvar|[[elementary charge|e]]}} × 10<sup>−24</sup> cm<sup>2</sup>)
! [[Operating frequency]] at 7 [[Tesla (unit)|T]]<br> (MHz)
! Relative sensitivity
|-
|<sup>1</sup>H
|{{0}}99.984
|{{sfrac|1|2}}
|{{0|−}}2.79628
|{{0|−}}0
|300.13
|1
|-
|<sup>2</sup>H
|{{0|00}}0.016
|1
|{{0|−}}0.85739
|{{0|−}}0.0028
|{{0}}46.07
|0.0964
|-
|<sup>10</sup>B
|{{0}}18.8
|3
|{{0|−}}1.8005
|{{0|−}}0.074
|{{0}}32.25
|0.0199
|-
|<sup>11</sup>B
|{{0}}81.2
|{{sfrac|3|2}}
|{{0|−}}2.6880
|{{0|−}}0.026
|{{0}}96.29
|0.165
|-
|<sup>12</sup>C
|{{0}}98.9
|0
|{{0|−}}0
|{{0|−}}0
|{{0|00}}0
|0
|-
|<sup>13</sup>C
|{{0|00}}1.1
|{{sfrac|1|2}}
|{{0|−}}0.70220
|{{0|−}}0
|{{0}}75.47
|0.0159
|-
|<sup>14</sup>N
|{{0}}99.64
|1
|{{0|−}}0.40358
|{{0|−}}0.071
|{{0}}21.68
|0.00101
|-
|<sup>15</sup>N
|{{0|00}}0.37
|{{sfrac|1|2}}
|−0.28304
|{{0|−}}0
|{{0}}30.41
|0.00104
|-
|<sup>16</sup>O
|{{0}}99.76
|0
|{{0|−}}0
|{{0|−}}0
|{{0|00}}0
|0
|-
|<sup>17</sup>O
|{{0|00}}0.0317
|{{sfrac|5|2}}
|−1.8930
|−0.0040
|{{0}}40.69
|0.0291
|-
|<sup>19</sup>F
|100
|{{sfrac|1|2}}
|{{0|−}}2.6273
|{{0|−}}0
|282.40
|0.834
|-
|<sup>28</sup>Si
|{{0}}92.28
|0
|{{0|−}}0
|{{0|−}}0
|{{0|00}}0
|0
|-
|<sup>29</sup>Si
|{{0|00}}4.70
|{{sfrac|1|2}}
|−0.5548
|{{0|−}}0
|{{0}}59.63
|0.0785
|-
|<sup>31</sup>P
|100
|{{sfrac|1|2}}
|{{0|−}}1.1205
|{{0|−}}0
|121.49
|0.0664
|-
|<sup>35</sup>Cl
|{{0}}75.4
|{{sfrac|3|2}}
|{{0|−}}0.92091
|−0.079
|{{0}}29.41
|0.0047
|-
|<sup>37</sup>Cl
|{{0}}24.6
|{{sfrac|3|2}}
|{{0|−}}0.68330
|−0.062
|{{0}}24.48
|0.0027
|}
Separately, Bolch at Stanford and Purcell at Harvard in 1946 each translated the Zeeman effect into the first NMR spectrum. In 1949, Proctor and Yu at Stanford measured the first chemical shift and spin couplings. Initially, commercial NMR spectrometers were continuous wave type and were only able to detect the most sensitive nuclei, 1H & 19F.
NMR ‘active’ nuclei are active if the nuclear spin, I, is non zero.
To determine spin of nuclei:
Mass # is even and # neutrons is even, I=0, therefore no spin
Mass # is even and # neutrons is odd, I= integer, therefore spin
Mass # is odd and # neutrons is even or odd, I=half integer, therefore spin
The cause of spin can be visualized with the following analogy. A rotating charged particle (e.g. hydrogen nucleus aka proton) will produce a magnetic field perpendicular to the direction of rotation which is analogous to the magnetic field of a bar magnet, as seen in Figure 1.
[[Image:Spinning proton magnetic field lines.jpg|500px|thumb|Figure 1]]
Absent an external magnetic field (B¬0) these active nuclei are oriented in random directions, but in the presence of an external magnetic field (B¬0) these nuclei orient themselves either with or against the field, as seen in Figure 2.
[[Image:Nuclei in and out of magnetic field.jpg|500px|thumb|Figure 2]]
Nuclei are dispersed between states of different energies. The different energy levels are induced by the presence of the external magnetic field (B¬0). (For spin ½ nuclei two orientations are possible, with the higher energy orientation being ‘β spin state’ and the lower energy orientation being ‘α spin state’.) This is evident in the following equation where E=energy, h=Planck’s constant, ν=frequency, γ=gyromagnetic ratio (nucleus dependent), B0= external magnetic field:
ΔE= h ν = γ B0
To see this graphically see Figure 3.
[[Image:Magnetic field induced energy levels.jpg|500px|thumb|Figure 3]]
These induced energy level differences are what allow the use of NMR. At equilibrium, nuclei will occupy both levels of energy, low and high. However, according to the Maxwell-Boltzmann Distribution, the lower energy level will be occupied by a greater number of nuclei. This difference in the number of nuclei, between low and high energy levels, is what NMR exploits. The energy required to cause a spin flip, transition from low to high energy state, corresponds to the radio frequency range of the electromagnetic spectrum.
ΔE= h ν
A nucleus will only flip spins, absorb energy, when the frequency of electromagnetic radiation just matches the change in energy, ΔE. This is called the point of resonance. Nuclei will have differing resonant frequencies based on their local electronic environment. This can be seen in “A handmade example of a proton (1H) NMR spectrum.” All nuclei under observation are irradiated with radio waves to the higher energy state and are then allowed to decay back to the lower energy state. This decay is what is observed. A free induction decay signal is collected as the nuclei fall back to the lower energy state, Figure 4 depicts a generic FID.
[[File:Nmr fid good shim EN.svg|500px|thumb|Figure 4]]
This FID is then subjected to a Fourier transform to convert from the time domain to the frequency domain, seen in Figure 5.
[[Image:NMR spectrum generic.jpg|500px|thumb|Figure 5]]
A change in the magnitude of the magnetic field will change the resonant frequency of the nucleus. Therefore, in order to compare spectra between instruments with varying size magnetic strength it is necessary to convert from frequency to parts per million, ppm. This can be done with the equation seen in Figure 6.
[[Image:Frequency to ppm.jpg|500px|thumb|Figure 6]]
With the arrival of Fourier Transform instruments in the 1970s it became possible to acquire spectra of nuclei that are not naturally abundant, such as 13C which is only 1.1% naturally occurring. This requires the acquisition of multiple spectra and adding them together to get a greater sensitivity. The signal to noise ratio (S/N) will increase as acquisitions increase, because the signal magnitude increases linearly with acquisition number while the noise magnitude increases as the square of the number acquisitions. So, the S/N will increase as the square of the number of acquisitions as seen in Figure 7.
[[Image:Signal to noise.jpg|500px|thumb|Figure 7]]
The Nobel Prize in Chemistry 2002 went partly to Kurt Wuthrich for “NMR Studies of Structure and Function of Biological Macromolecules,”[1] so NMR is important to structural biochemistry. Table 2 lists Nobel prizes awarded for discoveries related to NMR spectroscopy.
[[Image:NMR Nobel prizes.jpg|500px|thumb|Table 2]]
[[Image:nmr.jpg|500px|thumb|A handmade example of a proton (<sup>1</sup>H) NMR spectrum]]
NMR is a powerful technique that can be used to determine the structure of [[Structural Biochemistry/Proteins|proteins]] in highly concentrated solution, by analyzing the relative positions of certain atoms (Shriner 136). Protein NMR exploits the absence of zero net nuclear spin of the most abundant isotopes of carbon and oxygen (12 and 16) as well as the abundant isotope of Nitrogen (14) with a net nuclear spin of 1. NMR cannot be performed on an atom with zero net nuclear spin. Since there are many distinct nuclei present in a single protein much overlap is expected in the chemical shifts produced through the NMR analysis therefore a multidimensional approach is applied. Magnetization is applied to the protein and nuclei through electromagnetic pulses that can magnetize nuclei in two ways. The first involving magnetization through nuclei bonding and the second through open space. Each approach offers a different way to analyze the protein such as the first approach allowing for distinct nuclei to be targeted whereas the second approach allowing for structure calculation distance restraints and targeting an unlabeled protein.
Intrinsically magnetic nuclei display spinning properties that produce a magnetic moment. When an external magnetic field is applied to the system the magnetic moment can adopt either an alpha or beta state. The strength of the magnetic field determines the proportionality of alpha to beta with a tendency to favor alpha as it is aligned with the field and has a lower energy. By supplying an electromagnetic pulse alpha spin nuclei will change to beta and produce resonance. By keeping a constant magnetic field on the system and adjusting the frequency of the electromagnetic pulses a spectrum of resonance can be obtained.
Currently, NMR spectrometers use the Fourier transform method of pulse radiation. To change the nuclei in alpha state to beta, a strong pulse of radiation is used. Then the pulse of radiation is removed and the nuclei go back to their original alpha state, giving a decay signal. This signal is converted by the computer to a frequency domain spectrum in a very fast way. By storing many signals a more intense spectrum is produced. (Shriner 136)
Electrons around a magnetic nucleus produces a local magnetic field opposite to the applied magnetic field. Magnetic nuclei can absorb the electromagnetic pulses at specific frequencies coined "chemical shifts" (signal positions) expressed in parts per million (ppm). These chemical shifts are designated relative to a standard compound such as a derivative of tetramethylsilane (TMS) (CH<sub>3</sub>)<sub>4</sub>Si (which has a chemical shift of 0.0) that is soluble in water. NMR spectra that are produced through this assay can be analyzed, and with the combination of a multidimensional analysis the structure of the protein can be determined.
When an atomic nuclei is influenced by a magnetic field, it creates a magnetic moment which will give an orientation of spinning to itself. Different orientation of spinning, spin states, exist in different states of energy - alpha-state and beta-state - where alpha-state is found to be more stable with a lower energy through experiments as it has the same direction with the magnetic field. In order to transits alpha-state to beta-state (excited state), pulse of electromagnetic radiation is needed to increase the frequency of the electromagnetic radiation (through irradiation) to have the spinning nucleus to overcome the energy barrier and change its orientation. (See [http://en.wikipedia.org/wiki/Bohr_model Bohr Model] for more information) Thus, resonance will be obtained. It was discovered by American physicist Edward Mills Purcell and physicist Felix Bloch from Switzerland in 1946.
The difference between energy levels split by a magnetic field corresponds to the energy of radio waves. So, the electronics required for the NMR spectrometer weren’t developed until WWII when the government invested heavily into radar technology. Radar is simply the use of radio waves to detect location and direction of moving objects. Better frequency synthesizers, amplifiers, receivers and signal processors all contributed to advancements in the field of NMR spectroscopy.
The components of a NMR Spectrometer can be seen in Figure 8.
[[Image:NMR Spectrometer.jpg|500px|thumb|right|Figure 8]]
Some common 2D experiments can be seen in Table 3:
{| style="clear:none;float:left;margin:1em 0 1em 1em"
|-
! Common 20 experiments <sup>(Table 3)</sup>
|-
| '''COSY''' || '''Correlated Spectroscopy'''<br />Through bond H-H correlation
|-
| '''TOCSY''' || '''Total Correlation Spectroscopy'''<br />Extended through bond H-H correlation
|-
| '''1D NOE''' || '''Nuclear Overhauser Effect Spectroscopy'''<br />H-H through space correlation
|-
| '''NOESY''' || '''Nuclear Overhauser Effect Spectroscopy'''<br />H-H through space correlation
|-
| '''ROESY''' || '''Rotating Frame Overhauser Effect Spectroscopy'''<br />Similar to NOESY
|}<br style="clear:both"/>
==Magnets used for NMR==
The magnets used for NMR are very strong. Those used for high resolution protein structure determination range from 500 megahertz to 900 megahertz and generate magnetic fields thousands of times stronger than the Earth’s. Although the sample is exposed to a strong magnetic field, very little magnetic force gets out of the machine.
NMR magnets are superconductors, so they must be cooled with liquid helium, which is kept at 4 Kelvin. Liquid nitrogen, which is kept at 77 Kelvin, helps keep the liquid helium cold.
== Appropriate Isotopes ==
Only certain isotopes are capable for use in NMR. The most common isotope that is used in NMR is Hydrogen-1 (Proton NMR). Other commonly used isotopes are Carbon-13 and Nitrogen-15.
== Vector Model ==
The Vector Model only holds for uncoupled spins. Nuclei that are active under NMR spectroscopy have associated with them a nuclear spin magnetic moment, which means that these nuclei produce a small magnetic field. When these nuclei are placed in a magnetic field the energy of the interaction depends on the angle between the field and the magnetic moment. The highest energy interaction is when the magnetic field and the magnetic moment point in opposite directions, and the lowest energy interaction is when the magnetic field and magnetic moment point in the same direction.
Before a magnetic field is applied to a population of nuclei the magnetic moments of these nuclei are oriented randomly due to random thermal motion. After a magnetic field is applied one has to wait for the spins to come to equilibrium, a process known as relaxation. Pointing in the direction of the magnetic field is slightly energetically favored, and hence only a very small number of spins will do so, forming the bulk magnetization vector. The sample is hence magnetized. At equilibrium the bulk magnetization vector will point in the direction of the magnetic field (we will assume this is the z direction) and will be stationery. If the magnetization vector was tilted away from the axis it would precess at the Larmor frequency (-gyromagnetic ratio * magnetic field).
The purpose of a pulse is to quickly change the direction of the magnetization vector. This can be done by creating a much weaker magnetic field in the direction one desires, but allowing it to oscillate at the aforementioned Larmor frequency. This will result in the magnetization vector pointing in the direction one desires. This occurs because when the B1 field (the weaker field) oscillates near the Larmor Frequency, the result is that the strength of the B0 field (the stronger field in the z direction) appears to be reduced. Hence the resulting magnetic field (the effective field) can point very close to the direction of the B1 field if the B1 field is much larger than the reduced field.
An on resonance pulse involves changing the direction of the magnetization vector by applying the B1 field in a certain direction for a specific time. The angle through which the magnetization vector is rotated is given as the product of the frequency of the effective field and the time the pulse is applied. By applying different times one can rotate the magnetization vector to different angles.
For a real NMR experiment there are going to be more than one resonance frequencies in the sample. If one makes the B1 field strong enough it is possible to bring the magnetization vector very close to the desired orientation, which means we can bring it close to the ideal case of an on resonance pulse.
The vector model can be used to understand simple NMR experiments.
== Chemical shifts ==
'''Chemical shifts''' are the units used in Protein NMR analysis graphs. Chemical shift correlates to the different radiofrequency electromagnetic pulses sent through the protein sample. Each molecule that exhibits spin properties show different distinct chemical shifts. Chemical shifts can be observed by sending nuclear magnetic energy onto the protein sample. The electron clouds that surround each spin nuclei create a local magnetic field that opposes the applied magnetic field. When the electromagnetic pulse runs through the sample alpha spin nuclei that are hit with the correct amount of energy to switch to beta spin do so and subsequently cause resonance. This resonance can then be recorded and is reported for the different frequencies applied to sample as parts per million (ppm chemical shifts). For example, when the nuclear magnetic field strength sends out a frequency of 1 ppm (parts per million), CH<sub>3</sub> reacts to it and exhibits beta spin behavior from which the spectroscopy catches this signal and records it.
Most hydrogen absorptions in 300-MHz 1H NMR fall within a range of 3000 Hz. Rather than record the exact frequency of each resonance, we measure it relative to an internal standard, the compound tetramethylsilane, (CH<sub>3</sub>)<sub>4</sub>Si. Its 12 equivalent hydrogens are shielded relative to those in most organic molecules, resulting in a resonance line conveniently removed from the usual spectral range.
A problem with these numbers, however, is that they vary with the strength of the applied magnetic field. Because field strength and resonance frequency are directly proportional, doubling or tripling the field strength will double or triple the distance (in hertz) of the observed peaks relative to (CH<sub>3</sub>)<sub>4</sub>Si. To make it easier to compare reported literature spectra, we standardize the measured frequency by dividing the distance to (CH<sub>3</sub>)<sub>4</sub>Si (in hertz) by the frequency of the spectrometer. This procedure yields a field-independent number, the chemical shift δ.
== NMR in Characterizing Organometallics ==
NMR spectra uses superconducting magnets to many metal nuclei. Carbon 13 NMR has become increasingly useful in facilitating due to its low natural abundance and low sensitivity for NMR experiment. The integration of NMR peaks of organometallic complexes can provide the ratio of atoms in different environments. Since the relaxation times of the carbon atoms vary in organometallics, a great deal of inaccuracy result from this. However it does have its advantages as well. For example, terminal carbonyl peaks are frequently in the range of 195 to 225ppm, which allows it to be easily distinguished from other ligands. The 13C chemical shift correspond with the strength of the CO bond. The stronger the bond, the smaller the chemical shift. 13C in cyclopentadienyl ligands have a wide range of chemical shifts in paramagnetic compounds whereas it's narrower for diamagnetic compounds.
== Nuclei Spin States ==
In NMR, certain atomic nuclei must be magnetic by nature in order for this technique to be used. However, only a certain number of isotopes have this magnetic characteristic called spin. An example is hydrogen. When an external magnetic field is applied, hydrogen's spinning proton generates a magnetic moment which can take either the α or β spin state. The energy difference between the two states is directly proportional to the amount of external magnetic field applied. The α state is aligned with the applied field and has lower energy than the β state. When a pulse of electromagnetic radiation is applied to the α state, it can be excited to the β state, thus a resonance will be obtained.
The NMR is only able to detect certain atoms and only certain isotopes. For example, it can detect the Hydrogen molecules with a mass of 1 amu, but not the other isotopes. Most commonly the Hydrogen and Carbon NMR's are used. The information that can be determined by the NMR is immense. In the case of the Hydrogen NMR, one can use a certain amount of knowledge from a table to determine what each peak corresponds to which group within your sample. Interpreting NMR's can also be a little tricky in that one must understand splitting patterns. For example, the carbon atom you may be examining may have only one hydrogen attached, however if attached to a methyl group, it will appear as a quartet.
==Shielding and Deshielding==
Protons in different chemical environments are shielded by different amounts. When a nucleus surrounded by electrons is exposed to a magnetic field of strength H<sub>0</sub>,these electrons move in such a way as to generate a small local magnetic field, h<sub>local</sub>, opposing H<sub>0</sub>. As a consequence, the total field strength near the hydrogen nucleus is reduced, and the nucleus is thus said to be shielded from the magnetic field strength by its electron cloud. The degree of shielding depends on the amount of electron density surrounding the nucleus. dding electrons increases shielding; their removal, consequently, would cause deshielding. Also, a proton is deshielded when the induced field reinforces the applied field. For example, the induced field can reinforce the applied field. As a result, these protons are deshielded and their chemical shifts are at a higher value of ppm.
==Coupling==
'''J-coupling''' arises from the interaction of different spin states through the chemical bonds of a molecule and results in the splitting of NMR signals. This coupling provides detailed information about the connectivity of atoms and the structure of a molecule.
Spin-spin slitting is given by the '''N+1 Rule''': 1) H that is neighbored by one H resonnate as a doublet.2) H that is neighbored by two set of equivalent Hs resonate as trplet. 3) H that is neighbored by three equivalents of hydrogens resonate as a quartet.
A multiplet can be shown when there is a mixture of couple patterns, some of which could be broken down to small parts (i.e. qd- quartet of doublet). But for the most part, if a coupling pattern shows complexity not easily countable by N+1 rule, such pattern is called a multiplet.
In addition, functional groups containing alcohol (-OH) such as alcohol, carboxylic acid have a broad band on NMR spectra. This is due to the fact that Hydrogens on alcohol can hydrogenbond easily, thus being able to couple in broad spectra than other H's. Thus just by looking at the type of the spectra (such as multiple peaks or broad peak), one can easily categorize the functional group to which the H is associated with.
The ratio of the splitting peaks is given by a mathematical mnemonic device called Pascal's triangle. Each number in this triangle is the sum of the two numbers closest to it in the line above. It is important to remember that nonequivalent nuclei mutually split one another. In other words, the observation of one split absorption necessitates the presence of another split signal in the spectrum. Moreover, the coupling constants for these pattern must be the same. Double and triple bond characteristic chemical environments show complex splitting peaks. An alkyne for example, can have hydrogen splitting patterns an extra adjacent carbon away. An alkene depending on where the hydrogen is located (cis or trans) to a relative chemical environment, can show a slightly distorted peak.
==Integration==
'''Integration''' is very useful in NMR spectrum in determining the structure of a molecule. The relative integrated intensity of a signal is proportional to the relative number of nuclei giving rise to that absorption. Normally, an NMR spectrum plot will tell you very complex integration numbers. However, integration doesn’t have to be exact. You can just divide each integration number by the smallest number in your NMR spectrum. The ratio will help you get a big picture of the relative number of H’s represented by a peak. Combining the chemical shifts and the peak integration, you might be able to determine the structure of a molecule by using the ''chemical shift table''.
Researchers usually use NMR to check if the product they made from a reaction is what they really want. So they don’t have to figure out the structure of a molecule by looking at a complex spectrum. They know what the spectrum should look like if the reaction works. By comparing the actual spectrum to the ideal one, they are able to verify the molecule they want is in the product. Solvent used is usually CD<sub>2</sub>Cl<sub>2</sub>, since D would not show up in a H NMR spectrum. Combine with chemical shifts, they can be used to determine structure.
== Proton NMR interpretation ==
To interpret proton NMR, it is important to know where each type of proton lies. Below is a list of types of proton and their chemical shift on NMR.
[[Image:Table HNMR.jpg|Proton NMR frequency]]
It is important to know that proton NMR peaks only indicate the presence of protons (H). It does not show other atoms like Carbon, Oxygen...etc. As mentioned in the above section, proton peaks shows spliting because of coupling by the neighbor protons. The integration of each peak is the amount of proton relative to other proton on the NMR. When solving structure from the H NMR, it is important to write down the chemical shift, integration and the split of each peak. Then base on the chemical shift of the peak, write down the possible functional group and structure. Lastly, arrange and connect each structure so that it matches the split and the integration of proton NMR. Below are examples of hand drawn proton NMR and also the detail instruction to interprete proton NMR.
=== Example ===
The interpretation of each proton NMR is given right below of each graph. Try not to look at the structure, and only look at the molecular formula and proton NMR to interpret the structure of the compound. Note that the examples given are the basic and simple compound. The NMR of protein structures is much more complex than these examples. The goal of these examples is to give you an idea how proton NMR are interpreted.
[[Image:1H NMR Ethyl Acetate Coupling shown - 2.png|Proton NMR]]
Base on the chemical shift of proton NMR, there should be a ketone functional group or a structure that contains a carbonyl group at peak around 2.0. The peak around 1.3 could be a primary or secondary alkyl group.
Now look at the splitting of the peaks at chemical shift 1.3 (C), the triplet (3 peaks) shows that the proton is probably split by 2 neighbor protons (base on the n+1 rule mention in integration section). If it is split only by 1 neighbor proton, then it would be a doublet (2 peaks). Next, look at the peak at chemical shift 2.0 (B). The singlet (single peak) means that this proton environment probably has no neighbor proton. The peak at chemical shift 4.2 (A) is a quadruplet (4 peaks). This means there are about 3 neighbor proton next to proton environment A. Since it is known that B has no proton right next to it, and A and C both has neighbor protons, it is safe to assume that proton environment A is right next to proton environment C, which could be a -CH2CH3.
The following possible structures deduced above are a ketone and an ethyl group.
{|class="wikitable"
|+ Splitting analysis
|-
!Substructure
|[[File:Methyl group.svg|100px]]
|[[File:Ethyl group.svg|150px]]
|-
!Splitting pattern
|Singlet
|Quartet and triplet
|-
!Analysis
| C with no neighboring H
| C with three neighboring H<br>C with two neighboring H
|}
Note that the there are two oxygen atoms from the molecular formula. One of the oxygen is included in ketone. The other oxygen must be binding onto one of these two structures. Take a look at peak A, the chemical shift is near 4.0, which means it might be connected to a heteroatom like oxygen. Place the oxygen next to the -CH2CH3 and connect the structure together, you will get ethyl acetate as indicated below the proton NMR. Notice that the proton B does not have any neighbor proton. Proton A is split into 4 peaks by proton C (n+1 rule, n = 3 neighbor protons). Proton C is split into 3 peaks by proton A (n = 2 neighbor protons). The CH2, secondary alkyl, base on the proton frequency table should be around the chemical shift ~1.2 ppm, but instead it is at ~4.2 ppm. The reason for this is that the CH2 is attached to oxygen a heteroatom, which is a electron withdrawing group. The result is that the chemical shift is pulled left field resulting in a chemical shift of 4.2 ppm. Another way to look at this is to assume there is an ester functional group at chemical shift of 4.2 ppm, and the primary alkyl group is attached to the ester.
The integration of the proton NMR also matches the structure well. The methyl CH3 next to the carbonyl group has 3 protons, and the primary alkyl next to the CH2 has 3 protons as well. This explains why peak B has the same height as peak C (same amount of protons). Peak A has the lowest height because it only has two protons.
[[Image:3-methoxyphenol NMR.jpg|proton NMR]]
This proton NMR example looks more complicated than the first one, but it is actually easier. One important information from this proton NMR is that there are peaks around 6.0~ 7.0 ppm (F,B,D,E). This always almost indicates the presence of aromatic ring. Noticed that there are about 4 group of peaks from 6.0 to 7.0 ppm? This means that there are four protons attach to 4 carbons on the aromatic ring. This leaves 2 carbons of the aromatic ring free to attach to two substituents. The position of these substituents is clearly an ortho and para position on the aromatic ring. The reason is that two different substituents on ortho and para position of the aromatic ring would give 4 proton environments. If there are only two proton environments around 6.0~ 8.0 ppm with the same integration (height), it means that the aromatic ring is probably symmetric on both sides with double para substituents. Now look at the peak (A) at 5.5 ppm. The peak is a broad peak instead of sharp peak like the rest. This means that the proton of this environment is attached to a heteroatom. The only heteroatom present in the sample base on the molecular formula given is an oxygen atom. This means that the proton is directly attached to oxygen, which would be a alcohol group -OH (Note that the proton on the alcohol group can have the chemical shift range from 0.5 to 5.0 ppm). It is important to remember that the proton that attached to a heteroatom is also known as exchangeable proton. Exchangeable proton sometimes do not show up on H NMR, so do not worry when an expected exchangeable peak doesn’t appear on HMNR.
The peak (C) at the chemical shift of ~3.9 ppm has the highest integration (height) and is a singlet. Usually when such a high singlet peak is observed around 3.9 ppm with oxygen in the molecular formula, there is a high chance that it is a ether group, -OCH3. Since there is no neighbor proton next to the CH3 of the ether, it is a singlet peak. In addition, the height of the peak is high compare to the other peak, which indicate a possibility of CH3 with at least 3 times more protons than other proton environment. Base on the interpretations above, these are the possible function groups:
[[Image:3-methoxyphenol NMR1.jpg|possible proton structures]]
Attach the alcohol group and the ether group in ortho- para position will result in the correct structure of the compound.
== Nuclear Overhauser Enhancement Spectroscopy (NOESY) ==
[[File:Noesy.jpg|thumb|NOESY Spectrum of Codeine. Each peak correlates to a proton.]]
'''NOESY''' is a NMR technique that uses the Nuclear Overhauser effect to help understand the tertiary structure of proteins and other large molecules. The nuclear Overhauser effect is the interaction of nuclei at short distances from each other. The extent of the effect is approximately 5 Angstroms. This is a better analysis of tertiary structure for proteins that do not form crystalline structures and need to be analyzed in solution. Like in NMR, a magnetic field is produced around the molecule and RF waves at different frequencies are produced to produce resonance. The resonance is produced when the nucleus reverses spin. Unlike normal NMR, the aim of NOESY is to determine the effect of the resonance of one nucleus on the other nuclei in the area. The graph that is produced gives you an idea of where the nuclei are in relation to each other.
The NOESY experiment reveals the distance of protons relative to one another. Protons very close to each other, (about 3 Angstroms apart) will produce a very large signal. The limit of detection is about 5-6 Angstroms apart, and will produce only a very weak signal.
The graph has diagonal dots correspond to the placement of the nuclei on the one dimensional NMR. There are dots out side of this diagonal spectrum. These dots show what nuclei are in close proximity of each other. If a line was drawn horizontally and vertically from the outlaying dots, the dots, on the diagonal spectrum, that lay on the lines would be in close proximity to each other. Using the information from the NMR and the NOESY a tertiary structure of the macromolecules could be formed. However, the resulting tertiary structure would contain a family of structures. This happened for three reasons. The first is the approximation of the distance between the nuclei. Second, there may not have been enough constraints to produce a singular structure. Thirdly, the protein is in solution, and the solution contains many proteins.
This technique is mainly used for hydrogen atoms, because they are the most abundant atom in biological systems and are also the simplest.
==Protein NMR==
An NMR machine is essentially a huge magnet. Many atoms are essentially little magnets. When placed inside an NMR machine, all the little magnets orient themselves to line up with the big magnet. By harnessing this law of physics, NMR spectroscopists are able to figure out physical, chemical, electronic, and structural information about molecules.
NMR relies on the interaction between an applied magnetic field and the natural “little magnets” in certain atomic nuclei. For protein structure determination, spectroscopists concentrate on the atoms that are most common in proteins: hydrogen, carbon, and nitrogen. What researchers seek to learn through NMR is how this chain of amino acids wraps and folds around itself to create the three-dimensional, active protein. Solving a protein structure using NMR is a series of experiments, each of which provides partial clues about the nature of the atoms in the sample molecule, such as how close two atoms are to each other, whether these atoms are physically bonded to each other, or where the atoms lie within the same amino acid. Other experiments show links between adjacent amino acids or reveal flexible regions in the protein. Each new set of experiments further refines possible structures until finally the scientists carefully select 10 to 20 solution that best represent their data and present the average as their final structure.
'''Sample Preparation for NMR'''
In order to study protein structure by NMR, highly purified samples of the protein of interest must be prepared. The protein can either be isolated from natural sources, or expressed in host organisms such as E. Coli through recombinant DNA techniques. The bacteria with the recombinant gene coding for a specific protein are grown in minimal media with 15NH4Cl being the only source of nitrogen for the bacteria, and 13C-glucose offering the only source of carbon for the bacteria to make proteins. This way, when the bacteria produce the protein of interest, these proteins are labeled with 15N and 13C, both of which are NMR active. The protein of interest is then purified through various protein purification techniques (See protein purification techniques). Finally, the protein, in an appropriate buffer, is loaded into an NMR tube and is ready to be placed in the NMR magnet.[[File:Figure 1.pdf|thumb|Figure 1. General scheme for protein structure determination by NMR in solution phase.]]
'''NMR Experiments'''
'''2D Experiments'''There are many different types of NMR experiments one can run to help to reveal information about the structure of the protein. The experiments usually differ in what correlations are detected. For example, a 2D [1H-1H]-NOESY experiment will reveal hydrogen atoms that are within 0.5 nm apart. Protons that exhibit this interaction will show up as a cross peak on the 2D spectrum (Figure 2).[[File:Figure 2.pdf|thumb|Figure 2. Simplified example of 2D [1H-1H]-NOESY NMR spectrum. The dots on the diagonal represent the 1D spectrum of the molecule. There are two protons that are being examined, one at 9 ppm and the other at 8 ppm. The presence of the cross peak (circled) reveals that these two protons are within 0.5 nm apart.]]
Taking this information, theoretically, the protons at 8 ppm and 9 ppm on the 1D spectrum could be assigned to a certain residue in the amino acid sequence. For example, if Ala1 is the point at 8 ppm and Ala54 is at 9 ppm, and there is a crosspeak present, then the observation of this NOE reveals a circular structure for this polypeptide chain (Figure 3). [[File:Figure 3.pdf|thumb|Figure 3. Circular structure of polypeptide chain revealed by presence of NOE on 2D NOESY spectrum.]]
Because proteins are much more complicated than this example above, the 2D NOESY spectrum is often cluttered and crosspeaks cannot be made out clearly because many of these points may stack on top of one another. Other experiments are required to reveal the necessary information to determine the 3D structure of the protein, such as 3D experiments.
'''3D Experiments'''
3D experiments use a third dimension to reveal peaks that may be stacked on top of one another in the 2D spectrum. An example is 3D 15N-correlated [1H-1H]-NOESY (Figure 4).
There are many other experiments to correlate different nuclei and their neighbors.
[[File:Figure 4.pdf|thumb|Figure 4. Example of 3D 15N [1H-1H] NOESY. The peaks that would be stacked on top of one another in the 2D [1H-1H] NOESY are now drawn out in the third dimension by relating its 15N chemical shifts. This cleans up the spectrum and helps in resonance assignments.]]
==Protein NMR Advantages==
NMR is a good method in trying to solve the structure of a protein and the continued unanswered protein folding problem. However it is not the only method as crystallography is also a possible method for determining protein structure. However, NMR has its advantages over crystallography.
One instance is that it uses molecules in solution, so it is not limited to those that crystallize well since crystallization is a very uncertain and time-consuming step in X-ray crystallography. In addition, some proteins do not readily crystallize. Furthermore, although structures present in crystallized proteins very closely represent those of proteins free of the constraints imposed by the crystalline environment, structures in solution can be sources of additional insights. NMR also makes it fairly easy to study properties of a molecule besides its structure such as the flexibility of the molecule and how it interacts with other molecules. With crystallography, it is either impossible to study these aspects or it requires an entirely new crystal.
==Protein NMR Disadvantages==
Most NMR spectroscopists focus on molecules no larger than 20-30 kilodaltons. X-ray crystallographers have solved structures upto 2,500 kilodaltons.
==NMR in Real Life==
The 15 carbon compound viniferone found in grape seeds was isolated in 2004. Viniferone falls into a group of substances, grape seed, that are very active against radicals and oxidative stress. There was very little recovery of viniferone from an abundance of grape seeds (~40 mg of viniferone from 10.5 kg of grape seeds), so precautions had to be taken in the techniques used to obtain its structure. Most tests would destroy the minuscule amount proanthocyanidins t of viniferone obtained, so a combination of spectroscopic techniques were utilized (including NMR) to obtain viniferone's structure. Obtaining the <sup>1</sup>H and <sup>13</sup>C NMR data was critical in determining the structure of Viniferone. The variety of absorption signals at various chemical shifts helped determine the presence of alkenes and benzene rings. Correlation spectroscopy and eventually X-ray crystallography were used to verify the structural arrangement of Viniferone.<ref name ="Schore">Schore, Neil E. (2011). Organic Chemistry Structure and Function 6th Edition. W. H. Freeman</ref>
== References ==
{{Reflist|2}}
If you would like to learn more about interpreting NMR peaks, I highly suggest this website. [http://www.wfu.edu/~ylwong/chem/nmr/h1/ http://www.wfu.edu/~ylwong/chem/nmr/h1/]
<br> Berg, Jeremy M., Lubert Stryer, and John L. Tymoczko. Biochemistry. 6th ed. Boston: W. H. Freeman & Company, 2006. 98-101.
<br> Shriner, Christine K. F. Hermann, Terence C. Morrill, David Y. Curtin, Reynold C. Fuson. The Systematic Identification of Organic Compounds. 8th ed. U.S.A. John Wiley & Sons, Inc. 2004. 136-142.
<br> Vollhardt, K. Peter C., Schore, Neil E. Organic Chemistry - Structure and Function. 5th ed. New York: W. H. Freeman & Company, 2005. 398-432.
<br> Keeler, James. Understanding NMR Spectroscopy. West Sussex, England. John Wiley & Sons. 51-77.
<br>Clore, Marius G., Gronenborn, Angela M. “Chapter 34: Structures of Larger Proteins, Protein-Ligand, and Protein-DNA Complexes by Multidimensional Heteronuclear NMR.” Multidimensional NMR Methods for the Solution State. United Kingdom. John Wiley & Sons Ltd.
<br>Wuthrich, Kurt. “Chapter 33: Biological Macromolecules: Structure Determination in Solution.” Multidimensional NMR Methods for the Solution State. United Kingdom. John Wiley & Sons Ltd.
<br> National Institutes of Health, National Institute of General Medical Sciences, New York, 2007, 29-30, http://www.nigms.nih.gov.
{{BookCat}}
[1]"Kurt Wüthrich - Nobel Lecture". Nobelprize.org. 25 Oct 2010 http://nobelprize.org/nobel_prizes/chemistry/laureates/2002/wuthrich-lecture.html
4b6d4bet1upym6gdj789hxqed2o2xyv
4676254
4676253
2026-10-15T12:40:55Z
DMacks
94753
/* General Information */ step 2: fix ref
4676254
wikitext
text/x-wiki
NMM spectroscopy is unique in being able to reveal the atomic structure of macromolecules in solution, provided that highly concentrated solution can be obtained. This technique depends on the fact that certain atomic nuclei are intrinsically magnetic. The chemical shift of nuclei depends on their local environment. Furthermore, the spins of neighboring nuclei interact with each other in ways that provide definitive structural information. This information can be used to determine complete three-dimensional structures of proteins.
== General Information ==
'''Nuclear Magnetic Resonance Spectroscopy (NMR)''' is an analytical technique which exploits the fact that certain nuclei possess a property called spin (I). NMR spectroscopy is possible due to the Zeeman Effect discovered first in the 1890s. The structures of proteins can be determined by NMR by first preparing the isotopically labeled samples. In the magnet, the "natural magnets" in the atoms of the sample line up with the magnetic field of the NMR magnet. Then, the sample is exposed to a series of radio wave pulses to disrupt the magnetic equilibrium of the atoms. The reaction of these nuclei can be observed to assess their chemical nature specifically, their chemical shift properties. Sets of experiments can be conducted to refine possible structures and present the average of the experiments as the final structure. It can have advantages over X-ray crystallography because the samples of proteins can be in solution rather than crystallized form and other properties of the sample protein, such as flexibility and interactions, can be determined while X-ray crystallography only reveals the structure of the protein.
It is the splitting of atomic energy levels when the atoms are placed in a magnetic field. This effect was later found to occur as a result of nuclear spin. In 1924, Wolfgang Pauli first suggested the theoretical basis of NMR when he concluded that some atomic nuclei should possess nuclear spin and these nuclei would split into degenerate energy levels when placed in a magnetic field. These nuclei have a magnetic moment, in and of themselves, which is called spin. Nuclei that possess spin are said to be NMR active. Some NMR active nuclei can be seen in Table 1, with italicized nuclei being those commonly studied in biological molecules.
{| class="wikitable" style="margin:auto;"
|+Table 1. Magnetic properties of common nuclei<ref>''[[:w:CRC Handbook of Chemistry and Physics|CRC Handbook of Chemistry and Physics]]'', 65th ed.</ref>
|-
![[Isotope]]
! [[Natural abundance|Occurrence<br> in nature]]<br> (%)
! [[Spin (physics)|Spin number]] {{mvar|I}}
! [[Magnetic moment]] {{mvar|μ}}<br>({{math|[[nuclear magneton|''μ''<sub>N</sub>]]}})
! Electric quadrupole moment<br> ({{mvar|[[elementary charge|e]]}} × 10<sup>−24</sup> cm<sup>2</sup>)
! [[Operating frequency]] at 7 [[Tesla (unit)|T]]<br> (MHz)
! Relative sensitivity
|-
|<sup>1</sup>H
|{{0}}99.984
|{{sfrac|1|2}}
|{{0|−}}2.79628
|{{0|−}}0
|300.13
|1
|-
|<sup>2</sup>H
|{{0|00}}0.016
|1
|{{0|−}}0.85739
|{{0|−}}0.0028
|{{0}}46.07
|0.0964
|-
|<sup>10</sup>B
|{{0}}18.8
|3
|{{0|−}}1.8005
|{{0|−}}0.074
|{{0}}32.25
|0.0199
|-
|<sup>11</sup>B
|{{0}}81.2
|{{sfrac|3|2}}
|{{0|−}}2.6880
|{{0|−}}0.026
|{{0}}96.29
|0.165
|-
|<sup>12</sup>C
|{{0}}98.9
|0
|{{0|−}}0
|{{0|−}}0
|{{0|00}}0
|0
|-
|<sup>13</sup>C
|{{0|00}}1.1
|{{sfrac|1|2}}
|{{0|−}}0.70220
|{{0|−}}0
|{{0}}75.47
|0.0159
|-
|<sup>14</sup>N
|{{0}}99.64
|1
|{{0|−}}0.40358
|{{0|−}}0.071
|{{0}}21.68
|0.00101
|-
|<sup>15</sup>N
|{{0|00}}0.37
|{{sfrac|1|2}}
|−0.28304
|{{0|−}}0
|{{0}}30.41
|0.00104
|-
|<sup>16</sup>O
|{{0}}99.76
|0
|{{0|−}}0
|{{0|−}}0
|{{0|00}}0
|0
|-
|<sup>17</sup>O
|{{0|00}}0.0317
|{{sfrac|5|2}}
|−1.8930
|−0.0040
|{{0}}40.69
|0.0291
|-
|<sup>19</sup>F
|100
|{{sfrac|1|2}}
|{{0|−}}2.6273
|{{0|−}}0
|282.40
|0.834
|-
|<sup>28</sup>Si
|{{0}}92.28
|0
|{{0|−}}0
|{{0|−}}0
|{{0|00}}0
|0
|-
|<sup>29</sup>Si
|{{0|00}}4.70
|{{sfrac|1|2}}
|−0.5548
|{{0|−}}0
|{{0}}59.63
|0.0785
|-
|<sup>31</sup>P
|100
|{{sfrac|1|2}}
|{{0|−}}1.1205
|{{0|−}}0
|121.49
|0.0664
|-
|<sup>35</sup>Cl
|{{0}}75.4
|{{sfrac|3|2}}
|{{0|−}}0.92091
|−0.079
|{{0}}29.41
|0.0047
|-
|<sup>37</sup>Cl
|{{0}}24.6
|{{sfrac|3|2}}
|{{0|−}}0.68330
|−0.062
|{{0}}24.48
|0.0027
|}
Separately, Bolch at Stanford and Purcell at Harvard in 1946 each translated the Zeeman effect into the first NMR spectrum. In 1949, Proctor and Yu at Stanford measured the first chemical shift and spin couplings. Initially, commercial NMR spectrometers were continuous wave type and were only able to detect the most sensitive nuclei, 1H & 19F.
NMR ‘active’ nuclei are active if the nuclear spin, I, is non zero.
To determine spin of nuclei:
Mass # is even and # neutrons is even, I=0, therefore no spin
Mass # is even and # neutrons is odd, I= integer, therefore spin
Mass # is odd and # neutrons is even or odd, I=half integer, therefore spin
The cause of spin can be visualized with the following analogy. A rotating charged particle (e.g. hydrogen nucleus aka proton) will produce a magnetic field perpendicular to the direction of rotation which is analogous to the magnetic field of a bar magnet, as seen in Figure 1.
[[Image:Spinning proton magnetic field lines.jpg|500px|thumb|Figure 1]]
Absent an external magnetic field (B¬0) these active nuclei are oriented in random directions, but in the presence of an external magnetic field (B¬0) these nuclei orient themselves either with or against the field, as seen in Figure 2.
[[Image:Nuclei in and out of magnetic field.jpg|500px|thumb|Figure 2]]
Nuclei are dispersed between states of different energies. The different energy levels are induced by the presence of the external magnetic field (B¬0). (For spin ½ nuclei two orientations are possible, with the higher energy orientation being ‘β spin state’ and the lower energy orientation being ‘α spin state’.) This is evident in the following equation where E=energy, h=Planck’s constant, ν=frequency, γ=gyromagnetic ratio (nucleus dependent), B0= external magnetic field:
ΔE= h ν = γ B0
To see this graphically see Figure 3.
[[Image:Magnetic field induced energy levels.jpg|500px|thumb|Figure 3]]
These induced energy level differences are what allow the use of NMR. At equilibrium, nuclei will occupy both levels of energy, low and high. However, according to the Maxwell-Boltzmann Distribution, the lower energy level will be occupied by a greater number of nuclei. This difference in the number of nuclei, between low and high energy levels, is what NMR exploits. The energy required to cause a spin flip, transition from low to high energy state, corresponds to the radio frequency range of the electromagnetic spectrum.
ΔE= h ν
A nucleus will only flip spins, absorb energy, when the frequency of electromagnetic radiation just matches the change in energy, ΔE. This is called the point of resonance. Nuclei will have differing resonant frequencies based on their local electronic environment. This can be seen in “A handmade example of a proton (1H) NMR spectrum.” All nuclei under observation are irradiated with radio waves to the higher energy state and are then allowed to decay back to the lower energy state. This decay is what is observed. A free induction decay signal is collected as the nuclei fall back to the lower energy state, Figure 4 depicts a generic FID.
[[File:Nmr fid good shim EN.svg|500px|thumb|Figure 4]]
This FID is then subjected to a Fourier transform to convert from the time domain to the frequency domain, seen in Figure 5.
[[Image:NMR spectrum generic.jpg|500px|thumb|Figure 5]]
A change in the magnitude of the magnetic field will change the resonant frequency of the nucleus. Therefore, in order to compare spectra between instruments with varying size magnetic strength it is necessary to convert from frequency to parts per million, ppm. This can be done with the equation seen in Figure 6.
[[Image:Frequency to ppm.jpg|500px|thumb|Figure 6]]
With the arrival of Fourier Transform instruments in the 1970s it became possible to acquire spectra of nuclei that are not naturally abundant, such as 13C which is only 1.1% naturally occurring. This requires the acquisition of multiple spectra and adding them together to get a greater sensitivity. The signal to noise ratio (S/N) will increase as acquisitions increase, because the signal magnitude increases linearly with acquisition number while the noise magnitude increases as the square of the number acquisitions. So, the S/N will increase as the square of the number of acquisitions as seen in Figure 7.
[[Image:Signal to noise.jpg|500px|thumb|Figure 7]]
The Nobel Prize in Chemistry 2002 went partly to Kurt Wuthrich for “NMR Studies of Structure and Function of Biological Macromolecules,”[1] so NMR is important to structural biochemistry. Table 2 lists Nobel prizes awarded for discoveries related to NMR spectroscopy.
[[Image:NMR Nobel prizes.jpg|500px|thumb|Table 2]]
[[Image:nmr.jpg|500px|thumb|A handmade example of a proton (<sup>1</sup>H) NMR spectrum]]
NMR is a powerful technique that can be used to determine the structure of [[Structural Biochemistry/Proteins|proteins]] in highly concentrated solution, by analyzing the relative positions of certain atoms (Shriner 136). Protein NMR exploits the absence of zero net nuclear spin of the most abundant isotopes of carbon and oxygen (12 and 16) as well as the abundant isotope of Nitrogen (14) with a net nuclear spin of 1. NMR cannot be performed on an atom with zero net nuclear spin. Since there are many distinct nuclei present in a single protein much overlap is expected in the chemical shifts produced through the NMR analysis therefore a multidimensional approach is applied. Magnetization is applied to the protein and nuclei through electromagnetic pulses that can magnetize nuclei in two ways. The first involving magnetization through nuclei bonding and the second through open space. Each approach offers a different way to analyze the protein such as the first approach allowing for distinct nuclei to be targeted whereas the second approach allowing for structure calculation distance restraints and targeting an unlabeled protein.
Intrinsically magnetic nuclei display spinning properties that produce a magnetic moment. When an external magnetic field is applied to the system the magnetic moment can adopt either an alpha or beta state. The strength of the magnetic field determines the proportionality of alpha to beta with a tendency to favor alpha as it is aligned with the field and has a lower energy. By supplying an electromagnetic pulse alpha spin nuclei will change to beta and produce resonance. By keeping a constant magnetic field on the system and adjusting the frequency of the electromagnetic pulses a spectrum of resonance can be obtained.
Currently, NMR spectrometers use the Fourier transform method of pulse radiation. To change the nuclei in alpha state to beta, a strong pulse of radiation is used. Then the pulse of radiation is removed and the nuclei go back to their original alpha state, giving a decay signal. This signal is converted by the computer to a frequency domain spectrum in a very fast way. By storing many signals a more intense spectrum is produced. (Shriner 136)
Electrons around a magnetic nucleus produces a local magnetic field opposite to the applied magnetic field. Magnetic nuclei can absorb the electromagnetic pulses at specific frequencies coined "chemical shifts" (signal positions) expressed in parts per million (ppm). These chemical shifts are designated relative to a standard compound such as a derivative of tetramethylsilane (TMS) (CH<sub>3</sub>)<sub>4</sub>Si (which has a chemical shift of 0.0) that is soluble in water. NMR spectra that are produced through this assay can be analyzed, and with the combination of a multidimensional analysis the structure of the protein can be determined.
When an atomic nuclei is influenced by a magnetic field, it creates a magnetic moment which will give an orientation of spinning to itself. Different orientation of spinning, spin states, exist in different states of energy - alpha-state and beta-state - where alpha-state is found to be more stable with a lower energy through experiments as it has the same direction with the magnetic field. In order to transits alpha-state to beta-state (excited state), pulse of electromagnetic radiation is needed to increase the frequency of the electromagnetic radiation (through irradiation) to have the spinning nucleus to overcome the energy barrier and change its orientation. (See [http://en.wikipedia.org/wiki/Bohr_model Bohr Model] for more information) Thus, resonance will be obtained. It was discovered by American physicist Edward Mills Purcell and physicist Felix Bloch from Switzerland in 1946.
The difference between energy levels split by a magnetic field corresponds to the energy of radio waves. So, the electronics required for the NMR spectrometer weren’t developed until WWII when the government invested heavily into radar technology. Radar is simply the use of radio waves to detect location and direction of moving objects. Better frequency synthesizers, amplifiers, receivers and signal processors all contributed to advancements in the field of NMR spectroscopy.
The components of a NMR Spectrometer can be seen in Figure 8.
[[Image:NMR Spectrometer.jpg|500px|thumb|right|Figure 8]]
Some common 2D experiments can be seen in Table 3:
{| style="clear:none;float:left;margin:1em 0 1em 1em"
|-
! Common 20 experiments <sup>(Table 3)</sup>
|-
| '''COSY''' || '''Correlated Spectroscopy'''<br />Through bond H-H correlation
|-
| '''TOCSY''' || '''Total Correlation Spectroscopy'''<br />Extended through bond H-H correlation
|-
| '''1D NOE''' || '''Nuclear Overhauser Effect Spectroscopy'''<br />H-H through space correlation
|-
| '''NOESY''' || '''Nuclear Overhauser Effect Spectroscopy'''<br />H-H through space correlation
|-
| '''ROESY''' || '''Rotating Frame Overhauser Effect Spectroscopy'''<br />Similar to NOESY
|}<br style="clear:both"/>
==Magnets used for NMR==
The magnets used for NMR are very strong. Those used for high resolution protein structure determination range from 500 megahertz to 900 megahertz and generate magnetic fields thousands of times stronger than the Earth’s. Although the sample is exposed to a strong magnetic field, very little magnetic force gets out of the machine.
NMR magnets are superconductors, so they must be cooled with liquid helium, which is kept at 4 Kelvin. Liquid nitrogen, which is kept at 77 Kelvin, helps keep the liquid helium cold.
== Appropriate Isotopes ==
Only certain isotopes are capable for use in NMR. The most common isotope that is used in NMR is Hydrogen-1 (Proton NMR). Other commonly used isotopes are Carbon-13 and Nitrogen-15.
== Vector Model ==
The Vector Model only holds for uncoupled spins. Nuclei that are active under NMR spectroscopy have associated with them a nuclear spin magnetic moment, which means that these nuclei produce a small magnetic field. When these nuclei are placed in a magnetic field the energy of the interaction depends on the angle between the field and the magnetic moment. The highest energy interaction is when the magnetic field and the magnetic moment point in opposite directions, and the lowest energy interaction is when the magnetic field and magnetic moment point in the same direction.
Before a magnetic field is applied to a population of nuclei the magnetic moments of these nuclei are oriented randomly due to random thermal motion. After a magnetic field is applied one has to wait for the spins to come to equilibrium, a process known as relaxation. Pointing in the direction of the magnetic field is slightly energetically favored, and hence only a very small number of spins will do so, forming the bulk magnetization vector. The sample is hence magnetized. At equilibrium the bulk magnetization vector will point in the direction of the magnetic field (we will assume this is the z direction) and will be stationery. If the magnetization vector was tilted away from the axis it would precess at the Larmor frequency (-gyromagnetic ratio * magnetic field).
The purpose of a pulse is to quickly change the direction of the magnetization vector. This can be done by creating a much weaker magnetic field in the direction one desires, but allowing it to oscillate at the aforementioned Larmor frequency. This will result in the magnetization vector pointing in the direction one desires. This occurs because when the B1 field (the weaker field) oscillates near the Larmor Frequency, the result is that the strength of the B0 field (the stronger field in the z direction) appears to be reduced. Hence the resulting magnetic field (the effective field) can point very close to the direction of the B1 field if the B1 field is much larger than the reduced field.
An on resonance pulse involves changing the direction of the magnetization vector by applying the B1 field in a certain direction for a specific time. The angle through which the magnetization vector is rotated is given as the product of the frequency of the effective field and the time the pulse is applied. By applying different times one can rotate the magnetization vector to different angles.
For a real NMR experiment there are going to be more than one resonance frequencies in the sample. If one makes the B1 field strong enough it is possible to bring the magnetization vector very close to the desired orientation, which means we can bring it close to the ideal case of an on resonance pulse.
The vector model can be used to understand simple NMR experiments.
== Chemical shifts ==
'''Chemical shifts''' are the units used in Protein NMR analysis graphs. Chemical shift correlates to the different radiofrequency electromagnetic pulses sent through the protein sample. Each molecule that exhibits spin properties show different distinct chemical shifts. Chemical shifts can be observed by sending nuclear magnetic energy onto the protein sample. The electron clouds that surround each spin nuclei create a local magnetic field that opposes the applied magnetic field. When the electromagnetic pulse runs through the sample alpha spin nuclei that are hit with the correct amount of energy to switch to beta spin do so and subsequently cause resonance. This resonance can then be recorded and is reported for the different frequencies applied to sample as parts per million (ppm chemical shifts). For example, when the nuclear magnetic field strength sends out a frequency of 1 ppm (parts per million), CH<sub>3</sub> reacts to it and exhibits beta spin behavior from which the spectroscopy catches this signal and records it.
Most hydrogen absorptions in 300-MHz 1H NMR fall within a range of 3000 Hz. Rather than record the exact frequency of each resonance, we measure it relative to an internal standard, the compound tetramethylsilane, (CH<sub>3</sub>)<sub>4</sub>Si. Its 12 equivalent hydrogens are shielded relative to those in most organic molecules, resulting in a resonance line conveniently removed from the usual spectral range.
A problem with these numbers, however, is that they vary with the strength of the applied magnetic field. Because field strength and resonance frequency are directly proportional, doubling or tripling the field strength will double or triple the distance (in hertz) of the observed peaks relative to (CH<sub>3</sub>)<sub>4</sub>Si. To make it easier to compare reported literature spectra, we standardize the measured frequency by dividing the distance to (CH<sub>3</sub>)<sub>4</sub>Si (in hertz) by the frequency of the spectrometer. This procedure yields a field-independent number, the chemical shift δ.
== NMR in Characterizing Organometallics ==
NMR spectra uses superconducting magnets to many metal nuclei. Carbon 13 NMR has become increasingly useful in facilitating due to its low natural abundance and low sensitivity for NMR experiment. The integration of NMR peaks of organometallic complexes can provide the ratio of atoms in different environments. Since the relaxation times of the carbon atoms vary in organometallics, a great deal of inaccuracy result from this. However it does have its advantages as well. For example, terminal carbonyl peaks are frequently in the range of 195 to 225ppm, which allows it to be easily distinguished from other ligands. The 13C chemical shift correspond with the strength of the CO bond. The stronger the bond, the smaller the chemical shift. 13C in cyclopentadienyl ligands have a wide range of chemical shifts in paramagnetic compounds whereas it's narrower for diamagnetic compounds.
== Nuclei Spin States ==
In NMR, certain atomic nuclei must be magnetic by nature in order for this technique to be used. However, only a certain number of isotopes have this magnetic characteristic called spin. An example is hydrogen. When an external magnetic field is applied, hydrogen's spinning proton generates a magnetic moment which can take either the α or β spin state. The energy difference between the two states is directly proportional to the amount of external magnetic field applied. The α state is aligned with the applied field and has lower energy than the β state. When a pulse of electromagnetic radiation is applied to the α state, it can be excited to the β state, thus a resonance will be obtained.
The NMR is only able to detect certain atoms and only certain isotopes. For example, it can detect the Hydrogen molecules with a mass of 1 amu, but not the other isotopes. Most commonly the Hydrogen and Carbon NMR's are used. The information that can be determined by the NMR is immense. In the case of the Hydrogen NMR, one can use a certain amount of knowledge from a table to determine what each peak corresponds to which group within your sample. Interpreting NMR's can also be a little tricky in that one must understand splitting patterns. For example, the carbon atom you may be examining may have only one hydrogen attached, however if attached to a methyl group, it will appear as a quartet.
==Shielding and Deshielding==
Protons in different chemical environments are shielded by different amounts. When a nucleus surrounded by electrons is exposed to a magnetic field of strength H<sub>0</sub>,these electrons move in such a way as to generate a small local magnetic field, h<sub>local</sub>, opposing H<sub>0</sub>. As a consequence, the total field strength near the hydrogen nucleus is reduced, and the nucleus is thus said to be shielded from the magnetic field strength by its electron cloud. The degree of shielding depends on the amount of electron density surrounding the nucleus. dding electrons increases shielding; their removal, consequently, would cause deshielding. Also, a proton is deshielded when the induced field reinforces the applied field. For example, the induced field can reinforce the applied field. As a result, these protons are deshielded and their chemical shifts are at a higher value of ppm.
==Coupling==
'''J-coupling''' arises from the interaction of different spin states through the chemical bonds of a molecule and results in the splitting of NMR signals. This coupling provides detailed information about the connectivity of atoms and the structure of a molecule.
Spin-spin slitting is given by the '''N+1 Rule''': 1) H that is neighbored by one H resonnate as a doublet.2) H that is neighbored by two set of equivalent Hs resonate as trplet. 3) H that is neighbored by three equivalents of hydrogens resonate as a quartet.
A multiplet can be shown when there is a mixture of couple patterns, some of which could be broken down to small parts (i.e. qd- quartet of doublet). But for the most part, if a coupling pattern shows complexity not easily countable by N+1 rule, such pattern is called a multiplet.
In addition, functional groups containing alcohol (-OH) such as alcohol, carboxylic acid have a broad band on NMR spectra. This is due to the fact that Hydrogens on alcohol can hydrogenbond easily, thus being able to couple in broad spectra than other H's. Thus just by looking at the type of the spectra (such as multiple peaks or broad peak), one can easily categorize the functional group to which the H is associated with.
The ratio of the splitting peaks is given by a mathematical mnemonic device called Pascal's triangle. Each number in this triangle is the sum of the two numbers closest to it in the line above. It is important to remember that nonequivalent nuclei mutually split one another. In other words, the observation of one split absorption necessitates the presence of another split signal in the spectrum. Moreover, the coupling constants for these pattern must be the same. Double and triple bond characteristic chemical environments show complex splitting peaks. An alkyne for example, can have hydrogen splitting patterns an extra adjacent carbon away. An alkene depending on where the hydrogen is located (cis or trans) to a relative chemical environment, can show a slightly distorted peak.
==Integration==
'''Integration''' is very useful in NMR spectrum in determining the structure of a molecule. The relative integrated intensity of a signal is proportional to the relative number of nuclei giving rise to that absorption. Normally, an NMR spectrum plot will tell you very complex integration numbers. However, integration doesn’t have to be exact. You can just divide each integration number by the smallest number in your NMR spectrum. The ratio will help you get a big picture of the relative number of H’s represented by a peak. Combining the chemical shifts and the peak integration, you might be able to determine the structure of a molecule by using the ''chemical shift table''.
Researchers usually use NMR to check if the product they made from a reaction is what they really want. So they don’t have to figure out the structure of a molecule by looking at a complex spectrum. They know what the spectrum should look like if the reaction works. By comparing the actual spectrum to the ideal one, they are able to verify the molecule they want is in the product. Solvent used is usually CD<sub>2</sub>Cl<sub>2</sub>, since D would not show up in a H NMR spectrum. Combine with chemical shifts, they can be used to determine structure.
== Proton NMR interpretation ==
To interpret proton NMR, it is important to know where each type of proton lies. Below is a list of types of proton and their chemical shift on NMR.
[[Image:Table HNMR.jpg|Proton NMR frequency]]
It is important to know that proton NMR peaks only indicate the presence of protons (H). It does not show other atoms like Carbon, Oxygen...etc. As mentioned in the above section, proton peaks shows spliting because of coupling by the neighbor protons. The integration of each peak is the amount of proton relative to other proton on the NMR. When solving structure from the H NMR, it is important to write down the chemical shift, integration and the split of each peak. Then base on the chemical shift of the peak, write down the possible functional group and structure. Lastly, arrange and connect each structure so that it matches the split and the integration of proton NMR. Below are examples of hand drawn proton NMR and also the detail instruction to interprete proton NMR.
=== Example ===
The interpretation of each proton NMR is given right below of each graph. Try not to look at the structure, and only look at the molecular formula and proton NMR to interpret the structure of the compound. Note that the examples given are the basic and simple compound. The NMR of protein structures is much more complex than these examples. The goal of these examples is to give you an idea how proton NMR are interpreted.
[[Image:1H NMR Ethyl Acetate Coupling shown - 2.png|Proton NMR]]
Base on the chemical shift of proton NMR, there should be a ketone functional group or a structure that contains a carbonyl group at peak around 2.0. The peak around 1.3 could be a primary or secondary alkyl group.
Now look at the splitting of the peaks at chemical shift 1.3 (C), the triplet (3 peaks) shows that the proton is probably split by 2 neighbor protons (base on the n+1 rule mention in integration section). If it is split only by 1 neighbor proton, then it would be a doublet (2 peaks). Next, look at the peak at chemical shift 2.0 (B). The singlet (single peak) means that this proton environment probably has no neighbor proton. The peak at chemical shift 4.2 (A) is a quadruplet (4 peaks). This means there are about 3 neighbor proton next to proton environment A. Since it is known that B has no proton right next to it, and A and C both has neighbor protons, it is safe to assume that proton environment A is right next to proton environment C, which could be a -CH2CH3.
The following possible structures deduced above are a ketone and an ethyl group.
{|class="wikitable"
|+ Splitting analysis
|-
!Substructure
|[[File:Methyl group.svg|100px]]
|[[File:Ethyl group.svg|150px]]
|-
!Splitting pattern
|Singlet
|Quartet and triplet
|-
!Analysis
| C with no neighboring H
| C with three neighboring H<br>C with two neighboring H
|}
Note that the there are two oxygen atoms from the molecular formula. One of the oxygen is included in ketone. The other oxygen must be binding onto one of these two structures. Take a look at peak A, the chemical shift is near 4.0, which means it might be connected to a heteroatom like oxygen. Place the oxygen next to the -CH2CH3 and connect the structure together, you will get ethyl acetate as indicated below the proton NMR. Notice that the proton B does not have any neighbor proton. Proton A is split into 4 peaks by proton C (n+1 rule, n = 3 neighbor protons). Proton C is split into 3 peaks by proton A (n = 2 neighbor protons). The CH2, secondary alkyl, base on the proton frequency table should be around the chemical shift ~1.2 ppm, but instead it is at ~4.2 ppm. The reason for this is that the CH2 is attached to oxygen a heteroatom, which is a electron withdrawing group. The result is that the chemical shift is pulled left field resulting in a chemical shift of 4.2 ppm. Another way to look at this is to assume there is an ester functional group at chemical shift of 4.2 ppm, and the primary alkyl group is attached to the ester.
The integration of the proton NMR also matches the structure well. The methyl CH3 next to the carbonyl group has 3 protons, and the primary alkyl next to the CH2 has 3 protons as well. This explains why peak B has the same height as peak C (same amount of protons). Peak A has the lowest height because it only has two protons.
[[Image:3-methoxyphenol NMR.jpg|proton NMR]]
This proton NMR example looks more complicated than the first one, but it is actually easier. One important information from this proton NMR is that there are peaks around 6.0~ 7.0 ppm (F,B,D,E). This always almost indicates the presence of aromatic ring. Noticed that there are about 4 group of peaks from 6.0 to 7.0 ppm? This means that there are four protons attach to 4 carbons on the aromatic ring. This leaves 2 carbons of the aromatic ring free to attach to two substituents. The position of these substituents is clearly an ortho and para position on the aromatic ring. The reason is that two different substituents on ortho and para position of the aromatic ring would give 4 proton environments. If there are only two proton environments around 6.0~ 8.0 ppm with the same integration (height), it means that the aromatic ring is probably symmetric on both sides with double para substituents. Now look at the peak (A) at 5.5 ppm. The peak is a broad peak instead of sharp peak like the rest. This means that the proton of this environment is attached to a heteroatom. The only heteroatom present in the sample base on the molecular formula given is an oxygen atom. This means that the proton is directly attached to oxygen, which would be a alcohol group -OH (Note that the proton on the alcohol group can have the chemical shift range from 0.5 to 5.0 ppm). It is important to remember that the proton that attached to a heteroatom is also known as exchangeable proton. Exchangeable proton sometimes do not show up on H NMR, so do not worry when an expected exchangeable peak doesn’t appear on HMNR.
The peak (C) at the chemical shift of ~3.9 ppm has the highest integration (height) and is a singlet. Usually when such a high singlet peak is observed around 3.9 ppm with oxygen in the molecular formula, there is a high chance that it is a ether group, -OCH3. Since there is no neighbor proton next to the CH3 of the ether, it is a singlet peak. In addition, the height of the peak is high compare to the other peak, which indicate a possibility of CH3 with at least 3 times more protons than other proton environment. Base on the interpretations above, these are the possible function groups:
[[Image:3-methoxyphenol NMR1.jpg|possible proton structures]]
Attach the alcohol group and the ether group in ortho- para position will result in the correct structure of the compound.
== Nuclear Overhauser Enhancement Spectroscopy (NOESY) ==
[[File:Noesy.jpg|thumb|NOESY Spectrum of Codeine. Each peak correlates to a proton.]]
'''NOESY''' is a NMR technique that uses the Nuclear Overhauser effect to help understand the tertiary structure of proteins and other large molecules. The nuclear Overhauser effect is the interaction of nuclei at short distances from each other. The extent of the effect is approximately 5 Angstroms. This is a better analysis of tertiary structure for proteins that do not form crystalline structures and need to be analyzed in solution. Like in NMR, a magnetic field is produced around the molecule and RF waves at different frequencies are produced to produce resonance. The resonance is produced when the nucleus reverses spin. Unlike normal NMR, the aim of NOESY is to determine the effect of the resonance of one nucleus on the other nuclei in the area. The graph that is produced gives you an idea of where the nuclei are in relation to each other.
The NOESY experiment reveals the distance of protons relative to one another. Protons very close to each other, (about 3 Angstroms apart) will produce a very large signal. The limit of detection is about 5-6 Angstroms apart, and will produce only a very weak signal.
The graph has diagonal dots correspond to the placement of the nuclei on the one dimensional NMR. There are dots out side of this diagonal spectrum. These dots show what nuclei are in close proximity of each other. If a line was drawn horizontally and vertically from the outlaying dots, the dots, on the diagonal spectrum, that lay on the lines would be in close proximity to each other. Using the information from the NMR and the NOESY a tertiary structure of the macromolecules could be formed. However, the resulting tertiary structure would contain a family of structures. This happened for three reasons. The first is the approximation of the distance between the nuclei. Second, there may not have been enough constraints to produce a singular structure. Thirdly, the protein is in solution, and the solution contains many proteins.
This technique is mainly used for hydrogen atoms, because they are the most abundant atom in biological systems and are also the simplest.
==Protein NMR==
An NMR machine is essentially a huge magnet. Many atoms are essentially little magnets. When placed inside an NMR machine, all the little magnets orient themselves to line up with the big magnet. By harnessing this law of physics, NMR spectroscopists are able to figure out physical, chemical, electronic, and structural information about molecules.
NMR relies on the interaction between an applied magnetic field and the natural “little magnets” in certain atomic nuclei. For protein structure determination, spectroscopists concentrate on the atoms that are most common in proteins: hydrogen, carbon, and nitrogen. What researchers seek to learn through NMR is how this chain of amino acids wraps and folds around itself to create the three-dimensional, active protein. Solving a protein structure using NMR is a series of experiments, each of which provides partial clues about the nature of the atoms in the sample molecule, such as how close two atoms are to each other, whether these atoms are physically bonded to each other, or where the atoms lie within the same amino acid. Other experiments show links between adjacent amino acids or reveal flexible regions in the protein. Each new set of experiments further refines possible structures until finally the scientists carefully select 10 to 20 solution that best represent their data and present the average as their final structure.
'''Sample Preparation for NMR'''
In order to study protein structure by NMR, highly purified samples of the protein of interest must be prepared. The protein can either be isolated from natural sources, or expressed in host organisms such as E. Coli through recombinant DNA techniques. The bacteria with the recombinant gene coding for a specific protein are grown in minimal media with 15NH4Cl being the only source of nitrogen for the bacteria, and 13C-glucose offering the only source of carbon for the bacteria to make proteins. This way, when the bacteria produce the protein of interest, these proteins are labeled with 15N and 13C, both of which are NMR active. The protein of interest is then purified through various protein purification techniques (See protein purification techniques). Finally, the protein, in an appropriate buffer, is loaded into an NMR tube and is ready to be placed in the NMR magnet.[[File:Figure 1.pdf|thumb|Figure 1. General scheme for protein structure determination by NMR in solution phase.]]
'''NMR Experiments'''
'''2D Experiments'''There are many different types of NMR experiments one can run to help to reveal information about the structure of the protein. The experiments usually differ in what correlations are detected. For example, a 2D [1H-1H]-NOESY experiment will reveal hydrogen atoms that are within 0.5 nm apart. Protons that exhibit this interaction will show up as a cross peak on the 2D spectrum (Figure 2).[[File:Figure 2.pdf|thumb|Figure 2. Simplified example of 2D [1H-1H]-NOESY NMR spectrum. The dots on the diagonal represent the 1D spectrum of the molecule. There are two protons that are being examined, one at 9 ppm and the other at 8 ppm. The presence of the cross peak (circled) reveals that these two protons are within 0.5 nm apart.]]
Taking this information, theoretically, the protons at 8 ppm and 9 ppm on the 1D spectrum could be assigned to a certain residue in the amino acid sequence. For example, if Ala1 is the point at 8 ppm and Ala54 is at 9 ppm, and there is a crosspeak present, then the observation of this NOE reveals a circular structure for this polypeptide chain (Figure 3). [[File:Figure 3.pdf|thumb|Figure 3. Circular structure of polypeptide chain revealed by presence of NOE on 2D NOESY spectrum.]]
Because proteins are much more complicated than this example above, the 2D NOESY spectrum is often cluttered and crosspeaks cannot be made out clearly because many of these points may stack on top of one another. Other experiments are required to reveal the necessary information to determine the 3D structure of the protein, such as 3D experiments.
'''3D Experiments'''
3D experiments use a third dimension to reveal peaks that may be stacked on top of one another in the 2D spectrum. An example is 3D 15N-correlated [1H-1H]-NOESY (Figure 4).
There are many other experiments to correlate different nuclei and their neighbors.
[[File:Figure 4.pdf|thumb|Figure 4. Example of 3D 15N [1H-1H] NOESY. The peaks that would be stacked on top of one another in the 2D [1H-1H] NOESY are now drawn out in the third dimension by relating its 15N chemical shifts. This cleans up the spectrum and helps in resonance assignments.]]
==Protein NMR Advantages==
NMR is a good method in trying to solve the structure of a protein and the continued unanswered protein folding problem. However it is not the only method as crystallography is also a possible method for determining protein structure. However, NMR has its advantages over crystallography.
One instance is that it uses molecules in solution, so it is not limited to those that crystallize well since crystallization is a very uncertain and time-consuming step in X-ray crystallography. In addition, some proteins do not readily crystallize. Furthermore, although structures present in crystallized proteins very closely represent those of proteins free of the constraints imposed by the crystalline environment, structures in solution can be sources of additional insights. NMR also makes it fairly easy to study properties of a molecule besides its structure such as the flexibility of the molecule and how it interacts with other molecules. With crystallography, it is either impossible to study these aspects or it requires an entirely new crystal.
==Protein NMR Disadvantages==
Most NMR spectroscopists focus on molecules no larger than 20-30 kilodaltons. X-ray crystallographers have solved structures upto 2,500 kilodaltons.
==NMR in Real Life==
The 15 carbon compound viniferone found in grape seeds was isolated in 2004. Viniferone falls into a group of substances, grape seed, that are very active against radicals and oxidative stress. There was very little recovery of viniferone from an abundance of grape seeds (~40 mg of viniferone from 10.5 kg of grape seeds), so precautions had to be taken in the techniques used to obtain its structure. Most tests would destroy the minuscule amount proanthocyanidins t of viniferone obtained, so a combination of spectroscopic techniques were utilized (including NMR) to obtain viniferone's structure. Obtaining the <sup>1</sup>H and <sup>13</sup>C NMR data was critical in determining the structure of Viniferone. The variety of absorption signals at various chemical shifts helped determine the presence of alkenes and benzene rings. Correlation spectroscopy and eventually X-ray crystallography were used to verify the structural arrangement of Viniferone.<ref name ="Schore">Schore, Neil E. (2011). Organic Chemistry Structure and Function 6th Edition. W. H. Freeman</ref>
== References ==
{{Reflist|2}}
If you would like to learn more about interpreting NMR peaks, I highly suggest this website. [http://www.wfu.edu/~ylwong/chem/nmr/h1/ http://www.wfu.edu/~ylwong/chem/nmr/h1/]
<br> Berg, Jeremy M., Lubert Stryer, and John L. Tymoczko. Biochemistry. 6th ed. Boston: W. H. Freeman & Company, 2006. 98-101.
<br> Shriner, Christine K. F. Hermann, Terence C. Morrill, David Y. Curtin, Reynold C. Fuson. The Systematic Identification of Organic Compounds. 8th ed. U.S.A. John Wiley & Sons, Inc. 2004. 136-142.
<br> Vollhardt, K. Peter C., Schore, Neil E. Organic Chemistry - Structure and Function. 5th ed. New York: W. H. Freeman & Company, 2005. 398-432.
<br> Keeler, James. Understanding NMR Spectroscopy. West Sussex, England. John Wiley & Sons. 51-77.
<br>Clore, Marius G., Gronenborn, Angela M. “Chapter 34: Structures of Larger Proteins, Protein-Ligand, and Protein-DNA Complexes by Multidimensional Heteronuclear NMR.” Multidimensional NMR Methods for the Solution State. United Kingdom. John Wiley & Sons Ltd.
<br>Wuthrich, Kurt. “Chapter 33: Biological Macromolecules: Structure Determination in Solution.” Multidimensional NMR Methods for the Solution State. United Kingdom. John Wiley & Sons Ltd.
<br> National Institutes of Health, National Institute of General Medical Sciences, New York, 2007, 29-30, http://www.nigms.nih.gov.
{{BookCat}}
[1]"Kurt Wüthrich - Nobel Lecture". Nobelprize.org. 25 Oct 2010 http://nobelprize.org/nobel_prizes/chemistry/laureates/2002/wuthrich-lecture.html
0q6cp36hx0h3fn26tzglaxugu07p5kp
4676255
4676254
2026-10-15T12:42:24Z
DMacks
94753
/* General Information */ Delete columns not relevant to context
4676255
wikitext
text/x-wiki
NMM spectroscopy is unique in being able to reveal the atomic structure of macromolecules in solution, provided that highly concentrated solution can be obtained. This technique depends on the fact that certain atomic nuclei are intrinsically magnetic. The chemical shift of nuclei depends on their local environment. Furthermore, the spins of neighboring nuclei interact with each other in ways that provide definitive structural information. This information can be used to determine complete three-dimensional structures of proteins.
== General Information ==
'''Nuclear Magnetic Resonance Spectroscopy (NMR)''' is an analytical technique which exploits the fact that certain nuclei possess a property called spin (I). NMR spectroscopy is possible due to the Zeeman Effect discovered first in the 1890s. The structures of proteins can be determined by NMR by first preparing the isotopically labeled samples. In the magnet, the "natural magnets" in the atoms of the sample line up with the magnetic field of the NMR magnet. Then, the sample is exposed to a series of radio wave pulses to disrupt the magnetic equilibrium of the atoms. The reaction of these nuclei can be observed to assess their chemical nature specifically, their chemical shift properties. Sets of experiments can be conducted to refine possible structures and present the average of the experiments as the final structure. It can have advantages over X-ray crystallography because the samples of proteins can be in solution rather than crystallized form and other properties of the sample protein, such as flexibility and interactions, can be determined while X-ray crystallography only reveals the structure of the protein.
It is the splitting of atomic energy levels when the atoms are placed in a magnetic field. This effect was later found to occur as a result of nuclear spin. In 1924, Wolfgang Pauli first suggested the theoretical basis of NMR when he concluded that some atomic nuclei should possess nuclear spin and these nuclei would split into degenerate energy levels when placed in a magnetic field. These nuclei have a magnetic moment, in and of themselves, which is called spin. Nuclei that possess spin are said to be NMR active. Some NMR active nuclei can be seen in Table 1, with italicized nuclei being those commonly studied in biological molecules.
{| class="wikitable" style="margin:auto;"
|+Table 1. Magnetic properties of common nuclei<ref>''[[:w:CRC Handbook of Chemistry and Physics|CRC Handbook of Chemistry and Physics]]'', 65th ed.</ref>
|-
![[Isotope]]
! [[Natural abundance|Occurrence<br> in nature]]<br> (%)
! [[Spin (physics)|Spin number]] {{mvar|I}}
! [[Operating frequency]] at 7 [[Tesla (unit)|T]]<br> (MHz)
! Relative sensitivity
|-
|<sup>1</sup>H
|{{0}}99.984
|{{sfrac|1|2}}
|300.13
|1
|-
|<sup>2</sup>H
|{{0|00}}0.016
|1
|{{0}}46.07
|0.0964
|-
|<sup>10</sup>B
|{{0}}18.8
|3
|{{0}}32.25
|0.0199
|-
|<sup>11</sup>B
|{{0}}81.2
|{{sfrac|3|2}}
|{{0}}96.29
|0.165
|-
|<sup>12</sup>C
|{{0}}98.9
|0
|{{0|00}}0
|0
|-
|<sup>13</sup>C
|{{0|00}}1.1
|{{sfrac|1|2}}
|{{0}}75.47
|0.0159
|-
|<sup>14</sup>N
|{{0}}99.64
|1
|{{0}}21.68
|0.00101
|-
|<sup>15</sup>N
|{{0|00}}0.37
|{{sfrac|1|2}}
|{{0}}30.41
|0.00104
|-
|<sup>16</sup>O
|{{0}}99.76
|0
|{{0|00}}0
|0
|-
|<sup>17</sup>O
|{{0|00}}0.0317
|{{sfrac|5|2}}
|{{0}}40.69
|0.0291
|-
|<sup>19</sup>F
|100
|{{sfrac|1|2}}
|282.40
|0.834
|-
|<sup>28</sup>Si
|{{0}}92.28
|0
|{{0|00}}0
|0
|-
|<sup>29</sup>Si
|{{0|00}}4.70
|{{sfrac|1|2}}
|{{0}}59.63
|0.0785
|-
|<sup>31</sup>P
|100
|{{sfrac|1|2}}
|121.49
|0.0664
|-
|<sup>35</sup>Cl
|{{0}}75.4
|{{sfrac|3|2}}
|{{0}}29.41
|0.0047
|-
|<sup>37</sup>Cl
|{{0}}24.6
|{{sfrac|3|2}}
|{{0}}24.48
|0.0027
|}
Separately, Bolch at Stanford and Purcell at Harvard in 1946 each translated the Zeeman effect into the first NMR spectrum. In 1949, Proctor and Yu at Stanford measured the first chemical shift and spin couplings. Initially, commercial NMR spectrometers were continuous wave type and were only able to detect the most sensitive nuclei, 1H & 19F.
NMR ‘active’ nuclei are active if the nuclear spin, I, is non zero.
To determine spin of nuclei:
Mass # is even and # neutrons is even, I=0, therefore no spin
Mass # is even and # neutrons is odd, I= integer, therefore spin
Mass # is odd and # neutrons is even or odd, I=half integer, therefore spin
The cause of spin can be visualized with the following analogy. A rotating charged particle (e.g. hydrogen nucleus aka proton) will produce a magnetic field perpendicular to the direction of rotation which is analogous to the magnetic field of a bar magnet, as seen in Figure 1.
[[Image:Spinning proton magnetic field lines.jpg|500px|thumb|Figure 1]]
Absent an external magnetic field (B¬0) these active nuclei are oriented in random directions, but in the presence of an external magnetic field (B¬0) these nuclei orient themselves either with or against the field, as seen in Figure 2.
[[Image:Nuclei in and out of magnetic field.jpg|500px|thumb|Figure 2]]
Nuclei are dispersed between states of different energies. The different energy levels are induced by the presence of the external magnetic field (B¬0). (For spin ½ nuclei two orientations are possible, with the higher energy orientation being ‘β spin state’ and the lower energy orientation being ‘α spin state’.) This is evident in the following equation where E=energy, h=Planck’s constant, ν=frequency, γ=gyromagnetic ratio (nucleus dependent), B0= external magnetic field:
ΔE= h ν = γ B0
To see this graphically see Figure 3.
[[Image:Magnetic field induced energy levels.jpg|500px|thumb|Figure 3]]
These induced energy level differences are what allow the use of NMR. At equilibrium, nuclei will occupy both levels of energy, low and high. However, according to the Maxwell-Boltzmann Distribution, the lower energy level will be occupied by a greater number of nuclei. This difference in the number of nuclei, between low and high energy levels, is what NMR exploits. The energy required to cause a spin flip, transition from low to high energy state, corresponds to the radio frequency range of the electromagnetic spectrum.
ΔE= h ν
A nucleus will only flip spins, absorb energy, when the frequency of electromagnetic radiation just matches the change in energy, ΔE. This is called the point of resonance. Nuclei will have differing resonant frequencies based on their local electronic environment. This can be seen in “A handmade example of a proton (1H) NMR spectrum.” All nuclei under observation are irradiated with radio waves to the higher energy state and are then allowed to decay back to the lower energy state. This decay is what is observed. A free induction decay signal is collected as the nuclei fall back to the lower energy state, Figure 4 depicts a generic FID.
[[File:Nmr fid good shim EN.svg|500px|thumb|Figure 4]]
This FID is then subjected to a Fourier transform to convert from the time domain to the frequency domain, seen in Figure 5.
[[Image:NMR spectrum generic.jpg|500px|thumb|Figure 5]]
A change in the magnitude of the magnetic field will change the resonant frequency of the nucleus. Therefore, in order to compare spectra between instruments with varying size magnetic strength it is necessary to convert from frequency to parts per million, ppm. This can be done with the equation seen in Figure 6.
[[Image:Frequency to ppm.jpg|500px|thumb|Figure 6]]
With the arrival of Fourier Transform instruments in the 1970s it became possible to acquire spectra of nuclei that are not naturally abundant, such as 13C which is only 1.1% naturally occurring. This requires the acquisition of multiple spectra and adding them together to get a greater sensitivity. The signal to noise ratio (S/N) will increase as acquisitions increase, because the signal magnitude increases linearly with acquisition number while the noise magnitude increases as the square of the number acquisitions. So, the S/N will increase as the square of the number of acquisitions as seen in Figure 7.
[[Image:Signal to noise.jpg|500px|thumb|Figure 7]]
The Nobel Prize in Chemistry 2002 went partly to Kurt Wuthrich for “NMR Studies of Structure and Function of Biological Macromolecules,”[1] so NMR is important to structural biochemistry. Table 2 lists Nobel prizes awarded for discoveries related to NMR spectroscopy.
[[Image:NMR Nobel prizes.jpg|500px|thumb|Table 2]]
[[Image:nmr.jpg|500px|thumb|A handmade example of a proton (<sup>1</sup>H) NMR spectrum]]
NMR is a powerful technique that can be used to determine the structure of [[Structural Biochemistry/Proteins|proteins]] in highly concentrated solution, by analyzing the relative positions of certain atoms (Shriner 136). Protein NMR exploits the absence of zero net nuclear spin of the most abundant isotopes of carbon and oxygen (12 and 16) as well as the abundant isotope of Nitrogen (14) with a net nuclear spin of 1. NMR cannot be performed on an atom with zero net nuclear spin. Since there are many distinct nuclei present in a single protein much overlap is expected in the chemical shifts produced through the NMR analysis therefore a multidimensional approach is applied. Magnetization is applied to the protein and nuclei through electromagnetic pulses that can magnetize nuclei in two ways. The first involving magnetization through nuclei bonding and the second through open space. Each approach offers a different way to analyze the protein such as the first approach allowing for distinct nuclei to be targeted whereas the second approach allowing for structure calculation distance restraints and targeting an unlabeled protein.
Intrinsically magnetic nuclei display spinning properties that produce a magnetic moment. When an external magnetic field is applied to the system the magnetic moment can adopt either an alpha or beta state. The strength of the magnetic field determines the proportionality of alpha to beta with a tendency to favor alpha as it is aligned with the field and has a lower energy. By supplying an electromagnetic pulse alpha spin nuclei will change to beta and produce resonance. By keeping a constant magnetic field on the system and adjusting the frequency of the electromagnetic pulses a spectrum of resonance can be obtained.
Currently, NMR spectrometers use the Fourier transform method of pulse radiation. To change the nuclei in alpha state to beta, a strong pulse of radiation is used. Then the pulse of radiation is removed and the nuclei go back to their original alpha state, giving a decay signal. This signal is converted by the computer to a frequency domain spectrum in a very fast way. By storing many signals a more intense spectrum is produced. (Shriner 136)
Electrons around a magnetic nucleus produces a local magnetic field opposite to the applied magnetic field. Magnetic nuclei can absorb the electromagnetic pulses at specific frequencies coined "chemical shifts" (signal positions) expressed in parts per million (ppm). These chemical shifts are designated relative to a standard compound such as a derivative of tetramethylsilane (TMS) (CH<sub>3</sub>)<sub>4</sub>Si (which has a chemical shift of 0.0) that is soluble in water. NMR spectra that are produced through this assay can be analyzed, and with the combination of a multidimensional analysis the structure of the protein can be determined.
When an atomic nuclei is influenced by a magnetic field, it creates a magnetic moment which will give an orientation of spinning to itself. Different orientation of spinning, spin states, exist in different states of energy - alpha-state and beta-state - where alpha-state is found to be more stable with a lower energy through experiments as it has the same direction with the magnetic field. In order to transits alpha-state to beta-state (excited state), pulse of electromagnetic radiation is needed to increase the frequency of the electromagnetic radiation (through irradiation) to have the spinning nucleus to overcome the energy barrier and change its orientation. (See [http://en.wikipedia.org/wiki/Bohr_model Bohr Model] for more information) Thus, resonance will be obtained. It was discovered by American physicist Edward Mills Purcell and physicist Felix Bloch from Switzerland in 1946.
The difference between energy levels split by a magnetic field corresponds to the energy of radio waves. So, the electronics required for the NMR spectrometer weren’t developed until WWII when the government invested heavily into radar technology. Radar is simply the use of radio waves to detect location and direction of moving objects. Better frequency synthesizers, amplifiers, receivers and signal processors all contributed to advancements in the field of NMR spectroscopy.
The components of a NMR Spectrometer can be seen in Figure 8.
[[Image:NMR Spectrometer.jpg|500px|thumb|right|Figure 8]]
Some common 2D experiments can be seen in Table 3:
{| style="clear:none;float:left;margin:1em 0 1em 1em"
|-
! Common 20 experiments <sup>(Table 3)</sup>
|-
| '''COSY''' || '''Correlated Spectroscopy'''<br />Through bond H-H correlation
|-
| '''TOCSY''' || '''Total Correlation Spectroscopy'''<br />Extended through bond H-H correlation
|-
| '''1D NOE''' || '''Nuclear Overhauser Effect Spectroscopy'''<br />H-H through space correlation
|-
| '''NOESY''' || '''Nuclear Overhauser Effect Spectroscopy'''<br />H-H through space correlation
|-
| '''ROESY''' || '''Rotating Frame Overhauser Effect Spectroscopy'''<br />Similar to NOESY
|}<br style="clear:both"/>
==Magnets used for NMR==
The magnets used for NMR are very strong. Those used for high resolution protein structure determination range from 500 megahertz to 900 megahertz and generate magnetic fields thousands of times stronger than the Earth’s. Although the sample is exposed to a strong magnetic field, very little magnetic force gets out of the machine.
NMR magnets are superconductors, so they must be cooled with liquid helium, which is kept at 4 Kelvin. Liquid nitrogen, which is kept at 77 Kelvin, helps keep the liquid helium cold.
== Appropriate Isotopes ==
Only certain isotopes are capable for use in NMR. The most common isotope that is used in NMR is Hydrogen-1 (Proton NMR). Other commonly used isotopes are Carbon-13 and Nitrogen-15.
== Vector Model ==
The Vector Model only holds for uncoupled spins. Nuclei that are active under NMR spectroscopy have associated with them a nuclear spin magnetic moment, which means that these nuclei produce a small magnetic field. When these nuclei are placed in a magnetic field the energy of the interaction depends on the angle between the field and the magnetic moment. The highest energy interaction is when the magnetic field and the magnetic moment point in opposite directions, and the lowest energy interaction is when the magnetic field and magnetic moment point in the same direction.
Before a magnetic field is applied to a population of nuclei the magnetic moments of these nuclei are oriented randomly due to random thermal motion. After a magnetic field is applied one has to wait for the spins to come to equilibrium, a process known as relaxation. Pointing in the direction of the magnetic field is slightly energetically favored, and hence only a very small number of spins will do so, forming the bulk magnetization vector. The sample is hence magnetized. At equilibrium the bulk magnetization vector will point in the direction of the magnetic field (we will assume this is the z direction) and will be stationery. If the magnetization vector was tilted away from the axis it would precess at the Larmor frequency (-gyromagnetic ratio * magnetic field).
The purpose of a pulse is to quickly change the direction of the magnetization vector. This can be done by creating a much weaker magnetic field in the direction one desires, but allowing it to oscillate at the aforementioned Larmor frequency. This will result in the magnetization vector pointing in the direction one desires. This occurs because when the B1 field (the weaker field) oscillates near the Larmor Frequency, the result is that the strength of the B0 field (the stronger field in the z direction) appears to be reduced. Hence the resulting magnetic field (the effective field) can point very close to the direction of the B1 field if the B1 field is much larger than the reduced field.
An on resonance pulse involves changing the direction of the magnetization vector by applying the B1 field in a certain direction for a specific time. The angle through which the magnetization vector is rotated is given as the product of the frequency of the effective field and the time the pulse is applied. By applying different times one can rotate the magnetization vector to different angles.
For a real NMR experiment there are going to be more than one resonance frequencies in the sample. If one makes the B1 field strong enough it is possible to bring the magnetization vector very close to the desired orientation, which means we can bring it close to the ideal case of an on resonance pulse.
The vector model can be used to understand simple NMR experiments.
== Chemical shifts ==
'''Chemical shifts''' are the units used in Protein NMR analysis graphs. Chemical shift correlates to the different radiofrequency electromagnetic pulses sent through the protein sample. Each molecule that exhibits spin properties show different distinct chemical shifts. Chemical shifts can be observed by sending nuclear magnetic energy onto the protein sample. The electron clouds that surround each spin nuclei create a local magnetic field that opposes the applied magnetic field. When the electromagnetic pulse runs through the sample alpha spin nuclei that are hit with the correct amount of energy to switch to beta spin do so and subsequently cause resonance. This resonance can then be recorded and is reported for the different frequencies applied to sample as parts per million (ppm chemical shifts). For example, when the nuclear magnetic field strength sends out a frequency of 1 ppm (parts per million), CH<sub>3</sub> reacts to it and exhibits beta spin behavior from which the spectroscopy catches this signal and records it.
Most hydrogen absorptions in 300-MHz 1H NMR fall within a range of 3000 Hz. Rather than record the exact frequency of each resonance, we measure it relative to an internal standard, the compound tetramethylsilane, (CH<sub>3</sub>)<sub>4</sub>Si. Its 12 equivalent hydrogens are shielded relative to those in most organic molecules, resulting in a resonance line conveniently removed from the usual spectral range.
A problem with these numbers, however, is that they vary with the strength of the applied magnetic field. Because field strength and resonance frequency are directly proportional, doubling or tripling the field strength will double or triple the distance (in hertz) of the observed peaks relative to (CH<sub>3</sub>)<sub>4</sub>Si. To make it easier to compare reported literature spectra, we standardize the measured frequency by dividing the distance to (CH<sub>3</sub>)<sub>4</sub>Si (in hertz) by the frequency of the spectrometer. This procedure yields a field-independent number, the chemical shift δ.
== NMR in Characterizing Organometallics ==
NMR spectra uses superconducting magnets to many metal nuclei. Carbon 13 NMR has become increasingly useful in facilitating due to its low natural abundance and low sensitivity for NMR experiment. The integration of NMR peaks of organometallic complexes can provide the ratio of atoms in different environments. Since the relaxation times of the carbon atoms vary in organometallics, a great deal of inaccuracy result from this. However it does have its advantages as well. For example, terminal carbonyl peaks are frequently in the range of 195 to 225ppm, which allows it to be easily distinguished from other ligands. The 13C chemical shift correspond with the strength of the CO bond. The stronger the bond, the smaller the chemical shift. 13C in cyclopentadienyl ligands have a wide range of chemical shifts in paramagnetic compounds whereas it's narrower for diamagnetic compounds.
== Nuclei Spin States ==
In NMR, certain atomic nuclei must be magnetic by nature in order for this technique to be used. However, only a certain number of isotopes have this magnetic characteristic called spin. An example is hydrogen. When an external magnetic field is applied, hydrogen's spinning proton generates a magnetic moment which can take either the α or β spin state. The energy difference between the two states is directly proportional to the amount of external magnetic field applied. The α state is aligned with the applied field and has lower energy than the β state. When a pulse of electromagnetic radiation is applied to the α state, it can be excited to the β state, thus a resonance will be obtained.
The NMR is only able to detect certain atoms and only certain isotopes. For example, it can detect the Hydrogen molecules with a mass of 1 amu, but not the other isotopes. Most commonly the Hydrogen and Carbon NMR's are used. The information that can be determined by the NMR is immense. In the case of the Hydrogen NMR, one can use a certain amount of knowledge from a table to determine what each peak corresponds to which group within your sample. Interpreting NMR's can also be a little tricky in that one must understand splitting patterns. For example, the carbon atom you may be examining may have only one hydrogen attached, however if attached to a methyl group, it will appear as a quartet.
==Shielding and Deshielding==
Protons in different chemical environments are shielded by different amounts. When a nucleus surrounded by electrons is exposed to a magnetic field of strength H<sub>0</sub>,these electrons move in such a way as to generate a small local magnetic field, h<sub>local</sub>, opposing H<sub>0</sub>. As a consequence, the total field strength near the hydrogen nucleus is reduced, and the nucleus is thus said to be shielded from the magnetic field strength by its electron cloud. The degree of shielding depends on the amount of electron density surrounding the nucleus. dding electrons increases shielding; their removal, consequently, would cause deshielding. Also, a proton is deshielded when the induced field reinforces the applied field. For example, the induced field can reinforce the applied field. As a result, these protons are deshielded and their chemical shifts are at a higher value of ppm.
==Coupling==
'''J-coupling''' arises from the interaction of different spin states through the chemical bonds of a molecule and results in the splitting of NMR signals. This coupling provides detailed information about the connectivity of atoms and the structure of a molecule.
Spin-spin slitting is given by the '''N+1 Rule''': 1) H that is neighbored by one H resonnate as a doublet.2) H that is neighbored by two set of equivalent Hs resonate as trplet. 3) H that is neighbored by three equivalents of hydrogens resonate as a quartet.
A multiplet can be shown when there is a mixture of couple patterns, some of which could be broken down to small parts (i.e. qd- quartet of doublet). But for the most part, if a coupling pattern shows complexity not easily countable by N+1 rule, such pattern is called a multiplet.
In addition, functional groups containing alcohol (-OH) such as alcohol, carboxylic acid have a broad band on NMR spectra. This is due to the fact that Hydrogens on alcohol can hydrogenbond easily, thus being able to couple in broad spectra than other H's. Thus just by looking at the type of the spectra (such as multiple peaks or broad peak), one can easily categorize the functional group to which the H is associated with.
The ratio of the splitting peaks is given by a mathematical mnemonic device called Pascal's triangle. Each number in this triangle is the sum of the two numbers closest to it in the line above. It is important to remember that nonequivalent nuclei mutually split one another. In other words, the observation of one split absorption necessitates the presence of another split signal in the spectrum. Moreover, the coupling constants for these pattern must be the same. Double and triple bond characteristic chemical environments show complex splitting peaks. An alkyne for example, can have hydrogen splitting patterns an extra adjacent carbon away. An alkene depending on where the hydrogen is located (cis or trans) to a relative chemical environment, can show a slightly distorted peak.
==Integration==
'''Integration''' is very useful in NMR spectrum in determining the structure of a molecule. The relative integrated intensity of a signal is proportional to the relative number of nuclei giving rise to that absorption. Normally, an NMR spectrum plot will tell you very complex integration numbers. However, integration doesn’t have to be exact. You can just divide each integration number by the smallest number in your NMR spectrum. The ratio will help you get a big picture of the relative number of H’s represented by a peak. Combining the chemical shifts and the peak integration, you might be able to determine the structure of a molecule by using the ''chemical shift table''.
Researchers usually use NMR to check if the product they made from a reaction is what they really want. So they don’t have to figure out the structure of a molecule by looking at a complex spectrum. They know what the spectrum should look like if the reaction works. By comparing the actual spectrum to the ideal one, they are able to verify the molecule they want is in the product. Solvent used is usually CD<sub>2</sub>Cl<sub>2</sub>, since D would not show up in a H NMR spectrum. Combine with chemical shifts, they can be used to determine structure.
== Proton NMR interpretation ==
To interpret proton NMR, it is important to know where each type of proton lies. Below is a list of types of proton and their chemical shift on NMR.
[[Image:Table HNMR.jpg|Proton NMR frequency]]
It is important to know that proton NMR peaks only indicate the presence of protons (H). It does not show other atoms like Carbon, Oxygen...etc. As mentioned in the above section, proton peaks shows spliting because of coupling by the neighbor protons. The integration of each peak is the amount of proton relative to other proton on the NMR. When solving structure from the H NMR, it is important to write down the chemical shift, integration and the split of each peak. Then base on the chemical shift of the peak, write down the possible functional group and structure. Lastly, arrange and connect each structure so that it matches the split and the integration of proton NMR. Below are examples of hand drawn proton NMR and also the detail instruction to interprete proton NMR.
=== Example ===
The interpretation of each proton NMR is given right below of each graph. Try not to look at the structure, and only look at the molecular formula and proton NMR to interpret the structure of the compound. Note that the examples given are the basic and simple compound. The NMR of protein structures is much more complex than these examples. The goal of these examples is to give you an idea how proton NMR are interpreted.
[[Image:1H NMR Ethyl Acetate Coupling shown - 2.png|Proton NMR]]
Base on the chemical shift of proton NMR, there should be a ketone functional group or a structure that contains a carbonyl group at peak around 2.0. The peak around 1.3 could be a primary or secondary alkyl group.
Now look at the splitting of the peaks at chemical shift 1.3 (C), the triplet (3 peaks) shows that the proton is probably split by 2 neighbor protons (base on the n+1 rule mention in integration section). If it is split only by 1 neighbor proton, then it would be a doublet (2 peaks). Next, look at the peak at chemical shift 2.0 (B). The singlet (single peak) means that this proton environment probably has no neighbor proton. The peak at chemical shift 4.2 (A) is a quadruplet (4 peaks). This means there are about 3 neighbor proton next to proton environment A. Since it is known that B has no proton right next to it, and A and C both has neighbor protons, it is safe to assume that proton environment A is right next to proton environment C, which could be a -CH2CH3.
The following possible structures deduced above are a ketone and an ethyl group.
{|class="wikitable"
|+ Splitting analysis
|-
!Substructure
|[[File:Methyl group.svg|100px]]
|[[File:Ethyl group.svg|150px]]
|-
!Splitting pattern
|Singlet
|Quartet and triplet
|-
!Analysis
| C with no neighboring H
| C with three neighboring H<br>C with two neighboring H
|}
Note that the there are two oxygen atoms from the molecular formula. One of the oxygen is included in ketone. The other oxygen must be binding onto one of these two structures. Take a look at peak A, the chemical shift is near 4.0, which means it might be connected to a heteroatom like oxygen. Place the oxygen next to the -CH2CH3 and connect the structure together, you will get ethyl acetate as indicated below the proton NMR. Notice that the proton B does not have any neighbor proton. Proton A is split into 4 peaks by proton C (n+1 rule, n = 3 neighbor protons). Proton C is split into 3 peaks by proton A (n = 2 neighbor protons). The CH2, secondary alkyl, base on the proton frequency table should be around the chemical shift ~1.2 ppm, but instead it is at ~4.2 ppm. The reason for this is that the CH2 is attached to oxygen a heteroatom, which is a electron withdrawing group. The result is that the chemical shift is pulled left field resulting in a chemical shift of 4.2 ppm. Another way to look at this is to assume there is an ester functional group at chemical shift of 4.2 ppm, and the primary alkyl group is attached to the ester.
The integration of the proton NMR also matches the structure well. The methyl CH3 next to the carbonyl group has 3 protons, and the primary alkyl next to the CH2 has 3 protons as well. This explains why peak B has the same height as peak C (same amount of protons). Peak A has the lowest height because it only has two protons.
[[Image:3-methoxyphenol NMR.jpg|proton NMR]]
This proton NMR example looks more complicated than the first one, but it is actually easier. One important information from this proton NMR is that there are peaks around 6.0~ 7.0 ppm (F,B,D,E). This always almost indicates the presence of aromatic ring. Noticed that there are about 4 group of peaks from 6.0 to 7.0 ppm? This means that there are four protons attach to 4 carbons on the aromatic ring. This leaves 2 carbons of the aromatic ring free to attach to two substituents. The position of these substituents is clearly an ortho and para position on the aromatic ring. The reason is that two different substituents on ortho and para position of the aromatic ring would give 4 proton environments. If there are only two proton environments around 6.0~ 8.0 ppm with the same integration (height), it means that the aromatic ring is probably symmetric on both sides with double para substituents. Now look at the peak (A) at 5.5 ppm. The peak is a broad peak instead of sharp peak like the rest. This means that the proton of this environment is attached to a heteroatom. The only heteroatom present in the sample base on the molecular formula given is an oxygen atom. This means that the proton is directly attached to oxygen, which would be a alcohol group -OH (Note that the proton on the alcohol group can have the chemical shift range from 0.5 to 5.0 ppm). It is important to remember that the proton that attached to a heteroatom is also known as exchangeable proton. Exchangeable proton sometimes do not show up on H NMR, so do not worry when an expected exchangeable peak doesn’t appear on HMNR.
The peak (C) at the chemical shift of ~3.9 ppm has the highest integration (height) and is a singlet. Usually when such a high singlet peak is observed around 3.9 ppm with oxygen in the molecular formula, there is a high chance that it is a ether group, -OCH3. Since there is no neighbor proton next to the CH3 of the ether, it is a singlet peak. In addition, the height of the peak is high compare to the other peak, which indicate a possibility of CH3 with at least 3 times more protons than other proton environment. Base on the interpretations above, these are the possible function groups:
[[Image:3-methoxyphenol NMR1.jpg|possible proton structures]]
Attach the alcohol group and the ether group in ortho- para position will result in the correct structure of the compound.
== Nuclear Overhauser Enhancement Spectroscopy (NOESY) ==
[[File:Noesy.jpg|thumb|NOESY Spectrum of Codeine. Each peak correlates to a proton.]]
'''NOESY''' is a NMR technique that uses the Nuclear Overhauser effect to help understand the tertiary structure of proteins and other large molecules. The nuclear Overhauser effect is the interaction of nuclei at short distances from each other. The extent of the effect is approximately 5 Angstroms. This is a better analysis of tertiary structure for proteins that do not form crystalline structures and need to be analyzed in solution. Like in NMR, a magnetic field is produced around the molecule and RF waves at different frequencies are produced to produce resonance. The resonance is produced when the nucleus reverses spin. Unlike normal NMR, the aim of NOESY is to determine the effect of the resonance of one nucleus on the other nuclei in the area. The graph that is produced gives you an idea of where the nuclei are in relation to each other.
The NOESY experiment reveals the distance of protons relative to one another. Protons very close to each other, (about 3 Angstroms apart) will produce a very large signal. The limit of detection is about 5-6 Angstroms apart, and will produce only a very weak signal.
The graph has diagonal dots correspond to the placement of the nuclei on the one dimensional NMR. There are dots out side of this diagonal spectrum. These dots show what nuclei are in close proximity of each other. If a line was drawn horizontally and vertically from the outlaying dots, the dots, on the diagonal spectrum, that lay on the lines would be in close proximity to each other. Using the information from the NMR and the NOESY a tertiary structure of the macromolecules could be formed. However, the resulting tertiary structure would contain a family of structures. This happened for three reasons. The first is the approximation of the distance between the nuclei. Second, there may not have been enough constraints to produce a singular structure. Thirdly, the protein is in solution, and the solution contains many proteins.
This technique is mainly used for hydrogen atoms, because they are the most abundant atom in biological systems and are also the simplest.
==Protein NMR==
An NMR machine is essentially a huge magnet. Many atoms are essentially little magnets. When placed inside an NMR machine, all the little magnets orient themselves to line up with the big magnet. By harnessing this law of physics, NMR spectroscopists are able to figure out physical, chemical, electronic, and structural information about molecules.
NMR relies on the interaction between an applied magnetic field and the natural “little magnets” in certain atomic nuclei. For protein structure determination, spectroscopists concentrate on the atoms that are most common in proteins: hydrogen, carbon, and nitrogen. What researchers seek to learn through NMR is how this chain of amino acids wraps and folds around itself to create the three-dimensional, active protein. Solving a protein structure using NMR is a series of experiments, each of which provides partial clues about the nature of the atoms in the sample molecule, such as how close two atoms are to each other, whether these atoms are physically bonded to each other, or where the atoms lie within the same amino acid. Other experiments show links between adjacent amino acids or reveal flexible regions in the protein. Each new set of experiments further refines possible structures until finally the scientists carefully select 10 to 20 solution that best represent their data and present the average as their final structure.
'''Sample Preparation for NMR'''
In order to study protein structure by NMR, highly purified samples of the protein of interest must be prepared. The protein can either be isolated from natural sources, or expressed in host organisms such as E. Coli through recombinant DNA techniques. The bacteria with the recombinant gene coding for a specific protein are grown in minimal media with 15NH4Cl being the only source of nitrogen for the bacteria, and 13C-glucose offering the only source of carbon for the bacteria to make proteins. This way, when the bacteria produce the protein of interest, these proteins are labeled with 15N and 13C, both of which are NMR active. The protein of interest is then purified through various protein purification techniques (See protein purification techniques). Finally, the protein, in an appropriate buffer, is loaded into an NMR tube and is ready to be placed in the NMR magnet.[[File:Figure 1.pdf|thumb|Figure 1. General scheme for protein structure determination by NMR in solution phase.]]
'''NMR Experiments'''
'''2D Experiments'''There are many different types of NMR experiments one can run to help to reveal information about the structure of the protein. The experiments usually differ in what correlations are detected. For example, a 2D [1H-1H]-NOESY experiment will reveal hydrogen atoms that are within 0.5 nm apart. Protons that exhibit this interaction will show up as a cross peak on the 2D spectrum (Figure 2).[[File:Figure 2.pdf|thumb|Figure 2. Simplified example of 2D [1H-1H]-NOESY NMR spectrum. The dots on the diagonal represent the 1D spectrum of the molecule. There are two protons that are being examined, one at 9 ppm and the other at 8 ppm. The presence of the cross peak (circled) reveals that these two protons are within 0.5 nm apart.]]
Taking this information, theoretically, the protons at 8 ppm and 9 ppm on the 1D spectrum could be assigned to a certain residue in the amino acid sequence. For example, if Ala1 is the point at 8 ppm and Ala54 is at 9 ppm, and there is a crosspeak present, then the observation of this NOE reveals a circular structure for this polypeptide chain (Figure 3). [[File:Figure 3.pdf|thumb|Figure 3. Circular structure of polypeptide chain revealed by presence of NOE on 2D NOESY spectrum.]]
Because proteins are much more complicated than this example above, the 2D NOESY spectrum is often cluttered and crosspeaks cannot be made out clearly because many of these points may stack on top of one another. Other experiments are required to reveal the necessary information to determine the 3D structure of the protein, such as 3D experiments.
'''3D Experiments'''
3D experiments use a third dimension to reveal peaks that may be stacked on top of one another in the 2D spectrum. An example is 3D 15N-correlated [1H-1H]-NOESY (Figure 4).
There are many other experiments to correlate different nuclei and their neighbors.
[[File:Figure 4.pdf|thumb|Figure 4. Example of 3D 15N [1H-1H] NOESY. The peaks that would be stacked on top of one another in the 2D [1H-1H] NOESY are now drawn out in the third dimension by relating its 15N chemical shifts. This cleans up the spectrum and helps in resonance assignments.]]
==Protein NMR Advantages==
NMR is a good method in trying to solve the structure of a protein and the continued unanswered protein folding problem. However it is not the only method as crystallography is also a possible method for determining protein structure. However, NMR has its advantages over crystallography.
One instance is that it uses molecules in solution, so it is not limited to those that crystallize well since crystallization is a very uncertain and time-consuming step in X-ray crystallography. In addition, some proteins do not readily crystallize. Furthermore, although structures present in crystallized proteins very closely represent those of proteins free of the constraints imposed by the crystalline environment, structures in solution can be sources of additional insights. NMR also makes it fairly easy to study properties of a molecule besides its structure such as the flexibility of the molecule and how it interacts with other molecules. With crystallography, it is either impossible to study these aspects or it requires an entirely new crystal.
==Protein NMR Disadvantages==
Most NMR spectroscopists focus on molecules no larger than 20-30 kilodaltons. X-ray crystallographers have solved structures upto 2,500 kilodaltons.
==NMR in Real Life==
The 15 carbon compound viniferone found in grape seeds was isolated in 2004. Viniferone falls into a group of substances, grape seed, that are very active against radicals and oxidative stress. There was very little recovery of viniferone from an abundance of grape seeds (~40 mg of viniferone from 10.5 kg of grape seeds), so precautions had to be taken in the techniques used to obtain its structure. Most tests would destroy the minuscule amount proanthocyanidins t of viniferone obtained, so a combination of spectroscopic techniques were utilized (including NMR) to obtain viniferone's structure. Obtaining the <sup>1</sup>H and <sup>13</sup>C NMR data was critical in determining the structure of Viniferone. The variety of absorption signals at various chemical shifts helped determine the presence of alkenes and benzene rings. Correlation spectroscopy and eventually X-ray crystallography were used to verify the structural arrangement of Viniferone.<ref name ="Schore">Schore, Neil E. (2011). Organic Chemistry Structure and Function 6th Edition. W. H. Freeman</ref>
== References ==
{{Reflist|2}}
If you would like to learn more about interpreting NMR peaks, I highly suggest this website. [http://www.wfu.edu/~ylwong/chem/nmr/h1/ http://www.wfu.edu/~ylwong/chem/nmr/h1/]
<br> Berg, Jeremy M., Lubert Stryer, and John L. Tymoczko. Biochemistry. 6th ed. Boston: W. H. Freeman & Company, 2006. 98-101.
<br> Shriner, Christine K. F. Hermann, Terence C. Morrill, David Y. Curtin, Reynold C. Fuson. The Systematic Identification of Organic Compounds. 8th ed. U.S.A. John Wiley & Sons, Inc. 2004. 136-142.
<br> Vollhardt, K. Peter C., Schore, Neil E. Organic Chemistry - Structure and Function. 5th ed. New York: W. H. Freeman & Company, 2005. 398-432.
<br> Keeler, James. Understanding NMR Spectroscopy. West Sussex, England. John Wiley & Sons. 51-77.
<br>Clore, Marius G., Gronenborn, Angela M. “Chapter 34: Structures of Larger Proteins, Protein-Ligand, and Protein-DNA Complexes by Multidimensional Heteronuclear NMR.” Multidimensional NMR Methods for the Solution State. United Kingdom. John Wiley & Sons Ltd.
<br>Wuthrich, Kurt. “Chapter 33: Biological Macromolecules: Structure Determination in Solution.” Multidimensional NMR Methods for the Solution State. United Kingdom. John Wiley & Sons Ltd.
<br> National Institutes of Health, National Institute of General Medical Sciences, New York, 2007, 29-30, http://www.nigms.nih.gov.
{{BookCat}}
[1]"Kurt Wüthrich - Nobel Lecture". Nobelprize.org. 25 Oct 2010 http://nobelprize.org/nobel_prizes/chemistry/laureates/2002/wuthrich-lecture.html
27m4xyd9w1wt87rn7m1vdrhncvuazet
4676256
4676255
2026-10-15T12:47:13Z
DMacks
94753
/* General Information */ step 3: expand enwiki {{0}}
4676256
wikitext
text/x-wiki
NMM spectroscopy is unique in being able to reveal the atomic structure of macromolecules in solution, provided that highly concentrated solution can be obtained. This technique depends on the fact that certain atomic nuclei are intrinsically magnetic. The chemical shift of nuclei depends on their local environment. Furthermore, the spins of neighboring nuclei interact with each other in ways that provide definitive structural information. This information can be used to determine complete three-dimensional structures of proteins.
== General Information ==
'''Nuclear Magnetic Resonance Spectroscopy (NMR)''' is an analytical technique which exploits the fact that certain nuclei possess a property called spin (I). NMR spectroscopy is possible due to the Zeeman Effect discovered first in the 1890s. The structures of proteins can be determined by NMR by first preparing the isotopically labeled samples. In the magnet, the "natural magnets" in the atoms of the sample line up with the magnetic field of the NMR magnet. Then, the sample is exposed to a series of radio wave pulses to disrupt the magnetic equilibrium of the atoms. The reaction of these nuclei can be observed to assess their chemical nature specifically, their chemical shift properties. Sets of experiments can be conducted to refine possible structures and present the average of the experiments as the final structure. It can have advantages over X-ray crystallography because the samples of proteins can be in solution rather than crystallized form and other properties of the sample protein, such as flexibility and interactions, can be determined while X-ray crystallography only reveals the structure of the protein.
It is the splitting of atomic energy levels when the atoms are placed in a magnetic field. This effect was later found to occur as a result of nuclear spin. In 1924, Wolfgang Pauli first suggested the theoretical basis of NMR when he concluded that some atomic nuclei should possess nuclear spin and these nuclei would split into degenerate energy levels when placed in a magnetic field. These nuclei have a magnetic moment, in and of themselves, which is called spin. Nuclei that possess spin are said to be NMR active. Some NMR active nuclei can be seen in Table 1, with italicized nuclei being those commonly studied in biological molecules.
{| class="wikitable" style="margin:auto;"
|+Table 1. Magnetic properties of common nuclei<ref>''[[:w:CRC Handbook of Chemistry and Physics|CRC Handbook of Chemistry and Physics]]'', 65th ed.</ref>
|-
![[Isotope]]
! [[Natural abundance|Occurrence<br> in nature]]<br> (%)
! [[Spin (physics)|Spin number]] {{mvar|I}}
! [[Operating frequency]] at 7 [[Tesla (unit)|T]]<br> (MHz)
! Relative sensitivity
|-
|<sup>1</sup>H
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>99.984
|{{sfrac|1|2}}
|300.13
|1
|-
|<sup>2</sup>H
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">00</span>0.016
|1
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>46.07
|0.0964
|-
|<sup>10</sup>B
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>18.8
|3
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>32.25
|0.0199
|-
|<sup>11</sup>B
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>81.2
|{{sfrac|3|2}}
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>96.29
|0.165
|-
|<sup>12</sup>C
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>98.9
|0
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">-0</span>0
|0
|-
|<sup>13</sup>C
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">00</span>1.1
|{{sfrac|1|2}}
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>75.47
|0.0159
|-
|<sup>14</sup>N
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>99.64
|1
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>21.68
|0.00101
|-
|<sup>15</sup>N
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">00</span>0.37
|{{sfrac|1|2}}
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>30.41
|0.00104
|-
|<sup>16</sup>O
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>99.76
|0
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">00</span>0
|0
|-
|<sup>17</sup>O
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">00</span>0.0317
|{{sfrac|5|2}}
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>40.69
|0.0291
|-
|<sup>19</sup>F
|100
|{{sfrac|1|2}}
|282.40
|0.834
|-
|<sup>28</sup>Si
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>92.28
|0
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">00</span>0
|0
|-
|<sup>29</sup>Si
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">00</span>4.70
|{{sfrac|1|2}}
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>59.63
|0.0785
|-
|<sup>31</sup>P
|100
|{{sfrac|1|2}}
|121.49
|0.0664
|-
|<sup>35</sup>Cl
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>75.4
|{{sfrac|3|2}}
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>29.41
|0.0047
|-
|<sup>37</sup>Cl
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>24.6
|{{sfrac|3|2}}
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>24.48
|0.0027
|}
Separately, Bolch at Stanford and Purcell at Harvard in 1946 each translated the Zeeman effect into the first NMR spectrum. In 1949, Proctor and Yu at Stanford measured the first chemical shift and spin couplings. Initially, commercial NMR spectrometers were continuous wave type and were only able to detect the most sensitive nuclei, 1H & 19F.
NMR ‘active’ nuclei are active if the nuclear spin, I, is non zero.
To determine spin of nuclei:
Mass # is even and # neutrons is even, I=0, therefore no spin
Mass # is even and # neutrons is odd, I= integer, therefore spin
Mass # is odd and # neutrons is even or odd, I=half integer, therefore spin
The cause of spin can be visualized with the following analogy. A rotating charged particle (e.g. hydrogen nucleus aka proton) will produce a magnetic field perpendicular to the direction of rotation which is analogous to the magnetic field of a bar magnet, as seen in Figure 1.
[[Image:Spinning proton magnetic field lines.jpg|500px|thumb|Figure 1]]
Absent an external magnetic field (B¬0) these active nuclei are oriented in random directions, but in the presence of an external magnetic field (B¬0) these nuclei orient themselves either with or against the field, as seen in Figure 2.
[[Image:Nuclei in and out of magnetic field.jpg|500px|thumb|Figure 2]]
Nuclei are dispersed between states of different energies. The different energy levels are induced by the presence of the external magnetic field (B¬0). (For spin ½ nuclei two orientations are possible, with the higher energy orientation being ‘β spin state’ and the lower energy orientation being ‘α spin state’.) This is evident in the following equation where E=energy, h=Planck’s constant, ν=frequency, γ=gyromagnetic ratio (nucleus dependent), B0= external magnetic field:
ΔE= h ν = γ B0
To see this graphically see Figure 3.
[[Image:Magnetic field induced energy levels.jpg|500px|thumb|Figure 3]]
These induced energy level differences are what allow the use of NMR. At equilibrium, nuclei will occupy both levels of energy, low and high. However, according to the Maxwell-Boltzmann Distribution, the lower energy level will be occupied by a greater number of nuclei. This difference in the number of nuclei, between low and high energy levels, is what NMR exploits. The energy required to cause a spin flip, transition from low to high energy state, corresponds to the radio frequency range of the electromagnetic spectrum.
ΔE= h ν
A nucleus will only flip spins, absorb energy, when the frequency of electromagnetic radiation just matches the change in energy, ΔE. This is called the point of resonance. Nuclei will have differing resonant frequencies based on their local electronic environment. This can be seen in “A handmade example of a proton (1H) NMR spectrum.” All nuclei under observation are irradiated with radio waves to the higher energy state and are then allowed to decay back to the lower energy state. This decay is what is observed. A free induction decay signal is collected as the nuclei fall back to the lower energy state, Figure 4 depicts a generic FID.
[[File:Nmr fid good shim EN.svg|500px|thumb|Figure 4]]
This FID is then subjected to a Fourier transform to convert from the time domain to the frequency domain, seen in Figure 5.
[[Image:NMR spectrum generic.jpg|500px|thumb|Figure 5]]
A change in the magnitude of the magnetic field will change the resonant frequency of the nucleus. Therefore, in order to compare spectra between instruments with varying size magnetic strength it is necessary to convert from frequency to parts per million, ppm. This can be done with the equation seen in Figure 6.
[[Image:Frequency to ppm.jpg|500px|thumb|Figure 6]]
With the arrival of Fourier Transform instruments in the 1970s it became possible to acquire spectra of nuclei that are not naturally abundant, such as 13C which is only 1.1% naturally occurring. This requires the acquisition of multiple spectra and adding them together to get a greater sensitivity. The signal to noise ratio (S/N) will increase as acquisitions increase, because the signal magnitude increases linearly with acquisition number while the noise magnitude increases as the square of the number acquisitions. So, the S/N will increase as the square of the number of acquisitions as seen in Figure 7.
[[Image:Signal to noise.jpg|500px|thumb|Figure 7]]
The Nobel Prize in Chemistry 2002 went partly to Kurt Wuthrich for “NMR Studies of Structure and Function of Biological Macromolecules,”[1] so NMR is important to structural biochemistry. Table 2 lists Nobel prizes awarded for discoveries related to NMR spectroscopy.
[[Image:NMR Nobel prizes.jpg|500px|thumb|Table 2]]
[[Image:nmr.jpg|500px|thumb|A handmade example of a proton (<sup>1</sup>H) NMR spectrum]]
NMR is a powerful technique that can be used to determine the structure of [[Structural Biochemistry/Proteins|proteins]] in highly concentrated solution, by analyzing the relative positions of certain atoms (Shriner 136). Protein NMR exploits the absence of zero net nuclear spin of the most abundant isotopes of carbon and oxygen (12 and 16) as well as the abundant isotope of Nitrogen (14) with a net nuclear spin of 1. NMR cannot be performed on an atom with zero net nuclear spin. Since there are many distinct nuclei present in a single protein much overlap is expected in the chemical shifts produced through the NMR analysis therefore a multidimensional approach is applied. Magnetization is applied to the protein and nuclei through electromagnetic pulses that can magnetize nuclei in two ways. The first involving magnetization through nuclei bonding and the second through open space. Each approach offers a different way to analyze the protein such as the first approach allowing for distinct nuclei to be targeted whereas the second approach allowing for structure calculation distance restraints and targeting an unlabeled protein.
Intrinsically magnetic nuclei display spinning properties that produce a magnetic moment. When an external magnetic field is applied to the system the magnetic moment can adopt either an alpha or beta state. The strength of the magnetic field determines the proportionality of alpha to beta with a tendency to favor alpha as it is aligned with the field and has a lower energy. By supplying an electromagnetic pulse alpha spin nuclei will change to beta and produce resonance. By keeping a constant magnetic field on the system and adjusting the frequency of the electromagnetic pulses a spectrum of resonance can be obtained.
Currently, NMR spectrometers use the Fourier transform method of pulse radiation. To change the nuclei in alpha state to beta, a strong pulse of radiation is used. Then the pulse of radiation is removed and the nuclei go back to their original alpha state, giving a decay signal. This signal is converted by the computer to a frequency domain spectrum in a very fast way. By storing many signals a more intense spectrum is produced. (Shriner 136)
Electrons around a magnetic nucleus produces a local magnetic field opposite to the applied magnetic field. Magnetic nuclei can absorb the electromagnetic pulses at specific frequencies coined "chemical shifts" (signal positions) expressed in parts per million (ppm). These chemical shifts are designated relative to a standard compound such as a derivative of tetramethylsilane (TMS) (CH<sub>3</sub>)<sub>4</sub>Si (which has a chemical shift of 0.0) that is soluble in water. NMR spectra that are produced through this assay can be analyzed, and with the combination of a multidimensional analysis the structure of the protein can be determined.
When an atomic nuclei is influenced by a magnetic field, it creates a magnetic moment which will give an orientation of spinning to itself. Different orientation of spinning, spin states, exist in different states of energy - alpha-state and beta-state - where alpha-state is found to be more stable with a lower energy through experiments as it has the same direction with the magnetic field. In order to transits alpha-state to beta-state (excited state), pulse of electromagnetic radiation is needed to increase the frequency of the electromagnetic radiation (through irradiation) to have the spinning nucleus to overcome the energy barrier and change its orientation. (See [http://en.wikipedia.org/wiki/Bohr_model Bohr Model] for more information) Thus, resonance will be obtained. It was discovered by American physicist Edward Mills Purcell and physicist Felix Bloch from Switzerland in 1946.
The difference between energy levels split by a magnetic field corresponds to the energy of radio waves. So, the electronics required for the NMR spectrometer weren’t developed until WWII when the government invested heavily into radar technology. Radar is simply the use of radio waves to detect location and direction of moving objects. Better frequency synthesizers, amplifiers, receivers and signal processors all contributed to advancements in the field of NMR spectroscopy.
The components of a NMR Spectrometer can be seen in Figure 8.
[[Image:NMR Spectrometer.jpg|500px|thumb|right|Figure 8]]
Some common 2D experiments can be seen in Table 3:
{| style="clear:none;float:left;margin:1em 0 1em 1em"
|-
! Common 20 experiments <sup>(Table 3)</sup>
|-
| '''COSY''' || '''Correlated Spectroscopy'''<br />Through bond H-H correlation
|-
| '''TOCSY''' || '''Total Correlation Spectroscopy'''<br />Extended through bond H-H correlation
|-
| '''1D NOE''' || '''Nuclear Overhauser Effect Spectroscopy'''<br />H-H through space correlation
|-
| '''NOESY''' || '''Nuclear Overhauser Effect Spectroscopy'''<br />H-H through space correlation
|-
| '''ROESY''' || '''Rotating Frame Overhauser Effect Spectroscopy'''<br />Similar to NOESY
|}<br style="clear:both"/>
==Magnets used for NMR==
The magnets used for NMR are very strong. Those used for high resolution protein structure determination range from 500 megahertz to 900 megahertz and generate magnetic fields thousands of times stronger than the Earth’s. Although the sample is exposed to a strong magnetic field, very little magnetic force gets out of the machine.
NMR magnets are superconductors, so they must be cooled with liquid helium, which is kept at 4 Kelvin. Liquid nitrogen, which is kept at 77 Kelvin, helps keep the liquid helium cold.
== Appropriate Isotopes ==
Only certain isotopes are capable for use in NMR. The most common isotope that is used in NMR is Hydrogen-1 (Proton NMR). Other commonly used isotopes are Carbon-13 and Nitrogen-15.
== Vector Model ==
The Vector Model only holds for uncoupled spins. Nuclei that are active under NMR spectroscopy have associated with them a nuclear spin magnetic moment, which means that these nuclei produce a small magnetic field. When these nuclei are placed in a magnetic field the energy of the interaction depends on the angle between the field and the magnetic moment. The highest energy interaction is when the magnetic field and the magnetic moment point in opposite directions, and the lowest energy interaction is when the magnetic field and magnetic moment point in the same direction.
Before a magnetic field is applied to a population of nuclei the magnetic moments of these nuclei are oriented randomly due to random thermal motion. After a magnetic field is applied one has to wait for the spins to come to equilibrium, a process known as relaxation. Pointing in the direction of the magnetic field is slightly energetically favored, and hence only a very small number of spins will do so, forming the bulk magnetization vector. The sample is hence magnetized. At equilibrium the bulk magnetization vector will point in the direction of the magnetic field (we will assume this is the z direction) and will be stationery. If the magnetization vector was tilted away from the axis it would precess at the Larmor frequency (-gyromagnetic ratio * magnetic field).
The purpose of a pulse is to quickly change the direction of the magnetization vector. This can be done by creating a much weaker magnetic field in the direction one desires, but allowing it to oscillate at the aforementioned Larmor frequency. This will result in the magnetization vector pointing in the direction one desires. This occurs because when the B1 field (the weaker field) oscillates near the Larmor Frequency, the result is that the strength of the B0 field (the stronger field in the z direction) appears to be reduced. Hence the resulting magnetic field (the effective field) can point very close to the direction of the B1 field if the B1 field is much larger than the reduced field.
An on resonance pulse involves changing the direction of the magnetization vector by applying the B1 field in a certain direction for a specific time. The angle through which the magnetization vector is rotated is given as the product of the frequency of the effective field and the time the pulse is applied. By applying different times one can rotate the magnetization vector to different angles.
For a real NMR experiment there are going to be more than one resonance frequencies in the sample. If one makes the B1 field strong enough it is possible to bring the magnetization vector very close to the desired orientation, which means we can bring it close to the ideal case of an on resonance pulse.
The vector model can be used to understand simple NMR experiments.
== Chemical shifts ==
'''Chemical shifts''' are the units used in Protein NMR analysis graphs. Chemical shift correlates to the different radiofrequency electromagnetic pulses sent through the protein sample. Each molecule that exhibits spin properties show different distinct chemical shifts. Chemical shifts can be observed by sending nuclear magnetic energy onto the protein sample. The electron clouds that surround each spin nuclei create a local magnetic field that opposes the applied magnetic field. When the electromagnetic pulse runs through the sample alpha spin nuclei that are hit with the correct amount of energy to switch to beta spin do so and subsequently cause resonance. This resonance can then be recorded and is reported for the different frequencies applied to sample as parts per million (ppm chemical shifts). For example, when the nuclear magnetic field strength sends out a frequency of 1 ppm (parts per million), CH<sub>3</sub> reacts to it and exhibits beta spin behavior from which the spectroscopy catches this signal and records it.
Most hydrogen absorptions in 300-MHz 1H NMR fall within a range of 3000 Hz. Rather than record the exact frequency of each resonance, we measure it relative to an internal standard, the compound tetramethylsilane, (CH<sub>3</sub>)<sub>4</sub>Si. Its 12 equivalent hydrogens are shielded relative to those in most organic molecules, resulting in a resonance line conveniently removed from the usual spectral range.
A problem with these numbers, however, is that they vary with the strength of the applied magnetic field. Because field strength and resonance frequency are directly proportional, doubling or tripling the field strength will double or triple the distance (in hertz) of the observed peaks relative to (CH<sub>3</sub>)<sub>4</sub>Si. To make it easier to compare reported literature spectra, we standardize the measured frequency by dividing the distance to (CH<sub>3</sub>)<sub>4</sub>Si (in hertz) by the frequency of the spectrometer. This procedure yields a field-independent number, the chemical shift δ.
== NMR in Characterizing Organometallics ==
NMR spectra uses superconducting magnets to many metal nuclei. Carbon 13 NMR has become increasingly useful in facilitating due to its low natural abundance and low sensitivity for NMR experiment. The integration of NMR peaks of organometallic complexes can provide the ratio of atoms in different environments. Since the relaxation times of the carbon atoms vary in organometallics, a great deal of inaccuracy result from this. However it does have its advantages as well. For example, terminal carbonyl peaks are frequently in the range of 195 to 225ppm, which allows it to be easily distinguished from other ligands. The 13C chemical shift correspond with the strength of the CO bond. The stronger the bond, the smaller the chemical shift. 13C in cyclopentadienyl ligands have a wide range of chemical shifts in paramagnetic compounds whereas it's narrower for diamagnetic compounds.
== Nuclei Spin States ==
In NMR, certain atomic nuclei must be magnetic by nature in order for this technique to be used. However, only a certain number of isotopes have this magnetic characteristic called spin. An example is hydrogen. When an external magnetic field is applied, hydrogen's spinning proton generates a magnetic moment which can take either the α or β spin state. The energy difference between the two states is directly proportional to the amount of external magnetic field applied. The α state is aligned with the applied field and has lower energy than the β state. When a pulse of electromagnetic radiation is applied to the α state, it can be excited to the β state, thus a resonance will be obtained.
The NMR is only able to detect certain atoms and only certain isotopes. For example, it can detect the Hydrogen molecules with a mass of 1 amu, but not the other isotopes. Most commonly the Hydrogen and Carbon NMR's are used. The information that can be determined by the NMR is immense. In the case of the Hydrogen NMR, one can use a certain amount of knowledge from a table to determine what each peak corresponds to which group within your sample. Interpreting NMR's can also be a little tricky in that one must understand splitting patterns. For example, the carbon atom you may be examining may have only one hydrogen attached, however if attached to a methyl group, it will appear as a quartet.
==Shielding and Deshielding==
Protons in different chemical environments are shielded by different amounts. When a nucleus surrounded by electrons is exposed to a magnetic field of strength H<sub>0</sub>,these electrons move in such a way as to generate a small local magnetic field, h<sub>local</sub>, opposing H<sub>0</sub>. As a consequence, the total field strength near the hydrogen nucleus is reduced, and the nucleus is thus said to be shielded from the magnetic field strength by its electron cloud. The degree of shielding depends on the amount of electron density surrounding the nucleus. dding electrons increases shielding; their removal, consequently, would cause deshielding. Also, a proton is deshielded when the induced field reinforces the applied field. For example, the induced field can reinforce the applied field. As a result, these protons are deshielded and their chemical shifts are at a higher value of ppm.
==Coupling==
'''J-coupling''' arises from the interaction of different spin states through the chemical bonds of a molecule and results in the splitting of NMR signals. This coupling provides detailed information about the connectivity of atoms and the structure of a molecule.
Spin-spin slitting is given by the '''N+1 Rule''': 1) H that is neighbored by one H resonnate as a doublet.2) H that is neighbored by two set of equivalent Hs resonate as trplet. 3) H that is neighbored by three equivalents of hydrogens resonate as a quartet.
A multiplet can be shown when there is a mixture of couple patterns, some of which could be broken down to small parts (i.e. qd- quartet of doublet). But for the most part, if a coupling pattern shows complexity not easily countable by N+1 rule, such pattern is called a multiplet.
In addition, functional groups containing alcohol (-OH) such as alcohol, carboxylic acid have a broad band on NMR spectra. This is due to the fact that Hydrogens on alcohol can hydrogenbond easily, thus being able to couple in broad spectra than other H's. Thus just by looking at the type of the spectra (such as multiple peaks or broad peak), one can easily categorize the functional group to which the H is associated with.
The ratio of the splitting peaks is given by a mathematical mnemonic device called Pascal's triangle. Each number in this triangle is the sum of the two numbers closest to it in the line above. It is important to remember that nonequivalent nuclei mutually split one another. In other words, the observation of one split absorption necessitates the presence of another split signal in the spectrum. Moreover, the coupling constants for these pattern must be the same. Double and triple bond characteristic chemical environments show complex splitting peaks. An alkyne for example, can have hydrogen splitting patterns an extra adjacent carbon away. An alkene depending on where the hydrogen is located (cis or trans) to a relative chemical environment, can show a slightly distorted peak.
==Integration==
'''Integration''' is very useful in NMR spectrum in determining the structure of a molecule. The relative integrated intensity of a signal is proportional to the relative number of nuclei giving rise to that absorption. Normally, an NMR spectrum plot will tell you very complex integration numbers. However, integration doesn’t have to be exact. You can just divide each integration number by the smallest number in your NMR spectrum. The ratio will help you get a big picture of the relative number of H’s represented by a peak. Combining the chemical shifts and the peak integration, you might be able to determine the structure of a molecule by using the ''chemical shift table''.
Researchers usually use NMR to check if the product they made from a reaction is what they really want. So they don’t have to figure out the structure of a molecule by looking at a complex spectrum. They know what the spectrum should look like if the reaction works. By comparing the actual spectrum to the ideal one, they are able to verify the molecule they want is in the product. Solvent used is usually CD<sub>2</sub>Cl<sub>2</sub>, since D would not show up in a H NMR spectrum. Combine with chemical shifts, they can be used to determine structure.
== Proton NMR interpretation ==
To interpret proton NMR, it is important to know where each type of proton lies. Below is a list of types of proton and their chemical shift on NMR.
[[Image:Table HNMR.jpg|Proton NMR frequency]]
It is important to know that proton NMR peaks only indicate the presence of protons (H). It does not show other atoms like Carbon, Oxygen...etc. As mentioned in the above section, proton peaks shows spliting because of coupling by the neighbor protons. The integration of each peak is the amount of proton relative to other proton on the NMR. When solving structure from the H NMR, it is important to write down the chemical shift, integration and the split of each peak. Then base on the chemical shift of the peak, write down the possible functional group and structure. Lastly, arrange and connect each structure so that it matches the split and the integration of proton NMR. Below are examples of hand drawn proton NMR and also the detail instruction to interprete proton NMR.
=== Example ===
The interpretation of each proton NMR is given right below of each graph. Try not to look at the structure, and only look at the molecular formula and proton NMR to interpret the structure of the compound. Note that the examples given are the basic and simple compound. The NMR of protein structures is much more complex than these examples. The goal of these examples is to give you an idea how proton NMR are interpreted.
[[Image:1H NMR Ethyl Acetate Coupling shown - 2.png|Proton NMR]]
Base on the chemical shift of proton NMR, there should be a ketone functional group or a structure that contains a carbonyl group at peak around 2.0. The peak around 1.3 could be a primary or secondary alkyl group.
Now look at the splitting of the peaks at chemical shift 1.3 (C), the triplet (3 peaks) shows that the proton is probably split by 2 neighbor protons (base on the n+1 rule mention in integration section). If it is split only by 1 neighbor proton, then it would be a doublet (2 peaks). Next, look at the peak at chemical shift 2.0 (B). The singlet (single peak) means that this proton environment probably has no neighbor proton. The peak at chemical shift 4.2 (A) is a quadruplet (4 peaks). This means there are about 3 neighbor proton next to proton environment A. Since it is known that B has no proton right next to it, and A and C both has neighbor protons, it is safe to assume that proton environment A is right next to proton environment C, which could be a -CH2CH3.
The following possible structures deduced above are a ketone and an ethyl group.
{|class="wikitable"
|+ Splitting analysis
|-
!Substructure
|[[File:Methyl group.svg|100px]]
|[[File:Ethyl group.svg|150px]]
|-
!Splitting pattern
|Singlet
|Quartet and triplet
|-
!Analysis
| C with no neighboring H
| C with three neighboring H<br>C with two neighboring H
|}
Note that the there are two oxygen atoms from the molecular formula. One of the oxygen is included in ketone. The other oxygen must be binding onto one of these two structures. Take a look at peak A, the chemical shift is near 4.0, which means it might be connected to a heteroatom like oxygen. Place the oxygen next to the -CH2CH3 and connect the structure together, you will get ethyl acetate as indicated below the proton NMR. Notice that the proton B does not have any neighbor proton. Proton A is split into 4 peaks by proton C (n+1 rule, n = 3 neighbor protons). Proton C is split into 3 peaks by proton A (n = 2 neighbor protons). The CH2, secondary alkyl, base on the proton frequency table should be around the chemical shift ~1.2 ppm, but instead it is at ~4.2 ppm. The reason for this is that the CH2 is attached to oxygen a heteroatom, which is a electron withdrawing group. The result is that the chemical shift is pulled left field resulting in a chemical shift of 4.2 ppm. Another way to look at this is to assume there is an ester functional group at chemical shift of 4.2 ppm, and the primary alkyl group is attached to the ester.
The integration of the proton NMR also matches the structure well. The methyl CH3 next to the carbonyl group has 3 protons, and the primary alkyl next to the CH2 has 3 protons as well. This explains why peak B has the same height as peak C (same amount of protons). Peak A has the lowest height because it only has two protons.
[[Image:3-methoxyphenol NMR.jpg|proton NMR]]
This proton NMR example looks more complicated than the first one, but it is actually easier. One important information from this proton NMR is that there are peaks around 6.0~ 7.0 ppm (F,B,D,E). This always almost indicates the presence of aromatic ring. Noticed that there are about 4 group of peaks from 6.0 to 7.0 ppm? This means that there are four protons attach to 4 carbons on the aromatic ring. This leaves 2 carbons of the aromatic ring free to attach to two substituents. The position of these substituents is clearly an ortho and para position on the aromatic ring. The reason is that two different substituents on ortho and para position of the aromatic ring would give 4 proton environments. If there are only two proton environments around 6.0~ 8.0 ppm with the same integration (height), it means that the aromatic ring is probably symmetric on both sides with double para substituents. Now look at the peak (A) at 5.5 ppm. The peak is a broad peak instead of sharp peak like the rest. This means that the proton of this environment is attached to a heteroatom. The only heteroatom present in the sample base on the molecular formula given is an oxygen atom. This means that the proton is directly attached to oxygen, which would be a alcohol group -OH (Note that the proton on the alcohol group can have the chemical shift range from 0.5 to 5.0 ppm). It is important to remember that the proton that attached to a heteroatom is also known as exchangeable proton. Exchangeable proton sometimes do not show up on H NMR, so do not worry when an expected exchangeable peak doesn’t appear on HMNR.
The peak (C) at the chemical shift of ~3.9 ppm has the highest integration (height) and is a singlet. Usually when such a high singlet peak is observed around 3.9 ppm with oxygen in the molecular formula, there is a high chance that it is a ether group, -OCH3. Since there is no neighbor proton next to the CH3 of the ether, it is a singlet peak. In addition, the height of the peak is high compare to the other peak, which indicate a possibility of CH3 with at least 3 times more protons than other proton environment. Base on the interpretations above, these are the possible function groups:
[[Image:3-methoxyphenol NMR1.jpg|possible proton structures]]
Attach the alcohol group and the ether group in ortho- para position will result in the correct structure of the compound.
== Nuclear Overhauser Enhancement Spectroscopy (NOESY) ==
[[File:Noesy.jpg|thumb|NOESY Spectrum of Codeine. Each peak correlates to a proton.]]
'''NOESY''' is a NMR technique that uses the Nuclear Overhauser effect to help understand the tertiary structure of proteins and other large molecules. The nuclear Overhauser effect is the interaction of nuclei at short distances from each other. The extent of the effect is approximately 5 Angstroms. This is a better analysis of tertiary structure for proteins that do not form crystalline structures and need to be analyzed in solution. Like in NMR, a magnetic field is produced around the molecule and RF waves at different frequencies are produced to produce resonance. The resonance is produced when the nucleus reverses spin. Unlike normal NMR, the aim of NOESY is to determine the effect of the resonance of one nucleus on the other nuclei in the area. The graph that is produced gives you an idea of where the nuclei are in relation to each other.
The NOESY experiment reveals the distance of protons relative to one another. Protons very close to each other, (about 3 Angstroms apart) will produce a very large signal. The limit of detection is about 5-6 Angstroms apart, and will produce only a very weak signal.
The graph has diagonal dots correspond to the placement of the nuclei on the one dimensional NMR. There are dots out side of this diagonal spectrum. These dots show what nuclei are in close proximity of each other. If a line was drawn horizontally and vertically from the outlaying dots, the dots, on the diagonal spectrum, that lay on the lines would be in close proximity to each other. Using the information from the NMR and the NOESY a tertiary structure of the macromolecules could be formed. However, the resulting tertiary structure would contain a family of structures. This happened for three reasons. The first is the approximation of the distance between the nuclei. Second, there may not have been enough constraints to produce a singular structure. Thirdly, the protein is in solution, and the solution contains many proteins.
This technique is mainly used for hydrogen atoms, because they are the most abundant atom in biological systems and are also the simplest.
==Protein NMR==
An NMR machine is essentially a huge magnet. Many atoms are essentially little magnets. When placed inside an NMR machine, all the little magnets orient themselves to line up with the big magnet. By harnessing this law of physics, NMR spectroscopists are able to figure out physical, chemical, electronic, and structural information about molecules.
NMR relies on the interaction between an applied magnetic field and the natural “little magnets” in certain atomic nuclei. For protein structure determination, spectroscopists concentrate on the atoms that are most common in proteins: hydrogen, carbon, and nitrogen. What researchers seek to learn through NMR is how this chain of amino acids wraps and folds around itself to create the three-dimensional, active protein. Solving a protein structure using NMR is a series of experiments, each of which provides partial clues about the nature of the atoms in the sample molecule, such as how close two atoms are to each other, whether these atoms are physically bonded to each other, or where the atoms lie within the same amino acid. Other experiments show links between adjacent amino acids or reveal flexible regions in the protein. Each new set of experiments further refines possible structures until finally the scientists carefully select 10 to 20 solution that best represent their data and present the average as their final structure.
'''Sample Preparation for NMR'''
In order to study protein structure by NMR, highly purified samples of the protein of interest must be prepared. The protein can either be isolated from natural sources, or expressed in host organisms such as E. Coli through recombinant DNA techniques. The bacteria with the recombinant gene coding for a specific protein are grown in minimal media with 15NH4Cl being the only source of nitrogen for the bacteria, and 13C-glucose offering the only source of carbon for the bacteria to make proteins. This way, when the bacteria produce the protein of interest, these proteins are labeled with 15N and 13C, both of which are NMR active. The protein of interest is then purified through various protein purification techniques (See protein purification techniques). Finally, the protein, in an appropriate buffer, is loaded into an NMR tube and is ready to be placed in the NMR magnet.[[File:Figure 1.pdf|thumb|Figure 1. General scheme for protein structure determination by NMR in solution phase.]]
'''NMR Experiments'''
'''2D Experiments'''There are many different types of NMR experiments one can run to help to reveal information about the structure of the protein. The experiments usually differ in what correlations are detected. For example, a 2D [1H-1H]-NOESY experiment will reveal hydrogen atoms that are within 0.5 nm apart. Protons that exhibit this interaction will show up as a cross peak on the 2D spectrum (Figure 2).[[File:Figure 2.pdf|thumb|Figure 2. Simplified example of 2D [1H-1H]-NOESY NMR spectrum. The dots on the diagonal represent the 1D spectrum of the molecule. There are two protons that are being examined, one at 9 ppm and the other at 8 ppm. The presence of the cross peak (circled) reveals that these two protons are within 0.5 nm apart.]]
Taking this information, theoretically, the protons at 8 ppm and 9 ppm on the 1D spectrum could be assigned to a certain residue in the amino acid sequence. For example, if Ala1 is the point at 8 ppm and Ala54 is at 9 ppm, and there is a crosspeak present, then the observation of this NOE reveals a circular structure for this polypeptide chain (Figure 3). [[File:Figure 3.pdf|thumb|Figure 3. Circular structure of polypeptide chain revealed by presence of NOE on 2D NOESY spectrum.]]
Because proteins are much more complicated than this example above, the 2D NOESY spectrum is often cluttered and crosspeaks cannot be made out clearly because many of these points may stack on top of one another. Other experiments are required to reveal the necessary information to determine the 3D structure of the protein, such as 3D experiments.
'''3D Experiments'''
3D experiments use a third dimension to reveal peaks that may be stacked on top of one another in the 2D spectrum. An example is 3D 15N-correlated [1H-1H]-NOESY (Figure 4).
There are many other experiments to correlate different nuclei and their neighbors.
[[File:Figure 4.pdf|thumb|Figure 4. Example of 3D 15N [1H-1H] NOESY. The peaks that would be stacked on top of one another in the 2D [1H-1H] NOESY are now drawn out in the third dimension by relating its 15N chemical shifts. This cleans up the spectrum and helps in resonance assignments.]]
==Protein NMR Advantages==
NMR is a good method in trying to solve the structure of a protein and the continued unanswered protein folding problem. However it is not the only method as crystallography is also a possible method for determining protein structure. However, NMR has its advantages over crystallography.
One instance is that it uses molecules in solution, so it is not limited to those that crystallize well since crystallization is a very uncertain and time-consuming step in X-ray crystallography. In addition, some proteins do not readily crystallize. Furthermore, although structures present in crystallized proteins very closely represent those of proteins free of the constraints imposed by the crystalline environment, structures in solution can be sources of additional insights. NMR also makes it fairly easy to study properties of a molecule besides its structure such as the flexibility of the molecule and how it interacts with other molecules. With crystallography, it is either impossible to study these aspects or it requires an entirely new crystal.
==Protein NMR Disadvantages==
Most NMR spectroscopists focus on molecules no larger than 20-30 kilodaltons. X-ray crystallographers have solved structures upto 2,500 kilodaltons.
==NMR in Real Life==
The 15 carbon compound viniferone found in grape seeds was isolated in 2004. Viniferone falls into a group of substances, grape seed, that are very active against radicals and oxidative stress. There was very little recovery of viniferone from an abundance of grape seeds (~40 mg of viniferone from 10.5 kg of grape seeds), so precautions had to be taken in the techniques used to obtain its structure. Most tests would destroy the minuscule amount proanthocyanidins t of viniferone obtained, so a combination of spectroscopic techniques were utilized (including NMR) to obtain viniferone's structure. Obtaining the <sup>1</sup>H and <sup>13</sup>C NMR data was critical in determining the structure of Viniferone. The variety of absorption signals at various chemical shifts helped determine the presence of alkenes and benzene rings. Correlation spectroscopy and eventually X-ray crystallography were used to verify the structural arrangement of Viniferone.<ref name ="Schore">Schore, Neil E. (2011). Organic Chemistry Structure and Function 6th Edition. W. H. Freeman</ref>
== References ==
{{Reflist|2}}
If you would like to learn more about interpreting NMR peaks, I highly suggest this website. [http://www.wfu.edu/~ylwong/chem/nmr/h1/ http://www.wfu.edu/~ylwong/chem/nmr/h1/]
<br> Berg, Jeremy M., Lubert Stryer, and John L. Tymoczko. Biochemistry. 6th ed. Boston: W. H. Freeman & Company, 2006. 98-101.
<br> Shriner, Christine K. F. Hermann, Terence C. Morrill, David Y. Curtin, Reynold C. Fuson. The Systematic Identification of Organic Compounds. 8th ed. U.S.A. John Wiley & Sons, Inc. 2004. 136-142.
<br> Vollhardt, K. Peter C., Schore, Neil E. Organic Chemistry - Structure and Function. 5th ed. New York: W. H. Freeman & Company, 2005. 398-432.
<br> Keeler, James. Understanding NMR Spectroscopy. West Sussex, England. John Wiley & Sons. 51-77.
<br>Clore, Marius G., Gronenborn, Angela M. “Chapter 34: Structures of Larger Proteins, Protein-Ligand, and Protein-DNA Complexes by Multidimensional Heteronuclear NMR.” Multidimensional NMR Methods for the Solution State. United Kingdom. John Wiley & Sons Ltd.
<br>Wuthrich, Kurt. “Chapter 33: Biological Macromolecules: Structure Determination in Solution.” Multidimensional NMR Methods for the Solution State. United Kingdom. John Wiley & Sons Ltd.
<br> National Institutes of Health, National Institute of General Medical Sciences, New York, 2007, 29-30, http://www.nigms.nih.gov.
{{BookCat}}
[1]"Kurt Wüthrich - Nobel Lecture". Nobelprize.org. 25 Oct 2010 http://nobelprize.org/nobel_prizes/chemistry/laureates/2002/wuthrich-lecture.html
inmrm1cf2x8yhdpvnz4klhk0v3ds0hm
4676257
4676256
2026-10-15T12:50:16Z
DMacks
94753
/* General Information */ step 4: remove entries that were not in the previous image-of-text table (NB: a few that were there are not here)
4676257
wikitext
text/x-wiki
NMM spectroscopy is unique in being able to reveal the atomic structure of macromolecules in solution, provided that highly concentrated solution can be obtained. This technique depends on the fact that certain atomic nuclei are intrinsically magnetic. The chemical shift of nuclei depends on their local environment. Furthermore, the spins of neighboring nuclei interact with each other in ways that provide definitive structural information. This information can be used to determine complete three-dimensional structures of proteins.
== General Information ==
'''Nuclear Magnetic Resonance Spectroscopy (NMR)''' is an analytical technique which exploits the fact that certain nuclei possess a property called spin (I). NMR spectroscopy is possible due to the Zeeman Effect discovered first in the 1890s. The structures of proteins can be determined by NMR by first preparing the isotopically labeled samples. In the magnet, the "natural magnets" in the atoms of the sample line up with the magnetic field of the NMR magnet. Then, the sample is exposed to a series of radio wave pulses to disrupt the magnetic equilibrium of the atoms. The reaction of these nuclei can be observed to assess their chemical nature specifically, their chemical shift properties. Sets of experiments can be conducted to refine possible structures and present the average of the experiments as the final structure. It can have advantages over X-ray crystallography because the samples of proteins can be in solution rather than crystallized form and other properties of the sample protein, such as flexibility and interactions, can be determined while X-ray crystallography only reveals the structure of the protein.
It is the splitting of atomic energy levels when the atoms are placed in a magnetic field. This effect was later found to occur as a result of nuclear spin. In 1924, Wolfgang Pauli first suggested the theoretical basis of NMR when he concluded that some atomic nuclei should possess nuclear spin and these nuclei would split into degenerate energy levels when placed in a magnetic field. These nuclei have a magnetic moment, in and of themselves, which is called spin. Nuclei that possess spin are said to be NMR active. Some NMR active nuclei that are studied in biological molecules can be seen in Table 1.
{| class="wikitable" style="margin:auto;"
|+Table 1. Magnetic properties of common nuclei<ref>''[[:w:CRC Handbook of Chemistry and Physics|CRC Handbook of Chemistry and Physics]]'', 65th ed.</ref>
|-
![[Isotope]]
! [[Natural abundance|Occurrence<br> in nature]]<br> (%)
! [[Spin (physics)|Spin number]] {{mvar|I}}
! [[Operating frequency]] at 7 [[Tesla (unit)|T]]<br> (MHz)
! Relative sensitivity
|-
|<sup>1</sup>H
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>99.984
|{{sfrac|1|2}}
|300.13
|1
|-
|<sup>2</sup>H
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">00</span>0.016
|1
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>46.07
|0.0964
|-
|<sup>13</sup>C
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">00</span>1.1
|{{sfrac|1|2}}
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>75.47
|0.0159
|-
|<sup>14</sup>N
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>99.64
|1
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>21.68
|0.00101
|-
|<sup>15</sup>N
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">00</span>0.37
|{{sfrac|1|2}}
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>30.41
|0.00104
|-
|<sup>17</sup>O
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">00</span>0.0317
|{{sfrac|5|2}}
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>40.69
|0.0291
|-
|<sup>31</sup>P
|100
|{{sfrac|1|2}}
|121.49
|0.0664
|-
|<sup>35</sup>Cl
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>75.4
|{{sfrac|3|2}}
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>29.41
|0.0047
|-
|<sup>37</sup>Cl
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>24.6
|{{sfrac|3|2}}
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>24.48
|0.0027
|}
Separately, Bolch at Stanford and Purcell at Harvard in 1946 each translated the Zeeman effect into the first NMR spectrum. In 1949, Proctor and Yu at Stanford measured the first chemical shift and spin couplings. Initially, commercial NMR spectrometers were continuous wave type and were only able to detect the most sensitive nuclei, 1H & 19F.
NMR ‘active’ nuclei are active if the nuclear spin, I, is non zero.
To determine spin of nuclei:
Mass # is even and # neutrons is even, I=0, therefore no spin
Mass # is even and # neutrons is odd, I= integer, therefore spin
Mass # is odd and # neutrons is even or odd, I=half integer, therefore spin
The cause of spin can be visualized with the following analogy. A rotating charged particle (e.g. hydrogen nucleus aka proton) will produce a magnetic field perpendicular to the direction of rotation which is analogous to the magnetic field of a bar magnet, as seen in Figure 1.
[[Image:Spinning proton magnetic field lines.jpg|500px|thumb|Figure 1]]
Absent an external magnetic field (B¬0) these active nuclei are oriented in random directions, but in the presence of an external magnetic field (B¬0) these nuclei orient themselves either with or against the field, as seen in Figure 2.
[[Image:Nuclei in and out of magnetic field.jpg|500px|thumb|Figure 2]]
Nuclei are dispersed between states of different energies. The different energy levels are induced by the presence of the external magnetic field (B¬0). (For spin ½ nuclei two orientations are possible, with the higher energy orientation being ‘β spin state’ and the lower energy orientation being ‘α spin state’.) This is evident in the following equation where E=energy, h=Planck’s constant, ν=frequency, γ=gyromagnetic ratio (nucleus dependent), B0= external magnetic field:
ΔE= h ν = γ B0
To see this graphically see Figure 3.
[[Image:Magnetic field induced energy levels.jpg|500px|thumb|Figure 3]]
These induced energy level differences are what allow the use of NMR. At equilibrium, nuclei will occupy both levels of energy, low and high. However, according to the Maxwell-Boltzmann Distribution, the lower energy level will be occupied by a greater number of nuclei. This difference in the number of nuclei, between low and high energy levels, is what NMR exploits. The energy required to cause a spin flip, transition from low to high energy state, corresponds to the radio frequency range of the electromagnetic spectrum.
ΔE= h ν
A nucleus will only flip spins, absorb energy, when the frequency of electromagnetic radiation just matches the change in energy, ΔE. This is called the point of resonance. Nuclei will have differing resonant frequencies based on their local electronic environment. This can be seen in “A handmade example of a proton (1H) NMR spectrum.” All nuclei under observation are irradiated with radio waves to the higher energy state and are then allowed to decay back to the lower energy state. This decay is what is observed. A free induction decay signal is collected as the nuclei fall back to the lower energy state, Figure 4 depicts a generic FID.
[[File:Nmr fid good shim EN.svg|500px|thumb|Figure 4]]
This FID is then subjected to a Fourier transform to convert from the time domain to the frequency domain, seen in Figure 5.
[[Image:NMR spectrum generic.jpg|500px|thumb|Figure 5]]
A change in the magnitude of the magnetic field will change the resonant frequency of the nucleus. Therefore, in order to compare spectra between instruments with varying size magnetic strength it is necessary to convert from frequency to parts per million, ppm. This can be done with the equation seen in Figure 6.
[[Image:Frequency to ppm.jpg|500px|thumb|Figure 6]]
With the arrival of Fourier Transform instruments in the 1970s it became possible to acquire spectra of nuclei that are not naturally abundant, such as 13C which is only 1.1% naturally occurring. This requires the acquisition of multiple spectra and adding them together to get a greater sensitivity. The signal to noise ratio (S/N) will increase as acquisitions increase, because the signal magnitude increases linearly with acquisition number while the noise magnitude increases as the square of the number acquisitions. So, the S/N will increase as the square of the number of acquisitions as seen in Figure 7.
[[Image:Signal to noise.jpg|500px|thumb|Figure 7]]
The Nobel Prize in Chemistry 2002 went partly to Kurt Wuthrich for “NMR Studies of Structure and Function of Biological Macromolecules,”[1] so NMR is important to structural biochemistry. Table 2 lists Nobel prizes awarded for discoveries related to NMR spectroscopy.
[[Image:NMR Nobel prizes.jpg|500px|thumb|Table 2]]
[[Image:nmr.jpg|500px|thumb|A handmade example of a proton (<sup>1</sup>H) NMR spectrum]]
NMR is a powerful technique that can be used to determine the structure of [[Structural Biochemistry/Proteins|proteins]] in highly concentrated solution, by analyzing the relative positions of certain atoms (Shriner 136). Protein NMR exploits the absence of zero net nuclear spin of the most abundant isotopes of carbon and oxygen (12 and 16) as well as the abundant isotope of Nitrogen (14) with a net nuclear spin of 1. NMR cannot be performed on an atom with zero net nuclear spin. Since there are many distinct nuclei present in a single protein much overlap is expected in the chemical shifts produced through the NMR analysis therefore a multidimensional approach is applied. Magnetization is applied to the protein and nuclei through electromagnetic pulses that can magnetize nuclei in two ways. The first involving magnetization through nuclei bonding and the second through open space. Each approach offers a different way to analyze the protein such as the first approach allowing for distinct nuclei to be targeted whereas the second approach allowing for structure calculation distance restraints and targeting an unlabeled protein.
Intrinsically magnetic nuclei display spinning properties that produce a magnetic moment. When an external magnetic field is applied to the system the magnetic moment can adopt either an alpha or beta state. The strength of the magnetic field determines the proportionality of alpha to beta with a tendency to favor alpha as it is aligned with the field and has a lower energy. By supplying an electromagnetic pulse alpha spin nuclei will change to beta and produce resonance. By keeping a constant magnetic field on the system and adjusting the frequency of the electromagnetic pulses a spectrum of resonance can be obtained.
Currently, NMR spectrometers use the Fourier transform method of pulse radiation. To change the nuclei in alpha state to beta, a strong pulse of radiation is used. Then the pulse of radiation is removed and the nuclei go back to their original alpha state, giving a decay signal. This signal is converted by the computer to a frequency domain spectrum in a very fast way. By storing many signals a more intense spectrum is produced. (Shriner 136)
Electrons around a magnetic nucleus produces a local magnetic field opposite to the applied magnetic field. Magnetic nuclei can absorb the electromagnetic pulses at specific frequencies coined "chemical shifts" (signal positions) expressed in parts per million (ppm). These chemical shifts are designated relative to a standard compound such as a derivative of tetramethylsilane (TMS) (CH<sub>3</sub>)<sub>4</sub>Si (which has a chemical shift of 0.0) that is soluble in water. NMR spectra that are produced through this assay can be analyzed, and with the combination of a multidimensional analysis the structure of the protein can be determined.
When an atomic nuclei is influenced by a magnetic field, it creates a magnetic moment which will give an orientation of spinning to itself. Different orientation of spinning, spin states, exist in different states of energy - alpha-state and beta-state - where alpha-state is found to be more stable with a lower energy through experiments as it has the same direction with the magnetic field. In order to transits alpha-state to beta-state (excited state), pulse of electromagnetic radiation is needed to increase the frequency of the electromagnetic radiation (through irradiation) to have the spinning nucleus to overcome the energy barrier and change its orientation. (See [http://en.wikipedia.org/wiki/Bohr_model Bohr Model] for more information) Thus, resonance will be obtained. It was discovered by American physicist Edward Mills Purcell and physicist Felix Bloch from Switzerland in 1946.
The difference between energy levels split by a magnetic field corresponds to the energy of radio waves. So, the electronics required for the NMR spectrometer weren’t developed until WWII when the government invested heavily into radar technology. Radar is simply the use of radio waves to detect location and direction of moving objects. Better frequency synthesizers, amplifiers, receivers and signal processors all contributed to advancements in the field of NMR spectroscopy.
The components of a NMR Spectrometer can be seen in Figure 8.
[[Image:NMR Spectrometer.jpg|500px|thumb|right|Figure 8]]
Some common 2D experiments can be seen in Table 3:
{| style="clear:none;float:left;margin:1em 0 1em 1em"
|-
! Common 20 experiments <sup>(Table 3)</sup>
|-
| '''COSY''' || '''Correlated Spectroscopy'''<br />Through bond H-H correlation
|-
| '''TOCSY''' || '''Total Correlation Spectroscopy'''<br />Extended through bond H-H correlation
|-
| '''1D NOE''' || '''Nuclear Overhauser Effect Spectroscopy'''<br />H-H through space correlation
|-
| '''NOESY''' || '''Nuclear Overhauser Effect Spectroscopy'''<br />H-H through space correlation
|-
| '''ROESY''' || '''Rotating Frame Overhauser Effect Spectroscopy'''<br />Similar to NOESY
|}<br style="clear:both"/>
==Magnets used for NMR==
The magnets used for NMR are very strong. Those used for high resolution protein structure determination range from 500 megahertz to 900 megahertz and generate magnetic fields thousands of times stronger than the Earth’s. Although the sample is exposed to a strong magnetic field, very little magnetic force gets out of the machine.
NMR magnets are superconductors, so they must be cooled with liquid helium, which is kept at 4 Kelvin. Liquid nitrogen, which is kept at 77 Kelvin, helps keep the liquid helium cold.
== Appropriate Isotopes ==
Only certain isotopes are capable for use in NMR. The most common isotope that is used in NMR is Hydrogen-1 (Proton NMR). Other commonly used isotopes are Carbon-13 and Nitrogen-15.
== Vector Model ==
The Vector Model only holds for uncoupled spins. Nuclei that are active under NMR spectroscopy have associated with them a nuclear spin magnetic moment, which means that these nuclei produce a small magnetic field. When these nuclei are placed in a magnetic field the energy of the interaction depends on the angle between the field and the magnetic moment. The highest energy interaction is when the magnetic field and the magnetic moment point in opposite directions, and the lowest energy interaction is when the magnetic field and magnetic moment point in the same direction.
Before a magnetic field is applied to a population of nuclei the magnetic moments of these nuclei are oriented randomly due to random thermal motion. After a magnetic field is applied one has to wait for the spins to come to equilibrium, a process known as relaxation. Pointing in the direction of the magnetic field is slightly energetically favored, and hence only a very small number of spins will do so, forming the bulk magnetization vector. The sample is hence magnetized. At equilibrium the bulk magnetization vector will point in the direction of the magnetic field (we will assume this is the z direction) and will be stationery. If the magnetization vector was tilted away from the axis it would precess at the Larmor frequency (-gyromagnetic ratio * magnetic field).
The purpose of a pulse is to quickly change the direction of the magnetization vector. This can be done by creating a much weaker magnetic field in the direction one desires, but allowing it to oscillate at the aforementioned Larmor frequency. This will result in the magnetization vector pointing in the direction one desires. This occurs because when the B1 field (the weaker field) oscillates near the Larmor Frequency, the result is that the strength of the B0 field (the stronger field in the z direction) appears to be reduced. Hence the resulting magnetic field (the effective field) can point very close to the direction of the B1 field if the B1 field is much larger than the reduced field.
An on resonance pulse involves changing the direction of the magnetization vector by applying the B1 field in a certain direction for a specific time. The angle through which the magnetization vector is rotated is given as the product of the frequency of the effective field and the time the pulse is applied. By applying different times one can rotate the magnetization vector to different angles.
For a real NMR experiment there are going to be more than one resonance frequencies in the sample. If one makes the B1 field strong enough it is possible to bring the magnetization vector very close to the desired orientation, which means we can bring it close to the ideal case of an on resonance pulse.
The vector model can be used to understand simple NMR experiments.
== Chemical shifts ==
'''Chemical shifts''' are the units used in Protein NMR analysis graphs. Chemical shift correlates to the different radiofrequency electromagnetic pulses sent through the protein sample. Each molecule that exhibits spin properties show different distinct chemical shifts. Chemical shifts can be observed by sending nuclear magnetic energy onto the protein sample. The electron clouds that surround each spin nuclei create a local magnetic field that opposes the applied magnetic field. When the electromagnetic pulse runs through the sample alpha spin nuclei that are hit with the correct amount of energy to switch to beta spin do so and subsequently cause resonance. This resonance can then be recorded and is reported for the different frequencies applied to sample as parts per million (ppm chemical shifts). For example, when the nuclear magnetic field strength sends out a frequency of 1 ppm (parts per million), CH<sub>3</sub> reacts to it and exhibits beta spin behavior from which the spectroscopy catches this signal and records it.
Most hydrogen absorptions in 300-MHz 1H NMR fall within a range of 3000 Hz. Rather than record the exact frequency of each resonance, we measure it relative to an internal standard, the compound tetramethylsilane, (CH<sub>3</sub>)<sub>4</sub>Si. Its 12 equivalent hydrogens are shielded relative to those in most organic molecules, resulting in a resonance line conveniently removed from the usual spectral range.
A problem with these numbers, however, is that they vary with the strength of the applied magnetic field. Because field strength and resonance frequency are directly proportional, doubling or tripling the field strength will double or triple the distance (in hertz) of the observed peaks relative to (CH<sub>3</sub>)<sub>4</sub>Si. To make it easier to compare reported literature spectra, we standardize the measured frequency by dividing the distance to (CH<sub>3</sub>)<sub>4</sub>Si (in hertz) by the frequency of the spectrometer. This procedure yields a field-independent number, the chemical shift δ.
== NMR in Characterizing Organometallics ==
NMR spectra uses superconducting magnets to many metal nuclei. Carbon 13 NMR has become increasingly useful in facilitating due to its low natural abundance and low sensitivity for NMR experiment. The integration of NMR peaks of organometallic complexes can provide the ratio of atoms in different environments. Since the relaxation times of the carbon atoms vary in organometallics, a great deal of inaccuracy result from this. However it does have its advantages as well. For example, terminal carbonyl peaks are frequently in the range of 195 to 225ppm, which allows it to be easily distinguished from other ligands. The 13C chemical shift correspond with the strength of the CO bond. The stronger the bond, the smaller the chemical shift. 13C in cyclopentadienyl ligands have a wide range of chemical shifts in paramagnetic compounds whereas it's narrower for diamagnetic compounds.
== Nuclei Spin States ==
In NMR, certain atomic nuclei must be magnetic by nature in order for this technique to be used. However, only a certain number of isotopes have this magnetic characteristic called spin. An example is hydrogen. When an external magnetic field is applied, hydrogen's spinning proton generates a magnetic moment which can take either the α or β spin state. The energy difference between the two states is directly proportional to the amount of external magnetic field applied. The α state is aligned with the applied field and has lower energy than the β state. When a pulse of electromagnetic radiation is applied to the α state, it can be excited to the β state, thus a resonance will be obtained.
The NMR is only able to detect certain atoms and only certain isotopes. For example, it can detect the Hydrogen molecules with a mass of 1 amu, but not the other isotopes. Most commonly the Hydrogen and Carbon NMR's are used. The information that can be determined by the NMR is immense. In the case of the Hydrogen NMR, one can use a certain amount of knowledge from a table to determine what each peak corresponds to which group within your sample. Interpreting NMR's can also be a little tricky in that one must understand splitting patterns. For example, the carbon atom you may be examining may have only one hydrogen attached, however if attached to a methyl group, it will appear as a quartet.
==Shielding and Deshielding==
Protons in different chemical environments are shielded by different amounts. When a nucleus surrounded by electrons is exposed to a magnetic field of strength H<sub>0</sub>,these electrons move in such a way as to generate a small local magnetic field, h<sub>local</sub>, opposing H<sub>0</sub>. As a consequence, the total field strength near the hydrogen nucleus is reduced, and the nucleus is thus said to be shielded from the magnetic field strength by its electron cloud. The degree of shielding depends on the amount of electron density surrounding the nucleus. dding electrons increases shielding; their removal, consequently, would cause deshielding. Also, a proton is deshielded when the induced field reinforces the applied field. For example, the induced field can reinforce the applied field. As a result, these protons are deshielded and their chemical shifts are at a higher value of ppm.
==Coupling==
'''J-coupling''' arises from the interaction of different spin states through the chemical bonds of a molecule and results in the splitting of NMR signals. This coupling provides detailed information about the connectivity of atoms and the structure of a molecule.
Spin-spin slitting is given by the '''N+1 Rule''': 1) H that is neighbored by one H resonnate as a doublet.2) H that is neighbored by two set of equivalent Hs resonate as trplet. 3) H that is neighbored by three equivalents of hydrogens resonate as a quartet.
A multiplet can be shown when there is a mixture of couple patterns, some of which could be broken down to small parts (i.e. qd- quartet of doublet). But for the most part, if a coupling pattern shows complexity not easily countable by N+1 rule, such pattern is called a multiplet.
In addition, functional groups containing alcohol (-OH) such as alcohol, carboxylic acid have a broad band on NMR spectra. This is due to the fact that Hydrogens on alcohol can hydrogenbond easily, thus being able to couple in broad spectra than other H's. Thus just by looking at the type of the spectra (such as multiple peaks or broad peak), one can easily categorize the functional group to which the H is associated with.
The ratio of the splitting peaks is given by a mathematical mnemonic device called Pascal's triangle. Each number in this triangle is the sum of the two numbers closest to it in the line above. It is important to remember that nonequivalent nuclei mutually split one another. In other words, the observation of one split absorption necessitates the presence of another split signal in the spectrum. Moreover, the coupling constants for these pattern must be the same. Double and triple bond characteristic chemical environments show complex splitting peaks. An alkyne for example, can have hydrogen splitting patterns an extra adjacent carbon away. An alkene depending on where the hydrogen is located (cis or trans) to a relative chemical environment, can show a slightly distorted peak.
==Integration==
'''Integration''' is very useful in NMR spectrum in determining the structure of a molecule. The relative integrated intensity of a signal is proportional to the relative number of nuclei giving rise to that absorption. Normally, an NMR spectrum plot will tell you very complex integration numbers. However, integration doesn’t have to be exact. You can just divide each integration number by the smallest number in your NMR spectrum. The ratio will help you get a big picture of the relative number of H’s represented by a peak. Combining the chemical shifts and the peak integration, you might be able to determine the structure of a molecule by using the ''chemical shift table''.
Researchers usually use NMR to check if the product they made from a reaction is what they really want. So they don’t have to figure out the structure of a molecule by looking at a complex spectrum. They know what the spectrum should look like if the reaction works. By comparing the actual spectrum to the ideal one, they are able to verify the molecule they want is in the product. Solvent used is usually CD<sub>2</sub>Cl<sub>2</sub>, since D would not show up in a H NMR spectrum. Combine with chemical shifts, they can be used to determine structure.
== Proton NMR interpretation ==
To interpret proton NMR, it is important to know where each type of proton lies. Below is a list of types of proton and their chemical shift on NMR.
[[Image:Table HNMR.jpg|Proton NMR frequency]]
It is important to know that proton NMR peaks only indicate the presence of protons (H). It does not show other atoms like Carbon, Oxygen...etc. As mentioned in the above section, proton peaks shows spliting because of coupling by the neighbor protons. The integration of each peak is the amount of proton relative to other proton on the NMR. When solving structure from the H NMR, it is important to write down the chemical shift, integration and the split of each peak. Then base on the chemical shift of the peak, write down the possible functional group and structure. Lastly, arrange and connect each structure so that it matches the split and the integration of proton NMR. Below are examples of hand drawn proton NMR and also the detail instruction to interprete proton NMR.
=== Example ===
The interpretation of each proton NMR is given right below of each graph. Try not to look at the structure, and only look at the molecular formula and proton NMR to interpret the structure of the compound. Note that the examples given are the basic and simple compound. The NMR of protein structures is much more complex than these examples. The goal of these examples is to give you an idea how proton NMR are interpreted.
[[Image:1H NMR Ethyl Acetate Coupling shown - 2.png|Proton NMR]]
Base on the chemical shift of proton NMR, there should be a ketone functional group or a structure that contains a carbonyl group at peak around 2.0. The peak around 1.3 could be a primary or secondary alkyl group.
Now look at the splitting of the peaks at chemical shift 1.3 (C), the triplet (3 peaks) shows that the proton is probably split by 2 neighbor protons (base on the n+1 rule mention in integration section). If it is split only by 1 neighbor proton, then it would be a doublet (2 peaks). Next, look at the peak at chemical shift 2.0 (B). The singlet (single peak) means that this proton environment probably has no neighbor proton. The peak at chemical shift 4.2 (A) is a quadruplet (4 peaks). This means there are about 3 neighbor proton next to proton environment A. Since it is known that B has no proton right next to it, and A and C both has neighbor protons, it is safe to assume that proton environment A is right next to proton environment C, which could be a -CH2CH3.
The following possible structures deduced above are a ketone and an ethyl group.
{|class="wikitable"
|+ Splitting analysis
|-
!Substructure
|[[File:Methyl group.svg|100px]]
|[[File:Ethyl group.svg|150px]]
|-
!Splitting pattern
|Singlet
|Quartet and triplet
|-
!Analysis
| C with no neighboring H
| C with three neighboring H<br>C with two neighboring H
|}
Note that the there are two oxygen atoms from the molecular formula. One of the oxygen is included in ketone. The other oxygen must be binding onto one of these two structures. Take a look at peak A, the chemical shift is near 4.0, which means it might be connected to a heteroatom like oxygen. Place the oxygen next to the -CH2CH3 and connect the structure together, you will get ethyl acetate as indicated below the proton NMR. Notice that the proton B does not have any neighbor proton. Proton A is split into 4 peaks by proton C (n+1 rule, n = 3 neighbor protons). Proton C is split into 3 peaks by proton A (n = 2 neighbor protons). The CH2, secondary alkyl, base on the proton frequency table should be around the chemical shift ~1.2 ppm, but instead it is at ~4.2 ppm. The reason for this is that the CH2 is attached to oxygen a heteroatom, which is a electron withdrawing group. The result is that the chemical shift is pulled left field resulting in a chemical shift of 4.2 ppm. Another way to look at this is to assume there is an ester functional group at chemical shift of 4.2 ppm, and the primary alkyl group is attached to the ester.
The integration of the proton NMR also matches the structure well. The methyl CH3 next to the carbonyl group has 3 protons, and the primary alkyl next to the CH2 has 3 protons as well. This explains why peak B has the same height as peak C (same amount of protons). Peak A has the lowest height because it only has two protons.
[[Image:3-methoxyphenol NMR.jpg|proton NMR]]
This proton NMR example looks more complicated than the first one, but it is actually easier. One important information from this proton NMR is that there are peaks around 6.0~ 7.0 ppm (F,B,D,E). This always almost indicates the presence of aromatic ring. Noticed that there are about 4 group of peaks from 6.0 to 7.0 ppm? This means that there are four protons attach to 4 carbons on the aromatic ring. This leaves 2 carbons of the aromatic ring free to attach to two substituents. The position of these substituents is clearly an ortho and para position on the aromatic ring. The reason is that two different substituents on ortho and para position of the aromatic ring would give 4 proton environments. If there are only two proton environments around 6.0~ 8.0 ppm with the same integration (height), it means that the aromatic ring is probably symmetric on both sides with double para substituents. Now look at the peak (A) at 5.5 ppm. The peak is a broad peak instead of sharp peak like the rest. This means that the proton of this environment is attached to a heteroatom. The only heteroatom present in the sample base on the molecular formula given is an oxygen atom. This means that the proton is directly attached to oxygen, which would be a alcohol group -OH (Note that the proton on the alcohol group can have the chemical shift range from 0.5 to 5.0 ppm). It is important to remember that the proton that attached to a heteroatom is also known as exchangeable proton. Exchangeable proton sometimes do not show up on H NMR, so do not worry when an expected exchangeable peak doesn’t appear on HMNR.
The peak (C) at the chemical shift of ~3.9 ppm has the highest integration (height) and is a singlet. Usually when such a high singlet peak is observed around 3.9 ppm with oxygen in the molecular formula, there is a high chance that it is a ether group, -OCH3. Since there is no neighbor proton next to the CH3 of the ether, it is a singlet peak. In addition, the height of the peak is high compare to the other peak, which indicate a possibility of CH3 with at least 3 times more protons than other proton environment. Base on the interpretations above, these are the possible function groups:
[[Image:3-methoxyphenol NMR1.jpg|possible proton structures]]
Attach the alcohol group and the ether group in ortho- para position will result in the correct structure of the compound.
== Nuclear Overhauser Enhancement Spectroscopy (NOESY) ==
[[File:Noesy.jpg|thumb|NOESY Spectrum of Codeine. Each peak correlates to a proton.]]
'''NOESY''' is a NMR technique that uses the Nuclear Overhauser effect to help understand the tertiary structure of proteins and other large molecules. The nuclear Overhauser effect is the interaction of nuclei at short distances from each other. The extent of the effect is approximately 5 Angstroms. This is a better analysis of tertiary structure for proteins that do not form crystalline structures and need to be analyzed in solution. Like in NMR, a magnetic field is produced around the molecule and RF waves at different frequencies are produced to produce resonance. The resonance is produced when the nucleus reverses spin. Unlike normal NMR, the aim of NOESY is to determine the effect of the resonance of one nucleus on the other nuclei in the area. The graph that is produced gives you an idea of where the nuclei are in relation to each other.
The NOESY experiment reveals the distance of protons relative to one another. Protons very close to each other, (about 3 Angstroms apart) will produce a very large signal. The limit of detection is about 5-6 Angstroms apart, and will produce only a very weak signal.
The graph has diagonal dots correspond to the placement of the nuclei on the one dimensional NMR. There are dots out side of this diagonal spectrum. These dots show what nuclei are in close proximity of each other. If a line was drawn horizontally and vertically from the outlaying dots, the dots, on the diagonal spectrum, that lay on the lines would be in close proximity to each other. Using the information from the NMR and the NOESY a tertiary structure of the macromolecules could be formed. However, the resulting tertiary structure would contain a family of structures. This happened for three reasons. The first is the approximation of the distance between the nuclei. Second, there may not have been enough constraints to produce a singular structure. Thirdly, the protein is in solution, and the solution contains many proteins.
This technique is mainly used for hydrogen atoms, because they are the most abundant atom in biological systems and are also the simplest.
==Protein NMR==
An NMR machine is essentially a huge magnet. Many atoms are essentially little magnets. When placed inside an NMR machine, all the little magnets orient themselves to line up with the big magnet. By harnessing this law of physics, NMR spectroscopists are able to figure out physical, chemical, electronic, and structural information about molecules.
NMR relies on the interaction between an applied magnetic field and the natural “little magnets” in certain atomic nuclei. For protein structure determination, spectroscopists concentrate on the atoms that are most common in proteins: hydrogen, carbon, and nitrogen. What researchers seek to learn through NMR is how this chain of amino acids wraps and folds around itself to create the three-dimensional, active protein. Solving a protein structure using NMR is a series of experiments, each of which provides partial clues about the nature of the atoms in the sample molecule, such as how close two atoms are to each other, whether these atoms are physically bonded to each other, or where the atoms lie within the same amino acid. Other experiments show links between adjacent amino acids or reveal flexible regions in the protein. Each new set of experiments further refines possible structures until finally the scientists carefully select 10 to 20 solution that best represent their data and present the average as their final structure.
'''Sample Preparation for NMR'''
In order to study protein structure by NMR, highly purified samples of the protein of interest must be prepared. The protein can either be isolated from natural sources, or expressed in host organisms such as E. Coli through recombinant DNA techniques. The bacteria with the recombinant gene coding for a specific protein are grown in minimal media with 15NH4Cl being the only source of nitrogen for the bacteria, and 13C-glucose offering the only source of carbon for the bacteria to make proteins. This way, when the bacteria produce the protein of interest, these proteins are labeled with 15N and 13C, both of which are NMR active. The protein of interest is then purified through various protein purification techniques (See protein purification techniques). Finally, the protein, in an appropriate buffer, is loaded into an NMR tube and is ready to be placed in the NMR magnet.[[File:Figure 1.pdf|thumb|Figure 1. General scheme for protein structure determination by NMR in solution phase.]]
'''NMR Experiments'''
'''2D Experiments'''There are many different types of NMR experiments one can run to help to reveal information about the structure of the protein. The experiments usually differ in what correlations are detected. For example, a 2D [1H-1H]-NOESY experiment will reveal hydrogen atoms that are within 0.5 nm apart. Protons that exhibit this interaction will show up as a cross peak on the 2D spectrum (Figure 2).[[File:Figure 2.pdf|thumb|Figure 2. Simplified example of 2D [1H-1H]-NOESY NMR spectrum. The dots on the diagonal represent the 1D spectrum of the molecule. There are two protons that are being examined, one at 9 ppm and the other at 8 ppm. The presence of the cross peak (circled) reveals that these two protons are within 0.5 nm apart.]]
Taking this information, theoretically, the protons at 8 ppm and 9 ppm on the 1D spectrum could be assigned to a certain residue in the amino acid sequence. For example, if Ala1 is the point at 8 ppm and Ala54 is at 9 ppm, and there is a crosspeak present, then the observation of this NOE reveals a circular structure for this polypeptide chain (Figure 3). [[File:Figure 3.pdf|thumb|Figure 3. Circular structure of polypeptide chain revealed by presence of NOE on 2D NOESY spectrum.]]
Because proteins are much more complicated than this example above, the 2D NOESY spectrum is often cluttered and crosspeaks cannot be made out clearly because many of these points may stack on top of one another. Other experiments are required to reveal the necessary information to determine the 3D structure of the protein, such as 3D experiments.
'''3D Experiments'''
3D experiments use a third dimension to reveal peaks that may be stacked on top of one another in the 2D spectrum. An example is 3D 15N-correlated [1H-1H]-NOESY (Figure 4).
There are many other experiments to correlate different nuclei and their neighbors.
[[File:Figure 4.pdf|thumb|Figure 4. Example of 3D 15N [1H-1H] NOESY. The peaks that would be stacked on top of one another in the 2D [1H-1H] NOESY are now drawn out in the third dimension by relating its 15N chemical shifts. This cleans up the spectrum and helps in resonance assignments.]]
==Protein NMR Advantages==
NMR is a good method in trying to solve the structure of a protein and the continued unanswered protein folding problem. However it is not the only method as crystallography is also a possible method for determining protein structure. However, NMR has its advantages over crystallography.
One instance is that it uses molecules in solution, so it is not limited to those that crystallize well since crystallization is a very uncertain and time-consuming step in X-ray crystallography. In addition, some proteins do not readily crystallize. Furthermore, although structures present in crystallized proteins very closely represent those of proteins free of the constraints imposed by the crystalline environment, structures in solution can be sources of additional insights. NMR also makes it fairly easy to study properties of a molecule besides its structure such as the flexibility of the molecule and how it interacts with other molecules. With crystallography, it is either impossible to study these aspects or it requires an entirely new crystal.
==Protein NMR Disadvantages==
Most NMR spectroscopists focus on molecules no larger than 20-30 kilodaltons. X-ray crystallographers have solved structures upto 2,500 kilodaltons.
==NMR in Real Life==
The 15 carbon compound viniferone found in grape seeds was isolated in 2004. Viniferone falls into a group of substances, grape seed, that are very active against radicals and oxidative stress. There was very little recovery of viniferone from an abundance of grape seeds (~40 mg of viniferone from 10.5 kg of grape seeds), so precautions had to be taken in the techniques used to obtain its structure. Most tests would destroy the minuscule amount proanthocyanidins t of viniferone obtained, so a combination of spectroscopic techniques were utilized (including NMR) to obtain viniferone's structure. Obtaining the <sup>1</sup>H and <sup>13</sup>C NMR data was critical in determining the structure of Viniferone. The variety of absorption signals at various chemical shifts helped determine the presence of alkenes and benzene rings. Correlation spectroscopy and eventually X-ray crystallography were used to verify the structural arrangement of Viniferone.<ref name ="Schore">Schore, Neil E. (2011). Organic Chemistry Structure and Function 6th Edition. W. H. Freeman</ref>
== References ==
{{Reflist|2}}
If you would like to learn more about interpreting NMR peaks, I highly suggest this website. [http://www.wfu.edu/~ylwong/chem/nmr/h1/ http://www.wfu.edu/~ylwong/chem/nmr/h1/]
<br> Berg, Jeremy M., Lubert Stryer, and John L. Tymoczko. Biochemistry. 6th ed. Boston: W. H. Freeman & Company, 2006. 98-101.
<br> Shriner, Christine K. F. Hermann, Terence C. Morrill, David Y. Curtin, Reynold C. Fuson. The Systematic Identification of Organic Compounds. 8th ed. U.S.A. John Wiley & Sons, Inc. 2004. 136-142.
<br> Vollhardt, K. Peter C., Schore, Neil E. Organic Chemistry - Structure and Function. 5th ed. New York: W. H. Freeman & Company, 2005. 398-432.
<br> Keeler, James. Understanding NMR Spectroscopy. West Sussex, England. John Wiley & Sons. 51-77.
<br>Clore, Marius G., Gronenborn, Angela M. “Chapter 34: Structures of Larger Proteins, Protein-Ligand, and Protein-DNA Complexes by Multidimensional Heteronuclear NMR.” Multidimensional NMR Methods for the Solution State. United Kingdom. John Wiley & Sons Ltd.
<br>Wuthrich, Kurt. “Chapter 33: Biological Macromolecules: Structure Determination in Solution.” Multidimensional NMR Methods for the Solution State. United Kingdom. John Wiley & Sons Ltd.
<br> National Institutes of Health, National Institute of General Medical Sciences, New York, 2007, 29-30, http://www.nigms.nih.gov.
{{BookCat}}
[1]"Kurt Wüthrich - Nobel Lecture". Nobelprize.org. 25 Oct 2010 http://nobelprize.org/nobel_prizes/chemistry/laureates/2002/wuthrich-lecture.html
ofgt39pqfjhin415u4bd6wmoljrl9ru
4676258
4676257
2026-10-15T12:52:16Z
DMacks
94753
/* General Information */ The text formatting here is terrible, a mix of lots of different incorrect technical formatting. Fix a few
4676258
wikitext
text/x-wiki
NMM spectroscopy is unique in being able to reveal the atomic structure of macromolecules in solution, provided that highly concentrated solution can be obtained. This technique depends on the fact that certain atomic nuclei are intrinsically magnetic. The chemical shift of nuclei depends on their local environment. Furthermore, the spins of neighboring nuclei interact with each other in ways that provide definitive structural information. This information can be used to determine complete three-dimensional structures of proteins.
== General Information ==
'''Nuclear Magnetic Resonance Spectroscopy (NMR)''' is an analytical technique which exploits the fact that certain nuclei possess a property called spin (I). NMR spectroscopy is possible due to the Zeeman Effect discovered first in the 1890s. The structures of proteins can be determined by NMR by first preparing the isotopically labeled samples. In the magnet, the "natural magnets" in the atoms of the sample line up with the magnetic field of the NMR magnet. Then, the sample is exposed to a series of radio wave pulses to disrupt the magnetic equilibrium of the atoms. The reaction of these nuclei can be observed to assess their chemical nature specifically, their chemical shift properties. Sets of experiments can be conducted to refine possible structures and present the average of the experiments as the final structure. It can have advantages over X-ray crystallography because the samples of proteins can be in solution rather than crystallized form and other properties of the sample protein, such as flexibility and interactions, can be determined while X-ray crystallography only reveals the structure of the protein.
It is the splitting of atomic energy levels when the atoms are placed in a magnetic field. This effect was later found to occur as a result of nuclear spin. In 1924, Wolfgang Pauli first suggested the theoretical basis of NMR when he concluded that some atomic nuclei should possess nuclear spin and these nuclei would split into degenerate energy levels when placed in a magnetic field. These nuclei have a magnetic moment, in and of themselves, which is called spin. Nuclei that possess spin are said to be NMR active. Some NMR active nuclei that are studied in biological molecules can be seen in Table 1.
{| class="wikitable" style="margin:auto;"
|+Table 1. Magnetic properties of common nuclei<ref>''[[:w:CRC Handbook of Chemistry and Physics|CRC Handbook of Chemistry and Physics]]'', 65th ed.</ref>
|-
![[Isotope]]
! [[Natural abundance|Occurrence<br> in nature]]<br> (%)
! [[Spin (physics)|Spin number]] {{mvar|I}}
! [[Operating frequency]] at 7 [[Tesla (unit)|T]]<br> (MHz)
! Relative sensitivity
|-
|<sup>1</sup>H
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>99.984
|{{sfrac|1|2}}
|300.13
|1
|-
|<sup>2</sup>H
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">00</span>0.016
|1
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>46.07
|0.0964
|-
|<sup>13</sup>C
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">00</span>1.1
|{{sfrac|1|2}}
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>75.47
|0.0159
|-
|<sup>14</sup>N
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>99.64
|1
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>21.68
|0.00101
|-
|<sup>15</sup>N
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">00</span>0.37
|{{sfrac|1|2}}
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>30.41
|0.00104
|-
|<sup>17</sup>O
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">00</span>0.0317
|{{sfrac|5|2}}
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>40.69
|0.0291
|-
|<sup>31</sup>P
|100
|{{sfrac|1|2}}
|121.49
|0.0664
|-
|<sup>35</sup>Cl
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>75.4
|{{sfrac|3|2}}
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>29.41
|0.0047
|-
|<sup>37</sup>Cl
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>24.6
|{{sfrac|3|2}}
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>24.48
|0.0027
|}
Separately, Bolch at Stanford and Purcell at Harvard in 1946 each translated the Zeeman effect into the first NMR spectrum. In 1949, Proctor and Yu at Stanford measured the first chemical shift and spin couplings. Initially, commercial NMR spectrometers were continuous wave type and were only able to detect the most sensitive nuclei, <sup>1</sup>H & <sup>19</sup>F.
Atomic nuclei are NMR-active if the nuclear spin, ''I'', is non zero. Nuclear spin is determined as follows:
* Mass # is even and # neutrons is even, I=0, therefore no spin
* Mass # is even and # neutrons is odd, I= integer, therefore spin
* Mass # is odd and # neutrons is even or odd, I=half integer, therefore spin
The cause of spin can be visualized with the following analogy. A rotating charged particle (e.g. hydrogen nucleus aka proton) will produce a magnetic field perpendicular to the direction of rotation which is analogous to the magnetic field of a bar magnet, as seen in Figure 1.
[[Image:Spinning proton magnetic field lines.jpg|500px|thumb|Figure 1]]
Absent an external magnetic field (B¬0) these active nuclei are oriented in random directions, but in the presence of an external magnetic field (B¬0) these nuclei orient themselves either with or against the field, as seen in Figure 2.
[[Image:Nuclei in and out of magnetic field.jpg|500px|thumb|Figure 2]]
Nuclei are dispersed between states of different energies. The different energy levels are induced by the presence of the external magnetic field (B¬0). (For spin ½ nuclei two orientations are possible, with the higher energy orientation being ‘β spin state’ and the lower energy orientation being ‘α spin state’.) This is evident in the following equation where E=energy, h=Planck’s constant, ν=frequency, γ=gyromagnetic ratio (nucleus dependent), B0= external magnetic field:
ΔE= h ν = γ B0
To see this graphically see Figure 3.
[[Image:Magnetic field induced energy levels.jpg|500px|thumb|Figure 3]]
These induced energy level differences are what allow the use of NMR. At equilibrium, nuclei will occupy both levels of energy, low and high. However, according to the Maxwell-Boltzmann Distribution, the lower energy level will be occupied by a greater number of nuclei. This difference in the number of nuclei, between low and high energy levels, is what NMR exploits. The energy required to cause a spin flip, transition from low to high energy state, corresponds to the radio frequency range of the electromagnetic spectrum.
ΔE= h ν
A nucleus will only flip spins, absorb energy, when the frequency of electromagnetic radiation just matches the change in energy, ΔE. This is called the point of resonance. Nuclei will have differing resonant frequencies based on their local electronic environment. This can be seen in “A handmade example of a proton (1H) NMR spectrum.” All nuclei under observation are irradiated with radio waves to the higher energy state and are then allowed to decay back to the lower energy state. This decay is what is observed. A free induction decay signal is collected as the nuclei fall back to the lower energy state, Figure 4 depicts a generic FID.
[[File:Nmr fid good shim EN.svg|500px|thumb|Figure 4]]
This FID is then subjected to a Fourier transform to convert from the time domain to the frequency domain, seen in Figure 5.
[[Image:NMR spectrum generic.jpg|500px|thumb|Figure 5]]
A change in the magnitude of the magnetic field will change the resonant frequency of the nucleus. Therefore, in order to compare spectra between instruments with varying size magnetic strength it is necessary to convert from frequency to parts per million, ppm. This can be done with the equation seen in Figure 6.
[[Image:Frequency to ppm.jpg|500px|thumb|Figure 6]]
With the arrival of Fourier Transform instruments in the 1970s it became possible to acquire spectra of nuclei that are not naturally abundant, such as 13C which is only 1.1% naturally occurring. This requires the acquisition of multiple spectra and adding them together to get a greater sensitivity. The signal to noise ratio (S/N) will increase as acquisitions increase, because the signal magnitude increases linearly with acquisition number while the noise magnitude increases as the square of the number acquisitions. So, the S/N will increase as the square of the number of acquisitions as seen in Figure 7.
[[Image:Signal to noise.jpg|500px|thumb|Figure 7]]
The Nobel Prize in Chemistry 2002 went partly to Kurt Wuthrich for “NMR Studies of Structure and Function of Biological Macromolecules,”[1] so NMR is important to structural biochemistry. Table 2 lists Nobel prizes awarded for discoveries related to NMR spectroscopy.
[[Image:NMR Nobel prizes.jpg|500px|thumb|Table 2]]
[[Image:nmr.jpg|500px|thumb|A handmade example of a proton (<sup>1</sup>H) NMR spectrum]]
NMR is a powerful technique that can be used to determine the structure of [[Structural Biochemistry/Proteins|proteins]] in highly concentrated solution, by analyzing the relative positions of certain atoms (Shriner 136). Protein NMR exploits the absence of zero net nuclear spin of the most abundant isotopes of carbon and oxygen (12 and 16) as well as the abundant isotope of Nitrogen (14) with a net nuclear spin of 1. NMR cannot be performed on an atom with zero net nuclear spin. Since there are many distinct nuclei present in a single protein much overlap is expected in the chemical shifts produced through the NMR analysis therefore a multidimensional approach is applied. Magnetization is applied to the protein and nuclei through electromagnetic pulses that can magnetize nuclei in two ways. The first involving magnetization through nuclei bonding and the second through open space. Each approach offers a different way to analyze the protein such as the first approach allowing for distinct nuclei to be targeted whereas the second approach allowing for structure calculation distance restraints and targeting an unlabeled protein.
Intrinsically magnetic nuclei display spinning properties that produce a magnetic moment. When an external magnetic field is applied to the system the magnetic moment can adopt either an alpha or beta state. The strength of the magnetic field determines the proportionality of alpha to beta with a tendency to favor alpha as it is aligned with the field and has a lower energy. By supplying an electromagnetic pulse alpha spin nuclei will change to beta and produce resonance. By keeping a constant magnetic field on the system and adjusting the frequency of the electromagnetic pulses a spectrum of resonance can be obtained.
Currently, NMR spectrometers use the Fourier transform method of pulse radiation. To change the nuclei in alpha state to beta, a strong pulse of radiation is used. Then the pulse of radiation is removed and the nuclei go back to their original alpha state, giving a decay signal. This signal is converted by the computer to a frequency domain spectrum in a very fast way. By storing many signals a more intense spectrum is produced. (Shriner 136)
Electrons around a magnetic nucleus produces a local magnetic field opposite to the applied magnetic field. Magnetic nuclei can absorb the electromagnetic pulses at specific frequencies coined "chemical shifts" (signal positions) expressed in parts per million (ppm). These chemical shifts are designated relative to a standard compound such as a derivative of tetramethylsilane (TMS) (CH<sub>3</sub>)<sub>4</sub>Si (which has a chemical shift of 0.0) that is soluble in water. NMR spectra that are produced through this assay can be analyzed, and with the combination of a multidimensional analysis the structure of the protein can be determined.
When an atomic nuclei is influenced by a magnetic field, it creates a magnetic moment which will give an orientation of spinning to itself. Different orientation of spinning, spin states, exist in different states of energy - alpha-state and beta-state - where alpha-state is found to be more stable with a lower energy through experiments as it has the same direction with the magnetic field. In order to transits alpha-state to beta-state (excited state), pulse of electromagnetic radiation is needed to increase the frequency of the electromagnetic radiation (through irradiation) to have the spinning nucleus to overcome the energy barrier and change its orientation. (See [http://en.wikipedia.org/wiki/Bohr_model Bohr Model] for more information) Thus, resonance will be obtained. It was discovered by American physicist Edward Mills Purcell and physicist Felix Bloch from Switzerland in 1946.
The difference between energy levels split by a magnetic field corresponds to the energy of radio waves. So, the electronics required for the NMR spectrometer weren’t developed until WWII when the government invested heavily into radar technology. Radar is simply the use of radio waves to detect location and direction of moving objects. Better frequency synthesizers, amplifiers, receivers and signal processors all contributed to advancements in the field of NMR spectroscopy.
The components of a NMR Spectrometer can be seen in Figure 8.
[[Image:NMR Spectrometer.jpg|500px|thumb|right|Figure 8]]
Some common 2D experiments can be seen in Table 3:
{| style="clear:none;float:left;margin:1em 0 1em 1em"
|-
! Common 20 experiments <sup>(Table 3)</sup>
|-
| '''COSY''' || '''Correlated Spectroscopy'''<br />Through bond H-H correlation
|-
| '''TOCSY''' || '''Total Correlation Spectroscopy'''<br />Extended through bond H-H correlation
|-
| '''1D NOE''' || '''Nuclear Overhauser Effect Spectroscopy'''<br />H-H through space correlation
|-
| '''NOESY''' || '''Nuclear Overhauser Effect Spectroscopy'''<br />H-H through space correlation
|-
| '''ROESY''' || '''Rotating Frame Overhauser Effect Spectroscopy'''<br />Similar to NOESY
|}<br style="clear:both"/>
==Magnets used for NMR==
The magnets used for NMR are very strong. Those used for high resolution protein structure determination range from 500 megahertz to 900 megahertz and generate magnetic fields thousands of times stronger than the Earth’s. Although the sample is exposed to a strong magnetic field, very little magnetic force gets out of the machine.
NMR magnets are superconductors, so they must be cooled with liquid helium, which is kept at 4 Kelvin. Liquid nitrogen, which is kept at 77 Kelvin, helps keep the liquid helium cold.
== Appropriate Isotopes ==
Only certain isotopes are capable for use in NMR. The most common isotope that is used in NMR is Hydrogen-1 (Proton NMR). Other commonly used isotopes are Carbon-13 and Nitrogen-15.
== Vector Model ==
The Vector Model only holds for uncoupled spins. Nuclei that are active under NMR spectroscopy have associated with them a nuclear spin magnetic moment, which means that these nuclei produce a small magnetic field. When these nuclei are placed in a magnetic field the energy of the interaction depends on the angle between the field and the magnetic moment. The highest energy interaction is when the magnetic field and the magnetic moment point in opposite directions, and the lowest energy interaction is when the magnetic field and magnetic moment point in the same direction.
Before a magnetic field is applied to a population of nuclei the magnetic moments of these nuclei are oriented randomly due to random thermal motion. After a magnetic field is applied one has to wait for the spins to come to equilibrium, a process known as relaxation. Pointing in the direction of the magnetic field is slightly energetically favored, and hence only a very small number of spins will do so, forming the bulk magnetization vector. The sample is hence magnetized. At equilibrium the bulk magnetization vector will point in the direction of the magnetic field (we will assume this is the z direction) and will be stationery. If the magnetization vector was tilted away from the axis it would precess at the Larmor frequency (-gyromagnetic ratio * magnetic field).
The purpose of a pulse is to quickly change the direction of the magnetization vector. This can be done by creating a much weaker magnetic field in the direction one desires, but allowing it to oscillate at the aforementioned Larmor frequency. This will result in the magnetization vector pointing in the direction one desires. This occurs because when the B1 field (the weaker field) oscillates near the Larmor Frequency, the result is that the strength of the B0 field (the stronger field in the z direction) appears to be reduced. Hence the resulting magnetic field (the effective field) can point very close to the direction of the B1 field if the B1 field is much larger than the reduced field.
An on resonance pulse involves changing the direction of the magnetization vector by applying the B1 field in a certain direction for a specific time. The angle through which the magnetization vector is rotated is given as the product of the frequency of the effective field and the time the pulse is applied. By applying different times one can rotate the magnetization vector to different angles.
For a real NMR experiment there are going to be more than one resonance frequencies in the sample. If one makes the B1 field strong enough it is possible to bring the magnetization vector very close to the desired orientation, which means we can bring it close to the ideal case of an on resonance pulse.
The vector model can be used to understand simple NMR experiments.
== Chemical shifts ==
'''Chemical shifts''' are the units used in Protein NMR analysis graphs. Chemical shift correlates to the different radiofrequency electromagnetic pulses sent through the protein sample. Each molecule that exhibits spin properties show different distinct chemical shifts. Chemical shifts can be observed by sending nuclear magnetic energy onto the protein sample. The electron clouds that surround each spin nuclei create a local magnetic field that opposes the applied magnetic field. When the electromagnetic pulse runs through the sample alpha spin nuclei that are hit with the correct amount of energy to switch to beta spin do so and subsequently cause resonance. This resonance can then be recorded and is reported for the different frequencies applied to sample as parts per million (ppm chemical shifts). For example, when the nuclear magnetic field strength sends out a frequency of 1 ppm (parts per million), CH<sub>3</sub> reacts to it and exhibits beta spin behavior from which the spectroscopy catches this signal and records it.
Most hydrogen absorptions in 300-MHz 1H NMR fall within a range of 3000 Hz. Rather than record the exact frequency of each resonance, we measure it relative to an internal standard, the compound tetramethylsilane, (CH<sub>3</sub>)<sub>4</sub>Si. Its 12 equivalent hydrogens are shielded relative to those in most organic molecules, resulting in a resonance line conveniently removed from the usual spectral range.
A problem with these numbers, however, is that they vary with the strength of the applied magnetic field. Because field strength and resonance frequency are directly proportional, doubling or tripling the field strength will double or triple the distance (in hertz) of the observed peaks relative to (CH<sub>3</sub>)<sub>4</sub>Si. To make it easier to compare reported literature spectra, we standardize the measured frequency by dividing the distance to (CH<sub>3</sub>)<sub>4</sub>Si (in hertz) by the frequency of the spectrometer. This procedure yields a field-independent number, the chemical shift δ.
== NMR in Characterizing Organometallics ==
NMR spectra uses superconducting magnets to many metal nuclei. Carbon 13 NMR has become increasingly useful in facilitating due to its low natural abundance and low sensitivity for NMR experiment. The integration of NMR peaks of organometallic complexes can provide the ratio of atoms in different environments. Since the relaxation times of the carbon atoms vary in organometallics, a great deal of inaccuracy result from this. However it does have its advantages as well. For example, terminal carbonyl peaks are frequently in the range of 195 to 225ppm, which allows it to be easily distinguished from other ligands. The 13C chemical shift correspond with the strength of the CO bond. The stronger the bond, the smaller the chemical shift. 13C in cyclopentadienyl ligands have a wide range of chemical shifts in paramagnetic compounds whereas it's narrower for diamagnetic compounds.
== Nuclei Spin States ==
In NMR, certain atomic nuclei must be magnetic by nature in order for this technique to be used. However, only a certain number of isotopes have this magnetic characteristic called spin. An example is hydrogen. When an external magnetic field is applied, hydrogen's spinning proton generates a magnetic moment which can take either the α or β spin state. The energy difference between the two states is directly proportional to the amount of external magnetic field applied. The α state is aligned with the applied field and has lower energy than the β state. When a pulse of electromagnetic radiation is applied to the α state, it can be excited to the β state, thus a resonance will be obtained.
The NMR is only able to detect certain atoms and only certain isotopes. For example, it can detect the Hydrogen molecules with a mass of 1 amu, but not the other isotopes. Most commonly the Hydrogen and Carbon NMR's are used. The information that can be determined by the NMR is immense. In the case of the Hydrogen NMR, one can use a certain amount of knowledge from a table to determine what each peak corresponds to which group within your sample. Interpreting NMR's can also be a little tricky in that one must understand splitting patterns. For example, the carbon atom you may be examining may have only one hydrogen attached, however if attached to a methyl group, it will appear as a quartet.
==Shielding and Deshielding==
Protons in different chemical environments are shielded by different amounts. When a nucleus surrounded by electrons is exposed to a magnetic field of strength H<sub>0</sub>,these electrons move in such a way as to generate a small local magnetic field, h<sub>local</sub>, opposing H<sub>0</sub>. As a consequence, the total field strength near the hydrogen nucleus is reduced, and the nucleus is thus said to be shielded from the magnetic field strength by its electron cloud. The degree of shielding depends on the amount of electron density surrounding the nucleus. dding electrons increases shielding; their removal, consequently, would cause deshielding. Also, a proton is deshielded when the induced field reinforces the applied field. For example, the induced field can reinforce the applied field. As a result, these protons are deshielded and their chemical shifts are at a higher value of ppm.
==Coupling==
'''J-coupling''' arises from the interaction of different spin states through the chemical bonds of a molecule and results in the splitting of NMR signals. This coupling provides detailed information about the connectivity of atoms and the structure of a molecule.
Spin-spin slitting is given by the '''N+1 Rule''': 1) H that is neighbored by one H resonnate as a doublet.2) H that is neighbored by two set of equivalent Hs resonate as trplet. 3) H that is neighbored by three equivalents of hydrogens resonate as a quartet.
A multiplet can be shown when there is a mixture of couple patterns, some of which could be broken down to small parts (i.e. qd- quartet of doublet). But for the most part, if a coupling pattern shows complexity not easily countable by N+1 rule, such pattern is called a multiplet.
In addition, functional groups containing alcohol (-OH) such as alcohol, carboxylic acid have a broad band on NMR spectra. This is due to the fact that Hydrogens on alcohol can hydrogenbond easily, thus being able to couple in broad spectra than other H's. Thus just by looking at the type of the spectra (such as multiple peaks or broad peak), one can easily categorize the functional group to which the H is associated with.
The ratio of the splitting peaks is given by a mathematical mnemonic device called Pascal's triangle. Each number in this triangle is the sum of the two numbers closest to it in the line above. It is important to remember that nonequivalent nuclei mutually split one another. In other words, the observation of one split absorption necessitates the presence of another split signal in the spectrum. Moreover, the coupling constants for these pattern must be the same. Double and triple bond characteristic chemical environments show complex splitting peaks. An alkyne for example, can have hydrogen splitting patterns an extra adjacent carbon away. An alkene depending on where the hydrogen is located (cis or trans) to a relative chemical environment, can show a slightly distorted peak.
==Integration==
'''Integration''' is very useful in NMR spectrum in determining the structure of a molecule. The relative integrated intensity of a signal is proportional to the relative number of nuclei giving rise to that absorption. Normally, an NMR spectrum plot will tell you very complex integration numbers. However, integration doesn’t have to be exact. You can just divide each integration number by the smallest number in your NMR spectrum. The ratio will help you get a big picture of the relative number of H’s represented by a peak. Combining the chemical shifts and the peak integration, you might be able to determine the structure of a molecule by using the ''chemical shift table''.
Researchers usually use NMR to check if the product they made from a reaction is what they really want. So they don’t have to figure out the structure of a molecule by looking at a complex spectrum. They know what the spectrum should look like if the reaction works. By comparing the actual spectrum to the ideal one, they are able to verify the molecule they want is in the product. Solvent used is usually CD<sub>2</sub>Cl<sub>2</sub>, since D would not show up in a H NMR spectrum. Combine with chemical shifts, they can be used to determine structure.
== Proton NMR interpretation ==
To interpret proton NMR, it is important to know where each type of proton lies. Below is a list of types of proton and their chemical shift on NMR.
[[Image:Table HNMR.jpg|Proton NMR frequency]]
It is important to know that proton NMR peaks only indicate the presence of protons (H). It does not show other atoms like Carbon, Oxygen...etc. As mentioned in the above section, proton peaks shows spliting because of coupling by the neighbor protons. The integration of each peak is the amount of proton relative to other proton on the NMR. When solving structure from the H NMR, it is important to write down the chemical shift, integration and the split of each peak. Then base on the chemical shift of the peak, write down the possible functional group and structure. Lastly, arrange and connect each structure so that it matches the split and the integration of proton NMR. Below are examples of hand drawn proton NMR and also the detail instruction to interprete proton NMR.
=== Example ===
The interpretation of each proton NMR is given right below of each graph. Try not to look at the structure, and only look at the molecular formula and proton NMR to interpret the structure of the compound. Note that the examples given are the basic and simple compound. The NMR of protein structures is much more complex than these examples. The goal of these examples is to give you an idea how proton NMR are interpreted.
[[Image:1H NMR Ethyl Acetate Coupling shown - 2.png|Proton NMR]]
Base on the chemical shift of proton NMR, there should be a ketone functional group or a structure that contains a carbonyl group at peak around 2.0. The peak around 1.3 could be a primary or secondary alkyl group.
Now look at the splitting of the peaks at chemical shift 1.3 (C), the triplet (3 peaks) shows that the proton is probably split by 2 neighbor protons (base on the n+1 rule mention in integration section). If it is split only by 1 neighbor proton, then it would be a doublet (2 peaks). Next, look at the peak at chemical shift 2.0 (B). The singlet (single peak) means that this proton environment probably has no neighbor proton. The peak at chemical shift 4.2 (A) is a quadruplet (4 peaks). This means there are about 3 neighbor proton next to proton environment A. Since it is known that B has no proton right next to it, and A and C both has neighbor protons, it is safe to assume that proton environment A is right next to proton environment C, which could be a -CH2CH3.
The following possible structures deduced above are a ketone and an ethyl group.
{|class="wikitable"
|+ Splitting analysis
|-
!Substructure
|[[File:Methyl group.svg|100px]]
|[[File:Ethyl group.svg|150px]]
|-
!Splitting pattern
|Singlet
|Quartet and triplet
|-
!Analysis
| C with no neighboring H
| C with three neighboring H<br>C with two neighboring H
|}
Note that the there are two oxygen atoms from the molecular formula. One of the oxygen is included in ketone. The other oxygen must be binding onto one of these two structures. Take a look at peak A, the chemical shift is near 4.0, which means it might be connected to a heteroatom like oxygen. Place the oxygen next to the -CH2CH3 and connect the structure together, you will get ethyl acetate as indicated below the proton NMR. Notice that the proton B does not have any neighbor proton. Proton A is split into 4 peaks by proton C (n+1 rule, n = 3 neighbor protons). Proton C is split into 3 peaks by proton A (n = 2 neighbor protons). The CH2, secondary alkyl, base on the proton frequency table should be around the chemical shift ~1.2 ppm, but instead it is at ~4.2 ppm. The reason for this is that the CH2 is attached to oxygen a heteroatom, which is a electron withdrawing group. The result is that the chemical shift is pulled left field resulting in a chemical shift of 4.2 ppm. Another way to look at this is to assume there is an ester functional group at chemical shift of 4.2 ppm, and the primary alkyl group is attached to the ester.
The integration of the proton NMR also matches the structure well. The methyl CH3 next to the carbonyl group has 3 protons, and the primary alkyl next to the CH2 has 3 protons as well. This explains why peak B has the same height as peak C (same amount of protons). Peak A has the lowest height because it only has two protons.
[[Image:3-methoxyphenol NMR.jpg|proton NMR]]
This proton NMR example looks more complicated than the first one, but it is actually easier. One important information from this proton NMR is that there are peaks around 6.0~ 7.0 ppm (F,B,D,E). This always almost indicates the presence of aromatic ring. Noticed that there are about 4 group of peaks from 6.0 to 7.0 ppm? This means that there are four protons attach to 4 carbons on the aromatic ring. This leaves 2 carbons of the aromatic ring free to attach to two substituents. The position of these substituents is clearly an ortho and para position on the aromatic ring. The reason is that two different substituents on ortho and para position of the aromatic ring would give 4 proton environments. If there are only two proton environments around 6.0~ 8.0 ppm with the same integration (height), it means that the aromatic ring is probably symmetric on both sides with double para substituents. Now look at the peak (A) at 5.5 ppm. The peak is a broad peak instead of sharp peak like the rest. This means that the proton of this environment is attached to a heteroatom. The only heteroatom present in the sample base on the molecular formula given is an oxygen atom. This means that the proton is directly attached to oxygen, which would be a alcohol group -OH (Note that the proton on the alcohol group can have the chemical shift range from 0.5 to 5.0 ppm). It is important to remember that the proton that attached to a heteroatom is also known as exchangeable proton. Exchangeable proton sometimes do not show up on H NMR, so do not worry when an expected exchangeable peak doesn’t appear on HMNR.
The peak (C) at the chemical shift of ~3.9 ppm has the highest integration (height) and is a singlet. Usually when such a high singlet peak is observed around 3.9 ppm with oxygen in the molecular formula, there is a high chance that it is a ether group, -OCH3. Since there is no neighbor proton next to the CH3 of the ether, it is a singlet peak. In addition, the height of the peak is high compare to the other peak, which indicate a possibility of CH3 with at least 3 times more protons than other proton environment. Base on the interpretations above, these are the possible function groups:
[[Image:3-methoxyphenol NMR1.jpg|possible proton structures]]
Attach the alcohol group and the ether group in ortho- para position will result in the correct structure of the compound.
== Nuclear Overhauser Enhancement Spectroscopy (NOESY) ==
[[File:Noesy.jpg|thumb|NOESY Spectrum of Codeine. Each peak correlates to a proton.]]
'''NOESY''' is a NMR technique that uses the Nuclear Overhauser effect to help understand the tertiary structure of proteins and other large molecules. The nuclear Overhauser effect is the interaction of nuclei at short distances from each other. The extent of the effect is approximately 5 Angstroms. This is a better analysis of tertiary structure for proteins that do not form crystalline structures and need to be analyzed in solution. Like in NMR, a magnetic field is produced around the molecule and RF waves at different frequencies are produced to produce resonance. The resonance is produced when the nucleus reverses spin. Unlike normal NMR, the aim of NOESY is to determine the effect of the resonance of one nucleus on the other nuclei in the area. The graph that is produced gives you an idea of where the nuclei are in relation to each other.
The NOESY experiment reveals the distance of protons relative to one another. Protons very close to each other, (about 3 Angstroms apart) will produce a very large signal. The limit of detection is about 5-6 Angstroms apart, and will produce only a very weak signal.
The graph has diagonal dots correspond to the placement of the nuclei on the one dimensional NMR. There are dots out side of this diagonal spectrum. These dots show what nuclei are in close proximity of each other. If a line was drawn horizontally and vertically from the outlaying dots, the dots, on the diagonal spectrum, that lay on the lines would be in close proximity to each other. Using the information from the NMR and the NOESY a tertiary structure of the macromolecules could be formed. However, the resulting tertiary structure would contain a family of structures. This happened for three reasons. The first is the approximation of the distance between the nuclei. Second, there may not have been enough constraints to produce a singular structure. Thirdly, the protein is in solution, and the solution contains many proteins.
This technique is mainly used for hydrogen atoms, because they are the most abundant atom in biological systems and are also the simplest.
==Protein NMR==
An NMR machine is essentially a huge magnet. Many atoms are essentially little magnets. When placed inside an NMR machine, all the little magnets orient themselves to line up with the big magnet. By harnessing this law of physics, NMR spectroscopists are able to figure out physical, chemical, electronic, and structural information about molecules.
NMR relies on the interaction between an applied magnetic field and the natural “little magnets” in certain atomic nuclei. For protein structure determination, spectroscopists concentrate on the atoms that are most common in proteins: hydrogen, carbon, and nitrogen. What researchers seek to learn through NMR is how this chain of amino acids wraps and folds around itself to create the three-dimensional, active protein. Solving a protein structure using NMR is a series of experiments, each of which provides partial clues about the nature of the atoms in the sample molecule, such as how close two atoms are to each other, whether these atoms are physically bonded to each other, or where the atoms lie within the same amino acid. Other experiments show links between adjacent amino acids or reveal flexible regions in the protein. Each new set of experiments further refines possible structures until finally the scientists carefully select 10 to 20 solution that best represent their data and present the average as their final structure.
'''Sample Preparation for NMR'''
In order to study protein structure by NMR, highly purified samples of the protein of interest must be prepared. The protein can either be isolated from natural sources, or expressed in host organisms such as E. Coli through recombinant DNA techniques. The bacteria with the recombinant gene coding for a specific protein are grown in minimal media with 15NH4Cl being the only source of nitrogen for the bacteria, and 13C-glucose offering the only source of carbon for the bacteria to make proteins. This way, when the bacteria produce the protein of interest, these proteins are labeled with 15N and 13C, both of which are NMR active. The protein of interest is then purified through various protein purification techniques (See protein purification techniques). Finally, the protein, in an appropriate buffer, is loaded into an NMR tube and is ready to be placed in the NMR magnet.[[File:Figure 1.pdf|thumb|Figure 1. General scheme for protein structure determination by NMR in solution phase.]]
'''NMR Experiments'''
'''2D Experiments'''There are many different types of NMR experiments one can run to help to reveal information about the structure of the protein. The experiments usually differ in what correlations are detected. For example, a 2D [1H-1H]-NOESY experiment will reveal hydrogen atoms that are within 0.5 nm apart. Protons that exhibit this interaction will show up as a cross peak on the 2D spectrum (Figure 2).[[File:Figure 2.pdf|thumb|Figure 2. Simplified example of 2D [1H-1H]-NOESY NMR spectrum. The dots on the diagonal represent the 1D spectrum of the molecule. There are two protons that are being examined, one at 9 ppm and the other at 8 ppm. The presence of the cross peak (circled) reveals that these two protons are within 0.5 nm apart.]]
Taking this information, theoretically, the protons at 8 ppm and 9 ppm on the 1D spectrum could be assigned to a certain residue in the amino acid sequence. For example, if Ala1 is the point at 8 ppm and Ala54 is at 9 ppm, and there is a crosspeak present, then the observation of this NOE reveals a circular structure for this polypeptide chain (Figure 3). [[File:Figure 3.pdf|thumb|Figure 3. Circular structure of polypeptide chain revealed by presence of NOE on 2D NOESY spectrum.]]
Because proteins are much more complicated than this example above, the 2D NOESY spectrum is often cluttered and crosspeaks cannot be made out clearly because many of these points may stack on top of one another. Other experiments are required to reveal the necessary information to determine the 3D structure of the protein, such as 3D experiments.
'''3D Experiments'''
3D experiments use a third dimension to reveal peaks that may be stacked on top of one another in the 2D spectrum. An example is 3D 15N-correlated [1H-1H]-NOESY (Figure 4).
There are many other experiments to correlate different nuclei and their neighbors.
[[File:Figure 4.pdf|thumb|Figure 4. Example of 3D 15N [1H-1H] NOESY. The peaks that would be stacked on top of one another in the 2D [1H-1H] NOESY are now drawn out in the third dimension by relating its 15N chemical shifts. This cleans up the spectrum and helps in resonance assignments.]]
==Protein NMR Advantages==
NMR is a good method in trying to solve the structure of a protein and the continued unanswered protein folding problem. However it is not the only method as crystallography is also a possible method for determining protein structure. However, NMR has its advantages over crystallography.
One instance is that it uses molecules in solution, so it is not limited to those that crystallize well since crystallization is a very uncertain and time-consuming step in X-ray crystallography. In addition, some proteins do not readily crystallize. Furthermore, although structures present in crystallized proteins very closely represent those of proteins free of the constraints imposed by the crystalline environment, structures in solution can be sources of additional insights. NMR also makes it fairly easy to study properties of a molecule besides its structure such as the flexibility of the molecule and how it interacts with other molecules. With crystallography, it is either impossible to study these aspects or it requires an entirely new crystal.
==Protein NMR Disadvantages==
Most NMR spectroscopists focus on molecules no larger than 20-30 kilodaltons. X-ray crystallographers have solved structures upto 2,500 kilodaltons.
==NMR in Real Life==
The 15 carbon compound viniferone found in grape seeds was isolated in 2004. Viniferone falls into a group of substances, grape seed, that are very active against radicals and oxidative stress. There was very little recovery of viniferone from an abundance of grape seeds (~40 mg of viniferone from 10.5 kg of grape seeds), so precautions had to be taken in the techniques used to obtain its structure. Most tests would destroy the minuscule amount proanthocyanidins t of viniferone obtained, so a combination of spectroscopic techniques were utilized (including NMR) to obtain viniferone's structure. Obtaining the <sup>1</sup>H and <sup>13</sup>C NMR data was critical in determining the structure of Viniferone. The variety of absorption signals at various chemical shifts helped determine the presence of alkenes and benzene rings. Correlation spectroscopy and eventually X-ray crystallography were used to verify the structural arrangement of Viniferone.<ref name ="Schore">Schore, Neil E. (2011). Organic Chemistry Structure and Function 6th Edition. W. H. Freeman</ref>
== References ==
{{Reflist|2}}
If you would like to learn more about interpreting NMR peaks, I highly suggest this website. [http://www.wfu.edu/~ylwong/chem/nmr/h1/ http://www.wfu.edu/~ylwong/chem/nmr/h1/]
<br> Berg, Jeremy M., Lubert Stryer, and John L. Tymoczko. Biochemistry. 6th ed. Boston: W. H. Freeman & Company, 2006. 98-101.
<br> Shriner, Christine K. F. Hermann, Terence C. Morrill, David Y. Curtin, Reynold C. Fuson. The Systematic Identification of Organic Compounds. 8th ed. U.S.A. John Wiley & Sons, Inc. 2004. 136-142.
<br> Vollhardt, K. Peter C., Schore, Neil E. Organic Chemistry - Structure and Function. 5th ed. New York: W. H. Freeman & Company, 2005. 398-432.
<br> Keeler, James. Understanding NMR Spectroscopy. West Sussex, England. John Wiley & Sons. 51-77.
<br>Clore, Marius G., Gronenborn, Angela M. “Chapter 34: Structures of Larger Proteins, Protein-Ligand, and Protein-DNA Complexes by Multidimensional Heteronuclear NMR.” Multidimensional NMR Methods for the Solution State. United Kingdom. John Wiley & Sons Ltd.
<br>Wuthrich, Kurt. “Chapter 33: Biological Macromolecules: Structure Determination in Solution.” Multidimensional NMR Methods for the Solution State. United Kingdom. John Wiley & Sons Ltd.
<br> National Institutes of Health, National Institute of General Medical Sciences, New York, 2007, 29-30, http://www.nigms.nih.gov.
{{BookCat}}
[1]"Kurt Wüthrich - Nobel Lecture". Nobelprize.org. 25 Oct 2010 http://nobelprize.org/nobel_prizes/chemistry/laureates/2002/wuthrich-lecture.html
h6ady0mh9uhummcb69c7rnt1mn5v8g2
4676260
4676258
2026-10-15T13:00:48Z
DMacks
94753
/* General Information */ step 5: headers cleanup
4676260
wikitext
text/x-wiki
NMM spectroscopy is unique in being able to reveal the atomic structure of macromolecules in solution, provided that highly concentrated solution can be obtained. This technique depends on the fact that certain atomic nuclei are intrinsically magnetic. The chemical shift of nuclei depends on their local environment. Furthermore, the spins of neighboring nuclei interact with each other in ways that provide definitive structural information. This information can be used to determine complete three-dimensional structures of proteins.
== General Information ==
'''Nuclear Magnetic Resonance Spectroscopy (NMR)''' is an analytical technique which exploits the fact that certain nuclei possess a property called spin (I). NMR spectroscopy is possible due to the Zeeman Effect discovered first in the 1890s. The structures of proteins can be determined by NMR by first preparing the isotopically labeled samples. In the magnet, the "natural magnets" in the atoms of the sample line up with the magnetic field of the NMR magnet. Then, the sample is exposed to a series of radio wave pulses to disrupt the magnetic equilibrium of the atoms. The reaction of these nuclei can be observed to assess their chemical nature specifically, their chemical shift properties. Sets of experiments can be conducted to refine possible structures and present the average of the experiments as the final structure. It can have advantages over X-ray crystallography because the samples of proteins can be in solution rather than crystallized form and other properties of the sample protein, such as flexibility and interactions, can be determined while X-ray crystallography only reveals the structure of the protein.
It is the splitting of atomic energy levels when the atoms are placed in a magnetic field. This effect was later found to occur as a result of nuclear spin. In 1924, Wolfgang Pauli first suggested the theoretical basis of NMR when he concluded that some atomic nuclei should possess nuclear spin and these nuclei would split into degenerate energy levels when placed in a magnetic field. These nuclei have a magnetic moment, in and of themselves, which is called spin. Nuclei that possess spin are said to be NMR active. Some NMR active nuclei that are studied in biological molecules can be seen in Table 1.
{| class="wikitable" style="margin:auto;"
|+Table 1. Magnetic properties of common nuclei<ref>''[[:w:CRC Handbook of Chemistry and Physics|CRC Handbook of Chemistry and Physics]]'', 65th ed.</ref>
|-
!Isotope
! Isotopic occurrence<br> in nature (%)
! Spin number {{mvar|I}}
! Operating frequency<br>at 7 T (MHz)
! Relative sensitivity
|-
|<sup>1</sup>H
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>99.984
|{{sfrac|1|2}}
|300.13
|1
|-
|<sup>2</sup>H
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">00</span>0.016
|1
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>46.07
|0.0964
|-
|<sup>13</sup>C
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">00</span>1.1
|{{sfrac|1|2}}
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>75.47
|0.0159
|-
|<sup>14</sup>N
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>99.64
|1
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>21.68
|0.00101
|-
|<sup>15</sup>N
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">00</span>0.37
|{{sfrac|1|2}}
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>30.41
|0.00104
|-
|<sup>17</sup>O
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">00</span>0.0317
|{{sfrac|5|2}}
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>40.69
|0.0291
|-
|<sup>31</sup>P
|100
|{{sfrac|1|2}}
|121.49
|0.0664
|-
|<sup>35</sup>Cl
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>75.4
|{{sfrac|3|2}}
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>29.41
|0.0047
|-
|<sup>37</sup>Cl
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>24.6
|{{sfrac|3|2}}
|<span aria-hidden="true" style="visibility:hidden;color:transparent;">0</span>24.48
|0.0027
|}
Separately, Bolch at Stanford and Purcell at Harvard in 1946 each translated the Zeeman effect into the first NMR spectrum. In 1949, Proctor and Yu at Stanford measured the first chemical shift and spin couplings. Initially, commercial NMR spectrometers were continuous wave type and were only able to detect the most sensitive nuclei, <sup>1</sup>H & <sup>19</sup>F.
Atomic nuclei are NMR-active if the nuclear spin, ''I'', is non zero. Nuclear spin is determined as follows:
* Mass # is even and # neutrons is even, I=0, therefore no spin
* Mass # is even and # neutrons is odd, I= integer, therefore spin
* Mass # is odd and # neutrons is even or odd, I=half integer, therefore spin
The cause of spin can be visualized with the following analogy. A rotating charged particle (e.g. hydrogen nucleus aka proton) will produce a magnetic field perpendicular to the direction of rotation which is analogous to the magnetic field of a bar magnet, as seen in Figure 1.
[[Image:Spinning proton magnetic field lines.jpg|500px|thumb|Figure 1]]
Absent an external magnetic field (B¬0) these active nuclei are oriented in random directions, but in the presence of an external magnetic field (B¬0) these nuclei orient themselves either with or against the field, as seen in Figure 2.
[[Image:Nuclei in and out of magnetic field.jpg|500px|thumb|Figure 2]]
Nuclei are dispersed between states of different energies. The different energy levels are induced by the presence of the external magnetic field (B¬0). (For spin ½ nuclei two orientations are possible, with the higher energy orientation being ‘β spin state’ and the lower energy orientation being ‘α spin state’.) This is evident in the following equation where E=energy, h=Planck’s constant, ν=frequency, γ=gyromagnetic ratio (nucleus dependent), B0= external magnetic field:
ΔE= h ν = γ B0
To see this graphically see Figure 3.
[[Image:Magnetic field induced energy levels.jpg|500px|thumb|Figure 3]]
These induced energy level differences are what allow the use of NMR. At equilibrium, nuclei will occupy both levels of energy, low and high. However, according to the Maxwell-Boltzmann Distribution, the lower energy level will be occupied by a greater number of nuclei. This difference in the number of nuclei, between low and high energy levels, is what NMR exploits. The energy required to cause a spin flip, transition from low to high energy state, corresponds to the radio frequency range of the electromagnetic spectrum.
ΔE= h ν
A nucleus will only flip spins, absorb energy, when the frequency of electromagnetic radiation just matches the change in energy, ΔE. This is called the point of resonance. Nuclei will have differing resonant frequencies based on their local electronic environment. This can be seen in “A handmade example of a proton (1H) NMR spectrum.” All nuclei under observation are irradiated with radio waves to the higher energy state and are then allowed to decay back to the lower energy state. This decay is what is observed. A free induction decay signal is collected as the nuclei fall back to the lower energy state, Figure 4 depicts a generic FID.
[[File:Nmr fid good shim EN.svg|500px|thumb|Figure 4]]
This FID is then subjected to a Fourier transform to convert from the time domain to the frequency domain, seen in Figure 5.
[[Image:NMR spectrum generic.jpg|500px|thumb|Figure 5]]
A change in the magnitude of the magnetic field will change the resonant frequency of the nucleus. Therefore, in order to compare spectra between instruments with varying size magnetic strength it is necessary to convert from frequency to parts per million, ppm. This can be done with the equation seen in Figure 6.
[[Image:Frequency to ppm.jpg|500px|thumb|Figure 6]]
With the arrival of Fourier Transform instruments in the 1970s it became possible to acquire spectra of nuclei that are not naturally abundant, such as 13C which is only 1.1% naturally occurring. This requires the acquisition of multiple spectra and adding them together to get a greater sensitivity. The signal to noise ratio (S/N) will increase as acquisitions increase, because the signal magnitude increases linearly with acquisition number while the noise magnitude increases as the square of the number acquisitions. So, the S/N will increase as the square of the number of acquisitions as seen in Figure 7.
[[Image:Signal to noise.jpg|500px|thumb|Figure 7]]
The Nobel Prize in Chemistry 2002 went partly to Kurt Wuthrich for “NMR Studies of Structure and Function of Biological Macromolecules,”[1] so NMR is important to structural biochemistry. Table 2 lists Nobel prizes awarded for discoveries related to NMR spectroscopy.
[[Image:NMR Nobel prizes.jpg|500px|thumb|Table 2]]
[[Image:nmr.jpg|500px|thumb|A handmade example of a proton (<sup>1</sup>H) NMR spectrum]]
NMR is a powerful technique that can be used to determine the structure of [[Structural Biochemistry/Proteins|proteins]] in highly concentrated solution, by analyzing the relative positions of certain atoms (Shriner 136). Protein NMR exploits the absence of zero net nuclear spin of the most abundant isotopes of carbon and oxygen (12 and 16) as well as the abundant isotope of Nitrogen (14) with a net nuclear spin of 1. NMR cannot be performed on an atom with zero net nuclear spin. Since there are many distinct nuclei present in a single protein much overlap is expected in the chemical shifts produced through the NMR analysis therefore a multidimensional approach is applied. Magnetization is applied to the protein and nuclei through electromagnetic pulses that can magnetize nuclei in two ways. The first involving magnetization through nuclei bonding and the second through open space. Each approach offers a different way to analyze the protein such as the first approach allowing for distinct nuclei to be targeted whereas the second approach allowing for structure calculation distance restraints and targeting an unlabeled protein.
Intrinsically magnetic nuclei display spinning properties that produce a magnetic moment. When an external magnetic field is applied to the system the magnetic moment can adopt either an alpha or beta state. The strength of the magnetic field determines the proportionality of alpha to beta with a tendency to favor alpha as it is aligned with the field and has a lower energy. By supplying an electromagnetic pulse alpha spin nuclei will change to beta and produce resonance. By keeping a constant magnetic field on the system and adjusting the frequency of the electromagnetic pulses a spectrum of resonance can be obtained.
Currently, NMR spectrometers use the Fourier transform method of pulse radiation. To change the nuclei in alpha state to beta, a strong pulse of radiation is used. Then the pulse of radiation is removed and the nuclei go back to their original alpha state, giving a decay signal. This signal is converted by the computer to a frequency domain spectrum in a very fast way. By storing many signals a more intense spectrum is produced. (Shriner 136)
Electrons around a magnetic nucleus produces a local magnetic field opposite to the applied magnetic field. Magnetic nuclei can absorb the electromagnetic pulses at specific frequencies coined "chemical shifts" (signal positions) expressed in parts per million (ppm). These chemical shifts are designated relative to a standard compound such as a derivative of tetramethylsilane (TMS) (CH<sub>3</sub>)<sub>4</sub>Si (which has a chemical shift of 0.0) that is soluble in water. NMR spectra that are produced through this assay can be analyzed, and with the combination of a multidimensional analysis the structure of the protein can be determined.
When an atomic nuclei is influenced by a magnetic field, it creates a magnetic moment which will give an orientation of spinning to itself. Different orientation of spinning, spin states, exist in different states of energy - alpha-state and beta-state - where alpha-state is found to be more stable with a lower energy through experiments as it has the same direction with the magnetic field. In order to transits alpha-state to beta-state (excited state), pulse of electromagnetic radiation is needed to increase the frequency of the electromagnetic radiation (through irradiation) to have the spinning nucleus to overcome the energy barrier and change its orientation. (See [http://en.wikipedia.org/wiki/Bohr_model Bohr Model] for more information) Thus, resonance will be obtained. It was discovered by American physicist Edward Mills Purcell and physicist Felix Bloch from Switzerland in 1946.
The difference between energy levels split by a magnetic field corresponds to the energy of radio waves. So, the electronics required for the NMR spectrometer weren’t developed until WWII when the government invested heavily into radar technology. Radar is simply the use of radio waves to detect location and direction of moving objects. Better frequency synthesizers, amplifiers, receivers and signal processors all contributed to advancements in the field of NMR spectroscopy.
The components of a NMR Spectrometer can be seen in Figure 8.
[[Image:NMR Spectrometer.jpg|500px|thumb|right|Figure 8]]
Some common 2D experiments can be seen in Table 3:
{| style="clear:none;float:left;margin:1em 0 1em 1em"
|-
! Common 20 experiments <sup>(Table 3)</sup>
|-
| '''COSY''' || '''Correlated Spectroscopy'''<br />Through bond H-H correlation
|-
| '''TOCSY''' || '''Total Correlation Spectroscopy'''<br />Extended through bond H-H correlation
|-
| '''1D NOE''' || '''Nuclear Overhauser Effect Spectroscopy'''<br />H-H through space correlation
|-
| '''NOESY''' || '''Nuclear Overhauser Effect Spectroscopy'''<br />H-H through space correlation
|-
| '''ROESY''' || '''Rotating Frame Overhauser Effect Spectroscopy'''<br />Similar to NOESY
|}<br style="clear:both"/>
==Magnets used for NMR==
The magnets used for NMR are very strong. Those used for high resolution protein structure determination range from 500 megahertz to 900 megahertz and generate magnetic fields thousands of times stronger than the Earth’s. Although the sample is exposed to a strong magnetic field, very little magnetic force gets out of the machine.
NMR magnets are superconductors, so they must be cooled with liquid helium, which is kept at 4 Kelvin. Liquid nitrogen, which is kept at 77 Kelvin, helps keep the liquid helium cold.
== Appropriate Isotopes ==
Only certain isotopes are capable for use in NMR. The most common isotope that is used in NMR is Hydrogen-1 (Proton NMR). Other commonly used isotopes are Carbon-13 and Nitrogen-15.
== Vector Model ==
The Vector Model only holds for uncoupled spins. Nuclei that are active under NMR spectroscopy have associated with them a nuclear spin magnetic moment, which means that these nuclei produce a small magnetic field. When these nuclei are placed in a magnetic field the energy of the interaction depends on the angle between the field and the magnetic moment. The highest energy interaction is when the magnetic field and the magnetic moment point in opposite directions, and the lowest energy interaction is when the magnetic field and magnetic moment point in the same direction.
Before a magnetic field is applied to a population of nuclei the magnetic moments of these nuclei are oriented randomly due to random thermal motion. After a magnetic field is applied one has to wait for the spins to come to equilibrium, a process known as relaxation. Pointing in the direction of the magnetic field is slightly energetically favored, and hence only a very small number of spins will do so, forming the bulk magnetization vector. The sample is hence magnetized. At equilibrium the bulk magnetization vector will point in the direction of the magnetic field (we will assume this is the z direction) and will be stationery. If the magnetization vector was tilted away from the axis it would precess at the Larmor frequency (-gyromagnetic ratio * magnetic field).
The purpose of a pulse is to quickly change the direction of the magnetization vector. This can be done by creating a much weaker magnetic field in the direction one desires, but allowing it to oscillate at the aforementioned Larmor frequency. This will result in the magnetization vector pointing in the direction one desires. This occurs because when the B1 field (the weaker field) oscillates near the Larmor Frequency, the result is that the strength of the B0 field (the stronger field in the z direction) appears to be reduced. Hence the resulting magnetic field (the effective field) can point very close to the direction of the B1 field if the B1 field is much larger than the reduced field.
An on resonance pulse involves changing the direction of the magnetization vector by applying the B1 field in a certain direction for a specific time. The angle through which the magnetization vector is rotated is given as the product of the frequency of the effective field and the time the pulse is applied. By applying different times one can rotate the magnetization vector to different angles.
For a real NMR experiment there are going to be more than one resonance frequencies in the sample. If one makes the B1 field strong enough it is possible to bring the magnetization vector very close to the desired orientation, which means we can bring it close to the ideal case of an on resonance pulse.
The vector model can be used to understand simple NMR experiments.
== Chemical shifts ==
'''Chemical shifts''' are the units used in Protein NMR analysis graphs. Chemical shift correlates to the different radiofrequency electromagnetic pulses sent through the protein sample. Each molecule that exhibits spin properties show different distinct chemical shifts. Chemical shifts can be observed by sending nuclear magnetic energy onto the protein sample. The electron clouds that surround each spin nuclei create a local magnetic field that opposes the applied magnetic field. When the electromagnetic pulse runs through the sample alpha spin nuclei that are hit with the correct amount of energy to switch to beta spin do so and subsequently cause resonance. This resonance can then be recorded and is reported for the different frequencies applied to sample as parts per million (ppm chemical shifts). For example, when the nuclear magnetic field strength sends out a frequency of 1 ppm (parts per million), CH<sub>3</sub> reacts to it and exhibits beta spin behavior from which the spectroscopy catches this signal and records it.
Most hydrogen absorptions in 300-MHz 1H NMR fall within a range of 3000 Hz. Rather than record the exact frequency of each resonance, we measure it relative to an internal standard, the compound tetramethylsilane, (CH<sub>3</sub>)<sub>4</sub>Si. Its 12 equivalent hydrogens are shielded relative to those in most organic molecules, resulting in a resonance line conveniently removed from the usual spectral range.
A problem with these numbers, however, is that they vary with the strength of the applied magnetic field. Because field strength and resonance frequency are directly proportional, doubling or tripling the field strength will double or triple the distance (in hertz) of the observed peaks relative to (CH<sub>3</sub>)<sub>4</sub>Si. To make it easier to compare reported literature spectra, we standardize the measured frequency by dividing the distance to (CH<sub>3</sub>)<sub>4</sub>Si (in hertz) by the frequency of the spectrometer. This procedure yields a field-independent number, the chemical shift δ.
== NMR in Characterizing Organometallics ==
NMR spectra uses superconducting magnets to many metal nuclei. Carbon 13 NMR has become increasingly useful in facilitating due to its low natural abundance and low sensitivity for NMR experiment. The integration of NMR peaks of organometallic complexes can provide the ratio of atoms in different environments. Since the relaxation times of the carbon atoms vary in organometallics, a great deal of inaccuracy result from this. However it does have its advantages as well. For example, terminal carbonyl peaks are frequently in the range of 195 to 225ppm, which allows it to be easily distinguished from other ligands. The 13C chemical shift correspond with the strength of the CO bond. The stronger the bond, the smaller the chemical shift. 13C in cyclopentadienyl ligands have a wide range of chemical shifts in paramagnetic compounds whereas it's narrower for diamagnetic compounds.
== Nuclei Spin States ==
In NMR, certain atomic nuclei must be magnetic by nature in order for this technique to be used. However, only a certain number of isotopes have this magnetic characteristic called spin. An example is hydrogen. When an external magnetic field is applied, hydrogen's spinning proton generates a magnetic moment which can take either the α or β spin state. The energy difference between the two states is directly proportional to the amount of external magnetic field applied. The α state is aligned with the applied field and has lower energy than the β state. When a pulse of electromagnetic radiation is applied to the α state, it can be excited to the β state, thus a resonance will be obtained.
The NMR is only able to detect certain atoms and only certain isotopes. For example, it can detect the Hydrogen molecules with a mass of 1 amu, but not the other isotopes. Most commonly the Hydrogen and Carbon NMR's are used. The information that can be determined by the NMR is immense. In the case of the Hydrogen NMR, one can use a certain amount of knowledge from a table to determine what each peak corresponds to which group within your sample. Interpreting NMR's can also be a little tricky in that one must understand splitting patterns. For example, the carbon atom you may be examining may have only one hydrogen attached, however if attached to a methyl group, it will appear as a quartet.
==Shielding and Deshielding==
Protons in different chemical environments are shielded by different amounts. When a nucleus surrounded by electrons is exposed to a magnetic field of strength H<sub>0</sub>,these electrons move in such a way as to generate a small local magnetic field, h<sub>local</sub>, opposing H<sub>0</sub>. As a consequence, the total field strength near the hydrogen nucleus is reduced, and the nucleus is thus said to be shielded from the magnetic field strength by its electron cloud. The degree of shielding depends on the amount of electron density surrounding the nucleus. dding electrons increases shielding; their removal, consequently, would cause deshielding. Also, a proton is deshielded when the induced field reinforces the applied field. For example, the induced field can reinforce the applied field. As a result, these protons are deshielded and their chemical shifts are at a higher value of ppm.
==Coupling==
'''J-coupling''' arises from the interaction of different spin states through the chemical bonds of a molecule and results in the splitting of NMR signals. This coupling provides detailed information about the connectivity of atoms and the structure of a molecule.
Spin-spin slitting is given by the '''N+1 Rule''': 1) H that is neighbored by one H resonnate as a doublet.2) H that is neighbored by two set of equivalent Hs resonate as trplet. 3) H that is neighbored by three equivalents of hydrogens resonate as a quartet.
A multiplet can be shown when there is a mixture of couple patterns, some of which could be broken down to small parts (i.e. qd- quartet of doublet). But for the most part, if a coupling pattern shows complexity not easily countable by N+1 rule, such pattern is called a multiplet.
In addition, functional groups containing alcohol (-OH) such as alcohol, carboxylic acid have a broad band on NMR spectra. This is due to the fact that Hydrogens on alcohol can hydrogenbond easily, thus being able to couple in broad spectra than other H's. Thus just by looking at the type of the spectra (such as multiple peaks or broad peak), one can easily categorize the functional group to which the H is associated with.
The ratio of the splitting peaks is given by a mathematical mnemonic device called Pascal's triangle. Each number in this triangle is the sum of the two numbers closest to it in the line above. It is important to remember that nonequivalent nuclei mutually split one another. In other words, the observation of one split absorption necessitates the presence of another split signal in the spectrum. Moreover, the coupling constants for these pattern must be the same. Double and triple bond characteristic chemical environments show complex splitting peaks. An alkyne for example, can have hydrogen splitting patterns an extra adjacent carbon away. An alkene depending on where the hydrogen is located (cis or trans) to a relative chemical environment, can show a slightly distorted peak.
==Integration==
'''Integration''' is very useful in NMR spectrum in determining the structure of a molecule. The relative integrated intensity of a signal is proportional to the relative number of nuclei giving rise to that absorption. Normally, an NMR spectrum plot will tell you very complex integration numbers. However, integration doesn’t have to be exact. You can just divide each integration number by the smallest number in your NMR spectrum. The ratio will help you get a big picture of the relative number of H’s represented by a peak. Combining the chemical shifts and the peak integration, you might be able to determine the structure of a molecule by using the ''chemical shift table''.
Researchers usually use NMR to check if the product they made from a reaction is what they really want. So they don’t have to figure out the structure of a molecule by looking at a complex spectrum. They know what the spectrum should look like if the reaction works. By comparing the actual spectrum to the ideal one, they are able to verify the molecule they want is in the product. Solvent used is usually CD<sub>2</sub>Cl<sub>2</sub>, since D would not show up in a H NMR spectrum. Combine with chemical shifts, they can be used to determine structure.
== Proton NMR interpretation ==
To interpret proton NMR, it is important to know where each type of proton lies. Below is a list of types of proton and their chemical shift on NMR.
[[Image:Table HNMR.jpg|Proton NMR frequency]]
It is important to know that proton NMR peaks only indicate the presence of protons (H). It does not show other atoms like Carbon, Oxygen...etc. As mentioned in the above section, proton peaks shows spliting because of coupling by the neighbor protons. The integration of each peak is the amount of proton relative to other proton on the NMR. When solving structure from the H NMR, it is important to write down the chemical shift, integration and the split of each peak. Then base on the chemical shift of the peak, write down the possible functional group and structure. Lastly, arrange and connect each structure so that it matches the split and the integration of proton NMR. Below are examples of hand drawn proton NMR and also the detail instruction to interprete proton NMR.
=== Example ===
The interpretation of each proton NMR is given right below of each graph. Try not to look at the structure, and only look at the molecular formula and proton NMR to interpret the structure of the compound. Note that the examples given are the basic and simple compound. The NMR of protein structures is much more complex than these examples. The goal of these examples is to give you an idea how proton NMR are interpreted.
[[Image:1H NMR Ethyl Acetate Coupling shown - 2.png|Proton NMR]]
Base on the chemical shift of proton NMR, there should be a ketone functional group or a structure that contains a carbonyl group at peak around 2.0. The peak around 1.3 could be a primary or secondary alkyl group.
Now look at the splitting of the peaks at chemical shift 1.3 (C), the triplet (3 peaks) shows that the proton is probably split by 2 neighbor protons (base on the n+1 rule mention in integration section). If it is split only by 1 neighbor proton, then it would be a doublet (2 peaks). Next, look at the peak at chemical shift 2.0 (B). The singlet (single peak) means that this proton environment probably has no neighbor proton. The peak at chemical shift 4.2 (A) is a quadruplet (4 peaks). This means there are about 3 neighbor proton next to proton environment A. Since it is known that B has no proton right next to it, and A and C both has neighbor protons, it is safe to assume that proton environment A is right next to proton environment C, which could be a -CH2CH3.
The following possible structures deduced above are a ketone and an ethyl group.
{|class="wikitable"
|+ Splitting analysis
|-
!Substructure
|[[File:Methyl group.svg|100px]]
|[[File:Ethyl group.svg|150px]]
|-
!Splitting pattern
|Singlet
|Quartet and triplet
|-
!Analysis
| C with no neighboring H
| C with three neighboring H<br>C with two neighboring H
|}
Note that the there are two oxygen atoms from the molecular formula. One of the oxygen is included in ketone. The other oxygen must be binding onto one of these two structures. Take a look at peak A, the chemical shift is near 4.0, which means it might be connected to a heteroatom like oxygen. Place the oxygen next to the -CH2CH3 and connect the structure together, you will get ethyl acetate as indicated below the proton NMR. Notice that the proton B does not have any neighbor proton. Proton A is split into 4 peaks by proton C (n+1 rule, n = 3 neighbor protons). Proton C is split into 3 peaks by proton A (n = 2 neighbor protons). The CH2, secondary alkyl, base on the proton frequency table should be around the chemical shift ~1.2 ppm, but instead it is at ~4.2 ppm. The reason for this is that the CH2 is attached to oxygen a heteroatom, which is a electron withdrawing group. The result is that the chemical shift is pulled left field resulting in a chemical shift of 4.2 ppm. Another way to look at this is to assume there is an ester functional group at chemical shift of 4.2 ppm, and the primary alkyl group is attached to the ester.
The integration of the proton NMR also matches the structure well. The methyl CH3 next to the carbonyl group has 3 protons, and the primary alkyl next to the CH2 has 3 protons as well. This explains why peak B has the same height as peak C (same amount of protons). Peak A has the lowest height because it only has two protons.
[[Image:3-methoxyphenol NMR.jpg|proton NMR]]
This proton NMR example looks more complicated than the first one, but it is actually easier. One important information from this proton NMR is that there are peaks around 6.0~ 7.0 ppm (F,B,D,E). This always almost indicates the presence of aromatic ring. Noticed that there are about 4 group of peaks from 6.0 to 7.0 ppm? This means that there are four protons attach to 4 carbons on the aromatic ring. This leaves 2 carbons of the aromatic ring free to attach to two substituents. The position of these substituents is clearly an ortho and para position on the aromatic ring. The reason is that two different substituents on ortho and para position of the aromatic ring would give 4 proton environments. If there are only two proton environments around 6.0~ 8.0 ppm with the same integration (height), it means that the aromatic ring is probably symmetric on both sides with double para substituents. Now look at the peak (A) at 5.5 ppm. The peak is a broad peak instead of sharp peak like the rest. This means that the proton of this environment is attached to a heteroatom. The only heteroatom present in the sample base on the molecular formula given is an oxygen atom. This means that the proton is directly attached to oxygen, which would be a alcohol group -OH (Note that the proton on the alcohol group can have the chemical shift range from 0.5 to 5.0 ppm). It is important to remember that the proton that attached to a heteroatom is also known as exchangeable proton. Exchangeable proton sometimes do not show up on H NMR, so do not worry when an expected exchangeable peak doesn’t appear on HMNR.
The peak (C) at the chemical shift of ~3.9 ppm has the highest integration (height) and is a singlet. Usually when such a high singlet peak is observed around 3.9 ppm with oxygen in the molecular formula, there is a high chance that it is a ether group, -OCH3. Since there is no neighbor proton next to the CH3 of the ether, it is a singlet peak. In addition, the height of the peak is high compare to the other peak, which indicate a possibility of CH3 with at least 3 times more protons than other proton environment. Base on the interpretations above, these are the possible function groups:
[[Image:3-methoxyphenol NMR1.jpg|possible proton structures]]
Attach the alcohol group and the ether group in ortho- para position will result in the correct structure of the compound.
== Nuclear Overhauser Enhancement Spectroscopy (NOESY) ==
[[File:Noesy.jpg|thumb|NOESY Spectrum of Codeine. Each peak correlates to a proton.]]
'''NOESY''' is a NMR technique that uses the Nuclear Overhauser effect to help understand the tertiary structure of proteins and other large molecules. The nuclear Overhauser effect is the interaction of nuclei at short distances from each other. The extent of the effect is approximately 5 Angstroms. This is a better analysis of tertiary structure for proteins that do not form crystalline structures and need to be analyzed in solution. Like in NMR, a magnetic field is produced around the molecule and RF waves at different frequencies are produced to produce resonance. The resonance is produced when the nucleus reverses spin. Unlike normal NMR, the aim of NOESY is to determine the effect of the resonance of one nucleus on the other nuclei in the area. The graph that is produced gives you an idea of where the nuclei are in relation to each other.
The NOESY experiment reveals the distance of protons relative to one another. Protons very close to each other, (about 3 Angstroms apart) will produce a very large signal. The limit of detection is about 5-6 Angstroms apart, and will produce only a very weak signal.
The graph has diagonal dots correspond to the placement of the nuclei on the one dimensional NMR. There are dots out side of this diagonal spectrum. These dots show what nuclei are in close proximity of each other. If a line was drawn horizontally and vertically from the outlaying dots, the dots, on the diagonal spectrum, that lay on the lines would be in close proximity to each other. Using the information from the NMR and the NOESY a tertiary structure of the macromolecules could be formed. However, the resulting tertiary structure would contain a family of structures. This happened for three reasons. The first is the approximation of the distance between the nuclei. Second, there may not have been enough constraints to produce a singular structure. Thirdly, the protein is in solution, and the solution contains many proteins.
This technique is mainly used for hydrogen atoms, because they are the most abundant atom in biological systems and are also the simplest.
==Protein NMR==
An NMR machine is essentially a huge magnet. Many atoms are essentially little magnets. When placed inside an NMR machine, all the little magnets orient themselves to line up with the big magnet. By harnessing this law of physics, NMR spectroscopists are able to figure out physical, chemical, electronic, and structural information about molecules.
NMR relies on the interaction between an applied magnetic field and the natural “little magnets” in certain atomic nuclei. For protein structure determination, spectroscopists concentrate on the atoms that are most common in proteins: hydrogen, carbon, and nitrogen. What researchers seek to learn through NMR is how this chain of amino acids wraps and folds around itself to create the three-dimensional, active protein. Solving a protein structure using NMR is a series of experiments, each of which provides partial clues about the nature of the atoms in the sample molecule, such as how close two atoms are to each other, whether these atoms are physically bonded to each other, or where the atoms lie within the same amino acid. Other experiments show links between adjacent amino acids or reveal flexible regions in the protein. Each new set of experiments further refines possible structures until finally the scientists carefully select 10 to 20 solution that best represent their data and present the average as their final structure.
'''Sample Preparation for NMR'''
In order to study protein structure by NMR, highly purified samples of the protein of interest must be prepared. The protein can either be isolated from natural sources, or expressed in host organisms such as E. Coli through recombinant DNA techniques. The bacteria with the recombinant gene coding for a specific protein are grown in minimal media with 15NH4Cl being the only source of nitrogen for the bacteria, and 13C-glucose offering the only source of carbon for the bacteria to make proteins. This way, when the bacteria produce the protein of interest, these proteins are labeled with 15N and 13C, both of which are NMR active. The protein of interest is then purified through various protein purification techniques (See protein purification techniques). Finally, the protein, in an appropriate buffer, is loaded into an NMR tube and is ready to be placed in the NMR magnet.[[File:Figure 1.pdf|thumb|Figure 1. General scheme for protein structure determination by NMR in solution phase.]]
'''NMR Experiments'''
'''2D Experiments'''There are many different types of NMR experiments one can run to help to reveal information about the structure of the protein. The experiments usually differ in what correlations are detected. For example, a 2D [1H-1H]-NOESY experiment will reveal hydrogen atoms that are within 0.5 nm apart. Protons that exhibit this interaction will show up as a cross peak on the 2D spectrum (Figure 2).[[File:Figure 2.pdf|thumb|Figure 2. Simplified example of 2D [1H-1H]-NOESY NMR spectrum. The dots on the diagonal represent the 1D spectrum of the molecule. There are two protons that are being examined, one at 9 ppm and the other at 8 ppm. The presence of the cross peak (circled) reveals that these two protons are within 0.5 nm apart.]]
Taking this information, theoretically, the protons at 8 ppm and 9 ppm on the 1D spectrum could be assigned to a certain residue in the amino acid sequence. For example, if Ala1 is the point at 8 ppm and Ala54 is at 9 ppm, and there is a crosspeak present, then the observation of this NOE reveals a circular structure for this polypeptide chain (Figure 3). [[File:Figure 3.pdf|thumb|Figure 3. Circular structure of polypeptide chain revealed by presence of NOE on 2D NOESY spectrum.]]
Because proteins are much more complicated than this example above, the 2D NOESY spectrum is often cluttered and crosspeaks cannot be made out clearly because many of these points may stack on top of one another. Other experiments are required to reveal the necessary information to determine the 3D structure of the protein, such as 3D experiments.
'''3D Experiments'''
3D experiments use a third dimension to reveal peaks that may be stacked on top of one another in the 2D spectrum. An example is 3D 15N-correlated [1H-1H]-NOESY (Figure 4).
There are many other experiments to correlate different nuclei and their neighbors.
[[File:Figure 4.pdf|thumb|Figure 4. Example of 3D 15N [1H-1H] NOESY. The peaks that would be stacked on top of one another in the 2D [1H-1H] NOESY are now drawn out in the third dimension by relating its 15N chemical shifts. This cleans up the spectrum and helps in resonance assignments.]]
==Protein NMR Advantages==
NMR is a good method in trying to solve the structure of a protein and the continued unanswered protein folding problem. However it is not the only method as crystallography is also a possible method for determining protein structure. However, NMR has its advantages over crystallography.
One instance is that it uses molecules in solution, so it is not limited to those that crystallize well since crystallization is a very uncertain and time-consuming step in X-ray crystallography. In addition, some proteins do not readily crystallize. Furthermore, although structures present in crystallized proteins very closely represent those of proteins free of the constraints imposed by the crystalline environment, structures in solution can be sources of additional insights. NMR also makes it fairly easy to study properties of a molecule besides its structure such as the flexibility of the molecule and how it interacts with other molecules. With crystallography, it is either impossible to study these aspects or it requires an entirely new crystal.
==Protein NMR Disadvantages==
Most NMR spectroscopists focus on molecules no larger than 20-30 kilodaltons. X-ray crystallographers have solved structures upto 2,500 kilodaltons.
==NMR in Real Life==
The 15 carbon compound viniferone found in grape seeds was isolated in 2004. Viniferone falls into a group of substances, grape seed, that are very active against radicals and oxidative stress. There was very little recovery of viniferone from an abundance of grape seeds (~40 mg of viniferone from 10.5 kg of grape seeds), so precautions had to be taken in the techniques used to obtain its structure. Most tests would destroy the minuscule amount proanthocyanidins t of viniferone obtained, so a combination of spectroscopic techniques were utilized (including NMR) to obtain viniferone's structure. Obtaining the <sup>1</sup>H and <sup>13</sup>C NMR data was critical in determining the structure of Viniferone. The variety of absorption signals at various chemical shifts helped determine the presence of alkenes and benzene rings. Correlation spectroscopy and eventually X-ray crystallography were used to verify the structural arrangement of Viniferone.<ref name ="Schore">Schore, Neil E. (2011). Organic Chemistry Structure and Function 6th Edition. W. H. Freeman</ref>
== References ==
{{Reflist|2}}
If you would like to learn more about interpreting NMR peaks, I highly suggest this website. [http://www.wfu.edu/~ylwong/chem/nmr/h1/ http://www.wfu.edu/~ylwong/chem/nmr/h1/]
<br> Berg, Jeremy M., Lubert Stryer, and John L. Tymoczko. Biochemistry. 6th ed. Boston: W. H. Freeman & Company, 2006. 98-101.
<br> Shriner, Christine K. F. Hermann, Terence C. Morrill, David Y. Curtin, Reynold C. Fuson. The Systematic Identification of Organic Compounds. 8th ed. U.S.A. John Wiley & Sons, Inc. 2004. 136-142.
<br> Vollhardt, K. Peter C., Schore, Neil E. Organic Chemistry - Structure and Function. 5th ed. New York: W. H. Freeman & Company, 2005. 398-432.
<br> Keeler, James. Understanding NMR Spectroscopy. West Sussex, England. John Wiley & Sons. 51-77.
<br>Clore, Marius G., Gronenborn, Angela M. “Chapter 34: Structures of Larger Proteins, Protein-Ligand, and Protein-DNA Complexes by Multidimensional Heteronuclear NMR.” Multidimensional NMR Methods for the Solution State. United Kingdom. John Wiley & Sons Ltd.
<br>Wuthrich, Kurt. “Chapter 33: Biological Macromolecules: Structure Determination in Solution.” Multidimensional NMR Methods for the Solution State. United Kingdom. John Wiley & Sons Ltd.
<br> National Institutes of Health, National Institute of General Medical Sciences, New York, 2007, 29-30, http://www.nigms.nih.gov.
{{BookCat}}
[1]"Kurt Wüthrich - Nobel Lecture". Nobelprize.org. 25 Oct 2010 http://nobelprize.org/nobel_prizes/chemistry/laureates/2002/wuthrich-lecture.html
q127ypzoqrh0d3on8doan5ndkztdu6g
Aros/User/Applications
0
237399
4676331
4675447
2026-10-16T06:06:32Z
Jeff1138
301139
[[WB:REVERT|Reverted]] edit by [[Special:Contributions/~2026-54415-41|~2026-54415-41]] ([[User talk:~2026-54415-41|talk]]) to last version by Jeff1138
4675021
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-->[https://github.com/bohunamiga/PiNTP PiNTP], [https://archives.arosworld.org/?function=showfile&file=utility/workbench/amitimekeeper.i386-aros.lha amitimekeeper with c src], [http://archives.arosworld.org/index.php?function=browse&cat=network/misc ntpsync], [],
|<!--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-->Manage metadata of images [https://github.com/exiv2/exiv2 exiv2], [ EXIF/IPTC/XMP metadata manipulation], [],
|<!--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, editing and digital signatures
|<!--AROS-->[https://github.com/tomaszstaniak/aros-foliopdf folio version of mupdf], [http://sourceforge.net/projects/arospdf/ ArosPDF via splash xpdf], [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-->[http://aminet.net/package/text/edit/Kickdown c src with reaction gui], [],
|<!--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], [ FileMaster],
|<!--Amiga OS-->DOpus2, DOpus 4, [https://github.com/BlitterStudio/dopus5 Dopus5 Magellan], ClassAction, FileMaster, 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-->Package Application Installer
|<!--AROS-->[https://github.com/tomaszstaniak?tab=repositories Pkg manager], [https://aros-pkg.azurewebsites.net/search?arch=x86_64 Pkg], [ 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-->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,
|-
|<!--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-->Edge snap window tool
|<!--AROS-->[https://github.com/kaffeine1/edgesnap edgesnap]
|<!--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://github.com/tomaszstaniak/limpet limpet], [], [],
|<!--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-->CNC control with laser and vinyl cutting
|<!--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-->
|-
|<!--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.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-->Games emulation Ms-Dos Dosbox type
|<!--AROS-->[https://github.com/tomaszstaniak/aros-boxerapp Boxer]
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->
|<!--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], [https://staniks.github.io/articles/serious-engine-networking-analysis/ Serious Sam] [https://github.com/Croteam-official/Serious-Engine Serious Engine 1]
|<!--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], [https://juen.in Aveterna online civ], [],
|<!--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-->[https://github.com/tomaszstaniak/aros-micropolis micropolis]
|<!--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-->
|-
|<!--Sub Menu-->
|<!--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}}
ag6s0g647hpnqoo3aktwfphnd9xhnbm
4676332
4676331
2026-10-16T06:12:15Z
Jeff1138
301139
4676332
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-->Downloading videos and/or 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,
|<!--MorphOS-->[ ytsearch], [https://blog.alb42.de/amitube/ Amitube], [ getVideo], Tubexx
|-
|<!--Sub Menu-->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-->Internet Chat 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], [ 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-->[https://github.com/bohunamiga/PiNTP PiNTP], [https://archives.arosworld.org/?function=showfile&file=utility/workbench/amitimekeeper.i386-aros.lha amitimekeeper with c src], [http://archives.arosworld.org/index.php?function=browse&cat=network/misc ntpsync], [],
|<!--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-->Manage metadata of images [https://github.com/exiv2/exiv2 exiv2], [ EXIF/IPTC/XMP metadata manipulation], [],
|<!--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, editing and digital signatures
|<!--AROS-->[https://github.com/tomaszstaniak/aros-foliopdf folio version of mupdf], [http://sourceforge.net/projects/arospdf/ ArosPDF via splash xpdf], [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-->[http://aminet.net/package/text/edit/Kickdown c src with reaction gui], [],
|<!--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], [ FileMaster],
|<!--Amiga OS-->DOpus2, DOpus 4, [https://github.com/BlitterStudio/dopus5 Dopus5 Magellan], ClassAction, FileMaster, 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-->Package Application Installer
|<!--AROS-->[https://github.com/tomaszstaniak?tab=repositories Pkg manager], [https://aros-pkg.azurewebsites.net/search?arch=x86_64 Pkg], [ 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-->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,
|-
|<!--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-->Edge snap window tool
|<!--AROS-->[https://github.com/kaffeine1/edgesnap edgesnap]
|<!--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://github.com/tomaszstaniak/limpet limpet], [], [],
|<!--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-->CNC control with laser and vinyl cutting
|<!--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-->
|-
|<!--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.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-->Games emulation Ms-Dos Dosbox type
|<!--AROS-->[https://github.com/tomaszstaniak/aros-boxerapp Boxer]
|<!--Amiga OS-->
|<!--AmigaOS4-->
|<!--MorphOS-->
|-
|<!--Sub Menu-->
|<!--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], [https://staniks.github.io/articles/serious-engine-networking-analysis/ Serious Sam] [https://github.com/Croteam-official/Serious-Engine Serious Engine 1]
|<!--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], [https://juen.in Aveterna online civ], [],
|<!--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-->[https://github.com/tomaszstaniak/aros-micropolis micropolis]
|<!--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-->
|-
|<!--Sub Menu-->
|<!--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}}
k1a8pc4smy4yx0fu7xym0x3jrpjaleq
Talk:Unicode/Character reference
1
243798
4676326
4673505
2026-10-16T04:58:08Z
--MULLIGANACEOUS--
2675328
/* Color scheme for current and future versions */ new section
4676326
wikitext
text/x-wiki
{{talkheader|search=yes|bottom=yes}}
== Give abbreviation meanings ==
I like to use this table for reference, but the headings "BMP SMP SIP SSP PU" make no sense - could they be linked to what they stand for? --[[User:WiseWoman|WiseWoman]] ([[User talk:WiseWoman|discuss]] • [[Special:Contributions/WiseWoman|contribs]]) 20:28, 16 July 2018 (UTC)
== Could we maybe add headers that you can actually click on to reach that part onto the section pages ==
Note: Put it here as this is the only page in common with all the section pages [[User:NP240211WM|NP240211WM]] ([[User talk:NP240211WM|discuss]] • [[Special:Contributions/NP240211WM|contribs]]) 10:16, 7 December 2020 (UTC)
== Use templates for colours ==
This is the same idea in the archived post [[Talk:Unicode/Character reference/Archive 1#Revised unicode versions chart]]. But my suggestions for the template names are:
* [[Template:1.0]]
* [[Template:1.0.1]]
* [[Template:1.1]]
* [[Template:2.0]]
* [[Template:2.1]]
* [[Template:3.0]]
* [[Template:3.1]]
* [[Template:3.2]]
* [[Template:4.0]]
* [[Template:4.1]]
* [[Template:5.0]]
* [[Template:5.1]]
* [[Template:5.2]]
* [[Template:6.0]]
* [[Template:6.1]]
* [[Template:6.2]]
* [[Template:6.3]]
* [[Template:7.0]]
* [[Template:8.0]]
* [[Template:9.0]]
* [[Template:10.0]]
* [[Template:11.0]]
* [[Template:12.0]]
* [[Template:12.1]]
* [[Template:13.0]]
* [[Template:14.0]]
* [[Template:15.0]]
* [[Template:15.1]]
* [[Template:Pua]]
* [[Template:Sur]]
* [[Template:Res]]
* [[Template:Nch]]
I think the current colour scheme is too confusing, with some colours being too similar, like the ones for 13.0 and 14.0. But changing the colour scheme is too tedious, and the colour scheme is inconsistent and not documented properly while its being changed, that is probably why the colour scheme hasn't seen too much improvement over the years. The templates should be created with the current colours to avoid inconsistency, and after they are fully implemented, the colour scheme should be improved. [[User:Grey Clownfish|Grey Clownfish]] ([[User talk:Grey Clownfish|discuss]] • [[Special:Contributions/Grey Clownfish|contribs]]) 02:00, 21 April 2024 (UTC)
:Please use [[Template:Pua]] for private use characters. Currently, they appear in the background colour, not necessarily white. So they actually appear black in dark mode. This is a problem because black is the colour for noncharacters. Template:Pua specifies a white background. [[User:Grey Clownfish|Grey Clownfish]] ([[User talk:Grey Clownfish|discuss]] • [[Special:Contributions/Grey Clownfish|contribs]]) 09:56, 16 July 2024 (UTC)
== Unreleased Unicode versions ==
I'm not sure why future versions of Unicode were added to the Unicode Legend. I wonder if any of the future versions listed are even necessary in the legend at this time (well, maybe except Unicode 17.0 since we do need a color reserved for it when it releases in September this year). -[[User:GeniusWorkbench4622|GeniusWorkbench4622]] ([[User talk:GeniusWorkbench4622|discuss]] • [[Special:Contributions/GeniusWorkbench4622|contribs]]) 22:09, 23 July 2025 (UTC)
== Can someone undo the last edit? ==
[[User:ShakespeareFan00|ShakespeareFan00]] added a "</ div>" at the end of the page. This changes all of the fonts of all of the pages of Unicode/Character reference/... (which [[User:MarcoToa1|MarcoToa1]] added for better rendering) back to Arial. Can someone undo this edit (because I can't)? [[Special:Contributions/~2025-26895-67|~2025-26895-67]] ([[User talk:~2025-26895-67|talk]]) 14:13, 12 October 2025 (UTC)
== Characters from unreleased versions ==
I wonder why there are characters for Unicode versions that are not released yet present on these pages? Shouldn't the characters on the page be from Unicode versions that have already been released (17.0 as of writing this)? -<span style="font-family:Lentariso">[[User:GeniusWorkbench4622|Genius]][[User_talk:GeniusWorkbench4622|Workbench]][[Special:Contributions/GeniusWorkbench4622|4622]]</span> 01:36, 1 April 2026 (UTC)
== Could we maybe have a color for provisionally assigned characters? ==
Some characters have been already assigned (but not yet accepted) for future Unicode updates. Maybe we could have a separate color to show that a character has been provisionally assigned? [[User:ILYA125467|ILYA125467]] ([[User talk:ILYA125467|discuss]] • [[Special:Contributions/ILYA125467|contribs]]) 17:48, 1 October 2026 (UTC)
== Color scheme for current and future versions ==
I am wondering, how are the version coloring of provisionally assigned characters determined in this character reference sheet. Also, the current color scheme can be confusing because the colors two adjacent version are too similar, and could be confused with a far future color.
Like, is v40.0 even used? And why is it like lime green? [[User:--MULLIGANACEOUS--|--MULLIGANACEOUS--]] ([[User talk:--MULLIGANACEOUS--|discuss]] • [[Special:Contributions/--MULLIGANACEOUS--|contribs]]) 04:58, 16 October 2026 (UTC)
1ugzh25ix75j8h5v1nnykxl5coogcm4
Wikibooks:Reviewers
4
245222
4676297
4653432
2026-10-15T19:01:37Z
Codename Noreste
3441010
Now historical.
4676297
wikitext
text/x-wiki
[[File:Wikibooks Reviewer.svg|150px|right]]
{{historical project page}}
{{shortcut|WB:R}}
'''Reviewers''' are users who can [[WB:REVIEW|review page revisions]]. [[Wikibooks:Administrators|Administrators]] can also review pages. Reviewers are also given the ability to [[WB:ROLL|rollback]] changes in combating vandalism, and various other abilities.
When you can satisfy the [[#Automatic criteria|automatic criteria]], you should receive the reviewer permission automatically. Otherwise, you can [[Wikibooks:Requests for permissions|manually request]] it; please provide a reasonable argument for manual requests. The reviewer permission is only given manually to those in certain [[Wikibooks:Global rights policy|global roles]] (such as stewards, global sysops, and global rollbackers), or if autopromotion appears to have [[#failure|failed]], or for other compelling reasons. Otherwise, if any pages require reviewing, non-reviewers can request this at the [[Wikibooks:Reading room/Assistance|assistance reading room]].
There are currently [[Special:ListUsers/editor|'''{{NUMINGROUP:editor}}''' reviewers]] on the English Wikibooks. As of 2026, about 70% of these accounts are inactive.
== Abilities ==
The main rights given are the following:
* Edit protected pages (semi protected) <code>(editsemiprotected)</code>
* Have one's own edits automatically marked as "reviewed" <code>(autoreview)</code>
* Mark revisions as being "reviewed" <code>(review)</code>
* Not be affected by IP-based rate limits <code>(autoconfirmed)</code>
* Not create redirects from source pages when moving pages <code>(suppressredirect)</code>
* Quickly rollback the edits of the last user who edited a particular page <code>(rollback)</code>
* View the [[Special:UnreviewedPages|list of unreviewed pages]] <code>(unreviewedpages)</code>
In addition, reviewers also have an increased rate limit of moving 100 pages per minute.<ref>Per [https://noc.wikimedia.org/conf/highlight.php?file=InitialiseSettings.php InitialiseSettings.php].</ref>
== Automatic criteria ==
You should ''automatically'' get reviewer tools when/if you meet the following criteria:
*Have a registered account that is ''at least'' 30 days old, with either an email set and confirmed in [[Special:Preferences]], or already holding the [[WB:autoreviewed users|autoreviewed]] user right.
*Have never been blocked, and have never had the reviewer tools removed (you can [[WB:RFP|request the tools]] if otherwise).
*Have ''at least'' 100 edits since registration (excluding deleted edits), in which:
**50 or more edits are to pages other than discussion pages, including edits to the main space, Cookbook, and Wikijunior.
**50 or more [[WB:ES|edit summaries]] are used.
**10 or more unique pages are edited ''at least'' once.
**8 edits are spaced 2 or more days apart from each other (which takes ''at least'' 14 days, if you edit every 2 days).
***This does not mean that 8 consecutive edits must be spaced 2 or more days apart from each other to meet this criterion.
**5 or more edits are in [[WB:RC|recent changes]] at the time automatic reviewer promotion is checked (this works out to be anytime in the past week).
===Note===
{{anchor|failure}}
{{Tracked|T237191|resolved}}
On one extended occasion from June 2019 until September 2020, autopromotion stopped working. The bug was tracked at Wikimedia Phabricator, and was officially closed as ''resolved'' (see the link at right).
If autopromotion fails to occur, registered users who appear to satisfy the automatic criteria but have not been promoted should instead [[Wikibooks:Requests for permissions|apply for manual promotion]].
== Notes ==
<references/>
== See also==
* [[Help:Tracking changes#Reviewing pages|How to review]]
* [[Special:ListUsers/editor|Current users in the Reviewer group]]
* [[Wikibooks:FlaggedRevs Extension|Reviewing system's configuration information]]
* [[mw:Extension:FlaggedRevs]]
* [https://noc.wikimedia.org/conf/highlight.php?file=flaggedrevs.php Server configuration file]
{{user groups}}
0sfljo5gv58xe87aqslzvmjqsmlsp91
OpenSSH/Cookbook/Multiplexing
0
248568
4676259
4675810
2026-10-15T12:57:28Z
Larsnooden
430753
Errors Preventing Multiplexing - mismatched destination and socket tokens
4676259
wikitext
text/x-wiki
<noinclude>{{simple chapter navigation|previous=Load Balancing|next=Proxies and Jump Hosts}}</noinclude>
Multiplexing is the ability to send more than one signal over a single line or connection. In OpenSSH, multiplexing can re-use an existing outgoing TCP connection for multiple concurrent SSH sessions to a remote SSH server, avoiding the overhead of creating a new TCP connection and reauthenticating each time.
<noinclude>__TOC__</noinclude>
==Advantages of Multiplexing==
An advantage of SSH multiplexing is that the overhead of creating new TCP connections and negotiating the secure connection is eliminated. The overall number of connections that a machine may accept is a finite resource and the limit is more noticeable on some machines than on others and varies greatly depending on both load and usage. There is also a significant delay when opening a new connection. Activities that repeatedly open new connections can be significantly sped up using multiplexing.
The difference between multiplexing and standalone sessions can be seen by comparing the tables below. Both are selected output from <code>netstat -nt</code> slightly edited for clarity. We see in Table 1, "SSH Connections, Separate", that without multiplexing each new login creates a new TCP connection, one per login session. Following that we see in the other table, Table 2, "SSH Connections, Multiplexed", that when multiplexing is used, new logins are channelled over the already established TCP connection.
<syntaxhighlight lang="text">
# Local Address Foreign Address State
# one connection
tcp 0 0 192.168.x.y:45050 192.168.x.z:22 ESTABLISHED
# two separate connections
tcp 0 0 192.168.x.y:45050 192.168.x.z:22 ESTABLISHED
tcp 0 0 192.168.x.y:45051 192.168.x.z:22 ESTABLISHED
# three separate connections
tcp 0 0 192.168.x.y:45050 192.168.x.z:22 ESTABLISHED
tcp 0 0 192.168.x.y:45051 192.168.x.z:22 ESTABLISHED
tcp 0 0 192.168.x.y:45052 192.168.x.z:22 ESTABLISHED
Table 1: SSH Connections, Separate
</syntaxhighlight>
Both tables show TCP/IP connections associated with SSH sessions. The table above shows a new TCP/IP connection for each new SSH connection. The table below shows a single TCP/IP connection despite multiple active SSH sessions.
<syntaxhighlight lang="text">
# Local Address Foreign Address State
# one connection
tcp 0 0 192.168.x.y:58913 192.168.x.z:22 ESTABLISHED
# two multiplexed connections
tcp 0 0 192.168.x.y:58913 192.168.x.z:22 ESTABLISHED
# three multiplexed connections
tcp 0 0 192.168.x.y:58913 192.168.x.z:22 ESTABLISHED
Table 2: SSH Connections, Multiplexed
</syntaxhighlight>
As we can see with multiplexing, only a single TCP connection is set up and used regardless of whether or not there are multiple SSH sessions carried over it.
Or we can compare the time it takes to run [http://man.openbsd.org/true.1 true(1)] on a slow remote server, using [http://linux.die.net/man/1/time time(1)]. The two commands would be something like <code>time ssh server.example.org true</code> versus <code>time ssh -S ./path/to/somesocket server.example.org true</code> and use keys with an agent for each of them. First without multiplexing, we see the normal connection time:
<syntaxhighlight lang="text">
real 0m0.658s
user 0m0.016s
sys 0m0.008s
</syntaxhighlight>
Then we do the same thing again, but with a multiplexed connection to see a faster result:
<syntaxhighlight lang="text">
real 0m0.029s
user 0m0.004s
sys 0m0.004s
</syntaxhighlight>
The difference is quite large and will definitely add up for any activity where connections are made repeatedly in rapid succession. The speed gain for multiplexed connections doesn't come with the master connection, that is normal speed, but with the second and subsequent multiplexed connections. The overhead for a new SSH connection remains, but the overhead of a new TCP connection is avoided. The second and later connections will reuse the established TCP connection over and over and not need to create a new TCP connection for each new SSH connection.
==Setting Up Multiplexing==
The OpenSSH client supports multiplexing its outgoing connections, since version 3.9 (August 18, 2004)<ref name="multiplexing">{{cite web |url=https://www.openssh.org/txt/release-3.9 |title=OpenSSH 3.9 Release Notes |accessdate=2018-12-16 |date=2004-08-18 |publisher=OpenSSH }}</ref>, using the '''ControlMaster''', '''ControlPath''' and '''ControlPersist''' configuration directives which get defined in [http://man.openbsd.org/ssh_config.5 ssh_config(5)]. The client configuration file usually defaults to the location '''~/.ssh/config'''. All three directives are described in the manual page for [http://man.openbsd.org/ssh_config.5 ssh_config(5)]. See also the "TOKENS" section there for the list of tokens available for use in the '''ControlPath'''. Any valid tokens used are expanded at run time.
'''ControlMaster''' determines whether [http://man.openbsd.org/ssh.1 ssh(1)] will listen for control connections and what to do about them. '''ControlPath''' sets the location for the control socket used by the multiplexed sessions. These can be either globally or locally in [http://man.openbsd.org/ssh_config.5 ssh_config(5)] or else specified at run time. Control sockets are removed automatically when the master connection has ended. '''ControlPersist''' can be used in conjunction with '''ControlMaster'''. If '''ControlPersist''' is set to 'yes', then it will leave the master connection open in the background to accept new connections until either killed explicitly or closed with '''-O''' or ends at a pre-defined timeout. If '''ControlPersist''' is set to a time, then it will leave the master connection open for the designated time or until the last multiplexed session is closed, whichever is longer.
Here is a sample excerpt from [http://man.openbsd.org/ssh_config.5 ssh_config(5)] applicable for starting a multiplexed session to ''machine1.example.org'' via the shortcut ''machine1''.
<syntaxhighlight lang="apache" line="1">
Host machine1
HostName machine1.example.org
ControlPath ~/.ssh/controlmasters/%r@%h:%p
ControlMaster auto
ControlPersist 10m
</syntaxhighlight>
With that configuration, the first connection to ''machine1'' will create a control socket in the directory '''~/.ssh/controlmasters/''' and then any subsequent connections, up to 10 by default as set by '''MaxSessions''' on the SSH server, will re-use that control path automatically as multiplexed sessions. Confirmation of each new connection can be required if '''ControlMaster''' set to 'autoask' instead of 'auto'.
Please note with the settings above that the control socket would be placed into the folder '''~/.ssh/controlmasters/'''. If that folder doesn't exist first, the SSH client will exit with a specific error about unix_listener complaining that the file or path does not exist:
<syntaxhighlight lang="text">
unix_listener: cannot bind to path /home/fred/.ssh/controlmasters/fred@machine1.example.org:22.EOWsvm5xFt30O6CB: No such file or directory
</syntaxhighlight>
With the '''-O''' option, [http://man.openbsd.org/ssh.1 ssh(1)] can be used to manage the connection using the same shortcut configuration. Use 'check' to see the status of the connections. To cancel all existing connections, including the master connection, use 'exit' instead of 'stop'.
<syntaxhighlight lang="shell-session">
$ ssh -O check machine1
Master running (pid=14379)
$ ssh -O stop machine1
Stop listening request sent
$ ssh -O check machine1
Control socket connect(/Users/Username/.ssh/sockets/machine1): No such file or directory
</syntaxhighlight>
In that example, the status of the connection is checked first. Then the master connection is told not to accept further multiplexing requests and finally we check again and verify that the control socket is not available any more.
It is also possible to show information about the connection. Note that the ''machine1'' shortcut was defined above and sets the path to the '''ControlPath''' socket. The option '''-O conninfo''' corresponds to the '''~I''' escape function. The connections are being made from ''client.example.org'' at the address ''192.0.2.98'' to the system at the address ''203.0.113.206'' named ''machine1.example.org''.
<syntaxhighlight lang="shell-session">
$ ssh -O conninfo machine1
Connection information for client.example.org pid 83539
tcp 192.0.2.98:18952 -> 203.0.113.206:22
kexalgorithm mlkem768x25519-sha256
hostkeyalgorithm ssh-ed25519
cipher chacha20-poly1305@openssh.com
mac <implicit>
compression none
rekey limit none interval none
traffic 112 pkts 466 blks 6.4KB in, 94 pkts 329 blks 5.8KB out
</syntaxhighlight>
Similarly, the '''-O channels''' option displays which channels are open in that multiplexing session. However, it has no corresponding escape sequence.
<syntaxhighlight lang="shell-session">
$ ssh -O channels machine1
The following connections are open:
#1 mux-control (t16 [mux-control] nr0 m0 i0/0 o0/0 e[closed]/0 fd 5/5/-1 sock 5 cc -1 c2 io 0x01/0x00 I)
#2 client-session (t4 [session] r0 nm0 i0/0 o0/0 e[write]/0 fd 6/7/8 sock -1 cc 1 nc0 io 0x01/0x00 RTI)
#3 mux-control (t16 [mux-control] nr0 m0 i0/0 o0/0 e[closed]/0 fd 9/9/-1 sock 9 cc -1 c4 io 0x01/0x00 I)
#4 client-session (t4 [session] r1 nm0 i0/0 o0/0 e[write]/0 fd 10/11/12 sock -1 cc 3 nc0 io 0x01/0x00 RTI)
#5 mux-control (t16 [mux-control] nr0 m0 i0/0 o0/0 e[closed]/0 fd 13/13/-1 sock 13 cc -1 nc0 io 0x01/0x01 I)
</syntaxhighlight>
That example shows two SSH connections over the same network connection: one master connection plus one child.
====Manually Establishing Multiplexed Connections====
Multiplexed sessions need a control master to connect to. The run time parameters '''-M''' and '''-S''' also correspond to '''ControlMaster''' and '''ControlPath''', respectively. So first an initial master connection is established using '''-M''' when accompanied by the path to the control socket using '''-S'''.
<syntaxhighlight lang="shell-session">
$ ssh -M -S /home/fred/.ssh/controlmasters/fred@server.example.org:22 server.example.org
</syntaxhighlight>
Then subsequent multiplexed connections are made in other terminals. They use '''ControlPath''' or '''-S''' to point to the control socket.
<syntaxhighlight lang="shell-session">
$ ssh -S /home/fred/.ssh/controlmasters/fred@server.example.org:22 server.example.org
</syntaxhighlight>
Note that the control socket is named "fred@server.example.org:22", or ''%r@%h:%p'', to try to make the name unique. The combination %r, %h and %p stand for the remote user name, the remote host and the remote host's port. The control sockets should be given unique names.
Multiple '''-M''' options place [http://man.openbsd.org/ssh.1 ssh(1)] into '''master''' mode with confirmation required before slave connections are accepted. This is the same as '''ControlMaster=ask'''. Both require [http://man.openbsd.org/ssh.1 ssh(1)] to ask for the confirmation.
Here is the master connection for the host ''server.example.org'' as set to ask for confirmation of new multiplexed sessions:
<syntaxhighlight lang="shell-session">
$ ssh -MM -S ~/.ssh/controlmasters/%r@%h:%p server.example.org
</syntaxhighlight>
And here is a subsequent multiplexed connection:
<syntaxhighlight lang="shell-session">
$ ssh -S ~/.ssh/controlmasters/%r@%h:%p server.example.org
</syntaxhighlight>
The status of the control master connection can be queried using '''-O check''', which will tell if it is running or not.
<syntaxhighlight lang="shell-session">
$ ssh -O check -S ~/.ssh/controlmasters/%r@%h:%p server.example.org
</syntaxhighlight>
If the control session has been stopped, the query will return an error about "No such file or directory" even if there are still multiplexed sessions running because the socket is gone.
Alternately, instead of specifying '''-M''' and '''-S''' as runtime options, configuration options can be spelled out in full using '''-o''' for easier transfer to the client configuration file when figured out.
The way below sets configuration options as run time parameters by first starting a control master.
<syntaxhighlight lang="shell-session">
$ ssh -o "ControlMaster=yes" -o "ControlPath=/home/fred/.ssh/controlmasters/%r@%h:%p" server.example.org
</syntaxhighlight>
Then subsequent sessions are connected to the control master via socket at the end of the control path.
<syntaxhighlight lang="shell-session">
$ ssh -o "ControlPath=/home/fred/.ssh/controlmasters/%r@%h:%p" server.example.org
</syntaxhighlight>
And of course all that can be put into [http://man.openbsd.org/ssh_config.5 ssh_config(5)] as shown in the previous section. Starting with 6.7, the combination of %r@%h:%p and variations on it can be replaced with %C which by itself generates a SHA1 hash from the concatenation of %l%h%p%r.
<syntaxhighlight lang="shell-session">
$ ssh -S ~/.ssh/controlmasters/%C server.example.org
</syntaxhighlight>
There are two advantages with that. One is that the hash can be shorter than its combined elements while still uniquely identifying the connection. The other is that it obfuscates the connection information which would have been otherwise displayed in the socket's name.
===Ending Multiplexed Connections===
One way to end multiplexed sessions is to exit all related SSH sessions, including the control master. If the control master has been placed in the background using '''ControlPersist''', then it will be necessary to stop it with '''-O''' and either 'stop' or 'exit'. That also requires knowing the full path to and filename of the control socket as used in the creation of the master session, if it has not been defined in a shortcut in [http://man.openbsd.org/ssh_config.5 ssh_config(5)].
<syntaxhighlight lang="shell-session">
$ ssh -O stop server1
$ ssh -O stop -S ~/.ssh/controlmasters/%C server1.example.org
</syntaxhighlight>
The multiplex command '''-O stop''' will gracefully shutdown multiplexing. After issuing the command, the control socket is removed and no new multiplexed sessions are accepted for that master. Existing connections are allowed to continue and the master connection will persist until the last multiplexed connection closes.
In contrast, the multiplex command '''-O exit''' removes the control socket and immediately terminates all existing connections.
Again, the directive '''ControlPersist''' can also be set to timeout after a set period of disuse. The time interval there is written in a time format listed in [http://man.openbsd.org/sshd_config.5 sshd_config(5)] or else defaults to seconds if no units are given. It will cause the master connection to automatically close if it has no client connections for the specified time.
<syntaxhighlight lang="apache" line="1">
Host server1
HostName server1.example.org
ControlPath ~/.ssh/controlmasters/%C
ControlMaster yes
ControlPersist 2h
</syntaxhighlight>
The above example lets the control master timeout after 2 hours of inactivity. Care should be used with persistent control sockets. A user that can read and write to a control socket can establish new connections without further authentication.
===Multiplexing Options===
The values for configuring session multiplexing can be set either in the user-specific [http://man.openbsd.org/ssh_config.5 ssh_config(5)], or the global '''/etc/ssh/ssh_config''', or using parameters when running from the shell or a script. '''ControlMaster''' can be overridden in the run time arguments to re-use an existing master when '''ControlMaster''' is set to 'yes', by setting it explicitly to 'no':
<syntaxhighlight lang="shell-session">
$ ssh -o "ControlMaster=no" server.example.org
</syntaxhighlight>
'''ControlMaster''' accepts five different values: 'no', 'yes', 'ask', 'auto', and 'autoask'.
* 'no' is the default. New sessions will not try to connect to an established master session, but additional sessions can still multiplex by connecting explicitly to an existing socket.
* 'yes' creates a new master session each time, unless explicitly overridden. The new master session will listen for connections.
* 'ask' creates a new master each time, unless overridden, which listen for connections. If overridden, [http://man.openbsd.org/ssh-askpass.1 ssh-askpass(1)] will popup an message in X to ask the master session owner to approve or deny the request. If the request is denied, then the session being created falls back to being a regular, standalone session.
* 'auto' creates a master session automatically but if there is a master session already available, subsequent sessions are automatically multiplexed.
* 'autoask' automatically assumes that if a master session exists, that subsequent sessions should be multiplexed, but ask first before adding a session.
Refused connections are logged to the master session.
<syntaxhighlight lang="apache" line="1">
Host *
ControlMaster ask
</syntaxhighlight>
'''ControlPath''' can be a fixed string or include any of several pre-defined variables described in the TOKENS section of the [http://man.openbsd.org/ssh_config.5#TOKENS ssh_config(5)]. '''%L''' is for the first component of the local host name and '''%l''' for the full local host name. '''%h''' is the target host name and '''%n''' is the original target host name and '''%p''' is for the destination port on the remote server. '''%r''' is for the remote user name and '''%u''' for the user running [http://man.openbsd.org/ssh.1 ssh(1)]. Or they can be combined as '''%C''' which is a SHA1 hash produced from '''%l%h%p%r'''.
<syntaxhighlight lang="apache" line="1">
Host *
ControlMaster ask
ControlPath ~/.ssh/controlmasters/%C
</syntaxhighlight>
'''ControlPersist''' accepts 'yes', 'no' or a time interval. If a time interval is given, the default is in seconds. Units can extend the time to minutes, hours, days, weeks or a combination. If 'yes' the master connection stays in the background indefinitely.
<syntaxhighlight lang="apache" line="1">
Host *
ControlMaster ask
ControlPath ~/.ssh/controlmasters/%C
ControlPersist 10m
</syntaxhighlight>
====Port Forwarding After the Fact====
It is possible to request port forwarding without having to establish new connections. Here we forward port 8080 on the local host to port 80 on the remote host using '''-L''':
<syntaxhighlight lang="shell-session">
$ ssh -O forward -L 8080:localhost:80 -S ~/.ssh/controlmasters/fred@server.example.org:22 server.example.org
</syntaxhighlight>
The same can be done for remote forwarding, using '''-R'''. The escape sequence '''~C''' is not available for multiplexed sessions, so '''-O forward''' is the only way to add port forwarding on the fly.
Port forwarding can be canceled without having to close any sessions using '''-O cancel'''.
<syntaxhighlight lang="shell-session">
$ ssh -O cancel -L 8080:localhost:80 -S ~/.ssh/controlmasters/fred@server.example.org:22 server.example.org
</syntaxhighlight>
The exact same syntax used for forwarding is used for cancelling. However, there is no way currently to look up which ports are being forwarded and how they are forwarded.
==Additional Notes About Multiplexing==
Never use any publicly accessible directory for the control path sockets. Place those sockets in a directory somewhere else, one to which only your account has access. For example '''~/.ssh/socket/''' would be a much safer choice and '''/tmp/''' would be a bad choice.
In cases where it is useful to have a standing connection, it is always possible to combine multiplexing with other options, such as '''-f''' or '''-N''' to have the control master drop to the background upon connection and not load a shell.
In [http://man.openbsd.org/sshd_config.5 sshd_config(5)], the directive '''MaxSessions''' specifies the maximum number of open sessions permitted per network connection. This is used when multiplexing ssh sessions over a single TCP connection. Setting '''MaxSessions''' to 1 disables multiplexing and setting it to 0 disables login/shell/subsystem sessions completely. The default is 10. The '''MaxSessions''' directive can also be set under a '''Match''' conditional block so that different settings are available for different conditions.
===Errors Preventing Multiplexing===
The directory used for holding the control sockets must be on a file system that actually allows the creation of sockets. AFS is one example that doesn't, as are some implementations of HFS+. If an attempt is made at creating a socket on a file system that does not allow it, an error something like the following will occur:
<syntaxhighlight lang="shell-session">
$ ssh -M -S /home/fred/.ssh/mux 192.0.2.57
muxserver_listen: link mux listener /home/fred/.ssh/mux.vjfeIFFzHnhgHoOV => /home/fred/.ssh/mux: Operation not permitted
</syntaxhighlight>
A similar issue was seen when trying to make Unix domain sockets on OverlayFS filesystems, which are often used with Docker, prior to Linux 4.7 kernel<ref name="docker-overlayfs-bug">{{cite mailing list |url=https://lkml.org/lkml/2016/6/16/87 |title=[GIT PULL] overlayfs fixes for 4.7-rc3 |date=2016-06-16 |accessdate=2018-10-05 |mailing-list=LKML |last=Szeredi |first=Miklos |author=Miklos Szeredi}}</ref>.
If the file system cannot be reconfigured to allow sockets, then the only other option is to place the control path socket somewhere else on a file system that does support creation of sockets.
===An Error Preventing Querying Established Sockets===
An error can also happen in the '''ControlPath''' when not using the same destination for queries as when the master connection was created while using tokens in the path. Specifically, when tokens refer to any component(s) of the destination, then subsequent queries must also refer to the very same destination as was used when the socket was established so that the calculations have the same results. Using the following socket path as an example, the destination refers to a plain IPv4 address:
<syntaxhighlight lang="shell-session">
$ ssh -M -S /home/fred/.ssh/%C 192.0.2.57
</syntaxhighlight>
Then the following two queries produce different results because the remote host has a different value and '''%C''' is a hash from the local host name, the remote host, the remote port, the remote user name, plus any contents of '''ProxyJump''' if used. Thus changing the remote host name changes the hash and the result will point the client to a non-existent path.
<syntaxhighlight lang="shell-session">
$ ssh -S /home/fred/.ssh/%C -O check server.example.org
Control socket connect(/home/fred/.ssh/fd50d65e0fb612b0becdc439a9bb1963215e6000): No such file or directory
$ ssh -S /home/fred/.ssh/%C -O check 192.0.2.57
Master running (pid=37561)
</syntaxhighlight>
The mismatched destination and socket tokens produce an error there, as expected. However, when using the same exact same destination as in the '''ControlMaster''' in the query the desired result is produced, as expected.
===Observing Multiplexing===
It is possible to make some rough measurements to show the differences between multiplexed connections and one-off connections as shown in the tables and figures above.
====Measuring the Number of TCP Connections====
Tables 1 and 2 above use output from [http://linux.die.net/man/8/netstat netstat(8)] and [http://linux.die.net/man/1/awk awk(1)] to show the number of TCP connections corresponding to the number of SSH connections.
{|
|
<syntaxhighlight lang="bash">
#!/bin/sh
netstat -nt | awk 'NR == 2'
ssh -f server.example.org sleep 60
echo # one connection
netstat -nt | awk '$5 ~ /:22$/'
ssh -f server.example.org sleep 60
echo # two connections
netstat -nt | awk '$5 ~ /:22$/'
ssh -f server.example.org sleep 60
echo # three connections
netstat -nt | awk '$5 ~ /:22$/'
echo Table 1
</syntaxhighlight>
|
And
|
<syntaxhighlight lang="bash">
#!/bin/sh
netstat -nt | awk 'NR == 2'
ssh -f -M -S ~/.ssh/demo server.example.org sleep 60
echo # one connection
netstat -nt | awk '$5 ~ /:22$/'
ssh -f -S ~/.ssh/demo server.example.org sleep 60 &
echo # two connections
netstat -nt | awk '$5 ~ /:22$/'
ssh -f -S ~/.ssh/demo server.example.org sleep 60 &
echo # three connections
netstat -nt | awk '$5 ~ /:22$/'
echo Table 2
</syntaxhighlight>
|}
The [http://linux.die.net/man/1/sleep sleep(1)] period can be increased if more delay is needed. While the connections are active, it is also possible to look on the server using [http://linux.die.net/man/1/ps ps(1)], such as with <code>ps uwx</code>, to see the processes as a means of verifying that multiple connections are indeed being made.
====Measuring Response Time====
Measuring the response time requires setting up keys with an agent first so that the agent handles the authentication and eliminates authentication as a source of delay. See the section on keys, if needed. All of the response time tests below will depend on using keys for authentication.
For a one-off connection, just add [http://linux.die.net/man/1/time time(1)] to check how long access takes.
<syntaxhighlight lang="bash">$ time ssh -i ~/.ssh/rsakey server.example.org true</syntaxhighlight>
For a multiplexed connection, a master control session must be established. Then subsequent connections will show an increase in speed.
<syntaxhighlight lang="shell-session">
$ ssh -f -M -S ~/.ssh/demo -i ~/.ssh/rsakey server.example.org
$ time ssh -S ~/.ssh/demo -i ~/.ssh/rsakey server.example.org true
$ time ssh -S ~/.ssh/demo -i ~/.ssh/rsakey server.example.org true
</syntaxhighlight>
These response times are approximate but the difference is nonetheless large enough to be seen between one-off connections and multiplexed connections.
====Keeping sessions open====
Probably you also want to keep your sessions open when inactive. You can configure it using '''ServerAliveInterval''' and '''ServerAliveCountMax''' options, see [http://man.openbsd.org/ssh_config.5 ssh_config(5)] for the details.
==Multiplexing HTTPS and SSH Using sslh==
A different kind of multiplexing is when more than one protocol is carried over the same port. [https://www.rutschle.net/tech/sslh/README.html sslh] does just that with SSL and SSH. It figures out what kind of connection is coming in and forwards it to the appropriate service. Thus it allows a server to receive both HTTPS and SSH over the same port, making it possible to connect to the server from behind restrictive firewalls in some cases. It does not hide SSH. Even a quick scan for SSH on the listening port, say with [[OpenSSH/Third_Party_Utilities#scanssh|scanssh(1)]], will show that it is there. Please note that this method only works with simpler packet filters, such as PF or nftables(8) and its front-ends, firewalld and UFW, which filter based on the destination port and won't fool protocol analysis and application layer filters, such as Zorp, which filter based on the actual protocol used. Here's how [http://linux.die.net/man/8/sslh sslh(8)] can be installed in four steps:
* First install your web server and configure it to accept HTTPS requests. Be sure that it listens for HTTPS on the localhost only. It can help in that regard if it is on a non-standard port, say 2443, instead of 443.
* Next, set your SSH server to accept connections on the localhost for port 22. It really could be any port, but port 22 is the standard for SSH.
* Next, create an unprivileged user to run [http://linux.die.net/man/8/sslh sslh(8)]. The example below has the user 'sslh' for the unprivileged account.
* Lastly, install and launch [http://linux.die.net/man/8/sslh sslh(8)] so that it listens on port 443 and forwards HTTPS and SSH to the appropriate ports on the local host. Substitute the external IP number for your machine. The actual name of the executable and path may vary from system to system:
<syntaxhighlight lang="shell-session">
$ /usr/local/sbin/sslh-fork -u sslh -p xx.yy.zz.aa:443 --tls 127.0.0.1:2443 --ssh 127.0.0.1:22
</syntaxhighlight>
Another option is to use a configuration file with [http://linux.die.net/man/8/sslh sslh(8)] and not pass any parameters at runtime. There should be at least one sample configuration file, '''basic.cfg''' or '''example.cfg''', included in the package when it is installed. The finished configuration file should look something like this:
<syntaxhighlight lang="apache">
user: "sslh";
listen: ( { host: "xx.yy.zz.aa"; port: "443" } );
on-timeout: "ssl";
protocols:
(
{ name: "ssh"; host: "localhost"; port: "22"; probe: "builtin"; },
{ name: "ssl"; host: "localhost"; port: "2443"; probe: "builtin"; }
);
</syntaxhighlight>
Mind the quotes, commas, and semicolons.
If an old version of SSH is used in conjunction with now-deprecated TCP Wrappers, as described in [http://linux.die.net/man/5/hosts_access hosts_access(5)], then the option '''service:''' works to provide the name of the service that they need.
<syntaxhighlight lang="apache"> { name: "ssh"; service: "ssh"; host: "localhost"; port: "22"; probe: "builtin"; },</syntaxhighlight>
If TCP Wrappers are not used, which is most likely the case, then '''service:''' is not needed.
Runtime parameters override any configuration file settings that may be in place. [http://linux.die.net/man/8/sslh sslh(8)] supports the protocols HTTP, SSL, SSH, OpenVPN, tinc, and XMPP out of the box. But actually any protocol that can be identified by regular expression pattern matching can be used. There are two variants of [https://www.rutschle.net/tech/sslh/README.html sslh], a forked version (sslh or sslh-fork) and a single-threaded version (sslh-select). See the project web site for more details: https://www.rutschle.net/tech/sslh/README.html
<noinclude>
== References ==
{{reflist}}
{{OpenSSH/TOC|mini}}
</noinclude>
{{BookCat}}
{{status|100%}}
qakkd7ly9fttom0agw5xwvzdwwrdhjr
Wikibooks:Autoreviewed users
4
265987
4676296
4653427
2026-10-15T19:01:18Z
Codename Noreste
3441010
Now historical.
4676296
wikitext
text/x-wiki
[[File:Wikibooks Autopatrolled.svg|150px|right]]
{{historical project page}}
{{shortcut|WB:AUTOREVIEW}}
'''Autoreviewed users''' are a group of users that solely have their own edits automatically marked as reviewed (<code>autoreview</code>). Unlike [[Wikibooks:Reviewers|reviewers]], autoreviewed users do not have the technical ability to [[WB:REVIEW|review]] edits or pages.
Any Wikibooks [[Wikibooks:Administrators|administrator]] may grant this permission (at their discretion) to users who make a lot of good edits that do not require reviewing, or it may be requested at [[Wikibooks:Requests for permissions]].
For autoreviewed users who later receive the reviewer permission, the autoreviewed user permission may be taken away. However, note that you won't lose anything, as the reviewer permission is a subset of the autoreviewed user permission.
There are currently [[Special:ListUsers/autoreview|'''{{NUMINGROUP:autoreview}}''' autoreviewed users]] on the English Wikibooks.
{{user groups}}
[[Category:User groups|A]]
ntnfjsjp6kr2qinhfhs4xeaxiooo7xf
OpenSSH/Cookbook/Tunnels
0
281762
4676265
4675738
2026-10-15T13:20:08Z
Larsnooden
430753
Adding section on Dynamically Allocating the End Port in a Reverse Tunnel
4676265
wikitext
text/x-wiki
<noinclude>{{simple chapter navigation|previous=The Client Configuration File|next=Automated Backup}}</noinclude>
In tunneling, or port forwarding, a local port is connected to a port on a remote host or vice versa. So connections to the port on one machine are in effect connections to a port on the other machine.
The [http://man.openbsd.org/ssh.1 ssh(1)] options '''-f''' (go to background), '''-N''' (do not execute a remote program) and '''-T''' (disable pseudo-tty allocation) can be useful for connections that are used only for creation of tunnels.
<noinclude>__TOC__</noinclude>
==Tunneling==
[[File:Wikibook-diagram-SSH-forwarding-basic.png|thumb|Basic SSH Forwarding]]
In regular port forwarding, connections to a local port are forwarded to a port on a remote machine. This is a way of securing an insecure protocol or of making a remote service appear as local. Here we forwarded VNC in two steps. First make the tunnel:
<syntaxhighlight lang="shell-session">
$ ssh -L 5901:localhost:5901 -l fred desktop.example.org
</syntaxhighlight>
In that way connections on the local machine made to the forwarded port will in effect be connecting to the remote machine.
Multiple tunnels can be specified at the same time. The tunnels can be of any kind, not just regular forwarding. See the next section below for reverse tunnels. For dynamic forwarding see the section [[OpenSSH/Cookbook/Proxies_and_Jump_Hosts|Proxies and Jump Hosts]].
<syntaxhighlight lang="shell-session">
$ ssh -L 5901:localhost:5901 \
-L 5432:localhost:5432 \
-l fred desktop.example.org
</syntaxhighlight>
If a connection is only used to create a tunnel, then it can be told not to execute any remote programs ('''-N'''), making it a non-interactive session, and also to drop to the background ('''-f''').
<syntaxhighlight lang="shell-session">
$ ssh -fN -L 3128:localhost:3128 -l fred server.example.org
</syntaxhighlight>
Note that '''-N''' will work even if the '''authorized_keys''' forces a program using the '''command="..."''' option. So a connection using '''-N''' will stay open instead of running a program and then exiting.
The three connections above could be saved in the SSH client's configuration file, '''~/.ssh/config''' and even given shortcuts.
<syntaxhighlight lang="apache" line="1">
Host desktop desktop.example.org
HostName desktop.example.org
User fred
LocalForward 5901 localhost:5901
Host postgres
HostName desktop.example.org
User fred
LocalForward 5901 localhost:5901
LocalForward 5432 localhost:5432
Host server server.example.org
HostName server.example.org
User fred
ExitOnForwardFailure no
LocalForward 3128 localhost:3128
Host *
ExitOnForwardFailure yes
</syntaxhighlight>
With those settings, the tunnels listed are added automatically when connecting to ''desktop'', ''desktop.example.org'', ''postgres'', ''server'', or ''server.example.org''. The catchall configuration at the end applies to any of the above hosts which have not already set '''ExitOnForwardFailure''' to 'no' and the client will refuse to connect if a tunnel cannot be made. The first obtained value for any given configuration directive will be used, but the file's contents can be overridden with run-time options passed on the command line.
===Tunneling Via A Single Intermediate Host===
Tunneling can go via one intermediate host to reach a second host, and the latter does not need to be on a publicly accessible network. However, the target port on the second remote machine does have to be accessible on the same network as the first. Here, ''192.168.0.101'' and ''bastion.example.org'' must be on the same network and, in addition, ''bastion.example.org'' has to be directly accessible to the client machine running '''ssh(1)'''. So, port 80 on ''192.168.0.101'' has to be available to the machine ''bastion.example.org''.
<syntaxhighlight lang="shell-session">
$ ssh -fN -L 1880:192.168.0.101:80 -l fred bastion.example.org
</syntaxhighlight>
Thus, once the tunnel is made, to connect to port 80 on ''192.168.2.101'' via the host ''bastion.example.org'', connect to port 1880 on ''localhost''. This way works for one or two hosts. It is also possible to chain multiple hosts, using different methods.
====Securing a Hop, Tunneling Via One Or More Intermediate Hosts====
Here, the idea is to limit the ability of a group of users to the bare minimum needed to pass through a jump host yet still be able to forward ports onward to other machines. If the account is sufficiently locked down then the bastion can only be used for forwarding and not shell access, scripts, or even SFTP. The following settings on the bastion host in [http://man.openbsd.org/sshd_config.5 sshd_config(5)] prevent either shell access or SFTP but still allow port forwarding.
<syntaxhighlight lang="apache" line="1">
Match Group tunnelers
ForceCommand /bin/false
PasswordAuthentication no
ChrootDirectory %h
PermitTTY no
X11Forwarding no
AllowTcpForwarding yes
PermitTunnel no
Banner none
</syntaxhighlight>
Note that their home directories, but not the files within them, must be owned by root and writable by only root because of the '''ChrootDirectory''' configuration directive there in [http://man.openbsd.org/sshd_config.5 sshd_config(5)]. Also, because of the '''PasswordAuthentication''' configuration directive keys will have to be set up in the home directory in '''~/.ssh/authorized_keys''', if an alternate location is not already configured.
<syntaxhighlight lang="shell-session">
$ ssh -N -L 9980:localhost:80 -J fred@bastion.example.org fred@192.168.79.124
</syntaxhighlight>
In that way port 9980 on the client is directed via ''bastion.example.org'' through to port 80 on ''192.168.79.124''.
In cases where the bastion must have a reverse tunnel from the inner host in order to reach it, then the same method works but with the prerequisite of a reverse tunnel from the inner host to the bastion first.
For more about passing through intermediate computers, see the Cookbook section on [[OpenSSH/Cookbook/Proxies_and_Jump_Hosts|Proxies and Jump Hosts]].
===Finding The Process ID (PID) Of A Tunnel Which Is In The Background===
When a tunneled connection is sent to the background execution using the '''-f''' option for the client, there is not currently an automatic way to find the process ID (PID) of the task sent to the background. Background processes are often used for port forwarding or reverse port forwarding. Here is an example of port forwarding, also called tunneling. The connection is made and then the client goes away, leaving the tunnel available in the background, connecting port 2194 on the local host to port 194 of the remote system's local host.
<syntaxhighlight lang="shell-session">
$ ssh -Nf -L 2194:localhost:194 fred@203.0.113.214
</syntaxhighlight>
The special '''$!''' variable remains empty, even if '''$?''' reports success or failure of the action. The reason is that the shell's job control did not put the client into the background. Instead the client runs in the foreground for a moment and then exits normally, after leaving a different process to run in the background via a fork. The process ID of the original client vanishes since that client is gone.
Finding the process ID usually takes at least two steps. Some of the ways to retroactively identify the process involve trying [http://man.openbsd.org/ps.1 ps(1)] and rummaging through the output for all that account's processes, but that is unnecessary effort. If the background SSH client is the most recent one, then [http://man.openbsd.org/pgrep.1 pgrep(1)] can be used, or else the output needs to be comma delimited and fed into [http://man.openbsd.org/ps.1 ps(1)] via [http://man.openbsd.org/xargs.1 xargs(1)] or process substitution.
<syntaxhighlight lang="shell-session">
$ ps uw | less
$ pgrep -n -x ssh
$ pgrep -d, -x ssh | xargs ps -p
$ ps -p $(pgrep -d, -x ssh)
</syntaxhighlight>
Some variations on the above might be needed depending on operating system if the '''-d''' option is not supported.
<syntaxhighlight lang="shell-session">
$ pgrep -x ssh | xargs -n 1 ps -o user,pid,ppid,args -p | awk 'NR==1 || $3==1'
USER PID PPID COMMAND
fred 97778 1 ssh -fN -L 8008:localhost:80 fred@203.0.113.8
fred 14026 1 ssh -fN -L 8183:localhost:80 fred@203.0.113.183
fred 79522 1 ssh -fN -L 8228:localhost:80 fred@203.0.113.228
fred 49773 1 ssh -fN -L 8205:localhost:80 203.0.113.205
</syntaxhighlight>
Either way, note that all the connections running in the background have a Parent Process ID (PPID) of 1, the process control initialization system for the operating system.
Being aware of this shortcoming, a proactive approach can be used with the '''ControlMaster''' and '''ControlPath''' configuration directives in order to leave a socket to read to get the background task's process ID.
<syntaxhighlight lang="shell-session">
$ ssh -M -S ~/.ssh/sockets/pid.%C -fN -L 5901:localhost:5901 fred@203.0.113.122
$ ssh -S ~/.ssh/sockets/pid.%C -O check 203.0.113.122
</syntaxhighlight>
The '''-M''' option causes the client to go into Master mode for multiplexing using the socket designated by the '''-S''' option. Then, after '''-f''' forks the client into the background, The control command ''check'' will then use the socket to check that the master process is running and report the Process ID.
It is a good idea for the socket to be in an isolated directory not readable or writable by other accounts. Aside from the complexity, a noticeable down side is that it can be possible for the socket to be reused for additional connections. See the Cookbook section on [[OpenSSH/Cookbook/Multiplexing|Multiplexing]] for more about the risks and additional uses.
==Reverse Tunneling==
[[File:Wikibook-diagram-SSH-forwarding-reverse-basic.png|thumb|Basic SSH Reverse Forwarding]]
A reverse tunnel forwards connections in the opposite direction of a regular tunnel, that is to say the opposite direction from that which the SSH session is initiated. With remote forwarding as it is also called, an SSH session begins from the local host to a remote host while a port is forwarded from the remote host to the local host. There are two stages in using reverse tunneling, see the diagram: first, connect from endpoint ''198.51.100.56'' to endpoint ''203.0.113.8'' using SSH with remote forwarding enabled; second, connect other systems to the designated port on endpoint ''203.0.113.8'' and that port is then forwarded to endpoint ''198.51.100.56''.
So while the originating system initiated the SSH connection to the remote system, the connections to the designated port on ''203.0.113.8'' are sent over to ''198.51.100.56'' over the reverse tunnel. Once the SSH connection is made, the reverse tunnel can be used from the remote system the same as a regular tunnel, even though the originating system initiated the SSH connection.
Remote forwarding is a method which can be used to forward SSH over SSH in order to work on an otherwise inaccessible system, such as an always-on SBC behind a home router. First, open an SSH session from the inaccessible system to another which is accessible including a designated reverse tunnel. In this example, while the SSH connection is from a local system (endpoint A) to a remote system (endpoint B), that connection contains a reverse tunnel from port 2022 on that remote system (endpoint B) to port 22 over on the local system:
<syntaxhighlight lang="shell-session">
$ ssh -fN -R 2022:localhost:22 -l fred server.example.org
</syntaxhighlight>
Lastly, using the example above, a connection is made on the remote machine, ''server.example.org'', to the reverse tunnel connection on port 2022. Thus, even though the connection is made to port 2022 on ''localhost'' on ''server.example.org'', the packets end up over on port 22 on the system which initiated the SSH initial connection carrying the reverse tunnel.
<syntaxhighlight lang="shell-session">
$ ssh -p 2022 -l fred localhost
</syntaxhighlight>
Thus that example allows SSH access to an otherwise inaccessible system via SSH. SSH goes out, makes a reverse tunnel, then the second system can connect at will to the first via SSH as long as the tunnel persists. If keys and a loop are used to generate the SSH connection with the remote forwarding then the reverse tunnel can be maintained automatically.
The next example makes VNC available over SSH from an otherwise inaccessible system via a second system, ''server.example.org''. Starting from the system with a running VNC server, reverse forward the port for the first VNC display locally to the third VNC display over on ''server.example.org'':
<syntaxhighlight lang="shell-session">
$ ssh -fNT -R 5903:localhost:5901 -l fred server.example.org
</syntaxhighlight>
Then on the system ''server.example.org'', people can connect to that system's ''localhost'' address on its third VNC display and be patched through to the originating system:
<syntaxhighlight lang="shell-session">
$ xvncviewer :3
</syntaxhighlight>
That also is an example of how the forwarded ports don't have to be the same.
Remote forwarding can be included in the SSH client's configuration file using the '''RemoteForward''' directive. See the next subsection for that.
A common use-case for reverse tunneling is when you have to access a system or service which is behind either NAT or a firewall or both and thus incoming SSH connections are blocked, but you have direct access to a second system outside the firewall which can accept incoming connections. In such cases it is easy to make a reverse tunnel from the internal system behind the firewall to the second system on the outside. Once the SSH connection has made the reverse tunnel, to connect to the internal system from outside, other systems can connect to the forwarded port on the remote system. The remote system on the outside then acts as a relay server to forward connections to the initiating system on the inside.
===Configuring Remote Forwarding Using The Client Configuration File===
The '''RemoteForward''' client configuration directive can be used in [http://man.openbsd.org/ssh_config ssh_config(5)] to establish a reverse tunnel from another system. The '''ForkAfterAuthentication''' would be '''-f''' and '''SessionType''' would be '''-N''' as run time arguments and, of course, optional in this example which is the same as the first example in the subsection above:
<syntaxhighlight lang="apache" line="1">
Host server server.example.org
User fred
HostName server.example.org
ForkAfterAuthentication yes
SessionType none
RemoteForward 2022 localhost:22
</syntaxhighlight>
With that in place over on the other system, one can establish a reverse tunnel from ''server'' by simply connecting to it by entering <code>ssh server</code>. Then over on ''server.example.org'', connecting to ''localhost'' on port 2022 will carry through back to the original system on port 22.
<syntaxhighlight lang="apache" line="1">
Host server server.example.org
User fred
HostName server.example.org
ForkAfterAuthentication yes
SessionType none
RequestTTY no
RemoteForward 5903 localhost:5901
</syntaxhighlight>
Likewise that duplicates the second example from the subsection above but in the client configuration file instead of using run time arguments. More about that is covered in the chapter on using [[OpenSSH/Cookbook/The_Client_Configuration_File|The Client Configuration File]].
===Configuring Remote Forwarding Using The Client Configuration File===
The '''RemoteForward''' client configuration directive can be used in [http://man.openbsd.org/ssh_config ssh_config(5)] to establish a reverse tunnel from another system. The '''ForkAfterAuthentication''' would be '''-f''' and '''SessionType''' would be '''-N''' as run time arguments and, of course, optional in this example which is the same as the first example in the subsection above:
<syntaxhighlight lang="apache" line="1">
Host server server.example.org
User fred
HostName server.example.org
ForkAfterAuthentication yes
SessionType none
RemoteForward 2022 localhost:22
</syntaxhighlight>
With that in place over on the other system, one can establish a reverse tunnel from ''server'' by simply connecting to it by entering <code>ssh server</code>. Then over on ''server.example.org'', connecting to ''localhost'' on port 2022 will carry through back to the original system on port 22.
<syntaxhighlight lang="apache" line="1">
Host server server.example.org
User fred
HostName server.example.org
ForkAfterAuthentication yes
SessionType none
RequestTTY no
RemoteForward 5903 localhost:5901
</syntaxhighlight>
Likewise that duplicates the second example from the subsection above but in the client configuration file instead of using run time arguments. More about that is covered in the chapter on using [[OpenSSH/Cookbook/The_Client_Configuration_File|The Client Configuration File]].
====Dynamically Allocating the End Port in a Reverse Tunnel====
The following will forward a randomly available high port on the remote system to port 80 on the local system which is launching the client.
<syntaxhighlight lang="shell-session">
$ ssh -R 0:localhost:80 fred@server.example.org
Allocated port 15249 for remote forward to localhost:80
Last login: Thu Oct 15 01:37:18 2026 from 10.11.9.112
...
</syntaxhighlight>
Below, that random high port is captured into an environment variable using command substitution and then printed. The SSH session stays in the background until terminated.
<syntaxhighlight lang="shell-session">
$ port=$(ssh -o ExitOnForwardFailure=yes -f -N -R 0:localhost:80 \
fred@server.example.org 2>&1 \
| sed -n -r -e 's/.* ([0-9]+) .*/\1/p')
$ echo "$port"
37487
</syntaxhighlight>
Setting '''ExitOnForwardFailure''' to 'yes' is necessary to get the client to send the port information as output to '''stderr'''. The redirection of file descriptor 2 ('''stderr''') to file descriptor 1 ('''stdout''') allows <code>sed</code> to isolate just the port number. The command substitution captures that result and puts it into an environment variable.
The full set of options can be put into [http://man.openbsd.org/ssh_config ssh_config(5)] for permanence and shorten the final command.
<syntaxhighlight lang="apache" line="1">
Host server server.example.org
User fred
HostName server.example.org
ForkAfterAuthentication yes
SessionType none
RequestTTY no
RemoteForward 0 localhost:80
ExitOnForwardFailure yes
</syntaxhighlight>
====Dynamically Allocating the End Port in a Reverse Tunnel Using Multiplexing====
Choosing a randomly available high port on the remote system can also be done when multiplexing sessions. First designate a '''ControlPath''' using the '''-S''' option while establishing a '''ControlMaster''' using the '''-M''' option. The options '''-N''' and '''-f''' are not needed but can be useful.
<syntaxhighlight lang="shell-session">
$ ssh -N -M -S ~/.ssh/%C fred@server.example.org
</syntaxhighlight>
Subsequent queries and multiplexing commands must point to the same destination when tokens, such as '''%C''' here, are being used. See the section on [[OpenSSH/Cookbook/Multiplexing | Multiplexing]] for more.
Once the '''ControlMaster''' is established, set up a reverse tunnel but assign 0 for the remote port. The SSH client will pick an available port at random and return its number. Process substitution is useful here for capturing that output to an environment variable.
<syntaxhighlight lang="shell-session">
$ port="$(ssh -S ~/.ssh/%C -O forward -R 0:localhost:22 fred@server.example.org)"
$ echo $port
41401
$ ssh -S ~/.ssh/%C -O check fred@server.example.org
</syntaxhighlight>
Then it is possible to close the whole SSH session using '''exit'''.
<syntaxhighlight lang="shell-session">
$ ssh -S ~/.ssh/%C -O exit fred@server.example.org
</syntaxhighlight>
Or use '''cancel''' to end just the reverse tunnel without ending the whole SSH session.
<syntaxhighlight lang="shell-session">
$ ssh -S ~/.ssh/%C -O cancel -R 0:localhost:22 fred@server.example.org
</syntaxhighlight>
==Adding or Removing Tunnels within an Established Connection==
It is possible to add or remove tunnels, reverse tunnels, and SOCKS proxies to or from an existing connection using escape sequences. The default escape character is the tilde (~) and the full range of options is described in the manual page for [http://man.openbsd.org/ssh.1 ssh(1)]. Escape sequences only work if they are the first characters entered on a line and followed by a return. When adding or removing a tunnel to or from an existing connection, '''~C''', the command line is used.
To add a tunnel in an active SSH session, use the escape sequence to open a command line in SSH and then enter the parameters for the tunnel:
<pre>
~C
L 2022:localhost:22
</pre>
To remove a tunnel from an active SSH session is almost the same. Instead of -L, -R, or -D we have -KL, -KR, and -KD plus the port number. Use the escape sequence to open a command line in SSH and then enter the parameters for removing the tunnel.
<pre>
~C
KL2022
</pre>
===Adding or Removing Tunnels within a Multiplexed Connection===
There is an additional option for forwarding when multiplexing. More than one SSH connection can be multiplexed over a single TCP connection. Control commands can be passed to the master process to add or drop port forwarding to the master process.
First a master connection is made and a socket path assigned.
<syntaxhighlight lang="shell-session">
$ ssh -S '/home/fred/.ssh/%h:%p' -M server.example.org
</syntaxhighlight>
Then using the socket path, it is possible to add port forwarding.
<syntaxhighlight lang="shell-session">
$ ssh -O forward -L 2022:localhost:22 -S '/home/fred/.ssh/%h:%p' fred@server.example.org
</syntaxhighlight>
Since OpenSSH 6.0 it is possible to cancel specific port forwarding using a control command.
<syntaxhighlight lang="shell-session">
$ ssh -S "/home/fred/.ssh/%h:%p" -O cancel -L 2022:localhost:22 fred@server.example.org
</syntaxhighlight>
For more about multiplexing, see the Cookbook section on [[OpenSSH/Cookbook/Multiplexing|Multiplexing]].
==Restricting Tunnels to Specific Ports==
By default, port forwarding will allow forwarding to any port if it is allowed at all. The way to restrict which ports a user can use in forwarding is to apply the '''PermitOpen''' option on the server side either in the server's configuration or inside the user's public key in '''authorized_keys'''. For example, with this setting in [http://man.openbsd.org/sshd_config.5 sshd_config(5)] all users can forward only to port 7654 on the server, if they try forwarding:
<syntaxhighlight lang="apache" line="1">
PermitOpen localhost:7654
</syntaxhighlight>
Multiple ports may be specified on the same line if separated by whitespace.
<syntaxhighlight lang="apache" line="1">
PermitOpen localhost:7654 localhost:3306
</syntaxhighlight>
If the client tries to forward to a disallowed port, there will be a warning message that includes the text "open failed: administratively prohibited: open failed" while the connection otherwise continues as normal. However, even if the client has '''ExitOnForwardFailure''' in its configuration a connection will still succeed, despite the warning message.
However, if shell access is available, it is possible to run other port forwarders, so without further restrictions, '''PermitOpen''' is more of a reminder or recommendation than a restriction. But for many cases, such a reminder might be enough.
For reverse tunnels, the '''PermitListen''' option is available instead. It determines which port on the remote system is available. So the following, for example, allows <code>ssh -R 2022:localhost:''xxxx''</code>, where ''xxxx'' can be any available port number at the origin of the reverse tunnel, but only 2022 on the far end of the tunnel.
<syntaxhighlight lang="apache" line="1">
PermitListen localhost:2022
</syntaxhighlight>
The '''PermitOpen''' or '''PermitListen''' options can be used as part of one or more '''Match''' blocks if forwarding options need to vary depending on various combinations of user, group, client address or network, server address or network, and/or the listening port used by [http://man.openbsd.org/sshd.8 sshd(8)]. If using the '''Match''' criteria to selectively apply rules for port forwarding, it is also possible to prevent the account from getting an interactive shell by setting '''PermitTTY''' to '''no'''. That will prevent the allocation of a pseudo-terminal (PTY) on the server thus prevent shell access, but allow other programs to still be run unless an appropriate forced command is specified in addition.
<syntaxhighlight lang="apache" line="1">
Match Group mariadbusers
PermitOpen localhost:3306
PermitTTY no
ForceCommand /usr/bin/true
</syntaxhighlight>
With that stanza in [http://man.openbsd.org/sshd_config.5 sshd_config(5)] it is only possible to connect by adding the '''-N''' option to avoid executing a remote command.
<syntaxhighlight lang="shell-session">
$ ssh -N -L 3306:localhost:3306 server.example.org
</syntaxhighlight>
The '''-N''' option can be used alone or with the '''-f''' option which drops the client to the background once the connection is established.
Without the '''ForceCommand''' option in a '''Match''' block in the server configuration, if an attempt is made to get a PTY by a client that is blocked from getting one, the warning "PTY allocation request failed on channel ''n''" will show up on the client, with ''n'' being the channel number, but otherwise the connection will succeed without a remote shell and the port(s) will still be forwarded. Various programs, including shells, can still be specified by the client, they just won't get a PTY. So to really prevent access to the system other than forwarding, a forced command is needed. The tool '''true(1)''' comes in handy for that. Note that '''true(1)''' might be in a different location on different systems.
===Limiting Port Forwarding Requests Using Keys Only===
The following '''authorized_keys''' line shows the '''PermitOpen''' option prepended to a key in order to limit a user connecting with that particular key to forwarding to just port 8765:
<pre>
permitopen="localhost:8765" ssh-ed25519 AAAAC3NzaC1lZDI1NT...
</pre>
Multiple '''PermitOpen''' options may be applied to the same public key if they are separated by commas and thus a key can allow multiple ports.
By default, shell access is allowed. With shell access it is still possible to run other port forwarders. The '''no-pty''' option inside the key can facilitate making a key that only allows forwarding and not an interactive shell if combined with an appropriate forced command using the '''command''' option. Here is an example of such a key as it would be listed in '''authorized_keys''':
<pre>
no-pty,permitopen="localhost:9876",command="/usr/bin/true" ssh-ed25519 AAAAC3NzaC1lZDI1NT...
</pre>
The '''no-pty''' option blocks interactive shell. The client will still connect to the remote server and will allow forwarding but will respond with an error including the message "PTY allocation request failed on channel ''n''". But as mentioned in the previous subsection, there are still a lot of ways around that and adding the '''command''' option hinders them.
This method is awkward to lock down. If the account has write access in any way, directly or indirectly, to the '''authorized_keys''' file, then it is possible for the user to add a new key or overwrite the existing key(s) with more permissive options. In order to prevent that, the server has to be configured to look for the file in a location outside of the user's reach. See the section on [[OpenSSH/Cookbook/Public_Key_Authentication | Public Key Authentication]] for details on that. The methods described above in the previous subsection using [http://man.openbsd.org/sshd_config.5 sshd_config(5)] might be more practical in many cases.
<noinclude>{{OpenSSH/TOC|mini}}</noinclude>
{{BookCat}}
{{status|100%}}
1uvqjh7b3c0wke3ieonejmsr5cxr4na
4676266
4676265
2026-10-15T13:50:28Z
Larsnooden
430753
separate run-time options
4676266
wikitext
text/x-wiki
<noinclude>{{simple chapter navigation|previous=The Client Configuration File|next=Automated Backup}}</noinclude>
In tunneling, or port forwarding, a local port is connected to a port on a remote host or vice versa. So connections to the port on one machine are in effect connections to a port on the other machine.
The [http://man.openbsd.org/ssh.1 ssh(1)] options '''-f''' (go to background), '''-N''' (do not execute a remote program) and '''-T''' (disable pseudo-tty allocation) can be useful for connections that are used only for creation of tunnels.
<noinclude>__TOC__</noinclude>
==Tunneling==
[[File:Wikibook-diagram-SSH-forwarding-basic.png|thumb|Basic SSH Forwarding]]
In regular port forwarding, connections to a local port are forwarded to a port on a remote machine. This is a way of securing an insecure protocol or of making a remote service appear as local. Here we forwarded VNC in two steps. First make the tunnel:
<syntaxhighlight lang="shell-session">
$ ssh -L 5901:localhost:5901 -l fred desktop.example.org
</syntaxhighlight>
In that way connections on the local machine made to the forwarded port will in effect be connecting to the remote machine.
Multiple tunnels can be specified at the same time. The tunnels can be of any kind, not just regular forwarding. See the next section below for reverse tunnels. For dynamic forwarding see the section [[OpenSSH/Cookbook/Proxies_and_Jump_Hosts|Proxies and Jump Hosts]].
<syntaxhighlight lang="shell-session">
$ ssh -L 5901:localhost:5901 \
-L 5432:localhost:5432 \
-l fred desktop.example.org
</syntaxhighlight>
If a connection is only used to create a tunnel, then it can be told not to execute any remote programs ('''-N'''), making it a non-interactive session, and also to drop to the background ('''-f''').
<syntaxhighlight lang="shell-session">
$ ssh -fN -L 3128:localhost:3128 -l fred server.example.org
</syntaxhighlight>
Note that '''-N''' will work even if the '''authorized_keys''' forces a program using the '''command="..."''' option. So a connection using '''-N''' will stay open instead of running a program and then exiting.
The three connections above could be saved in the SSH client's configuration file, '''~/.ssh/config''' and even given shortcuts.
<syntaxhighlight lang="apache" line="1">
Host desktop desktop.example.org
HostName desktop.example.org
User fred
LocalForward 5901 localhost:5901
Host postgres
HostName desktop.example.org
User fred
LocalForward 5901 localhost:5901
LocalForward 5432 localhost:5432
Host server server.example.org
HostName server.example.org
User fred
ExitOnForwardFailure no
LocalForward 3128 localhost:3128
Host *
ExitOnForwardFailure yes
</syntaxhighlight>
With those settings, the tunnels listed are added automatically when connecting to ''desktop'', ''desktop.example.org'', ''postgres'', ''server'', or ''server.example.org''. The catchall configuration at the end applies to any of the above hosts which have not already set '''ExitOnForwardFailure''' to 'no' and the client will refuse to connect if a tunnel cannot be made. The first obtained value for any given configuration directive will be used, but the file's contents can be overridden with run-time options passed on the command line.
===Tunneling Via A Single Intermediate Host===
Tunneling can go via one intermediate host to reach a second host, and the latter does not need to be on a publicly accessible network. However, the target port on the second remote machine does have to be accessible on the same network as the first. Here, ''192.168.0.101'' and ''bastion.example.org'' must be on the same network and, in addition, ''bastion.example.org'' has to be directly accessible to the client machine running '''ssh(1)'''. So, port 80 on ''192.168.0.101'' has to be available to the machine ''bastion.example.org''.
<syntaxhighlight lang="shell-session">
$ ssh -fN -L 1880:192.168.0.101:80 -l fred bastion.example.org
</syntaxhighlight>
Thus, once the tunnel is made, to connect to port 80 on ''192.168.2.101'' via the host ''bastion.example.org'', connect to port 1880 on ''localhost''. This way works for one or two hosts. It is also possible to chain multiple hosts, using different methods.
====Securing a Hop, Tunneling Via One Or More Intermediate Hosts====
Here, the idea is to limit the ability of a group of users to the bare minimum needed to pass through a jump host yet still be able to forward ports onward to other machines. If the account is sufficiently locked down then the bastion can only be used for forwarding and not shell access, scripts, or even SFTP. The following settings on the bastion host in [http://man.openbsd.org/sshd_config.5 sshd_config(5)] prevent either shell access or SFTP but still allow port forwarding.
<syntaxhighlight lang="apache" line="1">
Match Group tunnelers
ForceCommand /bin/false
PasswordAuthentication no
ChrootDirectory %h
PermitTTY no
X11Forwarding no
AllowTcpForwarding yes
PermitTunnel no
Banner none
</syntaxhighlight>
Note that their home directories, but not the files within them, must be owned by root and writable by only root because of the '''ChrootDirectory''' configuration directive there in [http://man.openbsd.org/sshd_config.5 sshd_config(5)]. Also, because of the '''PasswordAuthentication''' configuration directive keys will have to be set up in the home directory in '''~/.ssh/authorized_keys''', if an alternate location is not already configured.
<syntaxhighlight lang="shell-session">
$ ssh -N -L 9980:localhost:80 -J fred@bastion.example.org fred@192.168.79.124
</syntaxhighlight>
In that way port 9980 on the client is directed via ''bastion.example.org'' through to port 80 on ''192.168.79.124''.
In cases where the bastion must have a reverse tunnel from the inner host in order to reach it, then the same method works but with the prerequisite of a reverse tunnel from the inner host to the bastion first.
For more about passing through intermediate computers, see the Cookbook section on [[OpenSSH/Cookbook/Proxies_and_Jump_Hosts|Proxies and Jump Hosts]].
===Finding The Process ID (PID) Of A Tunnel Which Is In The Background===
When a tunneled connection is sent to the background execution using the '''-f''' option for the client, there is not currently an automatic way to find the process ID (PID) of the task sent to the background. Background processes are often used for port forwarding or reverse port forwarding. Here is an example of port forwarding, also called tunneling. The connection is made and then the client goes away, leaving the tunnel available in the background, connecting port 2194 on the local host to port 194 of the remote system's local host.
<syntaxhighlight lang="shell-session">
$ ssh -N -f -L 2194:localhost:194 fred@203.0.113.214
</syntaxhighlight>
The special '''$!''' variable remains empty, even if '''$?''' reports success or failure of the action. The reason is that the shell's job control did not put the client into the background. Instead the client runs in the foreground for a moment and then exits normally, after leaving a different process to run in the background via a fork. The process ID of the original client vanishes since that client is gone.
Finding the process ID usually takes at least two steps. Some of the ways to retroactively identify the process involve trying [http://man.openbsd.org/ps.1 ps(1)] and rummaging through the output for all that account's processes, but that is unnecessary effort. If the background SSH client is the most recent one, then [http://man.openbsd.org/pgrep.1 pgrep(1)] can be used, or else the output needs to be comma delimited and fed into [http://man.openbsd.org/ps.1 ps(1)] via [http://man.openbsd.org/xargs.1 xargs(1)] or process substitution.
<syntaxhighlight lang="shell-session">
$ ps uw | less
$ pgrep -n -x ssh
$ pgrep -d, -x ssh | xargs ps -p
$ ps -p $(pgrep -d, -x ssh)
</syntaxhighlight>
Some variations on the above might be needed depending on operating system if the '''-d''' option is not supported.
<syntaxhighlight lang="shell-session">
$ pgrep -x ssh | xargs -n 1 ps -o user,pid,ppid,args -p | awk 'NR==1 || $3==1'
USER PID PPID COMMAND
fred 97778 1 ssh -f -N -L 8008:localhost:80 fred@203.0.113.8
fred 14026 1 ssh -f -N -L 8183:localhost:80 fred@203.0.113.183
fred 79522 1 ssh -f -N -L 8228:localhost:80 fred@203.0.113.228
fred 49773 1 ssh -f -N -L 8205:localhost:80 203.0.113.205
</syntaxhighlight>
Either way, note that all the connections running in the background have a Parent Process ID (PPID) of 1, the process control initialization system for the operating system.
Being aware of this shortcoming, a proactive approach can be used with the '''ControlMaster''' and '''ControlPath''' configuration directives in order to leave a socket to read to get the background task's process ID.
<syntaxhighlight lang="shell-session">
$ ssh -M -S ~/.ssh/sockets/pid.%C -f -N -L 5901:localhost:5901 fred@203.0.113.122
$ ssh -S ~/.ssh/sockets/pid.%C -O check 203.0.113.122
</syntaxhighlight>
The '''-M''' option causes the client to go into Master mode for multiplexing using the socket designated by the '''-S''' option. Then, after '''-f''' forks the client into the background, The control command ''check'' will then use the socket to check that the master process is running and report the Process ID.
It is a good idea for the socket to be in an isolated directory not readable or writable by other accounts. Aside from the complexity, a noticeable down side is that it can be possible for the socket to be reused for additional connections. See the Cookbook section on [[OpenSSH/Cookbook/Multiplexing|Multiplexing]] for more about the risks and additional uses.
==Reverse Tunneling==
[[File:Wikibook-diagram-SSH-forwarding-reverse-basic.png|thumb|Basic SSH Reverse Forwarding]]
A reverse tunnel forwards connections in the opposite direction of a regular tunnel, that is to say the opposite direction from that which the SSH session is initiated. With remote forwarding as it is also called, an SSH session begins from the local host to a remote host while a port is forwarded from the remote host to the local host. There are two stages in using reverse tunneling, see the diagram: first, connect from endpoint ''198.51.100.56'' to endpoint ''203.0.113.8'' using SSH with remote forwarding enabled; second, connect other systems to the designated port on endpoint ''203.0.113.8'' and that port is then forwarded to endpoint ''198.51.100.56''.
So while the originating system initiated the SSH connection to the remote system, the connections to the designated port on ''203.0.113.8'' are sent over to ''198.51.100.56'' over the reverse tunnel. Once the SSH connection is made, the reverse tunnel can be used from the remote system the same as a regular tunnel, even though the originating system initiated the SSH connection.
Remote forwarding is a method which can be used to forward SSH over SSH in order to work on an otherwise inaccessible system, such as an always-on SBC behind a home router. First, open an SSH session from the inaccessible system to another which is accessible including a designated reverse tunnel. In this example, while the SSH connection is from a local system (endpoint A) to a remote system (endpoint B), that connection contains a reverse tunnel from port 2022 on that remote system (endpoint B) to port 22 over on the local system:
<syntaxhighlight lang="shell-session">
$ ssh -fN -R 2022:localhost:22 -l fred server.example.org
</syntaxhighlight>
Lastly, using the example above, a connection is made on the remote machine, ''server.example.org'', to the reverse tunnel connection on port 2022. Thus, even though the connection is made to port 2022 on ''localhost'' on ''server.example.org'', the packets end up over on port 22 on the system which initiated the SSH initial connection carrying the reverse tunnel.
<syntaxhighlight lang="shell-session">
$ ssh -p 2022 -l fred localhost
</syntaxhighlight>
Thus that example allows SSH access to an otherwise inaccessible system via SSH. SSH goes out, makes a reverse tunnel, then the second system can connect at will to the first via SSH as long as the tunnel persists. If keys and a loop are used to generate the SSH connection with the remote forwarding then the reverse tunnel can be maintained automatically.
The next example makes VNC available over SSH from an otherwise inaccessible system via a second system, ''server.example.org''. Starting from the system with a running VNC server, reverse forward the port for the first VNC display locally to the third VNC display over on ''server.example.org'':
<syntaxhighlight lang="shell-session">
$ ssh -fNT -R 5903:localhost:5901 -l fred server.example.org
</syntaxhighlight>
Then on the system ''server.example.org'', people can connect to that system's ''localhost'' address on its third VNC display and be patched through to the originating system:
<syntaxhighlight lang="shell-session">
$ xvncviewer :3
</syntaxhighlight>
That also is an example of how the forwarded ports don't have to be the same.
Remote forwarding can be included in the SSH client's configuration file using the '''RemoteForward''' directive. See the next subsection for that.
A common use-case for reverse tunneling is when you have to access a system or service which is behind either NAT or a firewall or both and thus incoming SSH connections are blocked, but you have direct access to a second system outside the firewall which can accept incoming connections. In such cases it is easy to make a reverse tunnel from the internal system behind the firewall to the second system on the outside. Once the SSH connection has made the reverse tunnel, to connect to the internal system from outside, other systems can connect to the forwarded port on the remote system. The remote system on the outside then acts as a relay server to forward connections to the initiating system on the inside.
===Configuring Remote Forwarding Using The Client Configuration File===
The '''RemoteForward''' client configuration directive can be used in [http://man.openbsd.org/ssh_config ssh_config(5)] to establish a reverse tunnel from another system. The '''ForkAfterAuthentication''' would be '''-f''' and '''SessionType''' would be '''-N''' as run time arguments and, of course, optional in this example which is the same as the first example in the subsection above:
<syntaxhighlight lang="apache" line="1">
Host server server.example.org
User fred
HostName server.example.org
ForkAfterAuthentication yes
SessionType none
RemoteForward 2022 localhost:22
</syntaxhighlight>
With that in place over on the other system, one can establish a reverse tunnel from ''server'' by simply connecting to it by entering <code>ssh server</code>. Then over on ''server.example.org'', connecting to ''localhost'' on port 2022 will carry through back to the original system on port 22.
<syntaxhighlight lang="apache" line="1">
Host server server.example.org
User fred
HostName server.example.org
ForkAfterAuthentication yes
SessionType none
RequestTTY no
RemoteForward 5903 localhost:5901
</syntaxhighlight>
Likewise that duplicates the second example from the subsection above but in the client configuration file instead of using run time arguments. More about that is covered in the chapter on using [[OpenSSH/Cookbook/The_Client_Configuration_File|The Client Configuration File]].
===Configuring Remote Forwarding Using The Client Configuration File===
The '''RemoteForward''' client configuration directive can be used in [http://man.openbsd.org/ssh_config ssh_config(5)] to establish a reverse tunnel from another system. The '''ForkAfterAuthentication''' would be '''-f''' and '''SessionType''' would be '''-N''' as run time arguments and, of course, optional in this example which is the same as the first example in the subsection above:
<syntaxhighlight lang="apache" line="1">
Host server server.example.org
User fred
HostName server.example.org
ForkAfterAuthentication yes
SessionType none
RemoteForward 2022 localhost:22
</syntaxhighlight>
With that in place over on the other system, one can establish a reverse tunnel from ''server'' by simply connecting to it by entering <code>ssh server</code>. Then over on ''server.example.org'', connecting to ''localhost'' on port 2022 will carry through back to the original system on port 22.
<syntaxhighlight lang="apache" line="1">
Host server server.example.org
User fred
HostName server.example.org
ForkAfterAuthentication yes
SessionType none
RequestTTY no
RemoteForward 5903 localhost:5901
</syntaxhighlight>
Likewise that duplicates the second example from the subsection above but in the client configuration file instead of using run time arguments. More about that is covered in the chapter on using [[OpenSSH/Cookbook/The_Client_Configuration_File|The Client Configuration File]].
====Dynamically Allocating the End Port in a Reverse Tunnel====
The following will forward a randomly available high port on the remote system to port 80 on the local system which is launching the client.
<syntaxhighlight lang="shell-session">
$ ssh -R 0:localhost:80 fred@server.example.org
Allocated port 15249 for remote forward to localhost:80
Last login: Thu Oct 15 01:37:18 2026 from 10.11.9.112
...
</syntaxhighlight>
Below, that random high port is captured into an environment variable using command substitution and then printed. The SSH session stays in the background until terminated.
<syntaxhighlight lang="shell-session">
$ port=$(ssh -o ExitOnForwardFailure=yes -f -N -R 0:localhost:80 \
fred@server.example.org 2>&1 \
| sed -n -r -e 's/.* ([0-9]+) .*/\1/p')
$ echo "$port"
37487
</syntaxhighlight>
Setting '''ExitOnForwardFailure''' to 'yes' is necessary to get the client to send the port information as output to '''stderr'''. The redirection of file descriptor 2 ('''stderr''') to file descriptor 1 ('''stdout''') allows <code>sed</code> to isolate just the port number. The command substitution captures that result and puts it into an environment variable.
The full set of options can be put into [http://man.openbsd.org/ssh_config ssh_config(5)] for permanence and shorten the final command.
<syntaxhighlight lang="apache" line="1">
Host server server.example.org
User fred
HostName server.example.org
ForkAfterAuthentication yes
SessionType none
RequestTTY no
RemoteForward 0 localhost:80
ExitOnForwardFailure yes
</syntaxhighlight>
====Dynamically Allocating the End Port in a Reverse Tunnel Using Multiplexing====
Choosing a randomly available high port on the remote system can also be done when multiplexing sessions. First designate a '''ControlPath''' using the '''-S''' option while establishing a '''ControlMaster''' using the '''-M''' option. The options '''-N''' and '''-f''' are not needed but can be useful.
<syntaxhighlight lang="shell-session">
$ ssh -N -M -S ~/.ssh/%C fred@server.example.org
</syntaxhighlight>
Subsequent queries and multiplexing commands must point to the same destination when tokens, such as '''%C''' here, are being used. See the section on [[OpenSSH/Cookbook/Multiplexing | Multiplexing]] for more.
Once the '''ControlMaster''' is established, set up a reverse tunnel but assign 0 for the remote port. The SSH client will pick an available port at random and return its number. Process substitution is useful here for capturing that output to an environment variable.
<syntaxhighlight lang="shell-session">
$ port="$(ssh -S ~/.ssh/%C -O forward -R 0:localhost:22 fred@server.example.org)"
$ echo $port
41401
$ ssh -S ~/.ssh/%C -O check fred@server.example.org
</syntaxhighlight>
Then it is possible to close the whole SSH session using '''exit'''.
<syntaxhighlight lang="shell-session">
$ ssh -S ~/.ssh/%C -O exit fred@server.example.org
</syntaxhighlight>
Or use '''cancel''' to end just the reverse tunnel without ending the whole SSH session.
<syntaxhighlight lang="shell-session">
$ ssh -S ~/.ssh/%C -O cancel -R 0:localhost:22 fred@server.example.org
</syntaxhighlight>
==Adding or Removing Tunnels within an Established Connection==
It is possible to add or remove tunnels, reverse tunnels, and SOCKS proxies to or from an existing connection using escape sequences. The default escape character is the tilde (~) and the full range of options is described in the manual page for [http://man.openbsd.org/ssh.1 ssh(1)]. Escape sequences only work if they are the first characters entered on a line and followed by a return. When adding or removing a tunnel to or from an existing connection, '''~C''', the command line is used.
To add a tunnel in an active SSH session, use the escape sequence to open a command line in SSH and then enter the parameters for the tunnel:
<pre>
~C
L 2022:localhost:22
</pre>
To remove a tunnel from an active SSH session is almost the same. Instead of -L, -R, or -D we have -KL, -KR, and -KD plus the port number. Use the escape sequence to open a command line in SSH and then enter the parameters for removing the tunnel.
<pre>
~C
KL2022
</pre>
===Adding or Removing Tunnels within a Multiplexed Connection===
There is an additional option for forwarding when multiplexing. More than one SSH connection can be multiplexed over a single TCP connection. Control commands can be passed to the master process to add or drop port forwarding to the master process.
First a master connection is made and a socket path assigned.
<syntaxhighlight lang="shell-session">
$ ssh -S '/home/fred/.ssh/%h:%p' -M server.example.org
</syntaxhighlight>
Then using the socket path, it is possible to add port forwarding.
<syntaxhighlight lang="shell-session">
$ ssh -O forward -L 2022:localhost:22 -S '/home/fred/.ssh/%h:%p' fred@server.example.org
</syntaxhighlight>
Since OpenSSH 6.0 it is possible to cancel specific port forwarding using a control command.
<syntaxhighlight lang="shell-session">
$ ssh -S "/home/fred/.ssh/%h:%p" -O cancel -L 2022:localhost:22 fred@server.example.org
</syntaxhighlight>
For more about multiplexing, see the Cookbook section on [[OpenSSH/Cookbook/Multiplexing|Multiplexing]].
==Restricting Tunnels to Specific Ports==
By default, port forwarding will allow forwarding to any port if it is allowed at all. The way to restrict which ports a user can use in forwarding is to apply the '''PermitOpen''' option on the server side either in the server's configuration or inside the user's public key in '''authorized_keys'''. For example, with this setting in [http://man.openbsd.org/sshd_config.5 sshd_config(5)] all users can forward only to port 7654 on the server, if they try forwarding:
<syntaxhighlight lang="apache" line="1">
PermitOpen localhost:7654
</syntaxhighlight>
Multiple ports may be specified on the same line if separated by whitespace.
<syntaxhighlight lang="apache" line="1">
PermitOpen localhost:7654 localhost:3306
</syntaxhighlight>
If the client tries to forward to a disallowed port, there will be a warning message that includes the text "open failed: administratively prohibited: open failed" while the connection otherwise continues as normal. However, even if the client has '''ExitOnForwardFailure''' in its configuration a connection will still succeed, despite the warning message.
However, if shell access is available, it is possible to run other port forwarders, so without further restrictions, '''PermitOpen''' is more of a reminder or recommendation than a restriction. But for many cases, such a reminder might be enough.
For reverse tunnels, the '''PermitListen''' option is available instead. It determines which port on the remote system is available. So the following, for example, allows <code>ssh -R 2022:localhost:''xxxx''</code>, where ''xxxx'' can be any available port number at the origin of the reverse tunnel, but only 2022 on the far end of the tunnel.
<syntaxhighlight lang="apache" line="1">
PermitListen localhost:2022
</syntaxhighlight>
The '''PermitOpen''' or '''PermitListen''' options can be used as part of one or more '''Match''' blocks if forwarding options need to vary depending on various combinations of user, group, client address or network, server address or network, and/or the listening port used by [http://man.openbsd.org/sshd.8 sshd(8)]. If using the '''Match''' criteria to selectively apply rules for port forwarding, it is also possible to prevent the account from getting an interactive shell by setting '''PermitTTY''' to '''no'''. That will prevent the allocation of a pseudo-terminal (PTY) on the server thus prevent shell access, but allow other programs to still be run unless an appropriate forced command is specified in addition.
<syntaxhighlight lang="apache" line="1">
Match Group mariadbusers
PermitOpen localhost:3306
PermitTTY no
ForceCommand /usr/bin/true
</syntaxhighlight>
With that stanza in [http://man.openbsd.org/sshd_config.5 sshd_config(5)] it is only possible to connect by adding the '''-N''' option to avoid executing a remote command.
<syntaxhighlight lang="shell-session">
$ ssh -N -L 3306:localhost:3306 server.example.org
</syntaxhighlight>
The '''-N''' option can be used alone or with the '''-f''' option which drops the client to the background once the connection is established.
Without the '''ForceCommand''' option in a '''Match''' block in the server configuration, if an attempt is made to get a PTY by a client that is blocked from getting one, the warning "PTY allocation request failed on channel ''n''" will show up on the client, with ''n'' being the channel number, but otherwise the connection will succeed without a remote shell and the port(s) will still be forwarded. Various programs, including shells, can still be specified by the client, they just won't get a PTY. So to really prevent access to the system other than forwarding, a forced command is needed. The tool '''true(1)''' comes in handy for that. Note that '''true(1)''' might be in a different location on different systems.
===Limiting Port Forwarding Requests Using Keys Only===
The following '''authorized_keys''' line shows the '''PermitOpen''' option prepended to a key in order to limit a user connecting with that particular key to forwarding to just port 8765:
<pre>
permitopen="localhost:8765" ssh-ed25519 AAAAC3NzaC1lZDI1NT...
</pre>
Multiple '''PermitOpen''' options may be applied to the same public key if they are separated by commas and thus a key can allow multiple ports.
By default, shell access is allowed. With shell access it is still possible to run other port forwarders. The '''no-pty''' option inside the key can facilitate making a key that only allows forwarding and not an interactive shell if combined with an appropriate forced command using the '''command''' option. Here is an example of such a key as it would be listed in '''authorized_keys''':
<pre>
no-pty,permitopen="localhost:9876",command="/usr/bin/true" ssh-ed25519 AAAAC3NzaC1lZDI1NT...
</pre>
The '''no-pty''' option blocks interactive shell. The client will still connect to the remote server and will allow forwarding but will respond with an error including the message "PTY allocation request failed on channel ''n''". But as mentioned in the previous subsection, there are still a lot of ways around that and adding the '''command''' option hinders them.
This method is awkward to lock down. If the account has write access in any way, directly or indirectly, to the '''authorized_keys''' file, then it is possible for the user to add a new key or overwrite the existing key(s) with more permissive options. In order to prevent that, the server has to be configured to look for the file in a location outside of the user's reach. See the section on [[OpenSSH/Cookbook/Public_Key_Authentication | Public Key Authentication]] for details on that. The methods described above in the previous subsection using [http://man.openbsd.org/sshd_config.5 sshd_config(5)] might be more practical in many cases.
<noinclude>{{OpenSSH/TOC|mini}}</noinclude>
{{BookCat}}
{{status|100%}}
t41lod47o29k9mya6b6sfikqhfzgyxp
4676267
4676266
2026-10-15T13:54:22Z
Larsnooden
430753
separate run-time options
4676267
wikitext
text/x-wiki
<noinclude>{{simple chapter navigation|previous=The Client Configuration File|next=Automated Backup}}</noinclude>
In tunneling, or port forwarding, a local port is connected to a port on a remote host or vice versa. So connections to the port on one machine are in effect connections to a port on the other machine.
The [http://man.openbsd.org/ssh.1 ssh(1)] options '''-f''' (go to background), '''-N''' (do not execute a remote program) and '''-T''' (disable pseudo-tty allocation) can be useful for connections that are used only for creation of tunnels.
<noinclude>__TOC__</noinclude>
==Tunneling==
[[File:Wikibook-diagram-SSH-forwarding-basic.png|thumb|Basic SSH Forwarding]]
In regular port forwarding, connections to a local port are forwarded to a port on a remote machine. This is a way of securing an insecure protocol or of making a remote service appear as local. Here we forwarded VNC in two steps. First make the tunnel:
<syntaxhighlight lang="shell-session">
$ ssh -L 5901:localhost:5901 -l fred desktop.example.org
</syntaxhighlight>
In that way connections on the local machine made to the forwarded port will in effect be connecting to the remote machine.
Multiple tunnels can be specified at the same time. The tunnels can be of any kind, not just regular forwarding. See the next section below for reverse tunnels. For dynamic forwarding see the section [[OpenSSH/Cookbook/Proxies_and_Jump_Hosts|Proxies and Jump Hosts]].
<syntaxhighlight lang="shell-session">
$ ssh -L 5901:localhost:5901 \
-L 5432:localhost:5432 \
-l fred desktop.example.org
</syntaxhighlight>
If a connection is only used to create a tunnel, then it can be told not to execute any remote programs ('''-N'''), making it a non-interactive session, and also to drop to the background ('''-f''').
<syntaxhighlight lang="shell-session">
$ ssh -f -N -L 3128:localhost:3128 -l fred server.example.org
</syntaxhighlight>
Note that '''-N''' will work even if the '''authorized_keys''' forces a program using the '''command="..."''' option. So a connection using '''-N''' will stay open instead of running a program and then exiting.
The three connections above could be saved in the SSH client's configuration file, '''~/.ssh/config''' and even given shortcuts.
<syntaxhighlight lang="apache" line="1">
Host desktop desktop.example.org
HostName desktop.example.org
User fred
LocalForward 5901 localhost:5901
Host postgres
HostName desktop.example.org
User fred
LocalForward 5901 localhost:5901
LocalForward 5432 localhost:5432
Host server server.example.org
HostName server.example.org
User fred
ExitOnForwardFailure no
LocalForward 3128 localhost:3128
Host *
ExitOnForwardFailure yes
</syntaxhighlight>
With those settings, the tunnels listed are added automatically when connecting to ''desktop'', ''desktop.example.org'', ''postgres'', ''server'', or ''server.example.org''. The catchall configuration at the end applies to any of the above hosts which have not already set '''ExitOnForwardFailure''' to 'no' and the client will refuse to connect if a tunnel cannot be made. The first obtained value for any given configuration directive will be used, but the file's contents can be overridden with run-time options passed on the command line.
===Tunneling Via A Single Intermediate Host===
Tunneling can go via one intermediate host to reach a second host, and the latter does not need to be on a publicly accessible network. However, the target port on the second remote machine does have to be accessible on the same network as the first. Here, ''192.168.0.101'' and ''bastion.example.org'' must be on the same network and, in addition, ''bastion.example.org'' has to be directly accessible to the client machine running '''ssh(1)'''. So, port 80 on ''192.168.0.101'' has to be available to the machine ''bastion.example.org''.
<syntaxhighlight lang="shell-session">
$ ssh -f -N -L 1880:192.168.0.101:80 -l fred bastion.example.org
</syntaxhighlight>
Thus, once the tunnel is made, to connect to port 80 on ''192.168.2.101'' via the host ''bastion.example.org'', connect to port 1880 on ''localhost''. This way works for one or two hosts. It is also possible to chain multiple hosts, using different methods.
====Securing a Hop, Tunneling Via One Or More Intermediate Hosts====
Here, the idea is to limit the ability of a group of users to the bare minimum needed to pass through a jump host yet still be able to forward ports onward to other machines. If the account is sufficiently locked down then the bastion can only be used for forwarding and not shell access, scripts, or even SFTP. The following settings on the bastion host in [http://man.openbsd.org/sshd_config.5 sshd_config(5)] prevent either shell access or SFTP but still allow port forwarding.
<syntaxhighlight lang="apache" line="1">
Match Group tunnelers
ForceCommand /bin/false
PasswordAuthentication no
ChrootDirectory %h
PermitTTY no
X11Forwarding no
AllowTcpForwarding yes
PermitTunnel no
Banner none
</syntaxhighlight>
Note that their home directories, but not the files within them, must be owned by root and writable by only root because of the '''ChrootDirectory''' configuration directive there in [http://man.openbsd.org/sshd_config.5 sshd_config(5)]. Also, because of the '''PasswordAuthentication''' configuration directive keys will have to be set up in the home directory in '''~/.ssh/authorized_keys''', if an alternate location is not already configured.
<syntaxhighlight lang="shell-session">
$ ssh -N -L 9980:localhost:80 -J fred@bastion.example.org fred@192.168.79.124
</syntaxhighlight>
In that way port 9980 on the client is directed via ''bastion.example.org'' through to port 80 on ''192.168.79.124''.
In cases where the bastion must have a reverse tunnel from the inner host in order to reach it, then the same method works but with the prerequisite of a reverse tunnel from the inner host to the bastion first.
For more about passing through intermediate computers, see the Cookbook section on [[OpenSSH/Cookbook/Proxies_and_Jump_Hosts|Proxies and Jump Hosts]].
===Finding The Process ID (PID) Of A Tunnel Which Is In The Background===
When a tunneled connection is sent to the background execution using the '''-f''' option for the client, there is not currently an automatic way to find the process ID (PID) of the task sent to the background. Background processes are often used for port forwarding or reverse port forwarding. Here is an example of port forwarding, also called tunneling. The connection is made and then the client goes away, leaving the tunnel available in the background, connecting port 2194 on the local host to port 194 of the remote system's local host.
<syntaxhighlight lang="shell-session">
$ ssh -N -f -L 2194:localhost:194 fred@203.0.113.214
</syntaxhighlight>
The special '''$!''' variable remains empty, even if '''$?''' reports success or failure of the action. The reason is that the shell's job control did not put the client into the background. Instead the client runs in the foreground for a moment and then exits normally, after leaving a different process to run in the background via a fork. The process ID of the original client vanishes since that client is gone.
Finding the process ID usually takes at least two steps. Some of the ways to retroactively identify the process involve trying [http://man.openbsd.org/ps.1 ps(1)] and rummaging through the output for all that account's processes, but that is unnecessary effort. If the background SSH client is the most recent one, then [http://man.openbsd.org/pgrep.1 pgrep(1)] can be used, or else the output needs to be comma delimited and fed into [http://man.openbsd.org/ps.1 ps(1)] via [http://man.openbsd.org/xargs.1 xargs(1)] or process substitution.
<syntaxhighlight lang="shell-session">
$ ps uw | less
$ pgrep -n -x ssh
$ pgrep -d, -x ssh | xargs ps -p
$ ps -p $(pgrep -d, -x ssh)
</syntaxhighlight>
Some variations on the above might be needed depending on operating system if the '''-d''' option is not supported.
<syntaxhighlight lang="shell-session">
$ pgrep -x ssh | xargs -n 1 ps -o user,pid,ppid,args -p | awk 'NR==1 || $3==1'
USER PID PPID COMMAND
fred 97778 1 ssh -f -N -L 8008:localhost:80 fred@203.0.113.8
fred 14026 1 ssh -f -N -L 8183:localhost:80 fred@203.0.113.183
fred 79522 1 ssh -f -N -L 8228:localhost:80 fred@203.0.113.228
fred 49773 1 ssh -f -N -L 8205:localhost:80 203.0.113.205
</syntaxhighlight>
Either way, note that all the connections running in the background have a Parent Process ID (PPID) of 1, the process control initialization system for the operating system.
Being aware of this shortcoming, a proactive approach can be used with the '''ControlMaster''' and '''ControlPath''' configuration directives in order to leave a socket to read to get the background task's process ID.
<syntaxhighlight lang="shell-session">
$ ssh -M -S ~/.ssh/sockets/pid.%C -f -N -L 5901:localhost:5901 fred@203.0.113.122
$ ssh -S ~/.ssh/sockets/pid.%C -O check 203.0.113.122
</syntaxhighlight>
The '''-M''' option causes the client to go into Master mode for multiplexing using the socket designated by the '''-S''' option. Then, after '''-f''' forks the client into the background, The control command ''check'' will then use the socket to check that the master process is running and report the Process ID.
It is a good idea for the socket to be in an isolated directory not readable or writable by other accounts. Aside from the complexity, a noticeable down side is that it can be possible for the socket to be reused for additional connections. See the Cookbook section on [[OpenSSH/Cookbook/Multiplexing|Multiplexing]] for more about the risks and additional uses.
==Reverse Tunneling==
[[File:Wikibook-diagram-SSH-forwarding-reverse-basic.png|thumb|Basic SSH Reverse Forwarding]]
A reverse tunnel forwards connections in the opposite direction of a regular tunnel, that is to say the opposite direction from that which the SSH session is initiated. With remote forwarding as it is also called, an SSH session begins from the local host to a remote host while a port is forwarded from the remote host to the local host. There are two stages in using reverse tunneling, see the diagram: first, connect from endpoint ''198.51.100.56'' to endpoint ''203.0.113.8'' using SSH with remote forwarding enabled; second, connect other systems to the designated port on endpoint ''203.0.113.8'' and that port is then forwarded to endpoint ''198.51.100.56''.
So while the originating system initiated the SSH connection to the remote system, the connections to the designated port on ''203.0.113.8'' are sent over to ''198.51.100.56'' over the reverse tunnel. Once the SSH connection is made, the reverse tunnel can be used from the remote system the same as a regular tunnel, even though the originating system initiated the SSH connection.
Remote forwarding is a method which can be used to forward SSH over SSH in order to work on an otherwise inaccessible system, such as an always-on SBC behind a home router. First, open an SSH session from the inaccessible system to another which is accessible including a designated reverse tunnel. In this example, while the SSH connection is from a local system (endpoint A) to a remote system (endpoint B), that connection contains a reverse tunnel from port 2022 on that remote system (endpoint B) to port 22 over on the local system:
<syntaxhighlight lang="shell-session">
$ ssh -f -N -R 2022:localhost:22 -l fred server.example.org
</syntaxhighlight>
Lastly, using the example above, a connection is made on the remote machine, ''server.example.org'', to the reverse tunnel connection on port 2022. Thus, even though the connection is made to port 2022 on ''localhost'' on ''server.example.org'', the packets end up over on port 22 on the system which initiated the SSH initial connection carrying the reverse tunnel.
<syntaxhighlight lang="shell-session">
$ ssh -p 2022 -l fred localhost
</syntaxhighlight>
Thus that example allows SSH access to an otherwise inaccessible system via SSH. SSH goes out, makes a reverse tunnel, then the second system can connect at will to the first via SSH as long as the tunnel persists. If keys and a loop are used to generate the SSH connection with the remote forwarding then the reverse tunnel can be maintained automatically.
The next example makes VNC available over SSH from an otherwise inaccessible system via a second system, ''server.example.org''. Starting from the system with a running VNC server, reverse forward the port for the first VNC display locally to the third VNC display over on ''server.example.org'':
<syntaxhighlight lang="shell-session">
$ ssh -f -N -T -R 5903:localhost:5901 -l fred server.example.org
</syntaxhighlight>
Then on the system ''server.example.org'', people can connect to that system's ''localhost'' address on its third VNC display and be patched through to the originating system:
<syntaxhighlight lang="shell-session">
$ xvncviewer :3
</syntaxhighlight>
That also is an example of how the forwarded ports don't have to be the same.
Remote forwarding can be included in the SSH client's configuration file using the '''RemoteForward''' directive. See the next subsection for that.
A common use-case for reverse tunneling is when you have to access a system or service which is behind either NAT or a firewall or both and thus incoming SSH connections are blocked, but you have direct access to a second system outside the firewall which can accept incoming connections. In such cases it is easy to make a reverse tunnel from the internal system behind the firewall to the second system on the outside. Once the SSH connection has made the reverse tunnel, to connect to the internal system from outside, other systems can connect to the forwarded port on the remote system. The remote system on the outside then acts as a relay server to forward connections to the initiating system on the inside.
===Configuring Remote Forwarding Using The Client Configuration File===
The '''RemoteForward''' client configuration directive can be used in [http://man.openbsd.org/ssh_config ssh_config(5)] to establish a reverse tunnel from another system. The '''ForkAfterAuthentication''' would be '''-f''' and '''SessionType''' would be '''-N''' as run time arguments and, of course, optional in this example which is the same as the first example in the subsection above:
<syntaxhighlight lang="apache" line="1">
Host server server.example.org
User fred
HostName server.example.org
ForkAfterAuthentication yes
SessionType none
RemoteForward 2022 localhost:22
</syntaxhighlight>
With that in place over on the other system, one can establish a reverse tunnel from ''server'' by simply connecting to it by entering <code>ssh server</code>. Then over on ''server.example.org'', connecting to ''localhost'' on port 2022 will carry through back to the original system on port 22.
<syntaxhighlight lang="apache" line="1">
Host server server.example.org
User fred
HostName server.example.org
ForkAfterAuthentication yes
SessionType none
RequestTTY no
RemoteForward 5903 localhost:5901
</syntaxhighlight>
Likewise that duplicates the second example from the subsection above but in the client configuration file instead of using run time arguments. More about that is covered in the chapter on using [[OpenSSH/Cookbook/The_Client_Configuration_File|The Client Configuration File]].
===Configuring Remote Forwarding Using The Client Configuration File===
The '''RemoteForward''' client configuration directive can be used in [http://man.openbsd.org/ssh_config ssh_config(5)] to establish a reverse tunnel from another system. The '''ForkAfterAuthentication''' would be '''-f''' and '''SessionType''' would be '''-N''' as run time arguments and, of course, optional in this example which is the same as the first example in the subsection above:
<syntaxhighlight lang="apache" line="1">
Host server server.example.org
User fred
HostName server.example.org
ForkAfterAuthentication yes
SessionType none
RemoteForward 2022 localhost:22
</syntaxhighlight>
With that in place over on the other system, one can establish a reverse tunnel from ''server'' by simply connecting to it by entering <code>ssh server</code>. Then over on ''server.example.org'', connecting to ''localhost'' on port 2022 will carry through back to the original system on port 22.
<syntaxhighlight lang="apache" line="1">
Host server server.example.org
User fred
HostName server.example.org
ForkAfterAuthentication yes
SessionType none
RequestTTY no
RemoteForward 5903 localhost:5901
</syntaxhighlight>
Likewise that duplicates the second example from the subsection above but in the client configuration file instead of using run time arguments. More about that is covered in the chapter on using [[OpenSSH/Cookbook/The_Client_Configuration_File|The Client Configuration File]].
====Dynamically Allocating the End Port in a Reverse Tunnel====
The following will forward a randomly available high port on the remote system to port 80 on the local system which is launching the client.
<syntaxhighlight lang="shell-session">
$ ssh -R 0:localhost:80 fred@server.example.org
Allocated port 15249 for remote forward to localhost:80
Last login: Thu Oct 15 01:37:18 2026 from 10.11.9.112
...
</syntaxhighlight>
Below, that random high port is captured into an environment variable using command substitution and then printed. The SSH session stays in the background until terminated.
<syntaxhighlight lang="shell-session">
$ port=$(ssh -o ExitOnForwardFailure=yes -f -N -R 0:localhost:80 \
fred@server.example.org 2>&1 \
| sed -n -r -e 's/.* ([0-9]+) .*/\1/p')
$ echo "$port"
37487
</syntaxhighlight>
Setting '''ExitOnForwardFailure''' to 'yes' is necessary to get the client to send the port information as output to '''stderr'''. The redirection of file descriptor 2 ('''stderr''') to file descriptor 1 ('''stdout''') allows <code>sed</code> to isolate just the port number. The command substitution captures that result and puts it into an environment variable.
The full set of options can be put into [http://man.openbsd.org/ssh_config ssh_config(5)] for permanence and shorten the final command.
<syntaxhighlight lang="apache" line="1">
Host server server.example.org
User fred
HostName server.example.org
ForkAfterAuthentication yes
SessionType none
RequestTTY no
RemoteForward 0 localhost:80
ExitOnForwardFailure yes
</syntaxhighlight>
====Dynamically Allocating the End Port in a Reverse Tunnel Using Multiplexing====
Choosing a randomly available high port on the remote system can also be done when multiplexing sessions. First designate a '''ControlPath''' using the '''-S''' option while establishing a '''ControlMaster''' using the '''-M''' option. The options '''-N''' and '''-f''' are not needed but can be useful.
<syntaxhighlight lang="shell-session">
$ ssh -N -M -S ~/.ssh/%C fred@server.example.org
</syntaxhighlight>
Subsequent queries and multiplexing commands must point to the same destination when tokens, such as '''%C''' here, are being used. See the section on [[OpenSSH/Cookbook/Multiplexing | Multiplexing]] for more.
Once the '''ControlMaster''' is established, set up a reverse tunnel but assign 0 for the remote port. The SSH client will pick an available port at random and return its number. Process substitution is useful here for capturing that output to an environment variable.
<syntaxhighlight lang="shell-session">
$ port="$(ssh -S ~/.ssh/%C -O forward -R 0:localhost:22 fred@server.example.org)"
$ echo $port
41401
$ ssh -S ~/.ssh/%C -O check fred@server.example.org
</syntaxhighlight>
Then it is possible to close the whole SSH session using '''exit'''.
<syntaxhighlight lang="shell-session">
$ ssh -S ~/.ssh/%C -O exit fred@server.example.org
</syntaxhighlight>
Or use '''cancel''' to end just the reverse tunnel without ending the whole SSH session.
<syntaxhighlight lang="shell-session">
$ ssh -S ~/.ssh/%C -O cancel -R 0:localhost:22 fred@server.example.org
</syntaxhighlight>
==Adding or Removing Tunnels within an Established Connection==
It is possible to add or remove tunnels, reverse tunnels, and SOCKS proxies to or from an existing connection using escape sequences. The default escape character is the tilde (~) and the full range of options is described in the manual page for [http://man.openbsd.org/ssh.1 ssh(1)]. Escape sequences only work if they are the first characters entered on a line and followed by a return. When adding or removing a tunnel to or from an existing connection, '''~C''', the command line is used.
To add a tunnel in an active SSH session, use the escape sequence to open a command line in SSH and then enter the parameters for the tunnel:
<pre>
~C
L 2022:localhost:22
</pre>
To remove a tunnel from an active SSH session is almost the same. Instead of -L, -R, or -D we have -KL, -KR, and -KD plus the port number. Use the escape sequence to open a command line in SSH and then enter the parameters for removing the tunnel.
<pre>
~C
KL2022
</pre>
===Adding or Removing Tunnels within a Multiplexed Connection===
There is an additional option for forwarding when multiplexing. More than one SSH connection can be multiplexed over a single TCP connection. Control commands can be passed to the master process to add or drop port forwarding to the master process.
First a master connection is made and a socket path assigned.
<syntaxhighlight lang="shell-session">
$ ssh -S '/home/fred/.ssh/%h:%p' -M server.example.org
</syntaxhighlight>
Then using the socket path, it is possible to add port forwarding.
<syntaxhighlight lang="shell-session">
$ ssh -O forward -L 2022:localhost:22 -S '/home/fred/.ssh/%h:%p' fred@server.example.org
</syntaxhighlight>
Since OpenSSH 6.0 it is possible to cancel specific port forwarding using a control command.
<syntaxhighlight lang="shell-session">
$ ssh -S "/home/fred/.ssh/%h:%p" -O cancel -L 2022:localhost:22 fred@server.example.org
</syntaxhighlight>
For more about multiplexing, see the Cookbook section on [[OpenSSH/Cookbook/Multiplexing|Multiplexing]].
==Restricting Tunnels to Specific Ports==
By default, port forwarding will allow forwarding to any port if it is allowed at all. The way to restrict which ports a user can use in forwarding is to apply the '''PermitOpen''' option on the server side either in the server's configuration or inside the user's public key in '''authorized_keys'''. For example, with this setting in [http://man.openbsd.org/sshd_config.5 sshd_config(5)] all users can forward only to port 7654 on the server, if they try forwarding:
<syntaxhighlight lang="apache" line="1">
PermitOpen localhost:7654
</syntaxhighlight>
Multiple ports may be specified on the same line if separated by whitespace.
<syntaxhighlight lang="apache" line="1">
PermitOpen localhost:7654 localhost:3306
</syntaxhighlight>
If the client tries to forward to a disallowed port, there will be a warning message that includes the text "open failed: administratively prohibited: open failed" while the connection otherwise continues as normal. However, even if the client has '''ExitOnForwardFailure''' in its configuration a connection will still succeed, despite the warning message.
However, if shell access is available, it is possible to run other port forwarders, so without further restrictions, '''PermitOpen''' is more of a reminder or recommendation than a restriction. But for many cases, such a reminder might be enough.
For reverse tunnels, the '''PermitListen''' option is available instead. It determines which port on the remote system is available. So the following, for example, allows <code>ssh -R 2022:localhost:''xxxx''</code>, where ''xxxx'' can be any available port number at the origin of the reverse tunnel, but only 2022 on the far end of the tunnel.
<syntaxhighlight lang="apache" line="1">
PermitListen localhost:2022
</syntaxhighlight>
The '''PermitOpen''' or '''PermitListen''' options can be used as part of one or more '''Match''' blocks if forwarding options need to vary depending on various combinations of user, group, client address or network, server address or network, and/or the listening port used by [http://man.openbsd.org/sshd.8 sshd(8)]. If using the '''Match''' criteria to selectively apply rules for port forwarding, it is also possible to prevent the account from getting an interactive shell by setting '''PermitTTY''' to '''no'''. That will prevent the allocation of a pseudo-terminal (PTY) on the server thus prevent shell access, but allow other programs to still be run unless an appropriate forced command is specified in addition.
<syntaxhighlight lang="apache" line="1">
Match Group mariadbusers
PermitOpen localhost:3306
PermitTTY no
ForceCommand /usr/bin/true
</syntaxhighlight>
With that stanza in [http://man.openbsd.org/sshd_config.5 sshd_config(5)] it is only possible to connect by adding the '''-N''' option to avoid executing a remote command.
<syntaxhighlight lang="shell-session">
$ ssh -N -L 3306:localhost:3306 server.example.org
</syntaxhighlight>
The '''-N''' option can be used alone or with the '''-f''' option which drops the client to the background once the connection is established.
Without the '''ForceCommand''' option in a '''Match''' block in the server configuration, if an attempt is made to get a PTY by a client that is blocked from getting one, the warning "PTY allocation request failed on channel ''n''" will show up on the client, with ''n'' being the channel number, but otherwise the connection will succeed without a remote shell and the port(s) will still be forwarded. Various programs, including shells, can still be specified by the client, they just won't get a PTY. So to really prevent access to the system other than forwarding, a forced command is needed. The tool '''true(1)''' comes in handy for that. Note that '''true(1)''' might be in a different location on different systems.
===Limiting Port Forwarding Requests Using Keys Only===
The following '''authorized_keys''' line shows the '''PermitOpen''' option prepended to a key in order to limit a user connecting with that particular key to forwarding to just port 8765:
<pre>
permitopen="localhost:8765" ssh-ed25519 AAAAC3NzaC1lZDI1NT...
</pre>
Multiple '''PermitOpen''' options may be applied to the same public key if they are separated by commas and thus a key can allow multiple ports.
By default, shell access is allowed. With shell access it is still possible to run other port forwarders. The '''no-pty''' option inside the key can facilitate making a key that only allows forwarding and not an interactive shell if combined with an appropriate forced command using the '''command''' option. Here is an example of such a key as it would be listed in '''authorized_keys''':
<pre>
no-pty,permitopen="localhost:9876",command="/usr/bin/true" ssh-ed25519 AAAAC3NzaC1lZDI1NT...
</pre>
The '''no-pty''' option blocks interactive shell. The client will still connect to the remote server and will allow forwarding but will respond with an error including the message "PTY allocation request failed on channel ''n''". But as mentioned in the previous subsection, there are still a lot of ways around that and adding the '''command''' option hinders them.
This method is awkward to lock down. If the account has write access in any way, directly or indirectly, to the '''authorized_keys''' file, then it is possible for the user to add a new key or overwrite the existing key(s) with more permissive options. In order to prevent that, the server has to be configured to look for the file in a location outside of the user's reach. See the section on [[OpenSSH/Cookbook/Public_Key_Authentication | Public Key Authentication]] for details on that. The methods described above in the previous subsection using [http://man.openbsd.org/sshd_config.5 sshd_config(5)] might be more practical in many cases.
<noinclude>{{OpenSSH/TOC|mini}}</noinclude>
{{BookCat}}
{{status|100%}}
3x2flynjgjzpl57ctaeuwrnmbdjgzzu
Structural Biochemistry/Organic Chemistry/Organic Functional Group/Aldehyde
0
281794
4676278
4637802
2026-10-15T17:15:03Z
DMacks
94753
/* Roles of Aldehyde in Biochemistry */ fix typography; but need an actual reliable source
4676278
wikitext
text/x-wiki
==Introduction==
An '''Aldehyde''' is a major functional group in Biochemistry with the general formula, RCHO. This formula is made up of a carbonyl functional group where the two remaining bonds of the carbon are used to bond to a Hydrogen and an R functional group which can be a second hydrogen, an alkyl or an aryl group. Due to the presence of the hydrogen on the central carbon Aldehydes, are by definition located at the end of a carbon chain, unlike ketones that by definition are somewhere in the middle of the carbon chain.<ref>http://www2.chemistry.msu.edu/faculty/reusch/virttxtjml/aldket1.htm</ref>
==Nomenclature==
IUPAC naming system requires the following steps in order to appropriately name molecules with aldehyde functional groups:
# Locate the longest carbon chain in the molecule that contains the aldehyde group and name it as if it were an alkane.
# Replace the ''-e'' ending of the alkane with ''-al''
# Because aldehydes are always at the terminal end of the chain their carbonyl carbon is labeled 1
# Name the remaining functional groups in the chain
Common names for Aldehydes can be categorized into two separate groups. The first is a derivative of the name used for carboxylic acids such as formic acid (HCO2H) which is used to name the common aldehyde, formaldehyde (CH2O). The second group of commonly named aldehydes comes from flavorants such as 3-phenyl-2-propenal which is almost always referred to as cinnamaldehyde.<ref>http://science.marshall.edu/castella/chm204/chap14.pdf</ref>
==Physical Properties of Aldehydes==
[[File:Aldehyde resonance.svg|320x240px|thumbnail]]
The carbonyl group within aldehydes creates a polar functional group with a dipole moment of approximately 2.5. The polarity allows for a resonance structure that shifts a pair of shared electrons between carbon and oxygen to the oxygen atoms resulting in a positively charged carbocation and a negatively charged oxygen atom as shown to the right. In addition to the stabilizing effect from this resonance, the lone pair on the oxygen of the carbonyl also acts as a hydrogen acceptor and therefore increases the solubility aldehydes when compared to hydrocarbons to 0.04g/100mL. The polarity of the aldehyde's carbonyl carbon allows for fast, endothermic addition of water and even faster, exothermic elimination of water. The presence of the oxygen in aldehydes increases the basicity of the group when compared with a regular alkene group. It is this additional basicity which lowers the transition state energy for these addition/elimination reactions to occur much more rapidly than for alkenes.<ref>http://www.chemguide.co.uk/organicprops/carbonyls/background.html</ref>
==Aldehyde Synthesis==
Aldehydes can be formed by several methods:
#Anti-Markovnikov hydration of alkynes
#Oxidation of 1° Alcohols
#Glycol Cleavage
#Ozonoloysis of Alkenes
Aldehydes act as a vital intermediate molecule for the assembly of more complex organic molecules.<ref>http://www.organic-reaction.com/synthetic-protocols/functionals-groups/aldehyde/</ref>
[[File:Hydration of alkynes.svg|320x240px|thumbnail]][[File:Corey-Suggs Übersicht V1.svg|400px|thumbnail]][[File:Glycol Cleavage.svg|thumbnail]][[File:Ozonolysis of alkenes.svg|300px|thumbnail]]
==Roles of Aldehyde in Biochemistry==
{{Refimprove|section}}
One of the major roles of aldehydes in biochemistry is found within carbohydrates. Carbohydrates are the most abundant natural organic compound and are used by the body to store energy, found in cell walls to support cell structure, and make up a portion of the RNA and DNA backbones. Carbohydrates play key roles throughout the body; for example, the immune system binds complement proteins to carbohydrates in order to signal the body to attack foreign cells. Glyceraldehyde and dihydroxyacetone are intermediates for glycolysis, <small>D</small>-Eurythrose is an intermediate in carbohydrate metabolism, <small>D</small>-Arabinose is present in cell walls, <small>L</small>-Arabinose is present in plant glycoproteins, <small>D</small>-Galactose is found in the milk we drink, and so much more.<ref>Professor Viadiu-Lecture #9</ref>
{{BookCat}}
ixlb77wbgtdes2jdvjkxwcdw7sg0wpw
4676281
4676278
2026-10-15T17:18:19Z
DMacks
94753
"aldehyde" is not a proper noun. Ton of other typographic and punct cleanups
4676281
wikitext
text/x-wiki
==Introduction==
An '''aldehyde''' is a major functional group in Biochemistry with the general formula, RCHO. This formula is made up of a carbonyl functional group where the two remaining bonds of the carbon are used to bond to a Hydrogen and an R functional group which can be a second hydrogen, an alkyl or an aryl group. Due to the presence of the hydrogen on the central carbon, aldehydes are by definition located at the end of a carbon chain, unlike ketones that by definition are somewhere in the middle of the carbon chain.<ref>http://www2.chemistry.msu.edu/faculty/reusch/virttxtjml/aldket1.htm</ref>
==Nomenclature==
IUPAC naming system requires the following steps in order to appropriately name molecules with aldehyde functional groups:
# Locate the longest carbon chain in the molecule that contains the aldehyde group and name it as if it were an alkane.
# Replace the ''-e'' ending of the alkane with ''-al''
# Because aldehydes are always at the terminal end of the chain their carbonyl carbon is labeled 1
# Name the remaining functional groups in the chain
Common names for aldehydes can be categorized into two separate groups. The first is a derivative of the name used for carboxylic acids, such as formic acid (HCO<sub>2</sub>H) that gives rise to the common name of the analogous aldehyde formaldehyde (CH<sub>2</sub>O). The second group of commonly named aldehydes comes from their role as flavorants, such as 3-phenyl-2-propenal that is almost always referred to as cinnamaldehyde.<ref>http://science.marshall.edu/castella/chm204/chap14.pdf</ref>
==Physical Properties of Aldehydes==
[[File:Aldehyde resonance.svg|320x240px|thumbnail]]
The carbonyl group within aldehydes creates a polar functional group with a dipole moment of approximately 2.5. The polarity allows for a resonance structure that shifts a pair of shared electrons between carbon and oxygen to the oxygen atoms resulting in a positively charged carbocation and a negatively charged oxygen atom as shown to the right. In addition to the stabilizing effect from this resonance, the lone pair on the oxygen of the carbonyl also acts as a hydrogen acceptor and therefore increases the solubility aldehydes when compared to hydrocarbons to 0.04g/100mL. The polarity of the aldehyde's carbonyl carbon allows for fast, endothermic addition of water and even faster, exothermic elimination of water. The presence of the oxygen in aldehydes increases the basicity of the group when compared with a regular alkene group. It is this additional basicity which lowers the transition state energy for these addition/elimination reactions to occur much more rapidly than for alkenes.<ref>http://www.chemguide.co.uk/organicprops/carbonyls/background.html</ref>
==Aldehyde Synthesis==
Aldehydes can be formed by several methods:
#Anti-Markovnikov hydration of alkynes
#Oxidation of 1° Alcohols
#Glycol Cleavage
#Ozonoloysis of Alkenes
Aldehydes act as a vital intermediate molecule for the assembly of more complex organic molecules.<ref>http://www.organic-reaction.com/synthetic-protocols/functionals-groups/aldehyde/</ref>
[[File:Hydration of alkynes.svg|320x240px|thumbnail]][[File:Corey-Suggs Übersicht V1.svg|400px|thumbnail]][[File:Glycol Cleavage.svg|thumbnail]][[File:Ozonolysis of alkenes.svg|300px|thumbnail]]
==Roles of Aldehyde in Biochemistry==
{{Refimprove|section}}
One of the major roles of aldehydes in biochemistry is found within carbohydrates. Carbohydrates are the most abundant natural organic compound and are used by the body to store energy, found in cell walls to support cell structure, and make up a portion of the RNA and DNA backbones. Carbohydrates play key roles throughout the body; for example, the immune system binds complement proteins to carbohydrates in order to signal the body to attack foreign cells. Glyceraldehyde and dihydroxyacetone are intermediates for glycolysis, <small>D</small>-Eurythrose is an intermediate in carbohydrate metabolism, <small>D</small>-Arabinose is present in cell walls, <small>L</small>-Arabinose is present in plant glycoproteins, <small>D</small>-Galactose is found in the milk we drink, and so much more.<ref>Professor Viadiu-Lecture #9</ref>
{{BookCat}}
ct8gz9t315ev43oh4k8d2bu75tcmucj
Aros/Platforms/Arm Raspberry Pi support
0
286123
4676261
4676212
2026-10-15T13:10:10Z
Jeff1138
301139
4676261
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 512Mb+ RAM
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 - working
* Pi500 wedge with up to date bootloader via PiOS - working
* Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 D0 (rev1.1) - untested
* Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 C1 (Rev1.0) - untested
* 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 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 '''fan''' to prevent overheating cpu 82C+ throttling
* Pi02W - Quad A53 64bit - boots but [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 usb not working but did in the past],
* 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]
====64bit====
'''Download''' A [https://archive.org/details/piAROS Pi Distribution (Distro) has started] and the contents copied to fat32 8GB+ microSD card (there will be drawers/folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi. And power on. [https://pi.amiga.icu/ Repository]
'''Not recommended''' but [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 nightly builds] [https://sourceforge.net/projects/aros/files/ and alternative site and nightly2] which is a test version of beta limited apps with both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd to a SD or SSD as appropriate.
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 (once fault found, FAT 0x0FFFFFF7 bad cluster so no files written after that, no repair). Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2138&pid=15057#post_15057 Aros forum thread], [https://forums.raspberrypi.com/viewforum.php?f=179 Raspberry Pi Aros Dev and User forums], [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 previous 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 power off
*if asking for password again - 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
*...waiting for an address - Disconnect and try Connect
Until, Connected to <router> - 192.168.x.x
For lan ethernet port, please use Network prefs and the following hardware is
*lan9514 Pi3b Pi2 not supported at the moment
*lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s)
*bcmgenet Pi4 Pi400 choose for Device bcmgenet.device
*cdnsgem Pi5 Pi500 Pi500+ RP1 i/o for cadencegem
(network prefs may forget random information when rebooted)
Summary
<pre>
*3b ethernet not supported, usb ethernet not working but wifi prefs setup works
*3b+ wifi working and ethernet works
*4 untested
*400 wifi and ethernet untested
*5 wifi and ethernet untested
*500 wifi and ethernet untested
*500+ wifi works
</pre>
Type in 'aarch64' in the [https://archives.arosworld.org/index.php?function=search&tool=simple search box] and you will see available software packages / apps. apkg can be used to inspect and install applications.
[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 css and javascript websites can be slow to load or resolve (no JIT) and nothing from 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) aka Google Chrome 126 or iPhone aka Safari 17 setting in menus. Html5test gives 189 (1.29), 300 (1.31), 311 (1.33) out of 555, some bigger Amiga like browsers are around 370+ but it does less better.
You may have to delete the cache (Menu -> Page -> Delete cache) to fully retest big Amelinium updates or free up space.
Be aware [https://pianetaamiga.it/en/reportage-pianeta-amiga-2026/ some site pages] can use up hundreds of MBs of cache very quickly
DNS lookup failed... close browser and reboot and setup wifi again - repeat until it works again
youtube video and audio - js button for javascript must be on/shaded - Settings -> Soundoutput - AHI
Any restriction to lower resolutions is due to [https://docs.invidious.io/faq/#q-where-are-the-360p480p1080p-quality-options bandwidth]. You can always [https://docs.invidious.io/installation/#install-the-dependencies self host] for better or wait for the newest version of Odyssey OWB (webkit browser). Pi3 can expect 480p (wifi) to 720p (ethernet). Pi4
Telegram https://t.me/s/channel_name for public messages from vamped_amiga chatamigagames demoscenecracktros
*art local js apps like dpaint.js
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
<pre>
*bthid keyboard mouse support
*btserial serial
*btpan short range wireless connecting devices
</pre>
Only the Pi5 has a RTC real time clock, the other Pis will need to use ntp services [https://github.com/aros-development-team/AROS/commit/29cd4116330dc7f692d90757eacc59fb3f31ae70 sntp] with 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://github.com/bohunamiga/PiNTP PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. Can use date in a shell e.g. date 24-Dec-2026 23:59:59 but this will need to be done again after every reset/power off. Maybe [https://github.com/aros-development-team/AROS/commit/28674a157bc56175aa668e7b62dca6fa740578dc ds3231 rtc with dtoverlay=i2c-rtc,ds3231 in config.txt]
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+]. Alternative of [https://homspace.nl/samplerbox/ SamplerBox].
Will need developer clang 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], [https://arosarchives.os4depot.net/?function=showfile&file=audio/misc/timidity.lha timidity],
Regarding 680x0 emulation, there are several options (not implemented yet) 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]
Hopefully getting Pi3 up to 25Mhz 68040 (non JIT) and 50Mhz 68040 (JIT)
Pi4 getting up to 50Mhz 68040 (no JIT) and 100Mhz 68040 (JIT)
[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 (Cntrl + C to end)
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-->
|-
|}
==== 32bit ====
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],
[https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 From the Aros Raspberry pi 3 64bit thread]
Instructions on building 64-bit Raspberry Pi AROS and cross-compiler from sources.
You will need:
- Ubuntu 24.04 or 26.04
- qemu-system-aarch64 installed
- Internet connection
- rpi-scripts.tar.gz downloaded (https://axrt.org/download/aros/rpi/rpi-scripts.tar.gz)
1) Install prerequisites:
sudo apt install git gcc g++ make gawk bison flex bzip2 netpbm autoconf automake libc6-dev liblzo2-dev libpng-dev gcc-multilib byacc python3-mako cmake yasm curl nasm
2) Clone sources
cd <project-directory>
git clone https://github.com/aros-development-team/AROS.git --recurse-submodules
3) Extract rpi-scripts.tar.gz. Copy all files into your project directory so that you have:
AROS (the directory with cloned sources)
fix-dotdot.py
rebuild.sh
recreate-sdcard.sh
run-qemu.sh
update-sdcard.sh
4) Run ./rebuild.sh. Select option 1) toolchain-core-aarch64
This will execute process of building a cross-compiler. During this process packages will be downloaded from Internet. This process can take up to 2 hours. If there are some missing dependencies, install them with 'sudo apt install' and restart this step.
5) Run ./rebuild.sh again. Select option 2) core-raspi-aarch64
This will build system files for 64-bit Raspberry Pi AROS. This process can take around an hour.
6) Run ./recreate-sdcard.sh
This will create an sdcard.img file with contents of previous step.
7) Run ./run-qemu.sh
This will start QEMU with SD card image and ROM images. It will boot into AROS.
=====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/h.264 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 [https://docs.mesa3d.org/drivers/v3d.html 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 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 maybe affected due to the lack of custom support in the GPU with Aros. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur.
[https://github.com/hermanhermitage/videocoreiv/wiki/VideoCore-IV-Programmers-Manual Dual VDP] and scalable QPU in [https://docs.mesa3d.org/drivers/vc4.html VC4] and x.264/h.264 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 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 nm, peak at 880 nm and trails off at 940 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
CM4S04016 4GB RAM 16Gb KLMAG1JETD-B041
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>
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.
Doubtful, on any [https://www.web3d.org/ Web3d] [https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API WebGL] or [https://github.com/immersive-web/webxr WebXR] [https://developer.mozilla.org/en-US/docs/Web/API/WebXR_Device_API Device API] [https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource XRInputSource] support. Hopefully, never/limited support features like location, peer-to-peer, invasive web apps, unwarranted storage, payments, proprietary video streaming etc
*spreadsheet [https://git.sheetjs.com/sheetjs/sheetjs sheetjs] [https://github.com/mleibman/SlickGrid SlickGrid] [https://github.com/6pac/SlickGrid SlickGrid] [https://github.com/jspreadsheet/ce jspreadsheet ce] [https://github.com/dream-num/Luckysheet Luckysheet] [https://github.com/ruilisi/fortune-sheet fortune-sheet] [https://github.com/dream-num/univer/ univer] probably without xlsx support
*presentations [https://github.com/impress/impress.js/ impress.js simplified] [https://github.com/bwlewis/slides slides] [https://zenomt.github.io/mdslides/ github markdown slides] [https://github.com/Patternslib/slides Patternslib slides markdown] probably without pptx support
*weather [https://github.com/kaushalsahu07/weather weather], [https://github.com/Himanshu3412/Weather-Forecast Weather Forecast],
==Future==
[https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2]
[https://tube.cadence.moe/ Cloudtube], [https://github.com/TeamPiped/documentation/blob/main/content/docs/public-instances/index.md TeamPiped], [], [], [],
[https://hyperpipe.codeberg.page/ hyperpipe], [https://ytify.pp.ua/ ytify], [], [],
[ ytdl], [https://github.com/golddominik893/liberatube liberatube]
[https://git.lolcat.ca/lolcat/4get 4get], [https://github.com/hnhx/librex librex], [], [],
{{BookCat}}
i5eued2z6ofvhixn73qjqqn9v53atim
4676262
4676261
2026-10-15T13:11:59Z
Jeff1138
301139
4676262
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 512Mb+ RAM
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 - working
* Pi500 wedge with up to date bootloader via PiOS - working
* Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 D0 (rev1.1) - untested
* Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 C1 (Rev1.0) - untested
* 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 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 '''fan''' to prevent overheating cpu 82C+ throttling
* Pi02W - Quad A53 64bit - boots but [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 usb not working but did in the past],
* 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]
====64bit====
'''Download''' A [https://archive.org/details/piAROS Pi Distribution (Distro) has started] and the contents copied to fat32 8GB+ microSD card (there will be drawers/folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi. And power on. [https://pi.amiga.icu/ Repository]
'''Not recommended''' but [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 nightly builds] [https://sourceforge.net/projects/aros/files/ and alternative site and nightly2] which is a test version of '''very few''' apps with both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd to a SD or SSD as appropriate.
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 (once fault found, FAT 0x0FFFFFF7 bad cluster so no files written after that, no repair). Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2138&pid=15057#post_15057 Aros forum thread], [https://forums.raspberrypi.com/viewforum.php?f=179 Raspberry Pi Aros Dev and User forums], [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 previous 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 power off
*if asking for password again - 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
*...waiting for an address - Disconnect and try Connect
Until, Connected to <router> - 192.168.x.x
For lan ethernet port, please use Network prefs and the following hardware is
*lan9514 Pi3b Pi2 not supported at the moment
*lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s)
*bcmgenet Pi4 Pi400 choose for Device bcmgenet.device
*cdnsgem Pi5 Pi500 Pi500+ RP1 i/o for cadencegem
(network prefs may forget random information when rebooted)
Summary
<pre>
*3b ethernet not supported, usb ethernet not working but wifi prefs setup works
*3b+ wifi working and ethernet works
*4 untested
*400 wifi and ethernet untested
*5 wifi and ethernet untested
*500 wifi and ethernet untested
*500+ wifi works
</pre>
Type in 'aarch64' in the [https://archives.arosworld.org/index.php?function=search&tool=simple search box] and you will see available software packages / apps. apkg can be used to inspect and install applications.
[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 css and javascript websites can be slow to load or resolve (no JIT) and nothing from 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) aka Google Chrome 126 or iPhone aka Safari 17 setting in menus. Html5test gives 189 (1.29), 300 (1.31), 311 (1.33) out of 555, some bigger Amiga like browsers are around 370+ but it does less better.
You may have to delete the cache (Menu -> Page -> Delete cache) to fully retest big Amelinium updates or free up space.
Be aware [https://pianetaamiga.it/en/reportage-pianeta-amiga-2026/ some site pages] can use up hundreds of MBs of cache very quickly
DNS lookup failed... close browser and reboot and setup wifi again - repeat until it works again
youtube video and audio - js button for javascript must be on/shaded - Settings -> Soundoutput - AHI
Any restriction to lower resolutions is due to [https://docs.invidious.io/faq/#q-where-are-the-360p480p1080p-quality-options bandwidth]. You can always [https://docs.invidious.io/installation/#install-the-dependencies self host] for better or wait for the newest version of Odyssey OWB (webkit browser). Pi3 can expect 480p (wifi) to 720p (ethernet). Pi4
Telegram https://t.me/s/channel_name for public messages from vamped_amiga chatamigagames demoscenecracktros
*art local js apps like dpaint.js
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
<pre>
*bthid keyboard mouse support
*btserial serial
*btpan short range wireless connecting devices
</pre>
Only the Pi5 has a RTC real time clock, the other Pis will need to use ntp services [https://github.com/aros-development-team/AROS/commit/29cd4116330dc7f692d90757eacc59fb3f31ae70 sntp] with 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://github.com/bohunamiga/PiNTP PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. Can use date in a shell e.g. date 24-Dec-2026 23:59:59 but this will need to be done again after every reset/power off. Maybe [https://github.com/aros-development-team/AROS/commit/28674a157bc56175aa668e7b62dca6fa740578dc ds3231 rtc with dtoverlay=i2c-rtc,ds3231 in config.txt]
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+]. Alternative of [https://homspace.nl/samplerbox/ SamplerBox].
Will need developer clang 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], [https://arosarchives.os4depot.net/?function=showfile&file=audio/misc/timidity.lha timidity],
Regarding 680x0 emulation, there are several options (not implemented yet) 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]
Hopefully getting Pi3 up to 25Mhz 68040 (non JIT) and 50Mhz 68040 (JIT)
Pi4 getting up to 50Mhz 68040 (no JIT) and 100Mhz 68040 (JIT)
[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 (Cntrl + C to end)
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-->
|-
|}
==== 32bit ====
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],
[https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 From the Aros Raspberry pi 3 64bit thread]
Instructions on building 64-bit Raspberry Pi AROS and cross-compiler from sources.
You will need:
- Ubuntu 24.04 or 26.04
- qemu-system-aarch64 installed
- Internet connection
- rpi-scripts.tar.gz downloaded (https://axrt.org/download/aros/rpi/rpi-scripts.tar.gz)
1) Install prerequisites:
sudo apt install git gcc g++ make gawk bison flex bzip2 netpbm autoconf automake libc6-dev liblzo2-dev libpng-dev gcc-multilib byacc python3-mako cmake yasm curl nasm
2) Clone sources
cd <project-directory>
git clone https://github.com/aros-development-team/AROS.git --recurse-submodules
3) Extract rpi-scripts.tar.gz. Copy all files into your project directory so that you have:
AROS (the directory with cloned sources)
fix-dotdot.py
rebuild.sh
recreate-sdcard.sh
run-qemu.sh
update-sdcard.sh
4) Run ./rebuild.sh. Select option 1) toolchain-core-aarch64
This will execute process of building a cross-compiler. During this process packages will be downloaded from Internet. This process can take up to 2 hours. If there are some missing dependencies, install them with 'sudo apt install' and restart this step.
5) Run ./rebuild.sh again. Select option 2) core-raspi-aarch64
This will build system files for 64-bit Raspberry Pi AROS. This process can take around an hour.
6) Run ./recreate-sdcard.sh
This will create an sdcard.img file with contents of previous step.
7) Run ./run-qemu.sh
This will start QEMU with SD card image and ROM images. It will boot into AROS.
=====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/h.264 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 [https://docs.mesa3d.org/drivers/v3d.html 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 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 maybe affected due to the lack of custom support in the GPU with Aros. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur.
[https://github.com/hermanhermitage/videocoreiv/wiki/VideoCore-IV-Programmers-Manual Dual VDP] and scalable QPU in [https://docs.mesa3d.org/drivers/vc4.html VC4] and x.264/h.264 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 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 nm, peak at 880 nm and trails off at 940 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
CM4S04016 4GB RAM 16Gb KLMAG1JETD-B041
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>
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.
Doubtful, on any [https://www.web3d.org/ Web3d] [https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API WebGL] or [https://github.com/immersive-web/webxr WebXR] [https://developer.mozilla.org/en-US/docs/Web/API/WebXR_Device_API Device API] [https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource XRInputSource] support. Hopefully, never/limited support features like location, peer-to-peer, invasive web apps, unwarranted storage, payments, proprietary video streaming etc
*spreadsheet [https://git.sheetjs.com/sheetjs/sheetjs sheetjs] [https://github.com/mleibman/SlickGrid SlickGrid] [https://github.com/6pac/SlickGrid SlickGrid] [https://github.com/jspreadsheet/ce jspreadsheet ce] [https://github.com/dream-num/Luckysheet Luckysheet] [https://github.com/ruilisi/fortune-sheet fortune-sheet] [https://github.com/dream-num/univer/ univer] probably without xlsx support
*presentations [https://github.com/impress/impress.js/ impress.js simplified] [https://github.com/bwlewis/slides slides] [https://zenomt.github.io/mdslides/ github markdown slides] [https://github.com/Patternslib/slides Patternslib slides markdown] probably without pptx support
*weather [https://github.com/kaushalsahu07/weather weather], [https://github.com/Himanshu3412/Weather-Forecast Weather Forecast],
==Future==
[https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2]
[https://tube.cadence.moe/ Cloudtube], [https://github.com/TeamPiped/documentation/blob/main/content/docs/public-instances/index.md TeamPiped], [], [], [],
[https://hyperpipe.codeberg.page/ hyperpipe], [https://ytify.pp.ua/ ytify], [], [],
[ ytdl], [https://github.com/golddominik893/liberatube liberatube]
[https://git.lolcat.ca/lolcat/4get 4get], [https://github.com/hnhx/librex librex], [], [],
{{BookCat}}
5jq05agit1whfx6ihmsjd7tuztzij9t
4676263
4676262
2026-10-15T13:15:09Z
Jeff1138
301139
4676263
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 512Mb+ RAM
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 - working
* Pi500 wedge with up to date bootloader via PiOS - working
* Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 D0 (rev1.1) - untested
* Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 C1 (Rev1.0) - untested
* 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 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 '''fan''' to prevent overheating cpu 82C+ throttling
* Pi02W - Quad A53 64bit - boots but [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 usb not working but did in the past],
* 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]
====64bit====
'''Download''' A [https://archive.org/details/piAROS Pi Distribution (Distro) has started] and the contents copied to fat32 8GB+ microSD card (there will be drawers/folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi. And power on. [https://pi.amiga.icu/ Repository]
'''Not recommended''' but [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 nightly builds] [https://sourceforge.net/projects/aros/files/ and alternative site and nightly2] which is a test version of '''very few''' apps with both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd to a SD or SSD as appropriate.
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 (once fault found, FAT 0x0FFFFFF7 bad cluster so no files written after that, no repair). Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2138&pid=15057#post_15057 Aros forum thread], [https://forums.raspberrypi.com/viewforum.php?f=179 Raspberry Pi Aros Dev and User forums], [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 previous Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix]
*Pi5
*Pi400 boots with '''USB3''' port based sata3 ssd on Pi400
*Pi4 untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager)
*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 power off
*if asking for password again - 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
*...waiting for an address - Disconnect and try Connect
Until, Connected to <router> - 192.168.x.x
For lan ethernet port, please use Network prefs and the following hardware is
*lan9514 Pi3b Pi2 not supported at the moment
*lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s)
*bcmgenet Pi4 Pi400 choose for Device bcmgenet.device
*cdnsgem Pi5 Pi500 Pi500+ RP1 i/o for cadencegem
(network prefs may forget random information when rebooted)
Summary
<pre>
*3b ethernet not supported, usb ethernet not working but wifi prefs setup works
*3b+ wifi working and ethernet works
*4 untested
*400 wifi and ethernet untested
*5 wifi and ethernet untested
*500 wifi and ethernet untested
*500+ wifi works
</pre>
Type in 'aarch64' in the [https://archives.arosworld.org/index.php?function=search&tool=simple search box] and you will see available software packages / apps. apkg can be used to inspect and install applications.
[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 css and javascript websites can be slow to load or resolve (no JIT) and nothing from 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) aka Google Chrome 126 or iPhone aka Safari 17 setting in menus. Html5test gives 189 (1.29), 300 (1.31), 311 (1.33) out of 555, some bigger Amiga like browsers are around 370+ but it does less better.
You may have to delete the cache (Menu -> Page -> Delete cache) to fully retest big Amelinium updates or free up space.
Be aware [https://pianetaamiga.it/en/reportage-pianeta-amiga-2026/ some site pages] can use up hundreds of MBs of cache very quickly
DNS lookup failed... close browser and reboot and setup wifi again - repeat until it works again
youtube video and audio - js button for javascript must be on/shaded - Settings -> Soundoutput - AHI
Any restriction to lower resolutions is due to [https://docs.invidious.io/faq/#q-where-are-the-360p480p1080p-quality-options bandwidth]. You can always [https://docs.invidious.io/installation/#install-the-dependencies self host] for better or wait for the newest version of Odyssey OWB (webkit browser). Pi3 can expect 480p (wifi) to 720p (ethernet). Pi4
Telegram https://t.me/s/channel_name for public messages from vamped_amiga chatamigagames demoscenecracktros
*art local js apps like dpaint.js
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
<pre>
*bthid keyboard mouse support
*btserial serial
*btpan short range wireless connecting devices
</pre>
Only the Pi5 has a RTC real time clock, the other Pis will need to use ntp services [https://github.com/aros-development-team/AROS/commit/29cd4116330dc7f692d90757eacc59fb3f31ae70 sntp] with 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://github.com/bohunamiga/PiNTP PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. Can use date in a shell e.g. date 24-Dec-2026 23:59:59 but this will need to be done again after every reset/power off. Maybe [https://github.com/aros-development-team/AROS/commit/28674a157bc56175aa668e7b62dca6fa740578dc ds3231 rtc with dtoverlay=i2c-rtc,ds3231 in config.txt]
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+]. Alternative of [https://homspace.nl/samplerbox/ SamplerBox].
Will need developer clang 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], [https://arosarchives.os4depot.net/?function=showfile&file=audio/misc/timidity.lha timidity],
Regarding 680x0 emulation, there are several options (not implemented yet) 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]
Hopefully getting Pi3 up to 25Mhz 68040 (non JIT) and 50Mhz 68040 (JIT)
Pi4 getting up to 50Mhz 68040 (no JIT) and 100Mhz 68040 (JIT)
[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 (Cntrl + C to end)
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-->
|-
|}
==== 32bit ====
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],
[https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 From the Aros Raspberry pi 3 64bit thread]
Instructions on building 64-bit Raspberry Pi AROS and cross-compiler from sources.
You will need:
- Ubuntu 24.04 or 26.04
- qemu-system-aarch64 installed
- Internet connection
- rpi-scripts.tar.gz downloaded (https://axrt.org/download/aros/rpi/rpi-scripts.tar.gz)
1) Install prerequisites:
sudo apt install git gcc g++ make gawk bison flex bzip2 netpbm autoconf automake libc6-dev liblzo2-dev libpng-dev gcc-multilib byacc python3-mako cmake yasm curl nasm
2) Clone sources
cd <project-directory>
git clone https://github.com/aros-development-team/AROS.git --recurse-submodules
3) Extract rpi-scripts.tar.gz. Copy all files into your project directory so that you have:
AROS (the directory with cloned sources)
fix-dotdot.py
rebuild.sh
recreate-sdcard.sh
run-qemu.sh
update-sdcard.sh
4) Run ./rebuild.sh. Select option 1) toolchain-core-aarch64
This will execute process of building a cross-compiler. During this process packages will be downloaded from Internet. This process can take up to 2 hours. If there are some missing dependencies, install them with 'sudo apt install' and restart this step.
5) Run ./rebuild.sh again. Select option 2) core-raspi-aarch64
This will build system files for 64-bit Raspberry Pi AROS. This process can take around an hour.
6) Run ./recreate-sdcard.sh
This will create an sdcard.img file with contents of previous step.
7) Run ./run-qemu.sh
This will start QEMU with SD card image and ROM images. It will boot into AROS.
=====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/h.264 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 [https://docs.mesa3d.org/drivers/v3d.html 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 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 maybe affected due to the lack of custom support in the GPU with Aros. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur.
[https://github.com/hermanhermitage/videocoreiv/wiki/VideoCore-IV-Programmers-Manual Dual VDP] and scalable QPU in [https://docs.mesa3d.org/drivers/vc4.html VC4] and x.264/h.264 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 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 nm, peak at 880 nm and trails off at 940 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
CM4S04016 4GB RAM 16Gb KLMAG1JETD-B041
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>
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.
Doubtful, on any [https://www.web3d.org/ Web3d] [https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API WebGL] or [https://github.com/immersive-web/webxr WebXR] [https://developer.mozilla.org/en-US/docs/Web/API/WebXR_Device_API Device API] [https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource XRInputSource] support. Hopefully, never/limited support features like location, peer-to-peer, invasive web apps, unwarranted storage, payments, proprietary video streaming etc
*spreadsheet [https://git.sheetjs.com/sheetjs/sheetjs sheetjs] [https://github.com/mleibman/SlickGrid SlickGrid] [https://github.com/6pac/SlickGrid SlickGrid] [https://github.com/jspreadsheet/ce jspreadsheet ce] [https://github.com/dream-num/Luckysheet Luckysheet] [https://github.com/ruilisi/fortune-sheet fortune-sheet] [https://github.com/dream-num/univer/ univer] probably without xlsx support
*presentations [https://github.com/impress/impress.js/ impress.js simplified] [https://github.com/bwlewis/slides slides] [https://zenomt.github.io/mdslides/ github markdown slides] [https://github.com/Patternslib/slides Patternslib slides markdown] probably without pptx support
*weather [https://github.com/kaushalsahu07/weather weather], [https://github.com/Himanshu3412/Weather-Forecast Weather Forecast],
==Future==
[https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2]
[https://tube.cadence.moe/ Cloudtube], [https://github.com/TeamPiped/documentation/blob/main/content/docs/public-instances/index.md TeamPiped], [], [], [],
[https://hyperpipe.codeberg.page/ hyperpipe], [https://ytify.pp.ua/ ytify], [], [],
[ ytdl], [https://github.com/golddominik893/liberatube liberatube]
[https://git.lolcat.ca/lolcat/4get 4get], [https://github.com/hnhx/librex librex], [], [],
{{BookCat}}
e4pg6zackxm2oc2f2iyijuzytvnccmh
4676264
4676263
2026-10-15T13:16:07Z
Jeff1138
301139
4676264
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 512Mb+ RAM
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 - working but not much tested
* Pi500 wedge with up to date bootloader via PiOS - working but not much testing
* Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 D0 (rev1.1) - untested
* Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 C1 (Rev1.0) - untested
* 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 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 '''fan''' to prevent overheating cpu 82C+ throttling
* Pi02W - Quad A53 64bit - boots but [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 usb not working but did in the past],
* 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]
====64bit====
'''Download''' A [https://archive.org/details/piAROS Pi Distribution (Distro) has started] and the contents copied to fat32 8GB+ microSD card (there will be drawers/folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi. And power on. [https://pi.amiga.icu/ Repository]
'''Not recommended''' but [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 nightly builds] [https://sourceforge.net/projects/aros/files/ and alternative site and nightly2] which is a test version of '''very few''' apps with both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd to a SD or SSD as appropriate.
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 (once fault found, FAT 0x0FFFFFF7 bad cluster so no files written after that, no repair). Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2138&pid=15057#post_15057 Aros forum thread], [https://forums.raspberrypi.com/viewforum.php?f=179 Raspberry Pi Aros Dev and User forums], [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 previous Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix]
*Pi500+
*Pi500
*Pi5
*Pi400 boots with '''USB3''' port based sata3 ssd on Pi400
*Pi4 untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager)
*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 power off
*if asking for password again - 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
*...waiting for an address - Disconnect and try Connect
Until, Connected to <router> - 192.168.x.x
For lan ethernet port, please use Network prefs and the following hardware is
*lan9514 Pi3b Pi2 not supported at the moment
*lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s)
*bcmgenet Pi4 Pi400 choose for Device bcmgenet.device
*cdnsgem Pi5 Pi500 Pi500+ RP1 i/o for cadencegem
(network prefs may forget random information when rebooted)
Summary
<pre>
*3b ethernet not supported, usb ethernet not working but wifi prefs setup works
*3b+ wifi working and ethernet works
*4 untested
*400 wifi and ethernet untested
*5 wifi and ethernet untested
*500 wifi and ethernet untested
*500+ wifi works
</pre>
Type in 'aarch64' in the [https://archives.arosworld.org/index.php?function=search&tool=simple search box] and you will see available software packages / apps. apkg can be used to inspect and install applications.
[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 css and javascript websites can be slow to load or resolve (no JIT) and nothing from 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) aka Google Chrome 126 or iPhone aka Safari 17 setting in menus. Html5test gives 189 (1.29), 300 (1.31), 311 (1.33) out of 555, some bigger Amiga like browsers are around 370+ but it does less better.
You may have to delete the cache (Menu -> Page -> Delete cache) to fully retest big Amelinium updates or free up space.
Be aware [https://pianetaamiga.it/en/reportage-pianeta-amiga-2026/ some site pages] can use up hundreds of MBs of cache very quickly
DNS lookup failed... close browser and reboot and setup wifi again - repeat until it works again
youtube video and audio - js button for javascript must be on/shaded - Settings -> Soundoutput - AHI
Any restriction to lower resolutions is due to [https://docs.invidious.io/faq/#q-where-are-the-360p480p1080p-quality-options bandwidth]. You can always [https://docs.invidious.io/installation/#install-the-dependencies self host] for better or wait for the newest version of Odyssey OWB (webkit browser). Pi3 can expect 480p (wifi) to 720p (ethernet). Pi4
Telegram https://t.me/s/channel_name for public messages from vamped_amiga chatamigagames demoscenecracktros
*art local js apps like dpaint.js
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
<pre>
*bthid keyboard mouse support
*btserial serial
*btpan short range wireless connecting devices
</pre>
Only the Pi5 has a RTC real time clock, the other Pis will need to use ntp services [https://github.com/aros-development-team/AROS/commit/29cd4116330dc7f692d90757eacc59fb3f31ae70 sntp] with 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://github.com/bohunamiga/PiNTP PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. Can use date in a shell e.g. date 24-Dec-2026 23:59:59 but this will need to be done again after every reset/power off. Maybe [https://github.com/aros-development-team/AROS/commit/28674a157bc56175aa668e7b62dca6fa740578dc ds3231 rtc with dtoverlay=i2c-rtc,ds3231 in config.txt]
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+]. Alternative of [https://homspace.nl/samplerbox/ SamplerBox].
Will need developer clang 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], [https://arosarchives.os4depot.net/?function=showfile&file=audio/misc/timidity.lha timidity],
Regarding 680x0 emulation, there are several options (not implemented yet) 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]
Hopefully getting Pi3 up to 25Mhz 68040 (non JIT) and 50Mhz 68040 (JIT)
Pi4 getting up to 50Mhz 68040 (no JIT) and 100Mhz 68040 (JIT)
[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 (Cntrl + C to end)
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-->
|-
|}
==== 32bit ====
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],
[https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 From the Aros Raspberry pi 3 64bit thread]
Instructions on building 64-bit Raspberry Pi AROS and cross-compiler from sources.
You will need:
- Ubuntu 24.04 or 26.04
- qemu-system-aarch64 installed
- Internet connection
- rpi-scripts.tar.gz downloaded (https://axrt.org/download/aros/rpi/rpi-scripts.tar.gz)
1) Install prerequisites:
sudo apt install git gcc g++ make gawk bison flex bzip2 netpbm autoconf automake libc6-dev liblzo2-dev libpng-dev gcc-multilib byacc python3-mako cmake yasm curl nasm
2) Clone sources
cd <project-directory>
git clone https://github.com/aros-development-team/AROS.git --recurse-submodules
3) Extract rpi-scripts.tar.gz. Copy all files into your project directory so that you have:
AROS (the directory with cloned sources)
fix-dotdot.py
rebuild.sh
recreate-sdcard.sh
run-qemu.sh
update-sdcard.sh
4) Run ./rebuild.sh. Select option 1) toolchain-core-aarch64
This will execute process of building a cross-compiler. During this process packages will be downloaded from Internet. This process can take up to 2 hours. If there are some missing dependencies, install them with 'sudo apt install' and restart this step.
5) Run ./rebuild.sh again. Select option 2) core-raspi-aarch64
This will build system files for 64-bit Raspberry Pi AROS. This process can take around an hour.
6) Run ./recreate-sdcard.sh
This will create an sdcard.img file with contents of previous step.
7) Run ./run-qemu.sh
This will start QEMU with SD card image and ROM images. It will boot into AROS.
=====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/h.264 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 [https://docs.mesa3d.org/drivers/v3d.html 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 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 maybe affected due to the lack of custom support in the GPU with Aros. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur.
[https://github.com/hermanhermitage/videocoreiv/wiki/VideoCore-IV-Programmers-Manual Dual VDP] and scalable QPU in [https://docs.mesa3d.org/drivers/vc4.html VC4] and x.264/h.264 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 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 nm, peak at 880 nm and trails off at 940 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
CM4S04016 4GB RAM 16Gb KLMAG1JETD-B041
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>
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.
Doubtful, on any [https://www.web3d.org/ Web3d] [https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API WebGL] or [https://github.com/immersive-web/webxr WebXR] [https://developer.mozilla.org/en-US/docs/Web/API/WebXR_Device_API Device API] [https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource XRInputSource] support. Hopefully, never/limited support features like location, peer-to-peer, invasive web apps, unwarranted storage, payments, proprietary video streaming etc
*spreadsheet [https://git.sheetjs.com/sheetjs/sheetjs sheetjs] [https://github.com/mleibman/SlickGrid SlickGrid] [https://github.com/6pac/SlickGrid SlickGrid] [https://github.com/jspreadsheet/ce jspreadsheet ce] [https://github.com/dream-num/Luckysheet Luckysheet] [https://github.com/ruilisi/fortune-sheet fortune-sheet] [https://github.com/dream-num/univer/ univer] probably without xlsx support
*presentations [https://github.com/impress/impress.js/ impress.js simplified] [https://github.com/bwlewis/slides slides] [https://zenomt.github.io/mdslides/ github markdown slides] [https://github.com/Patternslib/slides Patternslib slides markdown] probably without pptx support
*weather [https://github.com/kaushalsahu07/weather weather], [https://github.com/Himanshu3412/Weather-Forecast Weather Forecast],
==Future==
[https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2]
[https://tube.cadence.moe/ Cloudtube], [https://github.com/TeamPiped/documentation/blob/main/content/docs/public-instances/index.md TeamPiped], [], [], [],
[https://hyperpipe.codeberg.page/ hyperpipe], [https://ytify.pp.ua/ ytify], [], [],
[ ytdl], [https://github.com/golddominik893/liberatube liberatube]
[https://git.lolcat.ca/lolcat/4get 4get], [https://github.com/hnhx/librex librex], [], [],
{{BookCat}}
jm1woimkvsgc3psikug7ncr7wf2spfz
4676272
4676264
2026-10-15T17:05:44Z
Jeff1138
301139
4676272
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 512Mb+ RAM
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 - working but not much tested
* Pi500 wedge with up to date bootloader via PiOS - working but not much testing
* Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 D0 (rev1.1) - untested
* Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 C1 (Rev1.0) - untested
* 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 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 '''fan''' to prevent overheating cpu 82C+ throttling
* Pi02W - Quad A53 64bit - boots but [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 usb not working but did in the past],
* 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]
====64bit====
'''Download''' A [https://archive.org/details/piAROS Pi Distribution (Distro) has started] and the contents copied to fat32 8GB+ microSD card (there will be drawers/folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi. And power on. [https://pi.amiga.icu/ Repository]
'''Not recommended''' but [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 nightly builds] [https://sourceforge.net/projects/aros/files/ and alternative site and nightly2] which is a test version of '''very few''' apps with both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd to a SD or SSD as appropriate.
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 (once fault found, FAT 0x0FFFFFF7 bad cluster so no files written after that, no repair). Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2138&pid=15057#post_15057 Aros forum thread], [https://forums.raspberrypi.com/viewforum.php?f=179 Raspberry Pi Aros Dev and User forums], [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 previous Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix]
*Pi500+ untested usb3 booting or nvme ssd
*Pi500 untested usb3 booting
*Pi5 untested usb3 booting
*Pi400 boots with '''USB3''' port based sata3 ssd on Pi400
*Pi4 untested on Pi4 (may need eeprom update from PiOS or Pi SD Imager)
*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 power off
*if asking for password again - 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
*...waiting for an address - Disconnect and try Connect
Until, Connected to <router> - 192.168.x.x
For lan ethernet port, please use Network prefs and the following hardware is
*lan9514 Pi3b Pi2 not supported at the moment
*lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s)
*bcmgenet Pi4 Pi400 choose for Device bcmgenet.device
*cdnsgem Pi5 Pi500 Pi500+ RP1 i/o for cadencegem
(network prefs may forget random information when rebooted)
Summary
<pre>
*3b ethernet not supported, usb ethernet not working but wifi prefs setup works
*3b+ wifi working and ethernet works
*4 untested
*400 wifi and ethernet untested
*5 wifi and ethernet untested
*500 wifi and ethernet untested
*500+ wifi works
</pre>
Type in 'aarch64' in the [https://archives.arosworld.org/index.php?function=search&tool=simple search box] and you will see available software packages / apps. apkg can be used to inspect and install applications.
[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 css and javascript websites can be slow to load or resolve (no JIT) and nothing from 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) aka Google Chrome 126 or iPhone aka Safari 17 setting in menus. Html5test gives 189 (1.29), 300 (1.31), 311 (1.33) out of 555, some bigger Amiga like browsers are around 370+ but it does less better.
You may have to delete the cache (Menu -> Page -> Delete cache) to fully retest big Amelinium updates or free up space.
Be aware [https://pianetaamiga.it/en/reportage-pianeta-amiga-2026/ some site pages] can use up hundreds of MBs of cache very quickly
DNS lookup failed... close browser and reboot and setup wifi again - repeat until it works again
youtube video and audio - js button for javascript must be on/shaded - Settings -> Soundoutput - AHI
Any restriction to lower resolutions is due to [https://docs.invidious.io/faq/#q-where-are-the-360p480p1080p-quality-options bandwidth]. You can always [https://docs.invidious.io/installation/#install-the-dependencies self host] for better or wait for the newest version of Odyssey OWB (webkit browser). Pi3 can expect 480p (wifi) to 720p (ethernet). Pi4
Telegram https://t.me/s/channel_name for public messages from vamped_amiga chatamigagames demoscenecracktros
*art local js apps like dpaint.js
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
<pre>
*bthid keyboard mouse support
*btserial serial
*btpan short range wireless connecting devices
</pre>
Only the Pi5 has a RTC real time clock, the other Pis will need to use ntp services [https://github.com/aros-development-team/AROS/commit/29cd4116330dc7f692d90757eacc59fb3f31ae70 sntp] with 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://github.com/bohunamiga/PiNTP PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. Can use date in a shell e.g. date 24-Dec-2026 23:59:59 but this will need to be done again after every reset/power off. Maybe [https://github.com/aros-development-team/AROS/commit/28674a157bc56175aa668e7b62dca6fa740578dc ds3231 rtc with dtoverlay=i2c-rtc,ds3231 in config.txt]
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+]. Alternative of [https://homspace.nl/samplerbox/ SamplerBox].
Will need developer clang 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], [https://arosarchives.os4depot.net/?function=showfile&file=audio/misc/timidity.lha timidity],
Regarding 680x0 emulation, there are several options (not implemented yet) 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]
Hopefully getting Pi3 up to 25Mhz 68040 (non JIT) and 50Mhz 68040 (JIT)
Pi4 getting up to 50Mhz 68040 (no JIT) and 100Mhz 68040 (JIT)
[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 (Cntrl + C to end)
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-->
|-
|}
==== 32bit ====
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],
[https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 From the Aros Raspberry pi 3 64bit thread]
Instructions on building 64-bit Raspberry Pi AROS and cross-compiler from sources.
You will need:
- Ubuntu 24.04 or 26.04
- qemu-system-aarch64 installed
- Internet connection
- rpi-scripts.tar.gz downloaded (https://axrt.org/download/aros/rpi/rpi-scripts.tar.gz)
1) Install prerequisites:
sudo apt install git gcc g++ make gawk bison flex bzip2 netpbm autoconf automake libc6-dev liblzo2-dev libpng-dev gcc-multilib byacc python3-mako cmake yasm curl nasm
2) Clone sources
cd <project-directory>
git clone https://github.com/aros-development-team/AROS.git --recurse-submodules
3) Extract rpi-scripts.tar.gz. Copy all files into your project directory so that you have:
AROS (the directory with cloned sources)
fix-dotdot.py
rebuild.sh
recreate-sdcard.sh
run-qemu.sh
update-sdcard.sh
4) Run ./rebuild.sh. Select option 1) toolchain-core-aarch64
This will execute process of building a cross-compiler. During this process packages will be downloaded from Internet. This process can take up to 2 hours. If there are some missing dependencies, install them with 'sudo apt install' and restart this step.
5) Run ./rebuild.sh again. Select option 2) core-raspi-aarch64
This will build system files for 64-bit Raspberry Pi AROS. This process can take around an hour.
6) Run ./recreate-sdcard.sh
This will create an sdcard.img file with contents of previous step.
7) Run ./run-qemu.sh
This will start QEMU with SD card image and ROM images. It will boot into AROS.
=====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/h.264 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 [https://docs.mesa3d.org/drivers/v3d.html 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 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 maybe affected due to the lack of custom support in the GPU with Aros. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur.
[https://github.com/hermanhermitage/videocoreiv/wiki/VideoCore-IV-Programmers-Manual Dual VDP] and scalable QPU in [https://docs.mesa3d.org/drivers/vc4.html VC4] and x.264/h.264 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 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 nm, peak at 880 nm and trails off at 940 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
CM4S04016 4GB RAM 16Gb KLMAG1JETD-B041
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>
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.
Doubtful, on any [https://www.web3d.org/ Web3d] [https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API WebGL] or [https://github.com/immersive-web/webxr WebXR] [https://developer.mozilla.org/en-US/docs/Web/API/WebXR_Device_API Device API] [https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource XRInputSource] support. Hopefully, never/limited support features like location, peer-to-peer, invasive web apps, unwarranted storage, payments, proprietary video streaming etc
*spreadsheet [https://git.sheetjs.com/sheetjs/sheetjs sheetjs] [https://github.com/mleibman/SlickGrid SlickGrid] [https://github.com/6pac/SlickGrid SlickGrid] [https://github.com/jspreadsheet/ce jspreadsheet ce] [https://github.com/dream-num/Luckysheet Luckysheet] [https://github.com/ruilisi/fortune-sheet fortune-sheet] [https://github.com/dream-num/univer/ univer] probably without xlsx support
*presentations [https://github.com/impress/impress.js/ impress.js simplified] [https://github.com/bwlewis/slides slides] [https://zenomt.github.io/mdslides/ github markdown slides] [https://github.com/Patternslib/slides Patternslib slides markdown] probably without pptx support
*weather [https://github.com/kaushalsahu07/weather weather], [https://github.com/Himanshu3412/Weather-Forecast Weather Forecast],
==Future==
[https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2]
[https://tube.cadence.moe/ Cloudtube], [https://github.com/TeamPiped/documentation/blob/main/content/docs/public-instances/index.md TeamPiped], [], [], [],
[https://hyperpipe.codeberg.page/ hyperpipe], [https://ytify.pp.ua/ ytify], [], [],
[ ytdl], [https://github.com/golddominik893/liberatube liberatube]
[https://git.lolcat.ca/lolcat/4get 4get], [https://github.com/hnhx/librex librex], [], [],
{{BookCat}}
r4s3cb57zvqw7slmrte2fioetfyjhsb
4676273
4676272
2026-10-15T17:06:47Z
Jeff1138
301139
4676273
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 512Mb+ RAM
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 - working but not much tested
* Pi500 wedge with up to date bootloader via PiOS - working but not much testing
* Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 D0 (rev1.1) - untested
* Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 C1 (Rev1.0) - untested
* 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 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 '''fan''' to prevent overheating cpu 82C+ throttling
* Pi02W - Quad A53 64bit - boots but [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 usb not working but did in the past],
* 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]
====64bit====
'''Download''' A [https://archive.org/details/piAROS Pi Distribution (Distro) has started] and the contents copied to fat32 8GB+ microSD card (there will be drawers/folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi. And power on. [https://pi.amiga.icu/ Repository]
'''Not recommended''' but [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 nightly builds] [https://sourceforge.net/projects/aros/files/ and alternative site and nightly2] which is a test version of '''very few''' apps with both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd to a SD or SSD as appropriate.
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 (once fault found, FAT 0x0FFFFFF7 bad cluster so no files written after that, no repair). Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2138&pid=15057#post_15057 Aros forum thread], [https://forums.raspberrypi.com/viewforum.php?f=179 Raspberry Pi Aros Dev and User forums], [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 previous Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix]
*Pi500+ untested usb3 booting or nvme ssd
*Pi500 untested usb3 booting
*Pi5 untested usb3 booting
*Pi400 boots with '''USB3''' port based sata3 ssd on Pi400
*Pi4 untested (may need eeprom update from PiOS or Pi SD Imager)
*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 power off
*if asking for password again - 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
*...waiting for an address - Disconnect and try Connect
Until, Connected to <router> - 192.168.x.x
For lan ethernet port, please use Network prefs and the following hardware is
*lan9514 Pi3b Pi2 not supported at the moment
*lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s)
*bcmgenet Pi4 Pi400 choose for Device bcmgenet.device
*cdnsgem Pi5 Pi500 Pi500+ RP1 i/o for cadencegem
(network prefs may forget random information when rebooted)
Summary
<pre>
*3b ethernet not supported, usb ethernet not working but wifi prefs setup works
*3b+ wifi working and ethernet works
*4 untested
*400 wifi and ethernet untested
*5 wifi and ethernet untested
*500 wifi and ethernet untested
*500+ wifi works
</pre>
Type in 'aarch64' in the [https://archives.arosworld.org/index.php?function=search&tool=simple search box] and you will see available software packages / apps. apkg can be used to inspect and install applications.
[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 css and javascript websites can be slow to load or resolve (no JIT) and nothing from 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) aka Google Chrome 126 or iPhone aka Safari 17 setting in menus. Html5test gives 189 (1.29), 300 (1.31), 311 (1.33) out of 555, some bigger Amiga like browsers are around 370+ but it does less better.
You may have to delete the cache (Menu -> Page -> Delete cache) to fully retest big Amelinium updates or free up space.
Be aware [https://pianetaamiga.it/en/reportage-pianeta-amiga-2026/ some site pages] can use up hundreds of MBs of cache very quickly
DNS lookup failed... close browser and reboot and setup wifi again - repeat until it works again
youtube video and audio - js button for javascript must be on/shaded - Settings -> Soundoutput - AHI
Any restriction to lower resolutions is due to [https://docs.invidious.io/faq/#q-where-are-the-360p480p1080p-quality-options bandwidth]. You can always [https://docs.invidious.io/installation/#install-the-dependencies self host] for better or wait for the newest version of Odyssey OWB (webkit browser). Pi3 can expect 480p (wifi) to 720p (ethernet). Pi4
Telegram https://t.me/s/channel_name for public messages from vamped_amiga chatamigagames demoscenecracktros
*art local js apps like dpaint.js
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
<pre>
*bthid keyboard mouse support
*btserial serial
*btpan short range wireless connecting devices
</pre>
Only the Pi5 has a RTC real time clock, the other Pis will need to use ntp services [https://github.com/aros-development-team/AROS/commit/29cd4116330dc7f692d90757eacc59fb3f31ae70 sntp] with 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://github.com/bohunamiga/PiNTP PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. Can use date in a shell e.g. date 24-Dec-2026 23:59:59 but this will need to be done again after every reset/power off. Maybe [https://github.com/aros-development-team/AROS/commit/28674a157bc56175aa668e7b62dca6fa740578dc ds3231 rtc with dtoverlay=i2c-rtc,ds3231 in config.txt]
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+]. Alternative of [https://homspace.nl/samplerbox/ SamplerBox].
Will need developer clang 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], [https://arosarchives.os4depot.net/?function=showfile&file=audio/misc/timidity.lha timidity],
Regarding 680x0 emulation, there are several options (not implemented yet) 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]
Hopefully getting Pi3 up to 25Mhz 68040 (non JIT) and 50Mhz 68040 (JIT)
Pi4 getting up to 50Mhz 68040 (no JIT) and 100Mhz 68040 (JIT)
[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 (Cntrl + C to end)
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-->
|-
|}
==== 32bit ====
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],
[https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 From the Aros Raspberry pi 3 64bit thread]
Instructions on building 64-bit Raspberry Pi AROS and cross-compiler from sources.
You will need:
- Ubuntu 24.04 or 26.04
- qemu-system-aarch64 installed
- Internet connection
- rpi-scripts.tar.gz downloaded (https://axrt.org/download/aros/rpi/rpi-scripts.tar.gz)
1) Install prerequisites:
sudo apt install git gcc g++ make gawk bison flex bzip2 netpbm autoconf automake libc6-dev liblzo2-dev libpng-dev gcc-multilib byacc python3-mako cmake yasm curl nasm
2) Clone sources
cd <project-directory>
git clone https://github.com/aros-development-team/AROS.git --recurse-submodules
3) Extract rpi-scripts.tar.gz. Copy all files into your project directory so that you have:
AROS (the directory with cloned sources)
fix-dotdot.py
rebuild.sh
recreate-sdcard.sh
run-qemu.sh
update-sdcard.sh
4) Run ./rebuild.sh. Select option 1) toolchain-core-aarch64
This will execute process of building a cross-compiler. During this process packages will be downloaded from Internet. This process can take up to 2 hours. If there are some missing dependencies, install them with 'sudo apt install' and restart this step.
5) Run ./rebuild.sh again. Select option 2) core-raspi-aarch64
This will build system files for 64-bit Raspberry Pi AROS. This process can take around an hour.
6) Run ./recreate-sdcard.sh
This will create an sdcard.img file with contents of previous step.
7) Run ./run-qemu.sh
This will start QEMU with SD card image and ROM images. It will boot into AROS.
=====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/h.264 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 [https://docs.mesa3d.org/drivers/v3d.html 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 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 maybe affected due to the lack of custom support in the GPU with Aros. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur.
[https://github.com/hermanhermitage/videocoreiv/wiki/VideoCore-IV-Programmers-Manual Dual VDP] and scalable QPU in [https://docs.mesa3d.org/drivers/vc4.html VC4] and x.264/h.264 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 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 nm, peak at 880 nm and trails off at 940 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
CM4S04016 4GB RAM 16Gb KLMAG1JETD-B041
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>
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.
Doubtful, on any [https://www.web3d.org/ Web3d] [https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API WebGL] or [https://github.com/immersive-web/webxr WebXR] [https://developer.mozilla.org/en-US/docs/Web/API/WebXR_Device_API Device API] [https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource XRInputSource] support. Hopefully, never/limited support features like location, peer-to-peer, invasive web apps, unwarranted storage, payments, proprietary video streaming etc
*spreadsheet [https://git.sheetjs.com/sheetjs/sheetjs sheetjs] [https://github.com/mleibman/SlickGrid SlickGrid] [https://github.com/6pac/SlickGrid SlickGrid] [https://github.com/jspreadsheet/ce jspreadsheet ce] [https://github.com/dream-num/Luckysheet Luckysheet] [https://github.com/ruilisi/fortune-sheet fortune-sheet] [https://github.com/dream-num/univer/ univer] probably without xlsx support
*presentations [https://github.com/impress/impress.js/ impress.js simplified] [https://github.com/bwlewis/slides slides] [https://zenomt.github.io/mdslides/ github markdown slides] [https://github.com/Patternslib/slides Patternslib slides markdown] probably without pptx support
*weather [https://github.com/kaushalsahu07/weather weather], [https://github.com/Himanshu3412/Weather-Forecast Weather Forecast],
==Future==
[https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2]
[https://tube.cadence.moe/ Cloudtube], [https://github.com/TeamPiped/documentation/blob/main/content/docs/public-instances/index.md TeamPiped], [], [], [],
[https://hyperpipe.codeberg.page/ hyperpipe], [https://ytify.pp.ua/ ytify], [], [],
[ ytdl], [https://github.com/golddominik893/liberatube liberatube]
[https://git.lolcat.ca/lolcat/4get 4get], [https://github.com/hnhx/librex librex], [], [],
{{BookCat}}
0ylh3y7e5f3zmtphg5u2m574zas9zh7
4676274
4676273
2026-10-15T17:07:41Z
Jeff1138
301139
4676274
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 512Mb+ RAM
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 - working but not much tested
* Pi500 wedge with up to date bootloader via PiOS - working but not much testing
* Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 D0 (rev1.1) - untested
* Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 C1 (Rev1.0) - untested
* 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 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 '''fan''' to prevent overheating cpu 82C+ throttling
* Pi02W - Quad A53 64bit - boots but [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 usb not working but did in the past],
* 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]
====64bit====
'''Download''' A [https://archive.org/details/piAROS Pi Distribution (Distro) has started] and the contents copied to fat32 8GB+ microSD card (there will be drawers/folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi. And power on. [https://pi.amiga.icu/ Repository]
'''Not recommended''' but [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 nightly builds] [https://sourceforge.net/projects/aros/files/ and alternative site and nightly2] which is a test version of '''very few''' apps with both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd to a SD or SSD as appropriate.
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 (once fault found, FAT 0x0FFFFFF7 bad cluster so no files written after that, no repair). Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2138&pid=15057#post_15057 Aros forum thread], [https://forums.raspberrypi.com/viewforum.php?f=179 Raspberry Pi Aros Dev and User forums], [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 previous Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix]
*Pi500+ untested usb3 booting or nvme ssd
*Pi500 untested usb3 booting
*Pi5 untested usb3 booting
*Pi400 boots with '''USB3''' port based sata3 ssd
*Pi4 untested (may need eeprom update from PiOS or Pi SD Imager)
*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 power off
*if asking for password again - 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
*...waiting for an address - Disconnect and try Connect
Until, Connected to <router> - 192.168.x.x
For lan ethernet port, please use Network prefs and the following hardware is
*lan9514 Pi3b Pi2 not supported at the moment
*lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s)
*bcmgenet Pi4 Pi400 choose for Device bcmgenet.device
*cdnsgem Pi5 Pi500 Pi500+ RP1 i/o for cadencegem
(network prefs may forget random information when rebooted)
Summary
<pre>
*3b ethernet not supported, usb ethernet not working but wifi prefs setup works
*3b+ wifi working and ethernet works
*4 untested
*400 wifi and ethernet untested
*5 wifi and ethernet untested
*500 wifi and ethernet untested
*500+ wifi works
</pre>
Type in 'aarch64' in the [https://archives.arosworld.org/index.php?function=search&tool=simple search box] and you will see available software packages / apps. apkg can be used to inspect and install applications.
[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 css and javascript websites can be slow to load or resolve (no JIT) and nothing from 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) aka Google Chrome 126 or iPhone aka Safari 17 setting in menus. Html5test gives 189 (1.29), 300 (1.31), 311 (1.33) out of 555, some bigger Amiga like browsers are around 370+ but it does less better.
You may have to delete the cache (Menu -> Page -> Delete cache) to fully retest big Amelinium updates or free up space.
Be aware [https://pianetaamiga.it/en/reportage-pianeta-amiga-2026/ some site pages] can use up hundreds of MBs of cache very quickly
DNS lookup failed... close browser and reboot and setup wifi again - repeat until it works again
youtube video and audio - js button for javascript must be on/shaded - Settings -> Soundoutput - AHI
Any restriction to lower resolutions is due to [https://docs.invidious.io/faq/#q-where-are-the-360p480p1080p-quality-options bandwidth]. You can always [https://docs.invidious.io/installation/#install-the-dependencies self host] for better or wait for the newest version of Odyssey OWB (webkit browser). Pi3 can expect 480p (wifi) to 720p (ethernet). Pi4
Telegram https://t.me/s/channel_name for public messages from vamped_amiga chatamigagames demoscenecracktros
*art local js apps like dpaint.js
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
<pre>
*bthid keyboard mouse support
*btserial serial
*btpan short range wireless connecting devices
</pre>
Only the Pi5 has a RTC real time clock, the other Pis will need to use ntp services [https://github.com/aros-development-team/AROS/commit/29cd4116330dc7f692d90757eacc59fb3f31ae70 sntp] with 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://github.com/bohunamiga/PiNTP PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. Can use date in a shell e.g. date 24-Dec-2026 23:59:59 but this will need to be done again after every reset/power off. Maybe [https://github.com/aros-development-team/AROS/commit/28674a157bc56175aa668e7b62dca6fa740578dc ds3231 rtc with dtoverlay=i2c-rtc,ds3231 in config.txt]
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+]. Alternative of [https://homspace.nl/samplerbox/ SamplerBox].
Will need developer clang 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], [https://arosarchives.os4depot.net/?function=showfile&file=audio/misc/timidity.lha timidity],
Regarding 680x0 emulation, there are several options (not implemented yet) 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]
Hopefully getting Pi3 up to 25Mhz 68040 (non JIT) and 50Mhz 68040 (JIT)
Pi4 getting up to 50Mhz 68040 (no JIT) and 100Mhz 68040 (JIT)
[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 (Cntrl + C to end)
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-->
|-
|}
==== 32bit ====
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],
[https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 From the Aros Raspberry pi 3 64bit thread]
Instructions on building 64-bit Raspberry Pi AROS and cross-compiler from sources.
You will need:
- Ubuntu 24.04 or 26.04
- qemu-system-aarch64 installed
- Internet connection
- rpi-scripts.tar.gz downloaded (https://axrt.org/download/aros/rpi/rpi-scripts.tar.gz)
1) Install prerequisites:
sudo apt install git gcc g++ make gawk bison flex bzip2 netpbm autoconf automake libc6-dev liblzo2-dev libpng-dev gcc-multilib byacc python3-mako cmake yasm curl nasm
2) Clone sources
cd <project-directory>
git clone https://github.com/aros-development-team/AROS.git --recurse-submodules
3) Extract rpi-scripts.tar.gz. Copy all files into your project directory so that you have:
AROS (the directory with cloned sources)
fix-dotdot.py
rebuild.sh
recreate-sdcard.sh
run-qemu.sh
update-sdcard.sh
4) Run ./rebuild.sh. Select option 1) toolchain-core-aarch64
This will execute process of building a cross-compiler. During this process packages will be downloaded from Internet. This process can take up to 2 hours. If there are some missing dependencies, install them with 'sudo apt install' and restart this step.
5) Run ./rebuild.sh again. Select option 2) core-raspi-aarch64
This will build system files for 64-bit Raspberry Pi AROS. This process can take around an hour.
6) Run ./recreate-sdcard.sh
This will create an sdcard.img file with contents of previous step.
7) Run ./run-qemu.sh
This will start QEMU with SD card image and ROM images. It will boot into AROS.
=====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/h.264 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 [https://docs.mesa3d.org/drivers/v3d.html 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 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 maybe affected due to the lack of custom support in the GPU with Aros. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur.
[https://github.com/hermanhermitage/videocoreiv/wiki/VideoCore-IV-Programmers-Manual Dual VDP] and scalable QPU in [https://docs.mesa3d.org/drivers/vc4.html VC4] and x.264/h.264 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 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 nm, peak at 880 nm and trails off at 940 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
CM4S04016 4GB RAM 16Gb KLMAG1JETD-B041
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>
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.
Doubtful, on any [https://www.web3d.org/ Web3d] [https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API WebGL] or [https://github.com/immersive-web/webxr WebXR] [https://developer.mozilla.org/en-US/docs/Web/API/WebXR_Device_API Device API] [https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource XRInputSource] support. Hopefully, never/limited support features like location, peer-to-peer, invasive web apps, unwarranted storage, payments, proprietary video streaming etc
*spreadsheet [https://git.sheetjs.com/sheetjs/sheetjs sheetjs] [https://github.com/mleibman/SlickGrid SlickGrid] [https://github.com/6pac/SlickGrid SlickGrid] [https://github.com/jspreadsheet/ce jspreadsheet ce] [https://github.com/dream-num/Luckysheet Luckysheet] [https://github.com/ruilisi/fortune-sheet fortune-sheet] [https://github.com/dream-num/univer/ univer] probably without xlsx support
*presentations [https://github.com/impress/impress.js/ impress.js simplified] [https://github.com/bwlewis/slides slides] [https://zenomt.github.io/mdslides/ github markdown slides] [https://github.com/Patternslib/slides Patternslib slides markdown] probably without pptx support
*weather [https://github.com/kaushalsahu07/weather weather], [https://github.com/Himanshu3412/Weather-Forecast Weather Forecast],
==Future==
[https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2]
[https://tube.cadence.moe/ Cloudtube], [https://github.com/TeamPiped/documentation/blob/main/content/docs/public-instances/index.md TeamPiped], [], [], [],
[https://hyperpipe.codeberg.page/ hyperpipe], [https://ytify.pp.ua/ ytify], [], [],
[ ytdl], [https://github.com/golddominik893/liberatube liberatube]
[https://git.lolcat.ca/lolcat/4get 4get], [https://github.com/hnhx/librex librex], [], [],
{{BookCat}}
6nmlmsjtsfn6anollnfqy5i42zj9j7y
4676275
4676274
2026-10-15T17:11:16Z
Jeff1138
301139
4676275
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 512Mb+ RAM
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 - working but not much tested esp [https://github.com/aros-development-team/AROS/commit/48e9c8edcca4b5c1e1fe0b1123f2129f624af67b power button]
* Pi500 wedge with up to date bootloader via PiOS - working but not much testing esp [https://github.com/aros-development-team/AROS/commit/48e9c8edcca4b5c1e1fe0b1123f2129f624af67b power button]
* Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 D0 (rev1.1) - untested
* Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 C1 (Rev1.0) - untested
* 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 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 '''fan''' to prevent overheating cpu 82C+ throttling
* Pi02W - Quad A53 64bit - boots but [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 usb not working but did in the past],
* 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]
====64bit====
'''Download''' A [https://archive.org/details/piAROS Pi Distribution (Distro) has started] and the contents copied to fat32 8GB+ microSD card (there will be drawers/folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi. And power on. [https://pi.amiga.icu/ Repository]
'''Not recommended''' but [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 nightly builds] [https://sourceforge.net/projects/aros/files/ and alternative site and nightly2] which is a test version of '''very few''' apps with both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd to a SD or SSD as appropriate.
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 (once fault found, FAT 0x0FFFFFF7 bad cluster so no files written after that, no repair). Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2138&pid=15057#post_15057 Aros forum thread], [https://forums.raspberrypi.com/viewforum.php?f=179 Raspberry Pi Aros Dev and User forums], [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 previous Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix]
*Pi500+ untested usb3 booting or nvme ssd
*Pi500 untested usb3 booting
*Pi5 untested usb3 booting
*Pi400 boots with '''USB3''' port based sata3 ssd
*Pi4 untested (may need eeprom update from PiOS or Pi SD Imager)
*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 power off
*if asking for password again - 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
*...waiting for an address - Disconnect and try Connect
Until, Connected to <router> - 192.168.x.x
For lan ethernet port, please use Network prefs and the following hardware is
*lan9514 Pi3b Pi2 not supported at the moment
*lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s)
*bcmgenet Pi4 Pi400 choose for Device bcmgenet.device
*cdnsgem Pi5 Pi500 Pi500+ RP1 i/o for cadencegem
(network prefs may forget random information when rebooted)
Summary
<pre>
*3b ethernet not supported, usb ethernet not working but wifi prefs setup works
*3b+ wifi working and ethernet works
*4 untested
*400 wifi and ethernet untested
*5 wifi and ethernet untested
*500 wifi and ethernet untested
*500+ wifi works
</pre>
Type in 'aarch64' in the [https://archives.arosworld.org/index.php?function=search&tool=simple search box] and you will see available software packages / apps. apkg can be used to inspect and install applications.
[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 css and javascript websites can be slow to load or resolve (no JIT) and nothing from 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) aka Google Chrome 126 or iPhone aka Safari 17 setting in menus. Html5test gives 189 (1.29), 300 (1.31), 311 (1.33) out of 555, some bigger Amiga like browsers are around 370+ but it does less better.
You may have to delete the cache (Menu -> Page -> Delete cache) to fully retest big Amelinium updates or free up space.
Be aware [https://pianetaamiga.it/en/reportage-pianeta-amiga-2026/ some site pages] can use up hundreds of MBs of cache very quickly
DNS lookup failed... close browser and reboot and setup wifi again - repeat until it works again
youtube video and audio - js button for javascript must be on/shaded - Settings -> Soundoutput - AHI
Any restriction to lower resolutions is due to [https://docs.invidious.io/faq/#q-where-are-the-360p480p1080p-quality-options bandwidth]. You can always [https://docs.invidious.io/installation/#install-the-dependencies self host] for better or wait for the newest version of Odyssey OWB (webkit browser). Pi3 can expect 480p (wifi) to 720p (ethernet). Pi4
Telegram https://t.me/s/channel_name for public messages from vamped_amiga chatamigagames demoscenecracktros
*art local js apps like dpaint.js
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
<pre>
*bthid keyboard mouse support
*btserial serial
*btpan short range wireless connecting devices
</pre>
Only the Pi5 has a RTC real time clock, the other Pis will need to use ntp services [https://github.com/aros-development-team/AROS/commit/29cd4116330dc7f692d90757eacc59fb3f31ae70 sntp] with 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://github.com/bohunamiga/PiNTP PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. Can use date in a shell e.g. date 24-Dec-2026 23:59:59 but this will need to be done again after every reset/power off. Maybe [https://github.com/aros-development-team/AROS/commit/28674a157bc56175aa668e7b62dca6fa740578dc ds3231 rtc with dtoverlay=i2c-rtc,ds3231 in config.txt]
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+]. Alternative of [https://homspace.nl/samplerbox/ SamplerBox].
Will need developer clang 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], [https://arosarchives.os4depot.net/?function=showfile&file=audio/misc/timidity.lha timidity],
Regarding 680x0 emulation, there are several options (not implemented yet) 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]
Hopefully getting Pi3 up to 25Mhz 68040 (non JIT) and 50Mhz 68040 (JIT)
Pi4 getting up to 50Mhz 68040 (no JIT) and 100Mhz 68040 (JIT)
[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 (Cntrl + C to end)
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-->
|-
|}
==== 32bit ====
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],
[https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 From the Aros Raspberry pi 3 64bit thread]
Instructions on building 64-bit Raspberry Pi AROS and cross-compiler from sources.
You will need:
- Ubuntu 24.04 or 26.04
- qemu-system-aarch64 installed
- Internet connection
- rpi-scripts.tar.gz downloaded (https://axrt.org/download/aros/rpi/rpi-scripts.tar.gz)
1) Install prerequisites:
sudo apt install git gcc g++ make gawk bison flex bzip2 netpbm autoconf automake libc6-dev liblzo2-dev libpng-dev gcc-multilib byacc python3-mako cmake yasm curl nasm
2) Clone sources
cd <project-directory>
git clone https://github.com/aros-development-team/AROS.git --recurse-submodules
3) Extract rpi-scripts.tar.gz. Copy all files into your project directory so that you have:
AROS (the directory with cloned sources)
fix-dotdot.py
rebuild.sh
recreate-sdcard.sh
run-qemu.sh
update-sdcard.sh
4) Run ./rebuild.sh. Select option 1) toolchain-core-aarch64
This will execute process of building a cross-compiler. During this process packages will be downloaded from Internet. This process can take up to 2 hours. If there are some missing dependencies, install them with 'sudo apt install' and restart this step.
5) Run ./rebuild.sh again. Select option 2) core-raspi-aarch64
This will build system files for 64-bit Raspberry Pi AROS. This process can take around an hour.
6) Run ./recreate-sdcard.sh
This will create an sdcard.img file with contents of previous step.
7) Run ./run-qemu.sh
This will start QEMU with SD card image and ROM images. It will boot into AROS.
=====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/h.264 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 [https://docs.mesa3d.org/drivers/v3d.html 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 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 maybe affected due to the lack of custom support in the GPU with Aros. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur.
[https://github.com/hermanhermitage/videocoreiv/wiki/VideoCore-IV-Programmers-Manual Dual VDP] and scalable QPU in [https://docs.mesa3d.org/drivers/vc4.html VC4] and x.264/h.264 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 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 nm, peak at 880 nm and trails off at 940 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
CM4S04016 4GB RAM 16Gb KLMAG1JETD-B041
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>
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.
Doubtful, on any [https://www.web3d.org/ Web3d] [https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API WebGL] or [https://github.com/immersive-web/webxr WebXR] [https://developer.mozilla.org/en-US/docs/Web/API/WebXR_Device_API Device API] [https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource XRInputSource] support. Hopefully, never/limited support features like location, peer-to-peer, invasive web apps, unwarranted storage, payments, proprietary video streaming etc
*spreadsheet [https://git.sheetjs.com/sheetjs/sheetjs sheetjs] [https://github.com/mleibman/SlickGrid SlickGrid] [https://github.com/6pac/SlickGrid SlickGrid] [https://github.com/jspreadsheet/ce jspreadsheet ce] [https://github.com/dream-num/Luckysheet Luckysheet] [https://github.com/ruilisi/fortune-sheet fortune-sheet] [https://github.com/dream-num/univer/ univer] probably without xlsx support
*presentations [https://github.com/impress/impress.js/ impress.js simplified] [https://github.com/bwlewis/slides slides] [https://zenomt.github.io/mdslides/ github markdown slides] [https://github.com/Patternslib/slides Patternslib slides markdown] probably without pptx support
*weather [https://github.com/kaushalsahu07/weather weather], [https://github.com/Himanshu3412/Weather-Forecast Weather Forecast],
==Future==
[https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2]
[https://tube.cadence.moe/ Cloudtube], [https://github.com/TeamPiped/documentation/blob/main/content/docs/public-instances/index.md TeamPiped], [], [], [],
[https://hyperpipe.codeberg.page/ hyperpipe], [https://ytify.pp.ua/ ytify], [], [],
[ ytdl], [https://github.com/golddominik893/liberatube liberatube]
[https://git.lolcat.ca/lolcat/4get 4get], [https://github.com/hnhx/librex librex], [], [],
{{BookCat}}
dmcoaju4f1qn651azbl56p5d9hcan0r
4676286
4676275
2026-10-15T17:49:36Z
Jeff1138
301139
4676286
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 512Mb+ RAM
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 - working but not much tested esp [https://github.com/aros-development-team/AROS/commit/48e9c8edcca4b5c1e1fe0b1123f2129f624af67b power button]
* Pi500 wedge with up to date bootloader via PiOS - working but not much testing esp [https://github.com/aros-development-team/AROS/commit/48e9c8edcca4b5c1e1fe0b1123f2129f624af67b power button]
* Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 D0 (rev1.1) - untested
* Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 C1 (Rev1.0) - untested
* 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 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 '''fan''' to prevent overheating cpu 82C+ throttling
* Pi02W - Quad A53 64bit - boots but [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 usb not working but did in the past],
* 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]
====64bit====
'''Download''' A [https://archive.org/details/piAROS Pi Distribution (Distro) has started] and the contents copied to fat32 8GB+ microSD card (there will be drawers/folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi. And power on. [https://pi.amiga.icu/ Repository]
'''Not recommended''' but [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 nightly builds] [https://sourceforge.net/projects/aros/files/ and alternative site and nightly2] which is a test version of '''very few''' apps with both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd to a SD or SSD as appropriate.
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 (once fault found, FAT 0x0FFFFFF7 bad cluster so no files written after that, no repair). Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2138&pid=15057#post_15057 Aros forum thread], [https://forums.raspberrypi.com/viewforum.php?f=179 Raspberry Pi Aros Dev and User forums], [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 previous Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix]
*Pi500+ untested usb3 booting or nvme ssd
*Pi500 untested usb3 booting
*Pi5 untested usb3 booting
*Pi400 boots with '''USB3''' port based sata3 ssd
*Pi4 untested (may need eeprom update from PiOS or Pi SD Imager)
*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 power off
*if asking for password again - 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
*...waiting for an address - Disconnect and try Connect
Until, Connected to <router> - 192.168.x.x
For lan ethernet port, please use Network prefs and the following hardware is
*lan9514 Pi3b Pi2 not supported at the moment
*lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s)
*bcmgenet Pi4 Pi400 choose for Device bcmgenet.device
*cdnsgem Pi5 Pi500 Pi500+ RP1 i/o for cadencegem
(network prefs may forget random information when rebooted)
Summary
<pre>
*3b ethernet not supported, usb ethernet not working but wifi prefs setup works
*3b+ wifi working and ethernet works
*4 untested
*400 wifi and ethernet untested
*5 wifi and ethernet untested
*500 wifi and ethernet untested
*500+ wifi works
</pre>
Type in 'aarch64' in the [https://archives.arosworld.org/index.php?function=search&tool=simple search box] and you will see available software packages / apps. apkg can be used to inspect and install applications.
[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 css and javascript websites can be slow to load or resolve (no JIT) and nothing from 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) aka Google Chrome 126 or iPhone aka Safari 17 setting in menus. Html5test gives 189 (1.29), 300 (1.31), 311 (1.33) out of 555, some bigger Amiga like browsers are around 370+ but it does less better.
You may have to delete the cache (Menu -> Page -> Delete cache) to fully retest big Amelinium updates or free up space.
Be aware [https://pianetaamiga.it/en/reportage-pianeta-amiga-2026/ some site pages] can use up hundreds of MBs of cache very quickly
DNS lookup failed... close browser and reboot and setup wifi again - repeat until it works again
youtube video and audio - js button for javascript must be on/shaded - Settings -> Soundoutput - AHI
Any restriction to lower resolutions is due to [https://docs.invidious.io/faq/#q-where-are-the-360p480p1080p-quality-options bandwidth]. You can always [https://docs.invidious.io/installation/#install-the-dependencies self host] for better or wait for the newest version of Odyssey OWB (webkit browser). Pi3 can expect 480p (wifi) to 720p (ethernet). Pi4
Telegram https://t.me/s/channel_name for public messages from vamped_amiga chatamigagames demoscenecracktros
*art local js apps like dpaint.js
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
<pre>
*bthid keyboard mouse support
*btserial serial
*btpan short range wireless connecting devices
</pre>
Only the Pi5 has a RTC real time clock, the other Pis will need to use ntp services [https://github.com/aros-development-team/AROS/commit/29cd4116330dc7f692d90757eacc59fb3f31ae70 sntp] with 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://github.com/bohunamiga/PiNTP PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. Can use date in a shell e.g. date 24-Dec-2026 23:59:59 but this will need to be done again after every reset/power off. Maybe [https://github.com/aros-development-team/AROS/commit/28674a157bc56175aa668e7b62dca6fa740578dc ds3231 rtc with dtoverlay=i2c-rtc,ds3231 in config.txt]
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+]. Alternative of [https://homspace.nl/samplerbox/ SamplerBox].
Will need developer clang 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], [https://arosarchives.os4depot.net/?function=showfile&file=audio/misc/timidity.lha timidity],
Regarding 680x0 emulation, there are several options (not implemented yet) 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]
Hopefully getting Pi3 up to 25Mhz 68040 (non JIT) and 50Mhz 68040 (JIT)
Pi4 getting up to 50Mhz 68040 (no JIT) and 100Mhz 68040 (JIT)
[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 (Cntrl + C to end)
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-->
|-
|}
==== 32bit ====
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],
[https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 From the Aros Raspberry pi 3 64bit thread]
Instructions on building 64-bit Raspberry Pi AROS and cross-compiler from sources.
You will need:
- Ubuntu 24.04 or 26.04
- qemu-system-aarch64 installed
- Internet connection
- rpi-scripts.tar.gz downloaded (https://axrt.org/download/aros/rpi/rpi-scripts.tar.gz)
1) Install prerequisites:
sudo apt install git gcc g++ make gawk bison flex bzip2 netpbm autoconf automake libc6-dev liblzo2-dev libpng-dev gcc-multilib byacc python3-mako cmake yasm curl nasm
2) Clone sources
cd <project-directory>
git clone https://github.com/aros-development-team/AROS.git --recurse-submodules
3) Extract rpi-scripts.tar.gz. Copy all files into your project directory so that you have:
AROS (the directory with cloned sources)
fix-dotdot.py
rebuild.sh
recreate-sdcard.sh
run-qemu.sh
update-sdcard.sh
4) Run ./rebuild.sh. Select option 1) toolchain-core-aarch64
This will execute process of building a cross-compiler. During this process packages will be downloaded from Internet. This process can take up to 2 hours. If there are some missing dependencies, install them with 'sudo apt install' and restart this step.
5) Run ./rebuild.sh again. Select option 2) core-raspi-aarch64
This will build system files for 64-bit Raspberry Pi AROS. This process can take around an hour.
6) Run ./recreate-sdcard.sh
This will create an sdcard.img file with contents of previous step.
7) Run ./run-qemu.sh
This will start QEMU with SD card image and ROM images. It will boot into AROS.
=====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===
[https://github.com/aros-development-team/AROS/blob/7016ce28bfdb754182edb16011c98faaf5413c29/arch/aarch64-raspi/boot/mmakefile.src#L180 boot makefile]
===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/h.264 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 [https://docs.mesa3d.org/drivers/v3d.html 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 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 maybe affected due to the lack of custom support in the GPU with Aros. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur.
[https://github.com/hermanhermitage/videocoreiv/wiki/VideoCore-IV-Programmers-Manual Dual VDP] and scalable QPU in [https://docs.mesa3d.org/drivers/vc4.html VC4] and x.264/h.264 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 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 nm, peak at 880 nm and trails off at 940 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
CM4S04016 4GB RAM 16Gb KLMAG1JETD-B041
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>
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.
Doubtful, on any [https://www.web3d.org/ Web3d] [https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API WebGL] or [https://github.com/immersive-web/webxr WebXR] [https://developer.mozilla.org/en-US/docs/Web/API/WebXR_Device_API Device API] [https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource XRInputSource] support. Hopefully, never/limited support features like location, peer-to-peer, invasive web apps, unwarranted storage, payments, proprietary video streaming etc
*spreadsheet [https://git.sheetjs.com/sheetjs/sheetjs sheetjs] [https://github.com/mleibman/SlickGrid SlickGrid] [https://github.com/6pac/SlickGrid SlickGrid] [https://github.com/jspreadsheet/ce jspreadsheet ce] [https://github.com/dream-num/Luckysheet Luckysheet] [https://github.com/ruilisi/fortune-sheet fortune-sheet] [https://github.com/dream-num/univer/ univer] probably without xlsx support
*presentations [https://github.com/impress/impress.js/ impress.js simplified] [https://github.com/bwlewis/slides slides] [https://zenomt.github.io/mdslides/ github markdown slides] [https://github.com/Patternslib/slides Patternslib slides markdown] probably without pptx support
*weather [https://github.com/kaushalsahu07/weather weather], [https://github.com/Himanshu3412/Weather-Forecast Weather Forecast],
==Future==
[https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2]
[https://tube.cadence.moe/ Cloudtube], [https://github.com/TeamPiped/documentation/blob/main/content/docs/public-instances/index.md TeamPiped], [], [], [],
[https://hyperpipe.codeberg.page/ hyperpipe], [https://ytify.pp.ua/ ytify], [], [],
[ ytdl], [https://github.com/golddominik893/liberatube liberatube]
[https://git.lolcat.ca/lolcat/4get 4get], [https://github.com/hnhx/librex librex], [], [],
{{BookCat}}
r5kimjyuxb5ai4ni6xbcq4w8yt7m5w2
4676287
4676286
2026-10-15T17:50:27Z
Jeff1138
301139
4676287
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 512Mb+ RAM
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 - working but not much tested esp [https://github.com/aros-development-team/AROS/commit/48e9c8edcca4b5c1e1fe0b1123f2129f624af67b power button]
* Pi500 wedge with up to date bootloader via PiOS - working but not much testing esp [https://github.com/aros-development-team/AROS/commit/48e9c8edcca4b5c1e1fe0b1123f2129f624af67b power button]
* Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 D0 (rev1.1) - untested
* Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 C1 (Rev1.0) - untested
* 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 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 '''fan''' to prevent overheating cpu 82C+ throttling
* Pi02W - Quad A53 64bit - boots but [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 usb not working but did in the past],
* 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]
====64bit====
'''Download''' A [https://archive.org/details/piAROS Pi Distribution (Distro) has started] and the contents copied to fat32 8GB+ microSD card (there will be drawers/folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi. And power on. [https://pi.amiga.icu/ Repository]
'''Not recommended''' but [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 nightly builds] [https://sourceforge.net/projects/aros/files/ and alternative site and nightly2] which is a test version of '''very few''' apps with both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd to a SD or SSD as appropriate.
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 (once fault found, FAT 0x0FFFFFF7 bad cluster so no files written after that, no repair). Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2138&pid=15057#post_15057 Aros forum thread], [https://forums.raspberrypi.com/viewforum.php?f=179 Raspberry Pi Aros Dev and User forums], [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 previous Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix]
*Pi500+ untested usb3 booting or nvme ssd
*Pi500 untested usb3 booting
*Pi5 untested usb3 booting
*Pi400 boots with '''USB3''' port based sata3 ssd
*Pi4 untested (may need eeprom update from PiOS or Pi SD Imager)
*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 power off
*if asking for password again - 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
*...waiting for an address - Disconnect and try Connect
Until, Connected to <router> - 192.168.x.x
For lan ethernet port, please use Network prefs and the following hardware is
*lan9514 Pi3b Pi2 not supported at the moment
*lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s)
*bcmgenet Pi4 Pi400 choose for Device bcmgenet.device
*cdnsgem Pi5 Pi500 Pi500+ RP1 i/o for cadencegem
(network prefs may forget random information when rebooted)
Summary
<pre>
*3b ethernet not supported, usb ethernet not working but wifi prefs setup works
*3b+ wifi working and ethernet works
*4 untested
*400 wifi and ethernet untested
*5 wifi and ethernet untested
*500 wifi and ethernet untested
*500+ wifi works
</pre>
Type in 'aarch64' in the [https://archives.arosworld.org/index.php?function=search&tool=simple search box] and you will see available software packages / apps. apkg can be used to inspect and install applications.
[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 css and javascript websites can be slow to load or resolve (no JIT) and nothing from 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) aka Google Chrome 126 or iPhone aka Safari 17 setting in menus. Html5test gives 189 (1.29), 300 (1.31), 311 (1.33) out of 555, some bigger Amiga like browsers are around 370+ but it does less better.
You may have to delete the cache (Menu -> Page -> Delete cache) to fully retest big Amelinium updates or free up space.
Be aware [https://pianetaamiga.it/en/reportage-pianeta-amiga-2026/ some site pages] can use up hundreds of MBs of cache very quickly
DNS lookup failed... close browser and reboot and setup wifi again - repeat until it works again
youtube video and audio - js button for javascript must be on/shaded - Settings -> Soundoutput - AHI
Any restriction to lower resolutions is due to [https://docs.invidious.io/faq/#q-where-are-the-360p480p1080p-quality-options bandwidth]. You can always [https://docs.invidious.io/installation/#install-the-dependencies self host] for better or wait for the newest version of Odyssey OWB (webkit browser). Pi3 can expect 480p (wifi) to 720p (ethernet). Pi4
Telegram https://t.me/s/channel_name for public messages from vamped_amiga chatamigagames demoscenecracktros
*art local js apps like dpaint.js
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://github.com/RPi-Distro/bluez-firmware/tree/pios/trixie/debian/firmware/broadcom 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
<pre>
*bthid keyboard mouse support
*btserial serial
*btpan short range wireless connecting devices
</pre>
Only the Pi5 has a RTC real time clock, the other Pis will need to use ntp services [https://github.com/aros-development-team/AROS/commit/29cd4116330dc7f692d90757eacc59fb3f31ae70 sntp] with 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://github.com/bohunamiga/PiNTP PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. Can use date in a shell e.g. date 24-Dec-2026 23:59:59 but this will need to be done again after every reset/power off. Maybe [https://github.com/aros-development-team/AROS/commit/28674a157bc56175aa668e7b62dca6fa740578dc ds3231 rtc with dtoverlay=i2c-rtc,ds3231 in config.txt]
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+]. Alternative of [https://homspace.nl/samplerbox/ SamplerBox].
Will need developer clang 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], [https://arosarchives.os4depot.net/?function=showfile&file=audio/misc/timidity.lha timidity],
Regarding 680x0 emulation, there are several options (not implemented yet) 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]
Hopefully getting Pi3 up to 25Mhz 68040 (non JIT) and 50Mhz 68040 (JIT)
Pi4 getting up to 50Mhz 68040 (no JIT) and 100Mhz 68040 (JIT)
[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 (Cntrl + C to end)
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-->
|-
|}
==== 32bit ====
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],
[https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 From the Aros Raspberry pi 3 64bit thread]
Instructions on building 64-bit Raspberry Pi AROS and cross-compiler from sources.
You will need:
- Ubuntu 24.04 or 26.04
- qemu-system-aarch64 installed
- Internet connection
- rpi-scripts.tar.gz downloaded (https://axrt.org/download/aros/rpi/rpi-scripts.tar.gz)
1) Install prerequisites:
sudo apt install git gcc g++ make gawk bison flex bzip2 netpbm autoconf automake libc6-dev liblzo2-dev libpng-dev gcc-multilib byacc python3-mako cmake yasm curl nasm
2) Clone sources
cd <project-directory>
git clone https://github.com/aros-development-team/AROS.git --recurse-submodules
3) Extract rpi-scripts.tar.gz. Copy all files into your project directory so that you have:
AROS (the directory with cloned sources)
fix-dotdot.py
rebuild.sh
recreate-sdcard.sh
run-qemu.sh
update-sdcard.sh
4) Run ./rebuild.sh. Select option 1) toolchain-core-aarch64
This will execute process of building a cross-compiler. During this process packages will be downloaded from Internet. This process can take up to 2 hours. If there are some missing dependencies, install them with 'sudo apt install' and restart this step.
5) Run ./rebuild.sh again. Select option 2) core-raspi-aarch64
This will build system files for 64-bit Raspberry Pi AROS. This process can take around an hour.
6) Run ./recreate-sdcard.sh
This will create an sdcard.img file with contents of previous step.
7) Run ./run-qemu.sh
This will start QEMU with SD card image and ROM images. It will boot into AROS.
=====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===
[https://github.com/aros-development-team/AROS/blob/7016ce28bfdb754182edb16011c98faaf5413c29/arch/aarch64-raspi/boot/mmakefile.src#L180 boot makefile]
===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/h.264 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 [https://docs.mesa3d.org/drivers/v3d.html 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 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 maybe affected due to the lack of custom support in the GPU with Aros. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur.
[https://github.com/hermanhermitage/videocoreiv/wiki/VideoCore-IV-Programmers-Manual Dual VDP] and scalable QPU in [https://docs.mesa3d.org/drivers/vc4.html VC4] and x.264/h.264 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 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 nm, peak at 880 nm and trails off at 940 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
CM4S04016 4GB RAM 16Gb KLMAG1JETD-B041
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>
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.
Doubtful, on any [https://www.web3d.org/ Web3d] [https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API WebGL] or [https://github.com/immersive-web/webxr WebXR] [https://developer.mozilla.org/en-US/docs/Web/API/WebXR_Device_API Device API] [https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource XRInputSource] support. Hopefully, never/limited support features like location, peer-to-peer, invasive web apps, unwarranted storage, payments, proprietary video streaming etc
*spreadsheet [https://git.sheetjs.com/sheetjs/sheetjs sheetjs] [https://github.com/mleibman/SlickGrid SlickGrid] [https://github.com/6pac/SlickGrid SlickGrid] [https://github.com/jspreadsheet/ce jspreadsheet ce] [https://github.com/dream-num/Luckysheet Luckysheet] [https://github.com/ruilisi/fortune-sheet fortune-sheet] [https://github.com/dream-num/univer/ univer] probably without xlsx support
*presentations [https://github.com/impress/impress.js/ impress.js simplified] [https://github.com/bwlewis/slides slides] [https://zenomt.github.io/mdslides/ github markdown slides] [https://github.com/Patternslib/slides Patternslib slides markdown] probably without pptx support
*weather [https://github.com/kaushalsahu07/weather weather], [https://github.com/Himanshu3412/Weather-Forecast Weather Forecast],
==Future==
[https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2]
[https://tube.cadence.moe/ Cloudtube], [https://github.com/TeamPiped/documentation/blob/main/content/docs/public-instances/index.md TeamPiped], [], [], [],
[https://hyperpipe.codeberg.page/ hyperpipe], [https://ytify.pp.ua/ ytify], [], [],
[ ytdl], [https://github.com/golddominik893/liberatube liberatube]
[https://git.lolcat.ca/lolcat/4get 4get], [https://github.com/hnhx/librex librex], [], [],
{{BookCat}}
oybg092r0gkf1gu7uy0zamustg5ua32
4676339
4676287
2026-10-16T08:31:55Z
Jeff1138
301139
4676339
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 512Mb+ RAM
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 - working but not much tested esp [https://github.com/aros-development-team/AROS/commit/48e9c8edcca4b5c1e1fe0b1123f2129f624af67b power button]
* Pi500 wedge with up to date bootloader via PiOS - working but not much testing esp [https://github.com/aros-development-team/AROS/commit/48e9c8edcca4b5c1e1fe0b1123f2129f624af67b power button]
* Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 D0 (rev1.1) - untested
* Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 C1 (Rev1.0) - untested
* 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 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 '''fan''' to prevent overheating cpu 82C+ throttling
* Pi02W - Quad A53 64bit - boots but [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 usb not working but did in the past],
* 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]
====64bit====
'''Download''' A [https://archive.org/details/piAROS Pi Distribution (Distro) has started] and the contents copied to fat32 8GB+ microSD card (there will be drawers/folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi. And power on. [https://pi.amiga.icu/ Repository]
'''Not recommended''' but [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 nightly builds] [https://sourceforge.net/projects/aros/files/ and alternative site and nightly2] which is a test version of '''very few''' apps with both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd to a SD or SSD as appropriate.
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 (once fault found, FAT 0x0FFFFFF7 bad cluster so no files written after that, no repair). Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2138&pid=15057#post_15057 Aros forum thread], [https://forums.raspberrypi.com/viewforum.php?f=179 Raspberry Pi Aros Dev and User forums], [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 previous Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix]
*Pi500+ untested usb3 booting or nvme ssd
*Pi500 untested usb3 booting
*Pi5 untested usb3 booting
*Pi400 boots with '''USB3''' port based sata3 ssd
*Pi4 untested (may need eeprom update from PiOS or Pi SD Imager)
*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 power off
*if asking for password again - 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
*...waiting for an address - Disconnect and try Connect
Until, Connected to <router> - 192.168.x.x
For lan ethernet port, please use Network prefs and the following hardware is
*lan9514 Pi3b Pi2 not supported at the moment
*lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s)
*bcmgenet Pi4 Pi400 choose for Device bcmgenet.device
*cdnsgem Pi5 Pi500 Pi500+ RP1 i/o for cadencegem
(network prefs may forget random information when rebooted)
Summary
<pre>
*3b ethernet not supported, usb ethernet not working but wifi prefs setup works
*3b+ wifi working and ethernet works
*4 untested
*400 wifi and ethernet untested
*5 wifi and ethernet untested
*500 wifi and ethernet untested
*500+ wifi works
</pre>
Type in 'aarch64' in the [https://archives.arosworld.org/index.php?function=search&tool=simple search box] and you will see available software packages / apps. apkg can be used to inspect and install applications.
[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 css and javascript websites can be slow to load or resolve (no JIT) and nothing from 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) aka Google Chrome 126 or iPhone aka Safari 17 setting in menus. Html5test gives 189 (1.29), 300 (1.31), 311 (1.33) out of 555, some bigger Amiga like browsers are around 370+ but it does less better.
You may have to delete the cache (Menu -> Page -> Delete cache) to fully retest big Amelinium updates or free up space.
Be aware [https://pianetaamiga.it/en/reportage-pianeta-amiga-2026/ some site pages] can use up hundreds of MBs of cache very quickly
DNS lookup failed... close browser and reboot and setup wifi again - repeat until it works again
youtube video and audio - js button for javascript must be on/shaded - Settings -> Soundoutput - AHI
Any restriction to lower resolutions is due to [https://docs.invidious.io/faq/#q-where-are-the-360p480p1080p-quality-options bandwidth]. Either CPU/GPU, internet speed and/or video quality. Pi3 can expect 480p (wifi) to 720p (ethernet). Pi4 expect (wifi) (ethernet).
Telegram https://t.me/s/channel_name for public messages from vamped_amiga chatamigagames demoscenecracktros
*art local js apps like dpaint.js
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://github.com/RPi-Distro/bluez-firmware/tree/pios/trixie/debian/firmware/broadcom 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
<pre>
*bthid keyboard mouse support
*btserial serial
*btpan short range wireless connecting devices
</pre>
Only the Pi5 has a RTC real time clock, the other Pis will need to use ntp services [https://github.com/aros-development-team/AROS/commit/29cd4116330dc7f692d90757eacc59fb3f31ae70 sntp] with 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://github.com/bohunamiga/PiNTP PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. Can use date in a shell e.g. date 24-Dec-2026 23:59:59 but this will need to be done again after every reset/power off. Maybe [https://github.com/aros-development-team/AROS/commit/28674a157bc56175aa668e7b62dca6fa740578dc ds3231 rtc with dtoverlay=i2c-rtc,ds3231 in config.txt]
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+]. Alternative of [https://homspace.nl/samplerbox/ SamplerBox].
Will need developer clang 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], [https://arosarchives.os4depot.net/?function=showfile&file=audio/misc/timidity.lha timidity],
Regarding 680x0 emulation, there are several options (not implemented yet) 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]
Hopefully getting Pi3 up to 25Mhz 68040 (non JIT) and 50Mhz 68040 (JIT)
Pi4 getting up to 50Mhz 68040 (no JIT) and 100Mhz 68040 (JIT)
[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 (Cntrl + C to end)
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-->
|-
|}
==== 32bit ====
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],
[https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 From the Aros Raspberry pi 3 64bit thread]
Instructions on building 64-bit Raspberry Pi AROS and cross-compiler from sources.
You will need:
- Ubuntu 24.04 or 26.04
- qemu-system-aarch64 installed
- Internet connection
- rpi-scripts.tar.gz downloaded (https://axrt.org/download/aros/rpi/rpi-scripts.tar.gz)
1) Install prerequisites:
sudo apt install git gcc g++ make gawk bison flex bzip2 netpbm autoconf automake libc6-dev liblzo2-dev libpng-dev gcc-multilib byacc python3-mako cmake yasm curl nasm
2) Clone sources
cd <project-directory>
git clone https://github.com/aros-development-team/AROS.git --recurse-submodules
3) Extract rpi-scripts.tar.gz. Copy all files into your project directory so that you have:
AROS (the directory with cloned sources)
fix-dotdot.py
rebuild.sh
recreate-sdcard.sh
run-qemu.sh
update-sdcard.sh
4) Run ./rebuild.sh. Select option 1) toolchain-core-aarch64
This will execute process of building a cross-compiler. During this process packages will be downloaded from Internet. This process can take up to 2 hours. If there are some missing dependencies, install them with 'sudo apt install' and restart this step.
5) Run ./rebuild.sh again. Select option 2) core-raspi-aarch64
This will build system files for 64-bit Raspberry Pi AROS. This process can take around an hour.
6) Run ./recreate-sdcard.sh
This will create an sdcard.img file with contents of previous step.
7) Run ./run-qemu.sh
This will start QEMU with SD card image and ROM images. It will boot into AROS.
=====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===
[https://github.com/aros-development-team/AROS/blob/7016ce28bfdb754182edb16011c98faaf5413c29/arch/aarch64-raspi/boot/mmakefile.src#L180 boot makefile]
===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/h.264 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 [https://docs.mesa3d.org/drivers/v3d.html 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 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 maybe affected due to the lack of custom support in the GPU with Aros. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur.
[https://github.com/hermanhermitage/videocoreiv/wiki/VideoCore-IV-Programmers-Manual Dual VDP] and scalable QPU in [https://docs.mesa3d.org/drivers/vc4.html VC4] and x.264/h.264 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 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 nm, peak at 880 nm and trails off at 940 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
CM4S04016 4GB RAM 16Gb KLMAG1JETD-B041
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>
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.
Doubtful, on any [https://www.web3d.org/ Web3d] [https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API WebGL] or [https://github.com/immersive-web/webxr WebXR] [https://developer.mozilla.org/en-US/docs/Web/API/WebXR_Device_API Device API] [https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource XRInputSource] support. Hopefully, never/limited support features like location, peer-to-peer, invasive web apps, unwarranted storage, payments, proprietary video streaming etc
*spreadsheet [https://git.sheetjs.com/sheetjs/sheetjs sheetjs] [https://github.com/mleibman/SlickGrid SlickGrid] [https://github.com/6pac/SlickGrid SlickGrid] [https://github.com/jspreadsheet/ce jspreadsheet ce] [https://github.com/dream-num/Luckysheet Luckysheet] [https://github.com/ruilisi/fortune-sheet fortune-sheet] [https://github.com/dream-num/univer/ univer] probably without xlsx support
*presentations [https://github.com/impress/impress.js/ impress.js simplified] [https://github.com/bwlewis/slides slides] [https://zenomt.github.io/mdslides/ github markdown slides] [https://github.com/Patternslib/slides Patternslib slides markdown] probably without pptx support
*weather [https://github.com/kaushalsahu07/weather weather], [https://github.com/Himanshu3412/Weather-Forecast Weather Forecast],
==Future==
[https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2]
[https://tube.cadence.moe/ Cloudtube], [https://github.com/TeamPiped/documentation/blob/main/content/docs/public-instances/index.md TeamPiped], [], [], [],
[https://hyperpipe.codeberg.page/ hyperpipe], [https://ytify.pp.ua/ ytify], [], [],
[ ytdl], [https://github.com/golddominik893/liberatube liberatube]
[https://git.lolcat.ca/lolcat/4get 4get], [https://github.com/hnhx/librex librex], [], [],
{{BookCat}}
s915etgzywl7udjwo7z7hl0evyg6dl8
4676341
4676339
2026-10-16T10:23:07Z
Jeff1138
301139
4676341
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 512Mb+ RAM
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 - working but not much tested esp [https://github.com/aros-development-team/AROS/commit/48e9c8edcca4b5c1e1fe0b1123f2129f624af67b power button]
* Pi500 wedge with up to date bootloader via PiOS - working but not much testing esp [https://github.com/aros-development-team/AROS/commit/48e9c8edcca4b5c1e1fe0b1123f2129f624af67b power button]
* Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 D0 (rev1.1) - untested
* Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 C1 (Rev1.0) - untested
* 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 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 '''fan''' to prevent overheating cpu 82C+ throttling
* Pi02W - Quad A53 64bit - boots but [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 usb not working but did in the past],
* 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]
====64bit====
'''Download''' A [https://archive.org/details/piAROS Pi Distribution (Distro) has started] and the contents copied to fat32 8GB+ microSD card (there will be drawers/folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi. And power on. [https://pi.amiga.icu/ Repository]
'''Not recommended''' but [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 nightly builds] [https://sourceforge.net/projects/aros/files/ and alternative site and nightly2] which is a test version of '''very few''' apps with both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd to a SD or SSD as appropriate.
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 (once fault found, FAT 0x0FFFFFF7 bad cluster so no files written after that, no repair). Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2138&pid=15057#post_15057 Aros forum thread], [https://forums.raspberrypi.com/viewforum.php?f=179 Raspberry Pi Aros Dev and User forums], [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 previous Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix]
*Pi500+ untested usb3 booting or nvme ssd
*Pi500 untested usb3 booting
*Pi5 untested usb3 booting
*Pi400 boots with '''USB3''' port based sata3 ssd
*Pi4 untested (may need eeprom update from PiOS or Pi SD Imager)
*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 power off
*if asking for password again - 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
*...waiting for an address - Disconnect and try Connect
Until, Connected to <router> - 192.168.x.x
For lan ethernet port, please use Network prefs and the following hardware is
*lan9514 Pi3b Pi2 not supported at the moment
*lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s)
*bcmgenet Pi4 Pi400 choose for Device bcmgenet.device
*cdnsgem Pi5 Pi500 Pi500+ RP1 i/o for cadencegem
(network prefs may forget random information when rebooted)
Summary
<pre>
*3b ethernet not supported, usb ethernet not working but wifi prefs setup works
*3b+ wifi working and ethernet works
*4 untested
*400 wifi and ethernet untested
*5 wifi and ethernet untested
*500 wifi and ethernet untested
*500+ wifi works
</pre>
Type in 'aarch64' in the [https://archives.arosworld.org/index.php?function=search&tool=simple search box] and you will see available software packages / apps. apkg can be used to inspect and install applications.
[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 css and javascript websites can be slow to load or resolve (no JIT) and nothing from 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) aka Google Chrome 126 or iPhone aka Safari 17 setting in menus. Html5test gives 189 (1.29), 300 (1.31), 311 (1.33) out of 555, some bigger Amiga like browsers are around 370+ but it does less better.
You may have to delete the cache (Menu -> Page -> Delete cache) to fully retest big Amelinium updates or free up space.
Be aware [https://pianetaamiga.it/en/reportage-pianeta-amiga-2026/ some site pages] can use up hundreds of MBs of cache very quickly
DNS lookup failed... close browser and reboot and setup wifi again - repeat until it works again
youtube video and audio - js button for javascript must be on/shaded - Settings -> Soundoutput - AHI
Any restriction to lower resolutions is due to [https://docs.invidious.io/faq/#q-where-are-the-360p480p1080p-quality-options bandwidth]. Either CPU/GPU, internet speed and/or video quality. Pi3 can expect 480p (wifi) to 720p (ethernet). Pi4 expect (wifi) (ethernet).
Telegram https://t.me/s/channel_name for public messages from vamped_amiga chatamigagames demoscenecracktros
*art local js apps like dpaint.js
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://github.com/RPi-Distro/bluez-firmware/tree/pios/trixie/debian/firmware/broadcom 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
<pre>
*bthid keyboard mouse support
*btserial serial
*btpan short range wireless connecting devices
</pre>
Only the Pi5 has a RTC real time clock, the other Pis will need to use ntp services [https://github.com/aros-development-team/AROS/commit/29cd4116330dc7f692d90757eacc59fb3f31ae70 sntp] with 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://github.com/bohunamiga/PiNTP PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. Can use date in a shell e.g. date 24-Dec-2026 23:59:59 but this will need to be done again after every reset/power off. Maybe [https://github.com/aros-development-team/AROS/commit/28674a157bc56175aa668e7b62dca6fa740578dc ds3231 rtc with dtoverlay=i2c-rtc,ds3231 in config.txt]
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+]. Alternative of [https://homspace.nl/samplerbox/ SamplerBox].
Will need developer clang 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], [https://arosarchives.os4depot.net/?function=showfile&file=audio/misc/timidity.lha timidity],
Regarding 680x0 emulation, there are several options (not implemented yet) 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]
Hopefully getting Pi3 up to 25Mhz 68040 (non JIT) and 50Mhz 68040 (JIT)
Pi4 getting up to 50Mhz 68040 (no JIT) and 100Mhz 68040 (JIT)
[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 (Cntrl + C to end)
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-->
|-
|}
==== 32bit ====
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],
[https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 From the Aros Raspberry pi 3 64bit thread]
Instructions on building 64-bit Raspberry Pi AROS and cross-compiler from sources.
You will need:
- Ubuntu 24.04 or 26.04
- qemu-system-aarch64 installed
- Internet connection
- rpi-scripts.tar.gz downloaded (https://axrt.org/download/aros/rpi/rpi-scripts.tar.gz)
1) Install prerequisites:
sudo apt install git gcc g++ make gawk bison flex bzip2 netpbm autoconf automake libc6-dev liblzo2-dev libpng-dev gcc-multilib byacc python3-mako cmake yasm curl nasm
2) Clone sources
cd <project-directory>
git clone https://github.com/aros-development-team/AROS.git --recurse-submodules
3) Extract rpi-scripts.tar.gz. Copy all files into your project directory so that you have:
AROS (the directory with cloned sources)
fix-dotdot.py
rebuild.sh
recreate-sdcard.sh
run-qemu.sh
update-sdcard.sh
4) Run ./rebuild.sh. Select option 1) toolchain-core-aarch64
This will execute process of building a cross-compiler. During this process packages will be downloaded from Internet. This process can take up to 2 hours. If there are some missing dependencies, install them with 'sudo apt install' and restart this step.
5) Run ./rebuild.sh again. Select option 2) core-raspi-aarch64
This will build system files for 64-bit Raspberry Pi AROS. This process can take around an hour.
6) Run ./recreate-sdcard.sh
This will create an sdcard.img file with contents of previous step.
7) Run ./run-qemu.sh
This will start QEMU with SD card image and ROM images. It will boot into AROS.
=====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===
[https://github.com/aros-development-team/AROS/blob/7016ce28bfdb754182edb16011c98faaf5413c29/arch/aarch64-raspi/boot/mmakefile.src#L180 boot makefile]
===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/h.264 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 [https://docs.mesa3d.org/drivers/v3d.html 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 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 maybe affected due to the lack of custom support in the GPU with Aros. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur.
[https://github.com/hermanhermitage/videocoreiv/wiki/VideoCore-IV-Programmers-Manual Dual VDP] and scalable QPU in [https://docs.mesa3d.org/drivers/vc4.html VC4] and x.264/h.264 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 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 nm, peak at 880 nm and trails off at 940 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 v1.1 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
CM4S04016 4GB RAM 16Gb KLMAG1JETD-B041
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>
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.
Doubtful, on any [https://www.web3d.org/ Web3d] [https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API WebGL] or [https://github.com/immersive-web/webxr WebXR] [https://developer.mozilla.org/en-US/docs/Web/API/WebXR_Device_API Device API] [https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource XRInputSource] support. Hopefully, never/limited support features like location, peer-to-peer, invasive web apps, unwarranted storage, payments, proprietary video streaming etc
*spreadsheet [https://git.sheetjs.com/sheetjs/sheetjs sheetjs] [https://github.com/mleibman/SlickGrid SlickGrid] [https://github.com/6pac/SlickGrid SlickGrid] [https://github.com/jspreadsheet/ce jspreadsheet ce] [https://github.com/dream-num/Luckysheet Luckysheet] [https://github.com/ruilisi/fortune-sheet fortune-sheet] [https://github.com/dream-num/univer/ univer] probably without xlsx support
*presentations [https://github.com/impress/impress.js/ impress.js simplified] [https://github.com/bwlewis/slides slides] [https://zenomt.github.io/mdslides/ github markdown slides] [https://github.com/Patternslib/slides Patternslib slides markdown] probably without pptx support
*weather [https://github.com/kaushalsahu07/weather weather], [https://github.com/Himanshu3412/Weather-Forecast Weather Forecast],
==Future==
[https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2]
[https://tube.cadence.moe/ Cloudtube], [https://github.com/TeamPiped/documentation/blob/main/content/docs/public-instances/index.md TeamPiped], [], [], [],
[https://hyperpipe.codeberg.page/ hyperpipe], [https://ytify.pp.ua/ ytify], [], [],
[ ytdl], [https://github.com/golddominik893/liberatube liberatube]
[https://git.lolcat.ca/lolcat/4get 4get], [https://github.com/hnhx/librex librex], [], [],
{{BookCat}}
cszmafgxm3rf1b574xb1xp5lnzugo4x
4676343
4676341
2026-10-16T11:32:02Z
Jeff1138
301139
4676343
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 512Mb+ RAM
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 - working but not much tested esp [https://github.com/aros-development-team/AROS/commit/48e9c8edcca4b5c1e1fe0b1123f2129f624af67b power button]
* Pi500 wedge with up to date bootloader via PiOS - working but not much testing esp [https://github.com/aros-development-team/AROS/commit/48e9c8edcca4b5c1e1fe0b1123f2129f624af67b power button]
* Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 D0 (rev1.1) - untested
* Pi 5 - Quad A76 64bit ARMv8 and RP1 "southbridge" with VideoCore 7 Pre-D0 C1 (Rev1.0) - untested
* 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 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 '''fan''' to prevent overheating cpu 82C+ throttling
* Pi02W - Quad A53 64bit - boots but [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 usb not working but did in the past],
* 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]
====64bit====
'''Download''' A [https://archive.org/details/piAROS Pi Distribution (Distro) has started] and the contents copied to fat32 8GB+ microSD card (there will be drawers/folders - boot c Classes Demos Developer Devs Extras etc only showing). The SD can be plugged in to the Pi. And power on. [https://pi.amiga.icu/ Repository]
'''Not recommended''' but [https://aros.sourceforge.io/nightly1.html RaspberryPi 3, 3+, 4 and 5 64bit ArmV8 nightly builds] [https://sourceforge.net/projects/aros/files/ and alternative site and nightly2] which is a test version of '''very few''' apps with both raspi-aarch64-system and raspi-aarch64-contrib can be unbz2'd to a SD or SSD as appropriate.
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 (once fault found, FAT 0x0FFFFFF7 bad cluster so no files written after that, no repair). Please report your experiences in the [https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2138&pid=15057#post_15057 Aros forum thread], [https://forums.raspberrypi.com/viewforum.php?f=179 Raspberry Pi Aros Dev and User forums], [https://forums.raspberrypi.com/viewtopic.php?p=2387984#p2387984 previous Raspberry Pi forum thread]. Any bugs or issues can be [https://github.com/aros-development-team/AROS/issues described here to fix]
*Pi500+ untested usb3 booting or nvme ssd
*Pi500 untested usb3 booting
*Pi5 untested usb3 booting
*Pi400 boots with '''USB3''' port based sata3 ssd
*Pi4 untested (may need eeprom update from PiOS or Pi SD Imager)
*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 power off
*if asking for password again - 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
*...waiting for an address - Disconnect and try Connect
Until, Connected to <router> - 192.168.x.x
For lan ethernet port, please use Network prefs and the following hardware is
*lan9514 Pi3b Pi2 not supported at the moment
*lan7515 Pi3b+ type into Device usblan78xx.device as net0: remove other device(s)
*bcmgenet Pi4 Pi400 choose for Device bcmgenet.device
*cdnsgem Pi5 Pi500 Pi500+ RP1 i/o for cadencegem
(network prefs may forget random information when rebooted)
Summary
<pre>
*3b ethernet not supported, usb ethernet not working but wifi prefs setup works
*3b+ wifi working and ethernet works
*4 untested
*400 wifi and ethernet untested
*5 wifi and ethernet untested
*500 wifi and ethernet untested
*500+ wifi works
</pre>
Type in 'aarch64' in the [https://archives.arosworld.org/index.php?function=search&tool=simple search box] and you will see available software packages / apps. apkg can be used to inspect and install applications.
[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 css and javascript websites can be slow to load or resolve (no JIT) and nothing from 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) aka Google Chrome 126 or iPhone aka Safari 17 setting in menus. Html5test gives 189 (1.29), 300 (1.31), 311 (1.33) out of 555, some bigger Amiga like browsers are around 370+ but it does less better.
You may have to delete the cache (Menu -> Page -> Delete cache) to fully retest big Amelinium updates or free up space.
Be aware [https://pianetaamiga.it/en/reportage-pianeta-amiga-2026/ some site pages] can use up hundreds of MBs of cache very quickly
DNS lookup failed... close browser and reboot and setup wifi again - repeat until it works again
youtube video and audio - js button for javascript must be on/shaded - Settings -> Soundoutput - AHI
Any restriction to lower resolutions is due to [https://docs.invidious.io/faq/#q-where-are-the-360p480p1080p-quality-options bandwidth]. Either CPU/GPU, internet speed and/or video quality. Pi3 can expect 480p (wifi) to 720p (ethernet). Pi4 expect (wifi) (ethernet).
Telegram https://t.me/s/channel_name for public messages from vamped_amiga chatamigagames demoscenecracktros
*art local js apps like dpaint.js
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://github.com/RPi-Distro/bluez-firmware/tree/pios/trixie/debian/firmware/broadcom 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
<pre>
*bthid keyboard mouse support
*btserial serial
*btpan short range wireless connecting devices
</pre>
Only the Pi5 has a RTC real time clock, the other Pis will need to use ntp services [https://github.com/aros-development-team/AROS/commit/29cd4116330dc7f692d90757eacc59fb3f31ae70 sntp] with 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://github.com/bohunamiga/PiNTP PiNTP -s goodtime.ijs.si or ntp1.ptb.de] to get the date and time from the internet. Can use date in a shell e.g. date 24-Dec-2026 23:59:59 but this will need to be done again after every reset/power off. Maybe [https://github.com/aros-development-team/AROS/commit/28674a157bc56175aa668e7b62dca6fa740578dc ds3231 rtc with dtoverlay=i2c-rtc,ds3231 in config.txt]
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+]. Alternative of [https://homspace.nl/samplerbox/ SamplerBox].
Will need developer clang 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], [https://arosarchives.os4depot.net/?function=showfile&file=audio/misc/timidity.lha timidity],
Regarding 680x0 emulation, there are several options (not implemented yet) 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]
Hopefully getting Pi3 up to 25Mhz 68040 (non JIT) and 50Mhz 68040 (JIT)
Pi4 maybe getting up to 50Mhz 68040 (no JIT) and 100Mhz 68040 (JIT)
[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 (Cntrl + C to end)
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-->
|-
|}
==== 32bit ====
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],
[https://www.arosworld.org/infusions/forum/viewthread.php?thread_id=2019&rowstart=80 From the Aros Raspberry pi 3 64bit thread]
Instructions on building 64-bit Raspberry Pi AROS and cross-compiler from sources.
You will need:
- Ubuntu 24.04 or 26.04
- qemu-system-aarch64 installed
- Internet connection
- rpi-scripts.tar.gz downloaded (https://axrt.org/download/aros/rpi/rpi-scripts.tar.gz)
1) Install prerequisites:
sudo apt install git gcc g++ make gawk bison flex bzip2 netpbm autoconf automake libc6-dev liblzo2-dev libpng-dev gcc-multilib byacc python3-mako cmake yasm curl nasm
2) Clone sources
cd <project-directory>
git clone https://github.com/aros-development-team/AROS.git --recurse-submodules
3) Extract rpi-scripts.tar.gz. Copy all files into your project directory so that you have:
AROS (the directory with cloned sources)
fix-dotdot.py
rebuild.sh
recreate-sdcard.sh
run-qemu.sh
update-sdcard.sh
4) Run ./rebuild.sh. Select option 1) toolchain-core-aarch64
This will execute process of building a cross-compiler. During this process packages will be downloaded from Internet. This process can take up to 2 hours. If there are some missing dependencies, install them with 'sudo apt install' and restart this step.
5) Run ./rebuild.sh again. Select option 2) core-raspi-aarch64
This will build system files for 64-bit Raspberry Pi AROS. This process can take around an hour.
6) Run ./recreate-sdcard.sh
This will create an sdcard.img file with contents of previous step.
7) Run ./run-qemu.sh
This will start QEMU with SD card image and ROM images. It will boot into AROS.
=====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===
[https://github.com/aros-development-team/AROS/blob/7016ce28bfdb754182edb16011c98faaf5413c29/arch/aarch64-raspi/boot/mmakefile.src#L180 boot makefile]
===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/h.264 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 [https://docs.mesa3d.org/drivers/v3d.html 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 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 maybe affected due to the lack of custom support in the GPU with Aros. 5 V / 2.4 or 2.5 amp power supply recommended if all four cpu cores are running, else throttling (cpu slowdown) might occur.
[https://github.com/hermanhermitage/videocoreiv/wiki/VideoCore-IV-Programmers-Manual Dual VDP] and scalable QPU in [https://docs.mesa3d.org/drivers/vc4.html VC4] and x.264/h.264 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 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 nm, peak at 880 nm and trails off at 940 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 v1.1 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
CM4S04016 4GB RAM 16Gb KLMAG1JETD-B041
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>
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.
Doubtful, on any [https://www.web3d.org/ Web3d] [https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API WebGL] or [https://github.com/immersive-web/webxr WebXR] [https://developer.mozilla.org/en-US/docs/Web/API/WebXR_Device_API Device API] [https://developer.mozilla.org/en-US/docs/Web/API/XRInputSource XRInputSource] support. Hopefully, never/limited support features like location, peer-to-peer, invasive web apps, unwarranted storage, payments, proprietary video streaming etc
*spreadsheet [https://git.sheetjs.com/sheetjs/sheetjs sheetjs] [https://github.com/mleibman/SlickGrid SlickGrid] [https://github.com/6pac/SlickGrid SlickGrid] [https://github.com/jspreadsheet/ce jspreadsheet ce] [https://github.com/dream-num/Luckysheet Luckysheet] [https://github.com/ruilisi/fortune-sheet fortune-sheet] [https://github.com/dream-num/univer/ univer] probably without xlsx support
*presentations [https://github.com/impress/impress.js/ impress.js simplified] [https://github.com/bwlewis/slides slides] [https://zenomt.github.io/mdslides/ github markdown slides] [https://github.com/Patternslib/slides Patternslib slides markdown] probably without pptx support
*weather [https://github.com/kaushalsahu07/weather weather], [https://github.com/Himanshu3412/Weather-Forecast Weather Forecast],
==Future==
[https://github.com/ARMSX2/ARMSX2 Arm pi of pcsx2]
[https://tube.cadence.moe/ Cloudtube], [https://github.com/TeamPiped/documentation/blob/main/content/docs/public-instances/index.md TeamPiped], [], [], [],
[https://hyperpipe.codeberg.page/ hyperpipe], [https://ytify.pp.ua/ ytify], [], [],
[ ytdl], [https://github.com/golddominik893/liberatube liberatube]
[https://git.lolcat.ca/lolcat/4get 4get], [https://github.com/hnhx/librex librex], [], [],
{{BookCat}}
olzp5tvvi6dpz81ywb17mzpk4mgeys6
Koine Greek/Declining 1st and 2nd Declension Nouns
0
297346
4676306
4675490
2026-10-15T21:32:44Z
It-is-Truly-Meet
3624460
/* First and Second Declension Nouns */
4676306
wikitext
text/x-wiki
==Stems==
The '''stem''' of a word is that part of it which remains substantially unchanged through varieties of '''inflection'''. Nouns, adjectives and pronouns are 'declined'; verbs are 'conjugated' by the help of prefixes or terminations added to the stem, which may itself be variously modified, but can always be traced, and contains the main idea of the word. To know this stem, therefore, is an essential preliminary to the study of the inflections.
The stems of words shall in this section be distinguished by dark letters, and in general by an appended hyphen, as the stem in itself is incomplete, requiring some kind of addition before it becomes a ''word''.
== First and Second Declension Nouns ==
A declension is a group of nouns, adjectives, or pronouns that all form their gender, number, or case in the same way or in similar ways. In ancient Greek, to change the case, gender, or number, all you need to do is change the case ending. There are three declensions in ancient Greek. Since Greek nouns most commonly use two numbers (singular, plural) and four cases (nominative, genitive, dative, accusative; all cases other than the nominative are '''oblique'''), they need 8 different endings to cover all the possibilities.
The second declension only has two sets of endings: singular/plural masculine, and singular/plural neuter. So, to show that the word 'λόγος' is the target (accusative) of the action in a sentence, you would say 'λόγον' ('λόγος' is translated as 'word,' 'reason,' or 'account' (among others)).
* γράφω λόγ'''ον'''. — I write a '''word'''.
* γράφω λόγ'''ους'''. — I write '''words'''.
Now, it might seem that “λόγος” should be neuter, since it is an inanimate object. But, in Greek, each word has a gender, and unless referring to a human, it does not indicate actual gender. In Greek lexicons, the gender of a word is shown by writing the definite article with the same gender as the word after the word. So, to show that λογός is declined masculinely, the lexicon says "λόγός, ὁ.". The gender also helps to identify what adjectives, or other nouns, may be related to each other.
In the dative singular under the alpha, there is a small mark called "the iota subscript," an iota written under either α, η, or ω, which helps to identify the function of the word, often signalling the dative case. When a Greek word with an iota subscript is written in capitals, the iota is promoted to the main line, following its vowel.
=== First Declension Noun Endings ===
{| class="wikitable"
! rowspan=2|Case
! colspan=2|Masculine
! colspan=2|Feminine
|-
! Singular
! Plural
! Singular
! Plural
|-
! Nom.
| -ᾱς / -ης
| -αι
| -ᾱ / -η
| -αι
|-
! Gen.
| -ου
| -ῶν
| -ας / -ης
| -ῶν
|-
! Dat.
| -ᾳ / -ῃ
| -αις
| -ᾳ / -ῃ
| -αις
|-
! Acc.
| -αν / -ην
| -ᾱς
| -αν / -ην
| -ᾱς
|-
! Voc.
| -ᾱ / -α
| -αι
| -ᾱ / -η
| -αι
|}
First-declension nouns that preserve the 'α' are known as '''alpha-pure''', while those that do not are '''alpha-impure'''. Alpha-pure stems end in 'ι', 'ε', or 'ρ'
* '''Pure''': ἡμέ<big>'''ρ'''</big>α, ἡ, -ᾳ
* '''Impure''': δόξα, ἡ, -ῃ
* '''Pure''': νεαν<big>'''ί'''</big>ας, ὁ, -ᾳ
* '''Impure''': πολίτης, ὁ, -ῃ
=== Second Declension Noun Endings ===
{| class="wikitable"
! rowspan=2|Case
! colspan=2|Masculine
! colspan=2|Neuter
|-
! Singular
! Plural
! Singular
! Plural
|-
! Nom.
| -ος
| -οι
| -ον
| -α
|-
! Gen.
| -ου
| -ων
| -ου
| -ων
|-
! Dat.
| -ῳ
| -οις
| -ῳ
| -οις
|-
! Acc.
| -ον
| -ους
| -ον
| -α
|-
! Voc.
| -ε
| -οι
| -ον
| -α
|}
===Translation===
The nominative case is usually translated as the word and the indefinite article. Words in this case are the sentence’s subject. For example, λόγος means “a word.” When the definite article is present, it becomes ὁ λόγος, meaning “the word.” The subject of the sentence generally has the definite article, while the predicate nominative does not.
:: καὶ θεὸς ἦν '''ὁ λόγος'''. — and '''the Word''' was God (John 1.1).
The genitive case is translated as “of.” It’s similar to the English possessive case. For instance, λόγου means “of a word.”
:: ἡμεῖς δὲ τῇ προσευχῇ καὶ τῇ διακονίᾳ '''τοῦ λόγου''' προσκαρτερήσομεν. — But we will give ourselves continually to prayer, and to the ministry '''of the word''' (Acts 6.4).
The dative case is translated as “to,” “for,” or “with.” It shows that the word is the indirect target of the action. For example, λόγῳ means “to, for, or with, a word.”
:: οὐ γὰρ '''ἐν λόγῳ''' ἡ βασιλεία τοῦ θεοῦ ἀλλ᾽ ἐν δυνάμει. — For the kingdom of God is not '''in word''', but in power (1 Corinthians 4.20).
The accusative case is usually translated as the word and the indefinite article. Words in this case are the sentence’s direct object.
:: ὁ σπείρων '''τὸν λόγον''' σπείρει. — The sower soweth '''the word''' (Mark 4.14).
The vocative case is translated as the word itself. It’s a direct address. For example, “λόγε” can be translated as “O word.”
===Major patterns===
# The genitive plural of all declensions in Greek (all nouns, pronouns, adjectives, verb participles, basically anything that can decline) end in ων.
# The accusative and nominative of all neuter declensions in Greek are the same.
# In all declensions, the dative case contains an ι, perhaps as an improper diphthong.
==Vocabulary==
===Second Declension Masculine===
* ἄγγελος, -ου: angel, messenger
* ἀδελφός, -ου: brother (Phil'''adelphia''', the city of brotherly love)
* ἄνθρωπος, -ου: man ('''anthropo'''logy, the study of humankind)
* θεός, -ου: god ('''theo'''logy, the study of the divine)
* κόσμος, -ου: world ('''cosmo'''logy, the study of the universe; '''cosmo'''politan, worldly)
* κύριος, -ου: lord ('''kyrie''' eleison, "Lord have mercy", the beginning of the Mass)
* λόγος, -ου: that which is said, or thought. Translated as word, but has deep meanings in philosophy (-'''logy''', the study of -; logic)
* νόμος, -ου: law (astro'''nomy''', the law of the stars)
* οὐρανός, -ου: heaven ('''Uranus''', the Greek god of the sky)
* υἱός, -ου: son
* ἀπόστολος, -ου: apostle, literally, one that is sent
* διδάσκαλος, -ου: teacher ('''didactic''', intending to teach)
===Second Declension Neuter===
* ἔργον, -ου: work, deed ('''ergon'''omics)
* ἱερόν, -οῦ: temple ('''hier'''archy, from ranking of angles, which derives from rule of the high priest)
* πρόσωπον, -ου: face
* τέκνον, -ου: child
===First Declension Feminine===
* ἀλήθεια, -ας: truth
* ἁμαρτία, -ας: sin ('''hamarti'''ology)
* βασιλεία, -ας: kingdom ('''basilica''')
* ἡμέρα, -ας: day (ep'''hemera'''l)
* καρδία, -ας: heart ('''cardi'''ology)
* χαρά, -ας: grace ('''char'''ity)
* γλῶσσα, -ης: tongue ('''glossa'''ry, poly'''glot''')
* δόξα, -ης: glory ('''dox'''ology)
* θάλασσα, -ης: sea ('''thalassic''')
* ἀγάπη, -ης: love ('''agape''')
* γῆ, -ῆς: earth, land, soil ('''ge'''ology)
* ζωή, -ῆς: life ('''zo'''ology) .
* φωνή, -ῆς: sound, voice (tele'''phone''')
* ψυχή, -ῆς: soul ('''psych'''ology)
{{BookCat}}
iqs199u7b7jwzbv6x273we3rbq5l4ec
Writing Adolescent Fiction/Character names/Sierra Leonean
0
374215
4676342
4671950
2026-10-16T10:32:37Z
~2026-55603-49
3628543
/* Girls' names */ Miata added
4676342
wikitext
text/x-wiki
==Usage note==
Some Sierra Leonean given names are based on birth order, context and gender. These are indicated here.
Sierra Leonean given names are sometimes borrowed from other local ethnic tribes, where one name can be rooted in one group, it may be commonly used within other overlapping groups. For example, ‘Tenneh’ means Monday in Limba, but the name is most commonly observed amongst Temne people too. It is also possible for the same name to have different meanings to different ethnic groups.
Some names listed may not be Sierra Leonean by origin, but used frequently within the country.
==Girls' names==
*Aba
*Abiba - “Blessed / Loved One / “Habiba” (Arabic)
*Abibatu - “Blessed / Loved One / “Habiba” (Arabic)
*Adama - “Earth / Created from the Ground” (Hebrew)
*Adiatu - “God’s Adornment” (Hebrew)
*Aicha - “Alive / Thriving / ‘Aisha’” (Arabic)
*Aisha - “Alive / Thriving” (Arabic)
*Ajaratu - “Prosperous / Precious Stone / ‘Ajar’” (Arabic - West African Localised)
*Alanki - “Given by God” (Limba)
*Alimatu - Gentle / Patient / ‘Halima’ (Arabic - West African Localised)
*Amara - “Grace” (Igbo)
*Amie - “Protected / Devoted / ‘Amina’” (Arabic)
*Amida - “Praised / Commendable / ‘Ameeda’” (Arabic)
*Amina - “Protected / Devoted” (Arabic)
*Aminata - “Protected / Devoted / ‘Amina’” (Arabic - West African Localised)
*Ashike - Prosperity (Temne)
*Asuma
*Awa - “Source of Life / Mother of All Living / ‘Hawa’” (Arabic)
*Ayesha - “Alive / Thriving / ‘Aisha’” (Arabic)
*Ayiki - Glory / Majesty (Temne)
*Aysha - “Alive / Thriving / ‘Aisha’” (Arabic)
*Badara
*Bahnnie - “Remorseful / Emphathetic” (Temne)
*Bentu - (Sherbro/Bullom)
*Binta - Daughter / Girl / ‘Bint’ (Arabic - West African Localised)
*Bintu - Daughter / Girl / ‘Bint’ (Arabic - West African Localised)
*Bonyor - Gold (Temne)
*Damoh - (Limba)
*Dawa
*Egbatima - Unique / Different (Mende)
*Ejatu
*Emivia
*Eyaema - Desired Child (Temne)
*Fanta - “One Who Abstains / ‘Fatima’” (Arabic - Mandinka Localised)
*Fatima - “One Who Abstains” (Arabic)
*Fatmata - “One Who Abstains / ‘Fatima’” (Arabic)
*Fatumata - “One Who Abstains / ‘Fatima’” (Arabic)
*Fenthi - Clean / Proper (Temne)
*Finnoh - Beautiful (Temne)
*Finnor - Beautiful (Temne)
*Finda - Daughter born after second son, female third born
*Fudia - “One Who Sacrifices Herself to Help Others / ‘Fadiya’” (Arabic)
*Fudiatu - “One Who Sacrifices Herself to Help Others / ‘Fadiya’” (Arabic)
*Gbatima - Unique / Different (Mende)
*Gbegima - “Leave this one” (Mende)
*Gbentha - Brightness (Temne)
*Giloh - "Let this remain" (Mende)
*Gita - “This one will survive” (Mende)
*Habiba - “Blessed / Loved One” (Arabic)
*Habibatu - “Blessed / Loved One / “Habiba” (Arabic - West African Localised)
*Hadijatu - “Early Born Child / ‘Khadijah’” (Arabic - West African Localised)
*Haja - “The Pilgrim / Virtuous / ‘Hajja’” (Arabic)
*Hajja - “The Pilgrim / Virtuous ” (Arabic)
*Hajah - “The Pilgrim / Virtuous / ‘Hajja’” (Arabic)
*Hajaratu “The Pilgrim / Virtuous / ‘Hajja’” (Arabic - West African Localised)
*Halimatu - Gentle / Patient / ‘Halima’ (Arabic - West African Localised)
*Hassanatu - “Radiant Beauty / ‘Hasana’” (Arabic - West African Localised)
*Hawa - “Source of Life / Mother of All Living” (Arabic) Eve (Biblical)
*Hawanatu - “Source of Life / Mother of All Living / ‘Hawa’” (Arabic - West African Localised) Eve (Biblical)
*Hejawa - Abundance of Luck (Mende)
*Isata - “Alive / Thriving / ‘Aisha’” (Arabic)
*Isatu - “Alive / Thriving / ‘Aisha’” (Arabic)
*Isha - “Alive / Thriving / ‘Aisha’” (Arabic)
*Iya
*Iyaema - Desired Child (Temne)
*Iye
*Jariatu
*Jarieu
*Jebbeh
*Jebeh
*Jeneba - “Gift from God / ‘Zaynab’” (Arabic - West African Localised)
*Jenneh - “Gift from God / ‘Zaynab’” (Arabic - West African Localised)
*Jilo - “Let this remain” (Mende)
*Jiloh - “Let this remain” (Mende)
*Jita - “This one will survive” (Mende)
*Kadie - “Early Born Child” (Arabic - West African Localised)
*Khadijah - “Early Born Child” (Arabic)
*Khadijatu - “Early Born Child” (Arabic - West African Localised)
*Kainday
*Kamu - “It’s Yours” (Temne)
*Kanyim - Born at night/dark (Temne)
*Kathy - Sunday-born (Limba)
*Kenia
*Kilikuroo - “God-depending” (Temne)
*Kisumana
*Kohuneh - Joy / Happiness (Mende)
*Koniaka - (Mende)
*Kpatehnya - (Mende)
*Kumba - Second girl after twins
*Kutu
*Koiya
*Konya - (Mende)
*Lavina - Purity (Latin)
*Lavinia - Purity (Latin)
*Lileh - Peace (Mende)
*Lombe - “Remain for me” (Mende)
*Luba - Blessing (Mende)
*Mabaindu
*Mabendu
*Mabinty
*Mafo - Afternoon-born child (Mende)
*Magayai
*Magbindi - Night-born child (Mende)
*Magenda - Morning-born child (Mende)
*Mahunbey - “To Take Care / Look After” (Mende)
*Maleika - Angel (Arabic - Temne Localised)
*Maleni - Flower / Blossom (Temne)
*Manu - “Save, be sympathetic” (Mende)
*Mariama - “Star of the Sea” (Hebrew - West African Localised)
*Mariatu - “Star of the Sea” (Hebrew - West African Localised)
*Mamie - Mother / Lady / Grandmother (Krio)
*Mara - “To Protect” (Soninke)
*Marie - “Star of the Sea” (Hebrew)
*Maseray
*Massa
*Mateneh - “Mother born on a Monday” (Limba)
*Mbalu
*Meliana
*Memuna - “Fortunate / Lucky / ‘Maymuna’” (Arabic)
*Mentima - (Mende)
*Mera - Heart / Mind (Temne)
*Miata (Mende)
*Minta - Bold / Brave (Temne)
*Muboneh - “Happiness” (Temne)
*Mujeh - “Our Mother” (Mende)
*Mujeni - “Our Mothers” (Mende)
*Muliima - “Relying (on..)” (Mende)
*Musu - “Beautiful Wife / Beautiful Woman” (Mande)
*Nadewa - (Limba)
*Namina - (Limba)
*Nasratha - “Victory / ‘Nasrat’” (Arabic)
*Nasratu - “Victory / ‘Nasrat’” (Arabic)
*Nayana - (Limba)
*Ndelei - “Peace / Blissful Heart” (Mende)
*Ndeleiva - “Let Peace Prevail” (Mende)
*Ndomayah - “Because of Love” (Mende)
*Nekami - “Self-Pitying” (Temne)
*Nemata
*Neneh
*Nepor - Courage (Mende)
*Nikami - Self-Pitying (Temne)
*Nimah
*Nimatulai
*Nouhou
*Nyagua
*Nyahagbayie - “Woman of Might” (Mende)
*Nyahanina - (Mende)
*Nyaleimava - (Mende)
*Nyalima - (Mende)
*Nyambe - “My Own” (Mende)
*Nyanda - “My Own”(Mende)
*Nyandamoqui - “Fine Leopard” (Mende)
*Nyandu
*Nyawa - (Mende)
*Nyawo - (Mende)
*Nyayah - (Mende)
*Nyima - Beautiful / Good (Mandinka/Mande)
*Nyuma
*Okemi - “My Own” (Temne)
*Okiya - Mine (Limba)
*Okiyan - Mine (Limba)
*Orkemi - “My Own” (Temne)
*Othimo - Liked (Limba)
*Posseh
*Preysok - “Morning-born child” (Temne)
*Pruvah
*Rakiatu
*Raliatu
*Ramatu
*Rianna - Heaven / ‘Rayyan’ (Arabic - Temne Localised)
*Rukoh
*Ruuba - Blessing/Thank You (Temne)
*Rugiatu
*Sabatu
*Sadanmei - (Limba)
*Sadira
*Safiatu
*Saffiatu
*Sallay
*Salamatu
*Salimatu
*Sampa - (Temne)
*Sani
*Sanni
*Sapunka - Unbearable (Limba)
*Sarieu
*Sawie
*Seinya
*Selah
*Serah - Firstborn daughter (Limba)
*Seray
*Sia - Gift (Mande)
*Siabanda - Firstborn daughter
*Sianeh
*Simbiwa
*Simithi - Saturday-born (Limba)
*Sinna
*Sira
*Tachekor - “Protected child / “Left to be”” (Temne)
*Tataigbon - “Untouchable” (Temne)
*Tatessa - “Fairest of them all” (Temne)
*Tenne - Monday-born (Limba)
*Tenneh - Monday-born (Limba)
*Tewoh - (Mende)
*Thachaikor - “Protected child / “Left to be”” (Temne)
*Thaduba - Blessing (Limba)
*Thatema - (Limba)
*Thathesa - “Fairest of them all” (Temne)
*Thathesar - “Fairest of them all” (Temne)
*Theneleh
*Tilima - “Relying (on..)” (Mende)
*Titi - Girl (Krio)
*Umu - “Mother / ‘Ummu’” (Arabic)
*Unama
*Wuzairiatu
*Ya - “Mother” (Temne)
*Yabom
*Yabomporro
*Yabu
*Yaddah
*Yafeh - Peace (Temne)
*Yakasu - (Temne)
*Yakoiya - (Temne)
*Yalie - Advice (Limba)
*Yalienatu
*Yandora
*Yankain - (Limba)
*Yanbakie - (Temne)
*Yandi - Please (Limba)
*Yarimeh - (Limba)
*Yatta
*Yayo - “Mother” (Temne)
*Yayor - “Mother” (Temne)
*Yeabu
*Yealie
*Yealinatu
*Yeani - “Mothers” (Temne)
*Yeanoh - “Mother” (Temne)
*Yeanor - “Mother” (Temne)
*Yenor - “Mother” (Temne)
*Yietoma
*Yoyonthor
*Zainab - “Fragrant flower” (Arabic)
*Zaria - “Princess / ‘Sarah’” (Hebrew) “Flower / ‘zahr’” (Arabic)
*Zariatu - “Princess / ‘Sarah’” (Hebrew) “Flower / ‘zahr’” (Arabic)
*Zairiatu - “To bloom / ‘zāra’” (Arabic)
==Boys' names==
*Abass
*Abdul - “Servant (of)” (Arabic)
*Abdullah - “Servant of Allah” (Arabic)
*Abdulai - “Servant of Allah / ‘Abdullah’” (Arabic)
*Abu - “Father (of)” (Arabic)
*Abubakar - “Father of a Young Camel / ‘Abu Bakr’” (Arabic)
*Abudu - “Servant of Allah” (Arabic - West African Localised)
*Agibu
*Aiah - Third-born son born after twins (Temne)
*Alasan - “The Virtuous / The Good / ‘Al-Hassan’” (Arabic)
*Alhaji - “The Pilgrim / ‘Al-Hajj’” (Arabic)
*Ali - High / Exalted / Elevated (Arabic)
*Alieu - Strong (Mandinka/Mande) - High (Arabic)
*Alikali - King / Chief Judge of Port Loko Territory (Temne)
*Almamy - “The Leader / ‘Al-Imam’” (Arabic)
*Alimamy - “The Leader / ‘Al-Imam’” (Arabic)
*Alpha - “The Jurist / The Scholar / ‘Al-Fariq’” (Arabic - West African Localised)
*Alusine - “The Handsome / ‘Al-Husayn’” (Arabic)
*Amadu - “The One Who Constantly Thanks God / Highly Commendable / ‘Ahmad’” (Arabic - West African Localised)
*Ampress
*Ansumana - "Protector of His Name"/ "One Who Defends His Name” (Mandinka/Mande)
*Arun - “High-ranking / Mountain of Strength / ‘Harun’” (Arabic) ‘Aaron’ (Hebrew)
*Aruna - “High-ranking / Mountain of Strength / ‘Harun’” (Arabic) ‘Aaron’ (Hebrew)
*Arsheke - (Temne)
*Arshekeh - (Temne)
*Aya - Third-born son born after twins (Temne)
*Babah
*Badara
*Bai - Chief/Strength (Temne)
*Bai-Bai - (Temne)
*Baika - (Mende)
*Baisharu - (Temne)
*Bakar - Strong / Firm (Temne) Early Dawn / “Young Camel” ‘Abu Bakr’ (Arabic)
*Baksene - ‘To strengthen himself” (Temne)
*Balaka - (Sherbro/Bullom)
*Bambara - Riverine Flooding, “One who has Force” (Limba)
*Banekore - (Temne)
*Bangali
*Bankolo - “Don’t try it” (Limba)
*Barikeh - “Thank You” (Temne)
*Barlam
*Barome - (Temne)
*Benkutay - “Have you seen” (Limba)
*Benya
*Beyasi - Security (Limba)
*Brima - Second-born son (Mandinka/Mande) “Father of Many / ‘Ibrahim’” (Arabic)
*Bockarie
*Boimah
*Boineh - Happy (Temne)
*Bonyor - Gold (Temne)
*Chernoh
*Dauda - “Beloved / Dear One / ‘Dawood’” (Arabic - West African Localised)
*Dausie - “Beloved / Dear One / ‘Dawood’” (Arabic - West African Localised)
*Ervel
*Fayia - Second-born boy (Kissi / Kono)
*Fallah
*Fatha
*Fenthi - Clean / Proper (Temne)
*Fino - Pretty (Temne)
*Finnoh - Pretty (Temne)
*Foday - “Heart / Conscious / ‘Fuad’” (Arabic)
*Gbassay
*Gbegima - “Leave this one” (Mende)
*Gbemute - (Temne)
*Gassimu
*Hachim - “Born in temporary separation” (Temne)
*Hassan - “The Virtuous / The Good / ‘Al-Hassan’” (Arabic)
*Hassana - “The Virtuous / The Good / ‘Al-Hassan’” (Arabic)
*Ibra - “Father of Many” (Arabic)
*Ibrahim - “Father of Many” (Arabic)
*Ibrahima - “Father of Many” (Arabic)
*Idris - “Studious / Smart” (Arabic)
*Idrissa - “Studious / Smart” (Arabic)
*Ishmael
*Jaiwal
*Jami
*Jaruga
*Jibao - “Save this / Let this be well” (Mende)
*Juma - Friday-born
*Juldeh
*Jusu
*Kabane - Wonderful / Astonishing / Extraordinary (Temne)
*Kabba
*Kafo - Afternoon-born child (Mende)
*Kai - Chief/Elder (Temne) - Man (Vai)
*Kaifala
*Kaima
*Kaisamba
*Kaloko
*Kalom - Straightforward (Temne)
*Kalomp - Straightforward (Temne)
*Kambi
*Kandeh
*Kanneh
*Kanuwally - “God, I thank you” (Limba)
*Kapindi - Night-born child (Mende)
*Karamoh
*Karandi - Teacher / Scholar (Temne)
*Karefa - “Successor / Holy One / ‘Khalifa’”(Arabic) Second-born son (Mandinka/Mande)
*Karifa - “Successor / Holy One / ‘Khalifa’”(Arabic) Second-born son (Mandinka/Mande)
*Kassim - “One Who Distributes” (Arabic)
*Kassimu - “One Who Distributes” (Arabic - West African Localised)
*Kaskami - “My Father” (Temne)
*Kaskasu - “Our Father” (Temne)
*Kehwalleh
*Kei
*Kelfa - Captain / Hero (Temne) “The One Who Pays” (Mandinka/Mande)
*Kelfala
*Kelefa - “The One Who Pays” (Mandinka/Mande)
*Kemoh
*Kemokai - “Man from Kemo” (Vai/Mandinka/Mande)
*Kemokoh
*Kenie
*Kewullay
*Komba
*Komrabai - “Chief/Elder of our territory” (Temne)
*Kohuneh - Joy / Happiness (Mende)
*Koray
*Kowa
*Koyie
*Koyon - Rain (Limba)
*Kpana - Chief (Sherbro/Bullom)
*Kuruuba - Hero (Temne)
*Kuruugba - Hero (Temne)
*Kusan
*Lamin - “Trustworthy / Faithful / ‘Al-Amin’” (Arabic)
*Lamie - “Trustworthy / Faithful / ‘Al-Amin’” (Arabic)
*Lansana - “The Virtuous / The Good / ‘Al-Hassan’” (Arabic)
*Luba - Blessing (Mende)
*Mahai
*Mai
*Mahmadu - “Praiseworthy / Commendable / ‘Muhammad’” (Arabic)
*Majajieu
*Maju
*Makari
*Makoo
*Malakai - “My Messenger / My Angel / ‘Malaki’” (Hebrew)
*Maliki - “King / Sovereign / ‘Malik’” (Arabic)
*Mamadu - “Praiseworthy / Commendable / ‘Muhammad’” (Arabic)
*Mamudu - “Praiseworthy / Commendable / ‘Muhammad’” (Arabic)
*Mamo - “Thank You” (Temne)
*Marwan
*Mayon - First born (Limba)
*Melleh
*Minkailu
*Mohamed - “Praiseworthy / Commendable / ‘Muhammad’” (Arabic)
*Momodu - “Praiseworthy / Commendable / ‘Muhammad’” (Arabic)
*Momoh - “Praiseworthy / Commendable / ‘Muhammad’” (Arabic - Mano River Basin Localised)
*Morlai
*Morlay
*Mourie
*Mukeh - “Our Father” (Mende)
*Muliima - “Relying (on..)” (Mende)
*Muloma - “Harmony” (Mende)
*Muluku
*Munda - “Our own” (Mende)
*Musa - “Saved from the Water” (Arabic) ‘Moses’ (Hebrew)
*Mustapha - “The Chosen One / ‘Mustafa’” (Arabic)
*Nabie
*Najee
*Nbalie
*Ndawa
*Ndeleiva - “Let Peace Prevail” (Mende)
*Nomolie - Stone Chief Figure Sculpture (Sherbro/Bullom)
*Obrahim - “Father of Many / ‘Ibrahim’” (Arabic)
*Okaskasu - “Our Father” (Temne)
*Olobi
*Osaio
*Osman - Baby bustard desert bird; wisdom, strength, leadership / ‘Uthman’ (Arabic, cultural symbol)
*Ousman - Baby bustard desert bird; wisdom, strength, leadership / ‘Uthman’ (Arabic, cultural symbol)
*Oyola - “The Rich Man” (Temne)
*Pilleh
*Saa - First-born son
*Saah - First-born son
*Sadiq - “Truthful One / Sincere / ‘Siddiq’” (Arabic)
*Sahr - First-born son
*Said - “Fortunate / Blessed” (Arabic)
*Saidu - “Fortunate / Blessed” (Arabic - West African Localised)
*Sajalieu
*Salfu - “Righteous / Pious / ‘Salih’” (Arabic)
*Salieu - “Righteous / Pious / ‘Salih’” (Arabic)
*Sallieu - “Righteous / Pious / ‘Salih’” (Arabic)
*Samba
*Sampa - (Temne)
*Sampay
*Sana
*Sandima - Sunday-born (Mende)
*Santigie
*Sara
*Sarjoh
*Sarway
*Segepoh
*Sei
*Sembeh - Strength (Limba)
*Senesie
*Senie
*Seno - Arrow (Temne)
*Sento
*Serry
*Sesay
*Sheaka
*Shekhu - “Chieftain / Religious Leader / ‘Sheikh’” (Arabic)
*Sheikhu - “Chieftain / Religious Leader / ‘Sheikh’” (Arabic)
*Sheriff - “Noble / Honorable / ‘Sharif’” (Arabic)
*Siafa
*Siaka
*Sidi - “Truthful One / Sincere / ‘Siddiq’” (Arabic)
*Sidiki - “Truthful One / Sincere / ‘Siddiq’” (Arabic)
*Sidiq - “Truthful One / Sincere” (Arabic)
*Sonsiama
*Soragatta
*Soriba
*Sorie
*Sulay - “Man of Peace” (Arabic)
*Suley - “Man of Peace” (Arabic)
*Sulaiman - “Man of Peace” (Arabic)
*Suleiman - “Man of Peace” (Arabic)
*Suleyman - “Man of Peace” (Arabic)
*Sundiata - “Lion Prince” (Mande/Mandinka)
*Sundima - Sunday-born (Mende)
*Taiwo - “First Twin to Taste the World” (Yoruba)
*Takothor
*Tamarane - “Helper / Let Us Help” (Temne)
*Tamba - Second-born son born after twins (Temne)
*Tarasid
*Taypineh - (Temne)
*Tejan - Crown / royal headband / ‘Tijan’ (Arabic)
*Thaduba - Blessing (Limba)
*Thaimu - (Temne)
*Thamba - Second-born son born after twins (Temne)
*Thasneh - “Too much” (Temne)
*Thegeka - “Mindful to their own” (Limba)
*Thoyenkeh - (Temne)
*Tokumboh
*Umar - “Flourishing / Long-Lived / ‘Omar’” (Arabic)
*Umaru - “Flourishing / Long-Lived / ‘Omar’” (Arabic)
*Unisa
*Usman - Baby bustard desert bird; wisdom, strength, leadership / ‘Uthman’ (Arabic, cultural symbol)
*Wesseh
*Wogba
*Yahya
*Yakub - “One Who Follows / Supplanter” (Arabic) ‘Jacob’ (Hebrew)
*Yakuba - “One Who Follows / Supplanter / ‘Yakub’” (Arabic) ‘Jacob’ (Hebrew)
*Yamba
*Yarimeh - (Limba)
==Surnames==
*Abdulai - “Servant of Allah / ‘Abdullah’” (Arabic)
*Alieu - Strong (Mandinka/Mande) - High (Arabic)
*Allieu - Strong (Mandinka/Mande) - High (Arabic)
*Amara
*Ansumana - "Protector of His Name"/ "One Who Defends His Name” (Mandinka/Mande)
*Badoe
*Bah
*Bai - Chief / Strength (Temne)
*Baion
*Baken
*Bakarr - Early Dawn / “Young Camel” ‘Abu Bakr’ - Arabic
*Balde
*Bangura
*Banorah
*Banya
*Banyah
*Barrie
*Bassie
*Baryoh
*Bayoh
*Bawoh
*Beah
*Bendu
*Bengeh
*Benya
*Bio
*Bockarie
*Boima
*Bongor
*Bonghor
*Brewah
*Brima - Second-born son (Mandinka/Mande) “Father of Many / ‘Ibrahim’” (Arabic)
*Bundu
*Carew
*Caulker - A tradesperson who sealed seams in ships, barrels, or structures using materials like oakum or pitch to make them watertight (English) *common amongst the Krio and Sherbro
*Challey
*Cocker - Fighter / Wrangler (Middle English) *common amongst the Krio and Sherbro
*Coker - Fighter / Wrangler (Middle English) *common amongst the Krio and Sherbro
*Conteh
*Corker - A tradesperson who sealed seams in ships, barrels, or structures using materials like oakum or pitch to make them watertight (English) *common amongst the Krio and Sherbro
*Daboe
*Daboh
*Dabundeh
*Dambeli
*Dambelly
*Daramy
*Darboe
*Dauda - “Beloved / Dear One / ‘Dawood’” (Arabic - West African Localised)
*Deen
*Donkoh
*Dukureh
*Dumbuya
*Entochema
*Fasuluku
*Fayombo
*Fidawi
*Foday - “Heart / Conscious / ‘Fuad’” (Arabic)
*Fofana
*Fofanah
*Foh
*Fomah
*Fomba
*Foray
*Fornah
*Funah
*Funna
*Gaba
*Gaima
*Ganda
*Gassama
*Gassimu
*Gbaewoh
*Gbamanja
*Gbemeh
*Gbla
*Gblah
*Gbondo
*Gborie
*Ghanghay
*Gevao
*Giawo
*Gwary
*Hariru
*Ibemessie
*Jabati
*Jabbie
*Jadama
*Jah
*Jajua
*Jalloh
*Jambawai
*Jamboria
*Jammeh
*Janneh
*Jarsey
*Jawara
*Jaward - “Open-handed / Generous / ‘Jawad’” (Arabic)
*Jebbeh
*Jinkang
*Jobarteh
*Joko
*Jones - son of John (English) *common amongst the Krio
*Juana
*Jusu
*Kabba
*Kabbah
*Kabia
*Kaikai
*Kailie
*Kaingbanja
*Kaisamba
*Kakay
*Kallay
*Kallon
*Kalokoh
*Kamanda
*Kamano
*Kamanno
*Kamara - “Protecting Village / Home” (Soninke)
*Kanagborro
*Kandeh
*Kanneh
*Kanu
*Kanuteh
*Kanuwally - “God, I thank you” (Limba)
*Karefa - “Successor / Holy One / ‘Khalifa’”(Arabic) Second-born son (Mandinka/Mande)
*Karew
*Karifa - “Successor / Holy One / ‘Khalifa’”(Arabic) Second-born son (Mandinka/Mande)
*Kargbo
*Karimu
*Katta
*Kawa
*Kebbie
*Keita
*Kellie
*Khia
*Kindi
*Koedoyoma
*Koita
*Koker - Fighter / Wrangler (Middle English) *common amongst the Krio
*Kolleh
*Komai
*Komagutu
*Komba
*Konateh
*Kondewa
*Kondeh
*Koneh
*Kongobah
*Kongobay
*Konneh
*Konomanyi
*Konteh
*Konuwa
*Koroma
*Kortu
*Kowa
*Kpaka
*Kurubally
*Kutubu
*Kuyateh
*Kuyembeh
*Lahai
*Lamin - “Trustworthy / Faithful / ‘Al-Amin’” (Arabic)
*Lansana - “The Virtuous / The Good / ‘Al-Hassan’” (Arabic)
*Lavalie - (Mende)
*Lebbie
*Lewally
*Lukulay
*Lungay
*Lunsar - “Lion’s town” “Place of stones” (Temne - Town in the Northern Province)
*Luseni
*MacCarthy - “son of Cárthach" "loving/beloved” (Irish / Gaelic) *common amongst the Krio
*MacFoy - “Son of the Potter” (Scottish / Gaelic) *common amongst the Krio
*Magona
*Makaya
*Maligie
*Mallah
*Maloma
*Mani - (Kono / Kissi)
*Manjang
*Mankobo
*Manneh
*Mansaray
*Mara - “To Protect” (Soninke)
*Marah - “To Protect” (Soninke)
*Margai
*Marrah - “To Protect” (Soninke)
*Massally
*Massaquoi - “Chief / Ruler” (Vai)
*Mattia
*Matturie
*Mayeh
*Mbayo
*Minah
*Minteh
*Moinina
*Momoh - “Praiseworthy / Commendable / ‘Muhammad’” (Arabic - Mano River Basin Localised)
*Momokani
*Mohai
*Moriba
*Morong
*Moseray
*Munu
*Musa - “Saved from the Water” (Arabic) ‘Moses’ (Hebrew)
*Ndulu
*Ngegba
*Ngekia
*Ngobeh
*Njai
*Nyuma
*Nyumah
*Ordulsay
*Palloh
*Panneh
*Pessima
*Quee
*Saboleh
*Saccoh
*Saffa
*Saibureh
*Saidu - “Fortunate / Blessed” (Arabic - West African Localised)
*Salisu
*Sall
*Sama
*Samah
*Samai
*Samba
*Sambo
*Samura
*Samurah
*Sandi
*Sankarah
*Sankareh
*Sankoh - “Strong” (Temne)
*Sannoh
*Sanu - (Limba)
*Sanusi
*Sanyang
*Sawaneh
*Sawyerr - “One Who Saws Wood / Woodcutter” (English) *common amongst the Krio
*Sedibeh
*Seibureh
*Sekoh
*Sellu
*Sembu
*Senesie
*Sengeh
*Sengulay
*Sesay
*Sheriff - “Noble / Honorable / ‘Sharif’” (Arabic)
*Siaffa
*Sidibay
*Sidibeh
*Sidibey
*Sillah
*Sinneh
*Sogbo
*Sonko
*Sorie
*Sourie
*Sow
*Sowa
*Suluku - Wolf / Hyena (Mande/Mandinka)
*Suma
*Sumailah
*Sumana
*Suso
*Swaray
*Swarray
*Tajawie
*Tamba - Second-born son born after twins
*Tarawali
*Tarawalie
*Tarawallie
*Tarawally
*Taylor - Cutter of cloth / ‘Tailor’ (English / French) *common amongst the Krio
*Teambo
*Tejan - Crown / royal headband / ‘Tijan’ (Arabic)
*Tengbeh
*Tholley
*Thoronka
*Thullah
*Timbo
*Tongi
*Tonkara
*Torto
*Tucker - Softener of cloth (English) *common amongst the Krio and Sherbro
*Tugbay
*Tugbawa
*Tumbu
*Tumoe
*Tunkara
*Turay
*Vandi
*Vandy
*Vonjo
*Vonjoe
*Wariteh
*Williams - son of William (English) *common amongst the Krio
*Woneh
*Wongbo
*Woobay
*Wulladeh
*Wurie
*Yakawa
*Yambasu
*Yancy
*Yanka
*Yansaneh
*Yansanneh
*Yavanah
*Yavannah
*Yiraia
*Yokie
*{{BookCat}}
na79zlkxu6l1k0xtb7ve4x59l9oap6y
65c02 Assembly
0
444716
4676270
4633123
2026-10-15T15:04:43Z
~2026-55314-46
3628483
/* Absolute Indirect Indexed with X: (a,x) */ Deleted duplicated sentence.
4676270
wikitext
text/x-wiki
{{TOCright}}{{Split}}
This book is a guide to the 65c02 Assembly language. This book will teach the different memory addressing modes and instructions of the 8-bit WDC 65c02 processor.
This is an edit of the [[6502 Assembly]] book, with the addition of the new instructions/modes on the 65c02.
== Syntax ==
Syntax will vary between assemblers - this book will use the following syntax throughout:
{| class="wikitable"
|+ Numerical representations
! Syntax !! Base !! Example
|-
| <code>%00001111</code> || Binary || <code>LDA #%0001</code>
|-
| <code>$FA</code> || [[wikipedia:Hexadecimal|Hexadecimal]]|| <code>LDA #$0E</code>
|-
| <code>123</code> || Decimal || <code>LDA #100</code>
|}
== Introduction ==
The 65C02 CPU has an [[wikipedia:8-bit_computing|8-bit]] data [[wikipedia:Bus_(computing)|bus]], and a 16-bit address bus. All [[wikipedia:Processor_register|registers]] are 8-bit except for the 16-bit [[wikipedia:Program_counter|Program Counter]] (PC) register. Therefore the CPU is considered to be 8-bit.
That the address bus is 16-bit means that the CPU can access 2^16 individual bytes of memory, from address $0000 to address $FFFF, which is 65536 bytes (64[[wikipedia:Kilobyte#Base_2_(1024_bytes)|KB]]).
Communication with peripheral units (e.g. video, audio, disk and controllers for a game system) is often performed with [[wikipedia:Memory-mapped_I/O|memory-mapped I/O]].
The memory is divided into "pages", each of 256 bytes (within the range of an 8-bit offset). Page ''n'' is the ''n''<nowiki/>'th page in the memory, with a starting address of 256*n, and end address of (256*(n+1))-1. E.g. the "zero page" starts at address 0, and ends at address 255. See [[#Memory layout|memory layout]] below for more details.
Slightly less than half of the 65c02 CPUs [[wikipedia:Opcode|opcodes]] deal with memory stored in the Zero Page. Memory stored in the zero page often takes less time to process.
== Registers ==
{{Anchor|RegisterTable}}
{| class="wikitable"
|+ Registers
! Register !! Size (bits) !! Purpose
|-
| Accumulator (A) || 8
| Used to perform calculations on data.<br/>Instructions can operate directly on the accumulator instead of spending CPU cycles to access memory
|-
| X register (X) || 8
| Used as an index in some [[#Memory Addressing Modes|addressing modes]]
|-
| Y register (Y) || 8
| Used as an index in some [[#Memory Addressing Modes|addressing modes]]
|-
| Program Counter (PC) || 16
| Points to the address of the next instruction to be executed
|-
| Stack Pointer (SP) || 8
| Stores the stack index into which the next stack element will be inserted.<br/>The address of this position is <code>$0100 + SP</code>. SP is initially set to <code>$FD</code>
|-
| Status (SR) || 8
| Each bit represents a status flag. Flags indicate the state of the CPU, or information about the result of the previous instruction.<br/>See the table below for a description of each flag
|}
{{Anchor|StatusFlagTable}}
{| class="wikitable"
|+ Status Flags
! Bit !! Symbol !! Name !! Description
|-
| 7 || N || Negative
|
[[#Comparison|Compare]]: Set if the register's value is less than the input value<br/>
Otherwise: Set if the result was negative, i.e. bit 7 of the result was set
|-
| 6 || V || Overflow
|
[[#Arithmetic|Arithmetic]]: Set if a signed overflow occurred during addition or subtraction, i.e. the sign of the result differs from the sign of both the input and the accumulator<br/>
<code>BIT</code>: Set to bit 6 of the input
|-
| 5 || - || (Unused)
| Always set
|-
| 4
| B<ref>[http://nesdev.com/the%20'B'%20flag%20&%20BRK%20instruction.txt], The B flag does not represent an actual CPU register</ref>
| Break
| Set if an interrupt request has been triggered by a <code>BRK</code> instruction
|-
| 3 || D || Decimal
| Decimal mode[https://wikipedia.org/wiki/Binary-coded_decimal]: mathematical instructions will treat the inputs and outputs as decimal numbers.<br/>E.g. <code>$09 + $01 = $10</code>
|-
| 2 || I || Interrupt Disable
| Disables interrupts while set
|-
| 1 || Z || Zero
|
[[#Comparison|Compare]]: Set if the register's value is equal to the input value<br/>
<code>BIT</code>: Set if the result of logically ANDing the accumulator with the input results in 0<br/>
Otherwise: Set if result was zero
|-
| 0 || C || Carry
| Carry/Borrow flag used in math and rotate operations
[[#Arithmetic|Arithmetic]]: Set if an unsigned overflow occurred during addition or subtraction, i.e. the result is less than the initial value (or equal to the initial value, if the carry flag was set going in)<br/>
[[#Comparison|Compare]]: Set if register's value is greater than or equal to the input value<br/>
[[#Shift and Rotate|Shifting]]: Set to the value of the eliminated bit of the input, i.e. bit 7 when shifting left, or bit 0 when shifting right
|}
== Memory layout ==
16-bit values are stored in memory in [[w:Endianness|little-endian]], so the least significant byte is stored before the most significant. E.g. if address <code>$0000</code> contains <code>$FF</code> and address <code>$0001</code> contains <code>$00</code>, reading a two-byte value from <code>$0000</code> will result in <code>$00FF</code>.
Signed integers are in [[w:Two's_complement|two's complement]] and can represent values from -128 (<code>%10000000</code>) to +127 (<code>%01111111</code>). Bit 7 is set if the integer is negative.
The 6502's program counter is 16 bits wide, so up to 2^16 (65536) bytes of memory are addressable. Certain regions of memory are reserved for particular purposes:
{| class="wikitable"
|+ Memory regions
! Region !! Contents !! Description
|-
| <code>$0000</code> - <code>$00FF</code>
| Zero page</td><td>The first page of memory, which is faster to access than other pages.<br/>Instructions can specify addresses within the zero page with a single byte as opposed to two, so instructions that use the zero page instead of any other page require one less CPU cycle to execute</td>
|-
| <code>$0100</code> - <code>$01FF</code>
| [[Data Structures/Stacks and Queues#Stacks|Stack]]</td><td>Last-in first-out data structure. Grows backwards from <code>$01FF</code> to <code>$0100</code>.<br/>Used by some [[#Transfer|transfer]], [[#Stack|stack]], and [[#Subroutines and Jump|subroutine]] instructions</td>
|-
| <code>$0200</code> - <code>$FFFF</code>
| General-purpose</td><td>Memory that can be used for whatever purpose needed.<br/>Devices that use the 6502 processor may choose to reserve sub-regions for other purposes, such as [[Embedded Systems/Memory#Memory-Mapped I/O|memory-mapped I/O]]</td>
|-
|}
== Memory Addressing Modes ==
Each instruction uses one of thirteen memory addressing modes, which determines the operand of the instruction. An example is provided for each.
=== Accumulator: A ===
The Accumulator is implied as the operand, so no address needs to be specified.
''' Example '''
Using the ASL (Arithmetic Shift Left) instruction with no operands, the Accumulator is always the value being shifted left.
ASL
=== Implied: i ===
The operand is implied, so it does not need to be specified.
''' Example '''
The operands being implied here are X, the source of the transfer, and A, the destination of the transfer.
TXA
=== Immediate: # ===
The operand is used directly to perform the computation.
''' Example '''
The value $22 is loaded into the Accumulator.
LDA #$22
=== Absolute: a ===
A full 16-bit address is specified and the byte at that address is used to perform the computation.
''' Example '''
The value at address <code>$D010</code> is loaded into the X register.
LDX $D010
=== Zero Page: zp ===
A single byte specifies an address in the first page of memory (<code>$00xx</code>), also known as the zero page, and the byte at that address is used to perform the computation.
''' Example '''
The value at address <code>$0002</code> is loaded into the Y register.
LDY $02
=== Stack: s ===
Essentially the same as Implied (i). The difference is that these instructions perform stack operations; pushing or pulling operands from the stack.
=== Relative: r ===
The offset specified is added to the current address stored in the Program Counter (PC). Offsets can range from -128 to +127.
''' Example '''
The offset <code>$2D</code> is added to the address in the Program Counter (say <code>$C100</code>). The destination of the branch (if taken) will be <code>$C12D</code>.
BPL $2D
=== Absolute Indirect: (a) ===
The little-endian two-byte value stored at the specified address is used to perform the computation. Only used by the <code>JMP</code> instruction.
''' Example '''
The addresses <code>$A001</code> and <code>$A002</code> are read, returning <code>$FF</code> and <code>$00</code> respectively. The address <code>$00FF</code> is then jumped to.
JMP ($A001)
=== Absolute Indirect Indexed with X: (a,x) ===
The value in <code>X</code> is added to the specified address for the sum address. The little-endian two-byte value stored at the sum address is used to perform the computation. Only used by the <code>JMP</code> instruction.
''' Example '''
The value <code>$06</code> in <code>X</code> is added to <code>$EO15</code> for a sum of <code>$EO1B</code>. The address <code>$D010</code> at addresses <code>$E01B</code> and <code>$E01C</code> are read. The address <code>$D010</code> is then jumped to.
JMP ($E015,X)
=== Absolute Indexed with X: a,x ===
The value in <code>X</code> is added to the specified address for a sum address. The value at the sum address is used to perform the computation.
''' Example '''
The value <code>$02</code> in <code>X</code> is added to <code>$C001</code> for a sum of <code>$C003</code>. The value <code>$5A</code> at address <code>$C003</code> is used to perform the ''add with carry'' (''<code>ADC</code>'') operation.
ADC $C001,X
=== Absolute Indexed with Y: a,y ===
The value in <code>Y</code> is added to the specified address for a sum address. The value at the sum address is used to perform the computation.
''' Example '''
The value <code>$03</code> in <code>Y</code> is added to <code>$F001</code> for a sum of <code>$F004</code>. The value <code>$EF</code> at address <code>$F004</code> is incremented (''<code>INC</code>'') and <code>$F0</code> is written back to <code>$F004</code>.
INC $F001,Y
=== Zero Page Indexed with X: zp,x ===
The value in <code>X</code> is added to the specified zero page address for a sum address. The value at the sum address is used to perform the computation.
''' Example '''
The value <code>$02</code> in <code>X</code> is added to <code>$01</code> for a sum of <code>$03</code>. The value <code>$A5</code> at address <code>$0003</code> is loaded into the Accumulator.
LDA $01,X
=== Zero Page Indexed with Y: zp,y ===
The value in <code>Y</code> is added to the specified zero page address for a sum address. The value at the sum address is used to perform the computation.
''' Example '''
The value <code>$03</code> in <code>Y</code> is added to <code>$01</code> for a sum of <code>$04</code>. The value <code>$E3</code> at address <code>$0004</code> is loaded into the Accumulator.
LDA $01,Y
=== Zero Page Indirect: (zp) ===
The little-endian address stored at the two-byte pair of zero page address (LSB) and zero page address plus one (MSB) is loaded and the value at that address is used to perform the computation.
''' Example '''
The address <code>$D010</code> at addresses <code>$0015</code> and <code>$0016</code> will be where the value <code>$0F</code> in the Accumulator is stored.
STA ($15)
=== Zero Page Indexed Indirect: (zp,x) ===
The value in <code>X</code> is added to the specified zero page address for a sum address. The little-endian address stored at the two-byte pair of sum address (LSB) and sum address plus one (MSB) is loaded and the value at that address is used to perform the computation.
''' Example '''
The value <code>$02</code> in <code>X</code> is added to <code>$15</code> for a sum of <code>$17</code>. The address <code>$D010</code> at addresses <code>$0017</code> and <code>$0018</code> will be where the value <code>$0F</code> in the Accumulator is stored.
STA ($15,X)
=== Zero Page Indirect Indexed with Y: (zp),y ===
The value in <code>Y</code> is added to the address at the little-endian address stored at the two-byte pair of the specified address (LSB) and the specified address plus one (MSB). The value at the sum address is used to perform the computation.
''' Example '''
The value <code>$03</code> in <code>Y</code> is added to the address <code>$C235</code> at addresses <code>$002A</code> and <code>$002B</code> for a sum of <code>$C238</code>. The Accumulator is then exclusive ORed with the value <code>$2F</code> at <code>$C238</code>.
EOR ($2A),Y
== Instructions ==
These are the instructions for the 6502 processor including an ASCII visual, a list of affected flags, and a table of opcodes for acceptable addressing modes.
=== Load and Store ===
{|
|+
|-
| ''' Load Accumulator with Memory: <code style="color: #36c;font-family: sans-serif;">LDA</code> '''
|| ''' Load Index X with Memory: <code style="color: #36c;font-family: sans-serif;">LDX</code> '''
|| ''' Load Index Y with Memory: <code style="color: #36c;font-family: sans-serif;">LDY</code> '''
|-
|
M -> A
Flags: N, Z
||
M -> X
Flags: N, Z
||
M -> Y
Flags: N, Z
|-
|
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Absolute: a|a]] || AD
|-
| [[#Absolute Indexed with X: a.2Cx|a,x]] || BD
|-
| [[#Absolute Indexed with Y: a.2Cy|a,y]] || B9
|-
| [[#Immediate: .23|#]] || A9
|-
| [[#Zero Page: zp|zp]] || A5
|-
| [[#Zero Page Indexed Indirect: .28zp.2Cx.29|(zp,x)]] || A1
|-
|(zp)
|B2
|-
| [[#Zero Page Indexed with X: zp.2Cx|zp,x]] || B5
|-
| [[#Zero Page Indirect Indexed with Y: .28zp.29.2Cy|(zp),y]] || B1
|}
||
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Absolute: a|a]] || AE
|-
| [[#Absolute Indexed with Y: a.2Cy|a,y]] || BE
|-
| [[#Immediate: .23|#]] || A2
|-
| [[#Zero Page: zp|zp]] || A6
|-
| [[#Zero Page Indexed with Y: zp.2Cy|zp,y]] || B6
|}
||
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Absolute: a|a]] || AC
|-
| [[#Absolute Indexed with X: a.2Cx|a,x]] || BC
|-
| [[#Immediate: .23|#]] || A0
|-
| [[#Zero Page: zp|zp]] || A4
|-
| [[#Zero Page Indexed with X: zp.2Cx|zp,x]] || B4
|}
|-
| ''' Store Accumulator in Memory: <code style="color: #36c;font-family: sans-serif;">STA</code> '''
|| ''' Store Index X in Memory: <code style="color: #36c;font-family: sans-serif;">STX</code> '''
|| ''' Store Index Y in Memory: <code style="color: #36c;font-family: sans-serif;">STY</code> '''
|-
|
A -> M
Flags: none
||
X -> M
Flags: none
||
Y -> M
Flags: none
|-
|
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Absolute: a|a]] || 8D
|-
| [[#Absolute Indexed with X: a.2Cx|a,x]] || 9D
|-
| [[#Absolute Indexed with Y: a.2Cy|a,y]] || 99
|-
| [[#Zero Page: zp|zp]] || 85
|-
| [[#Zero Page Indexed Indirect: .28zp.2Cx.29|(zp,x)]] || 81
|-
|(zp)
|92
|-
| [[#Zero Page Indexed with X: zp.2Cx|zp,x]] || 95
|-
| [[#Zero Page Indirect Indexed with Y: .28zp.29.2Cy|(zp),y]] || 91
|}
||
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Absolute: a|a]] || 8E
|-
| [[#Zero Page: zp|zp]] || 86
|-
| [[#Zero Page Indexed with Y: zp.2Cy|zp,y]] || 96
|}
||
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Absolute: a|a]] || 8C
|-
| [[#Zero Page: zp|zp]] || 84
|-
| [[#Zero Page Indexed with X: zp.2Cx|zp,x]] || 94
|}
|-
|''' Store Zero in Memory: <code style="color: #36c;font-family: sans-serif;">STZ</code> '''
|
|
|-
|
0 -> M
Flags: none
|
|
|-
|
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Absolute: a|a]] || 9C
|-
|a,x
|9E
|-
| [[#Zero Page: zp|zp]] || 64
|-
| zp,x || 74
|}
|
|
|}
=== Arithmetic ===
{|
|+
|-
| ''' Add Memory to Accumulator with Carry: <code style="color: #36c;font-family: sans-serif;">ADC</code> '''
|| ''' Subtract Memory from Accumulator with Borrow: <code style="color: #36c;font-family: sans-serif;">SBC</code> '''
|-
|
A + M + C -> A
Flags: N, V, Z, C
||
A - M - ~C -> A
Flags: N, V, Z, C
|-
|
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Absolute: a|a]] || 6D
|-
| [[#Absolute Indexed with X: a.2Cx|a,x]] || 7D
|-
| [[#Absolute Indexed with Y: a.2Cy|a,y]] || 79
|-
| [[#Immediate: .23|#]] || 69
|-
| [[#Zero Page: zp|zp]] || 65
|-
| [[#Zero Page Indexed Indirect: .28zp.2Cx.29|(zp,x)]] || 61
|-
|(zp)
|72
|-
| [[#Zero Page Indexed with X: zp.2Cx|zp,x]] || 75
|-
| [[#Zero Page Indirect Indexed with Y: .28zp.29.2Cy|(zp),y]] || 71
|}
||
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Absolute: a|a]] || ED
|-
| [[#Absolute Indexed with X: a.2Cx|a,x]] || FD
|-
| [[#Absolute Indexed with Y: a.2Cy|a,y]] || F9
|-
| [[#Immediate: .23|#]] || E9
|-
| [[#Zero Page: zp|zp]] || E5
|-
| [[#Zero Page Indexed Indirect: .28zp.2Cx.29|(zp,x)]] || E1
|-
|(zp)
|F2
|-
| [[#Zero Page Indexed with X: zp.2Cx|zp,x]] || F5
|-
| [[#Zero Page Indirect Indexed with Y: .28zp.29.2Cy|(zp),y]] || F1
|}
|}
=== Increment and Decrement ===
{|
|+
|-
| ''' Increment Memory by One: <code style="color: #36c;font-family: sans-serif;">INC</code> '''
|| ''' Increment Index X by One: <code style="color: #36c;font-family: sans-serif;">INX</code> '''
|| ''' Increment Index Y by One: <code style="color: #36c;font-family: sans-serif;">INY</code> '''
|-
|
M + 1 -> M
Flags: N, Z
||
X + 1 -> X
Flags: N, Z
||
Y + 1 -> Y
Flags: N, Z
|-
|
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Absolute: a|a]] || EE
|-
| [[#Absolute Indexed with X: a.2Cx|a,x]] || FE
|-
| [[#Zero Page: zp|zp]] || E6
|-
| [[#Zero Page Indexed with X: zp.2Cx|zp,x]] || F6
|-
|A
|1A
|}
||
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || E8
|}
||
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || C8
|}
|-
| ''' Decrement Memory by One: <code style="color: #36c;font-family: sans-serif;">DEC</code> '''
|| ''' Decrement Index X by One: <code style="color: #36c;font-family: sans-serif;">DEX</code> '''
|| ''' Decrement Index Y by One: <code style="color: #36c;font-family: sans-serif;">DEY</code> '''
|-
|
M - 1 -> M
Flags: N, Z
||
X - 1 -> X
Flags: N, Z
||
Y - 1 -> Y
Flags: N, Z
|-
|
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Absolute: a|a]] || CE
|-
| [[#Absolute Indexed with X: a.2Cx|a,x]] || DE
|-
| [[#Zero Page: zp|zp]] || C6
|-
| [[#Zero Page Indexed with X: zp.2Cx|zp,x]] || D6
|-
|A
|3A
|}
||
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || CA
|}
||
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || 88
|}
|}
=== Shift and Rotate ===
{|
|+
|-
| ''' Arithmetic Shift Left One Bit: <code style="color: #36c;font-family: sans-serif;">ASL</code> '''
|| ''' Logical Shift Right One Bit: <code style="color: #36c;font-family: sans-serif;">LSR</code> '''
|-
|
C <- 7 6 5 4 3 2 1 0 <- 0
Flags: N, Z, C
||
0 -> 7 6 5 4 3 2 1 0 -> C
Flags: N, Z, C
|-
|
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Absolute: a|a]] || 0E
|-
| [[#Absolute Indexed with X: a.2Cx|a,x]] || 1E
|-
| [[#Accumulator: A|A]] || 0A
|-
| [[#Zero Page: zp|zp]] || 06
|-
| [[#Zero Page Indexed with X: zp.2Cx|zp,x]] || 16
|}
||
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Absolute: a|a]] || 4E
|-
| [[#Absolute Indexed with X: a.2Cx|a,x]] || 5E
|-
| [[#Accumulator: A|A]] || 4A
|-
| [[#Zero Page: zp|zp]] || 46
|-
| [[#Zero Page Indexed with X: zp.2Cx|zp,x]] || 56
|}
|-
| ''' Rotate Left One Bit: <code style="color: #36c;font-family: sans-serif;">ROL</code> '''
|| ''' Rotate Right One Bit: <code style="color: #36c;font-family: sans-serif;">ROR</code> '''
|-
|
C <- 7 6 5 4 3 2 1 0 <- C
Flags: N, Z, C
||
C -> 7 6 5 4 3 2 1 0 -> C
Flags: N, Z, C
|-
|
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Absolute: a|a]] || 2E
|-
| [[#Absolute Indexed with X: a.2Cx|a,x]] || 3E
|-
| [[#Accumulator: A|A]] || 2A
|-
| [[#Zero Page: zp|zp]] || 26
|-
| [[#Zero Page Indexed with X: zp.2Cx|zp,x]] || 36
|}
||
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Absolute: a|a]] || 6E
|-
| [[#Absolute Indexed with X: a.2Cx|a,x]] || 7E
|-
| [[#Accumulator: A|A]] || 6A
|-
| [[#Zero Page: zp|zp]] || 66
|-
| [[#Zero Page Indexed with X: zp.2Cx|zp,x]] || 76
|}
|}
=== Logic ===
{|
|+
|-
| ''' AND Memory with Accumulator: <code style="color: #36c;font-family: sans-serif;">AND</code> '''
|| ''' OR Memory with Accumulator: <code style="color: #36c;font-family: sans-serif;">ORA</code> '''
|| ''' Exclusive-OR Memory with Accumulator: <code style="color: #36c;font-family: sans-serif;">EOR</code> '''
|-
|
A & M -> A
Flags: N, Z
||
A | M -> A
Flags: N, Z
||
A ^ M -> A
Flags: N, Z
|-
|
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Absolute: a|a]] || 2D
|-
| [[#Absolute Indexed with X: a.2Cx|a,x]] || 3D
|-
| [[#Absolute Indexed with Y: a.2Cy|a,y]] || 39
|-
| [[#Immediate: .23|#]] || 29
|-
| [[#Zero Page: zp|zp]] || 25
|-
| [[#Zero Page Indexed Indirect: .28zp.2Cx.29|(zp,x)]] || 21
|-
|(zp)
|32
|-
| [[#Zero Page Indexed with X: zp.2Cx|zp,x]] || 35
|-
| [[#Zero Page Indirect Indexed with Y: .28zp.29.2Cy|(zp),y]] || 31
|}
||
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Absolute: a|a]] || 0D
|-
| [[#Absolute Indexed with X: a.2Cx|a,x]] || 1D
|-
| [[#Absolute Indexed with Y: a.2Cy|a,y]] || 19
|-
| [[#Immediate: .23|#]] || 09
|-
| [[#Zero Page: zp|zp]] || 05
|-
| [[#Zero Page Indexed Indirect: .28zp.2Cx.29|(zp,x)]] || 01
|-
|(zp)
|12
|-
| [[#Zero Page Indexed with X: zp.2Cx|zp,x]] || 15
|-
| [[#Zero Page Indirect Indexed with Y: .28zp.29.2Cy|(zp),y]] || 11
|}
||
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Absolute: a|a]] || 4D
|-
| [[#Absolute Indexed with X: a.2Cx|a,x]] || 5D
|-
| [[#Absolute Indexed with Y: a.2Cy|a,y]] || 59
|-
| [[#Immediate: .23|#]] || 49
|-
| [[#Zero Page: zp|zp]] || 45
|-
| [[#Zero Page Indexed Indirect: .28zp.2Cx.29|(zp,x)]] || 41
|-
|(zp)
|52
|-
| [[#Zero Page Indexed with X: zp.2Cx|zp,x]] || 55
|-
| [[#Zero Page Indirect Indexed with Y: .28zp.29.2Cy|(zp),y]] || 51
|}
|}
=== Compare and Test Bit ===
The Negative (N), Zero (Z), and Carry (C) [[#StatusFlagTable|status flags]] are used for conditional (branch) instructions.
All Compare instructions affect flags in the same way:
{| class="wikitable"
! Condition !! N !! Z !! C
|-
| Register < Memory || 1 || 0 || 0
|-
| Register = Memory || 0 || 1 || 1
|-
| Register > Memory || 0 || 0 || 1
|}
{|
|+
|-
| ''' Compare Memory and Accumulator: <code style="color: #36c;font-family: sans-serif;">CMP</code> '''
|| ''' Compare Memory and Index X: <code style="color: #36c;font-family: sans-serif;">CPX</code> '''
|| ''' Compare Memory with Index Y: <code style="color: #36c;font-family: sans-serif;">CPY</code> '''
|-
|
A - M
Flags: N, Z, C
||
X - M
Flags: N, Z, C
||
Y - M
Flags: N, Z, C
|-
|
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Absolute: a|a]] || CD
|-
| [[#Absolute Indexed with X: a.2Cx|a,x]] || DD
|-
| [[#Absolute Indexed with Y: a.2Cy|a,y]] || D9
|-
| [[#Immediate: .23|#]] || C9
|-
| [[#Zero Page: zp|zp]] || C5
|-
| [[#Zero Page Indexed Indirect: .28zp.2Cx.29|(zp,x)]] || C1
|-
|(zp)
|D2
|-
| [[#Zero Page Indexed with X: zp.2Cx|zp,x]] || D5
|-
| [[#Zero Page Indirect Indexed with Y: .28zp.29.2Cy|(zp),y]] || D1
|}
||
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Absolute: a|a]] || EC
|-
| [[#Immediate: .23|#]] || E0
|-
| [[#Zero Page: zp|zp]] || E4
|}
||
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Absolute: a|a]] || CC
|-
| [[#Immediate: .23|#]] || C0
|-
| [[#Zero Page: zp|zp]] || C4
|}
|}
''' Test Bits in Memory with Accumulator: <code style="color: #36c;font-family: sans-serif;">BIT</code> '''
A & M
Flags: N = M7, V = M6, Z
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Absolute: a|a]] || 2C
|-
|a,x
|3C
|-
| [[#Immediate: .23|#]] || 89
|-
| [[#Zero Page: zp|zp]] || 24
|-
|zp,x
|34
|}
=== Branch ===
{|
|+
|''' Branch unconditionally: <code style="color: #36c;font-family: sans-serif;">BRA</code> '''
|
|-
|
Branch if 1 = 1
Flags: none
||
|-
|
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Relative: r|r]] || 80
|}
|
|-
| ''' Branch on Carry Clear: <code style="color: #36c;font-family: sans-serif;">BCC</code> '''
|| ''' Branch on Carry Set: <code style="color: #36c;font-family: sans-serif;">BCS</code> '''
|-
|
Branch if C = 0
Flags: none
||
Branch if C = 1
Flags: none
|-
|
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Relative: r|r]] || 90
|}
||
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Relative: r|r]] || B0
|}
|-
| ''' Branch on Result not Zero: <code style="color: #36c;font-family: sans-serif;">BNE</code> '''
|| ''' Branch on Result Zero: <code style="color: #36c;font-family: sans-serif;">BEQ</code> '''
|-
|
Branch if Z = 0
Flags: none
||
Branch if Z = 1
Flags: none
|-
|
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Relative: r|r]] || D0
|}
||
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Relative: r|r]] || F0
|}
|-
| ''' Branch on Result Plus: <code style="color: #36c;font-family: sans-serif;">BPL</code> '''
|| ''' Branch on Result Minus: <code style="color: #36c;font-family: sans-serif;">BMI</code> '''
|-
|
Branch if N = 0
Flags: none
||
Branch if N = 1
Flags: none
|-
|
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Relative: r|r]] || 10
|}
||
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Relative: r|r]] || 30
|}
|-
| ''' Branch on Overflow Clear: <code style="color: #36c;font-family: sans-serif;">BVC</code> '''
|| ''' Branch on Overflow Set: <code style="color: #36c;font-family: sans-serif;">BVS</code> '''
|-
|
Branch if V = 0
Flags: none
||
Branch if V = 1
Flags: none
|-
|
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Relative: r|r]] || 50
|}
||
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Relative: r|r]] || 70
|}
|}
Unlike the other branch instructions, BBR and BBS have two operands. The M operand, used for the Set or Reset comparison, is always the zp addressing mode. The branch address operand is the r addressing mode, and has the same meaning as the other branch instructions.
{|
|-
|''' Branch on Bit Reset: <code style="color: #36c;font-family: sans-serif;">BBR</code> '''
|''' Branch on Bit Set: <code style="color: #36c;font-family: sans-serif;">BBS</code> '''
|-
|Branch if (M >> n) & 1 = 0
Flags: none
|Branch if (M >> n) & 1 = 1
Flags: none
|-
|
{| class="wikitable"
!Bit
! Addressing Mode !! Opcode
|-
|BBR0
| [[#Relative: r|r]] || 0F
|-
|BBR1
|r
|1F
|-
|BBR2
|r
|2F
|-
|BBR3
|r
|3F
|-
|BBR4
|r
|4F
|-
|BBR5
|r
|5F
|-
|BBR6
|r
|6F
|-
|BBR7
|r
|7F
|}
|
{| class="wikitable"
!Bit
! Addressing Mode !! Opcode
|-
|BBS0
| [[#Relative: r|r]] || 8F
|-
|BBS1
|r
|9F
|-
|BBS2
|r
|AF
|-
|BBS3
|r
|BF
|-
|BBS4
|r
|CF
|-
|BBS5
|r
|DF
|-
|BBS6
|r
|EF
|-
|BBS7
|r
|FF
|}
|}
=== Transfer ===
{|
|+
|-
| ''' Transfer Accumulator to Index X: <code style="color: #36c;font-family: sans-serif;">TAX</code> '''
|| ''' Transfer Index X to Accumulator: <code style="color: #36c;font-family: sans-serif;">TXA</code> '''
|-
|
A -> X
Flags: N, Z
||
X -> A
Flags: N, Z
|-
|
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || AA
|}
||
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || 8A
|}
|-
| ''' Transfer Accumulator to Index Y: <code style="color: #36c;font-family: sans-serif;">TAY</code> '''
|| ''' Transfer Index Y to Accumulator: <code style="color: #36c;font-family: sans-serif;">TYA</code> '''
|-
|
A -> Y
Flags: N, Z
||
Y -> A
Flags: N, Z
|-
|
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || A8
|}
||
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || 98
|}
|-
| ''' Transfer Stack Pointer to Index X: <code style="color: #36c;font-family: sans-serif;">TSX</code> '''
|| ''' Transfer Index X to Stack Pointer: <code style="color: #36c;font-family: sans-serif;">TXS</code> '''
|-
|
S -> X
Flags: N, Z
||
X -> S
Flags: none
|-
|
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || BA
|}
||
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || 9A
|}
|}
=== Stack ===
{|
|+
|-
| ''' Push Accumulator on Stack: <code style="color: #36c;font-family: sans-serif;">PHA</code> '''
|| ''' Pull Accumulator from Stack: <code style="color: #36c;font-family: sans-serif;">PLA</code> '''
|-
|
A -> S
Flags: none
||
S -> A
Flags: N, Z
|-
|
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || 48
|}
||
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || 68
|}
|-
|''' Push Index X on Stack: <code style="color: #36c;font-family: sans-serif;">PHX</code> '''
|''' Pull Index X from Stack: <code style="color: #36c;font-family: sans-serif;">PLX</code> '''
|-
|
X -> S
Flags: none
|
S -> X
Flags: none
|-
|
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || DA
|}
|
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || FA
|}
|-
|''' Push Index Y on Stack: <code style="color: #36c;font-family: sans-serif;">PHY</code> '''
|''' Pull Index Y from Stack: <code style="color: #36c;font-family: sans-serif;">PLY</code> '''
|-
|
Y -> S
Flags: none
|
S -> Y
Flags: none
|-
|
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || 5A
|}
|
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || 7A
|}
|-
| ''' Push Processor Status on Stack: <code style="color: #36c;font-family: sans-serif;">PHP</code> '''
|| ''' Pull Processor Status from Stack: <code style="color: #36c;font-family: sans-serif;">PLP</code> '''
|-
|
P -> S
Flags: none
||
S -> P
Flags: all
|-
|
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || 08
|}
||
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || 28
|}
|}
The processor status is stored as a single byte with the following flags bits from high to low: NV--DIZC.
=== Subroutines and Jump ===
''' Jump to New Location: <code style="color: #36c;font-family: sans-serif;">JMP</code> '''
Jump to new location by changing the value of the program counter.
Flags: none
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Absolute: a|a]] || 4C
|-
| [[#Absolute Indirect: (a)|(a)]] || 6C
|-
|(a,x)
|7C
|}
''' Jump to New Location Saving Return Address: <code style="color: #36c;font-family: sans-serif;">JSR</code> '''
Jumps to a subroutine
The address before the next instruction (PC - 1) is pushed onto the stack: first the upper byte followed by the lower byte. As the stack grows backwards, the return address is therefore stored as a little-endian number in memory.<br/>
PC is set to the target address.
Flags: none
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Absolute: a|a]] || 20
|}
''' Return from Subroutine: <code style="color: #36c;font-family: sans-serif;">RTS</code> '''
Return from a subroutine to the point where it called with <code>JSR</code>.
The return address is popped from the stack (low byte first, then high byte).<br/>The return address is incremented and stored in PC.
Flags: none
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || 60
|}
''' Return from Interrupt: <code style="color: #36c;font-family: sans-serif;">RTI</code> '''
Return from an interrupt.
SR is popped from the stack.<br/>
PC is popped from the stack.
Flags: all
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || 40
|}
=== Set and Clear ===
{|
|+
|-
| ''' Clear Carry Flag: <code style="color: #36c;font-family: sans-serif;">CLC</code> '''
|| ''' Set Carry Flag: <code style="color: #36c;font-family: sans-serif;">SEC</code> '''
|-
|
0 -> C
Flags: C = 0
||
1 -> C
Flags: C = 1
|-
|
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || 18
|}
||
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || 38
|}
|-
| ''' Clear Decimal Mode: <code style="color: #36c;font-family: sans-serif;">CLD</code> '''
|| ''' Set Decimal Mode: <code style="color: #36c;font-family: sans-serif;">SED</code> '''
|-
|
0 -> D
Flags: D = 0
||
1 -> D
Flags: D = 1
|-
|
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || D8
|}
||
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || F8
|}
|-
| ''' Clear Interrupt Disable Status: <code style="color: #36c;font-family: sans-serif;">CLI</code> '''
|| ''' Set Interrupt Disable Status: <code style="color: #36c;font-family: sans-serif;">SEI</code> '''
|-
|
0 -> I
Flags: I = 0
||
1 -> I
Flags: I = 1
|-
|
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || 58
|}
||
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || 78
|}
|-
| ''' Clear Overflow Flag: <code style="color: #36c;font-family: sans-serif;">CLV</code> '''
||
|-
|
0 -> V
Flags: V = 0
||
|-
|
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || B8
|}
|
|-
|''' Reset Memory Bit: <code style="color: #36c;font-family: sans-serif;">RMB</code> '''
|''' Set Memory Bit: <code style="color: #36c;font-family: sans-serif;">SMB</code> '''
|-
|
M & ~(1 << n) -> M
Flags: none
{| class="wikitable"
!Bit
! Addressing Mode !! Opcode
|-
|RMB0
| zp || 07
|-
|RMB1
|zp
|17
|-
|RMB2
|zp
|27
|-
|RMB3
|zp
|37
|-
|RMB4
|zp
|47
|-
|RMB5
|zp
|57
|-
|RMB6
|zp
|67
|-
|RMB7
|zp
|77
|}
|
<nowiki>M | (1 << n) -> M</nowiki>
Flags: none
{| class="wikitable"
!Bit
! Addressing Mode !! Opcode
|-
|SMB0
| zp || 87
|-
|SMB1
|zp
|97
|-
|SMB2
|zp
|A7
|-
|SMB3
|zp
|B7
|-
|SMB4
|zp
|C7
|-
|SMB5
|zp
|D7
|-
|SMB6
|zp
|E7
|-
|SMB7
|zp
|F7
|}
|}
=== Miscellaneous ===
''' Break: <code style="color: #36c;font-family: sans-serif;">BRK</code> '''
Force an Interrupt.
This is a two-byte instruction, where the second byte is ignored by the processor. The 2nd byte can be used as argument to the interrupt service routine.
Flags: B = 1, I = 1
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || 00
|}
''' No Operation: <code style="color: #36c;font-family: sans-serif;">NOP</code> '''
No Operation
Flags: none
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || EA
|}
''' Wait for Interrupt: <code style="color: #36c;font-family: sans-serif;">WAI</code> '''
Wait for Interrupt
Flags: none
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || CB
|}
''' Stop mode: <code style="color: #36c;font-family: sans-serif;">STP</code> '''
Stop mode
Flags: none
{| class="wikitable"
! Addressing Mode !! Opcode
|-
| [[#Implied: i|i]] || DB
|}
== Opcode map ==
List of all the OpCodes present. An opcode is an "operation code", the first byte in an instruction. This byte decides which operation is being performed. Multiple assembler mnemonics (eg. ADC, BIT, JMP et.c.) correspond to several different opcodes. There is one opcode per addressing mode used. For example, the menmonic ASL have multiple opcodes, one for each addressing mode supported by the CPU.
Opcodes marked with an asterisk (*) are opcodes that did not exist for the 6502 CPU.
Blank entries are supposed to behave identical the NOP instruction (EA).
{| class="wikitable"
|+Instruction table
! High nibble !! colspan="16"| Low nibble
|-
| || 00 || 01 || 02 || 03 || 04 || 05 || 06 || 07 || 08 || 09 || 0A || 0B || 0C || 0D || 0E || 0F
|-
| 00 || '''BRK'''<br>s || '''ORA'''<br>(zp,x) || || || '''TSB'''<br>zp * || '''ORA'''<br>zp || '''ASL'''<br>zp || '''RMB0'''<br>zp * || '''PHP'''<br>s || '''ORA'''<br># || '''ASL'''<br>A || || '''TSB'''<br>a * || '''ORA'''<br>a || '''ASL'''<br>a || '''BBR0'''<br>r *
|-
| 10 || '''BPL'''<br>r || '''ORA'''<br>(zp),y || '''ORA'''<br>(zp) * || || '''TRB'''<br>zp * || '''ORA'''<br>zp,x || '''ASL'''<br>zp,x || '''RMB1'''<br>zp * || '''CLC'''<br>i || '''ORA'''<br>a,y || '''INC'''<br>A * || || '''TRB'''<br>a * || '''ORA'''<br>a,x || '''ASL'''<br>a,x || '''BBR1'''<br>r *
|-
| 20 || '''JSR'''<br>a || '''AND'''<br>(zp,x) || || || '''BIT'''<br>zp || '''AND'''<br>zp || '''ROL'''<br>zp || '''RMB2'''<br>zp * || '''PLP'''<br>s || '''AND'''<br># || '''ROL'''<br>A || || '''BIT'''<br>a || '''AND'''<br>a || '''ROL'''<br>a || '''BBR2'''<br>r *
|-
| 30 || '''BMI'''<br>r || '''AND'''<br>(zp),y || '''AND'''<br>(zp) * || || '''BIT'''<br>zp,x || '''AND'''<br>zp,x || '''ROL'''<br>zp,x || '''RMB3'''<br>zp * || '''SEC'''<br>i || '''AND'''<br>a,y || '''DEC'''<br>A * || || '''BIT'''<br>a,x * || '''AND'''<br>a,x || '''ROL'''<br>a,x || '''BBR3'''<br>r *
|-
| 40 || '''RTI'''<br>s || '''EOR'''<br>(zp,x) || || || || '''EOR'''<br>zp || '''LSR'''<br>zp || '''RMB4'''<br>zp * || '''PHA'''<br>s || '''EOR'''<br># || '''LSR'''<br>A || || '''JMP'''<br>a || '''EOR'''<br>a || '''LSR'''<br>a || '''BBR4'''<br>r *
|-
| 50 || '''BVC'''<br>r || '''EOR'''<br>(zp),y || '''EOR'''<br>(zp) * || || || '''EOR'''<br>zp,x || '''LSR'''<br>zp,x || '''RMB5'''<br>zp * || '''CLI'''<br>i || '''EOR'''<br>a,y || '''PHY'''<br>s * || || || '''EOR'''<br>a,x || '''LSR'''<br>a,x || '''BBR5'''<br>r *
|-
| 60 || '''RTS'''<br>s || '''ADC'''<br>(zp,x) || || || '''STZ'''<br>zp || '''ADC'''<br>zp || '''ROR'''<br>zp || '''RMB6'''<br>zp * || '''PLA'''<br>s || '''ADC'''<br># || '''ROR'''<br>A || || '''JMP'''<br>(a) || '''ADC'''<br>a || '''ROR'''<br>a || '''BBR6'''<br>r *
|-
| 70 || '''BVS'''<br>r || '''ADC'''<br>(zp),y || '''ADC'''<br>(zp) * || || '''STZ'''<br>zp,x || '''ADC'''<br>zp,x || '''ROR'''<br>zp,x || '''RMB7'''<br>zp * || '''SEI'''<br>i || '''ADC'''<br>a,y || '''PLY'''<br>s * || || '''JMP'''<br>(a,x) * || '''ADC'''<br>a,x || '''ROR'''<br>a,x || '''BBR7'''<br>r *
|-
| 80 || '''BRA'''<br>r * || '''STA'''<br>(zp,x) || || || '''STY'''<br>zp || '''STA'''<br>zp || '''STX'''<br>zp || '''SMB0'''<br>zp * || '''DEY'''<br>i || '''BIT'''<br># * || '''TXA'''<br>i || || '''STY'''<br>a || '''STA'''<br>a || '''STX'''<br>a || '''BBS0'''<br>r *
|-
| 90 || '''BCC'''<br>r || '''STA'''<br>(zp),y || '''STA'''<br>(zp) * || || '''STY'''<br>zp,x || '''STA'''<br>zp,x || '''STX'''<br>zp,y || '''SMB1'''<br>zp * || '''TYA'''<br>i || '''STA'''<br>a,y || '''TXS'''<br>i || || '''STZ'''<br>a * || '''STA'''<br>a,x || '''STZ'''<br>a,x * || '''BBS1'''<br>r *
|-
| A0 || '''LDY'''<br># || '''LDA'''<br>(zp,x) || '''LDX'''<br># || || '''LDY'''<br>zp || '''LDA'''<br>zp || '''LDX'''<br>zp || '''SMB2'''<br>zp * || '''TAY'''<br>i || '''LDA'''<br># || '''TAX'''<br>i || || '''LDY'''<br>a || '''LDA'''<br>a || '''LDX'''<br>a || '''BBS2'''<br>r *
|-
| B0 || '''BCS'''<br>r || '''LDA'''<br>(zp),y || '''LDA'''<br>(zp) * || || '''LDY'''<br>zp,x || '''LDA'''<br>zp,x || '''LDX'''<br>zp,y || '''SMB3'''<br>zp * || '''CLV'''<br>i || '''LDA'''<br>a,y || '''TSX'''<br>i || || '''LDY'''<br>a,x || '''LDA'''<br>a,x || '''LDX'''<br>a,y || '''BBS3'''<br>r *
|-
| C0 || '''CPY'''<br># || '''CMP'''<br>(zp,x) || || || '''CPY'''<br>zp || '''CMP'''<br>zp || '''DEC'''<br>zp || '''SMB4'''<br>zp * || '''INY'''<br>i || '''CMP'''<br># || '''DEX'''<br>i || '''WAI'''<br>i * || '''CPY'''<br>a || '''CMP'''<br>a || '''DEC'''<br>a || '''BBS4'''<br>r *
|-
| D0 || '''BNE'''<br>r || '''CMP'''<br>(zp),y || '''CMP'''<br>(zp) * || || || '''CMP'''<br>zp,x || '''DEC'''<br>zp,x || '''SMB5'''<br>zp * || '''CLD'''<br>i || '''CMP'''<br>a,y || '''PHX'''<br>s * || '''STP'''<br>i * || || '''CMP'''<br>a,x || '''DEC'''<br>a,x || '''BBS5'''<br>r *
|-
| E0 || '''CPX'''<br># || '''SBC'''<br>(zp,x) || || || '''CPX'''<br>zp || '''SBC'''<br>zp || '''INC'''<br>zp || '''SMB6'''<br>zp * || '''INX'''<br>i || '''SBC'''<br># || '''NOP'''<br>i || || '''CPX'''<br>a || '''SBC'''<br>a || '''INC'''<br>a || '''BBS6'''<br>r *
|-
| F0 || '''BEQ'''<br>r || '''SBC'''<br>(zp),y || '''SBC'''<br>(zp) * || || || '''SBC'''<br>zp,x || '''INC'''<br>zp,x || '''SMB7'''<br>zp * || '''SED'''<br>i || '''SBC'''<br>a,y || '''PLX'''<br>s * || || || '''SBC'''<br>a,x || '''INC'''<br>a,x || '''BBS7'''<br>r *
|}
== References ==
<references />
== Further reading ==
{{Wikipedia|WDC 65C02}}
* [[6502 Assembly]]
* [[Super NES Programming]]: the Super NES uses the 65c816, a descendant of the 6502
** [[Super NES Programming/65c816 reference]]
{{shelves|assembly languages}}
{{alphabetical}}
7z6ou9a1fnpbw0h013ca0hwif9m21zn
User:The labs
2
456476
4676300
4329230
2026-10-15T20:41:00Z
The labs
3433734
4676300
wikitext
text/x-wiki
Welcome!
Creating, developing designer, artistic, and engineering projects are skills that can be learned on the go.
== Tools ==
Many tools can be used to achieve goals, including the following:
1.- A sketchbook: This tool works like storage memory where you can write down and capture your inspired concepts or projects to use them in the moment or execute them later on. It also allows you to register all the practices that you want to do or are executing before starting your own. This will allow you to create more projects after learning new techniques.
2.- Paper, measuring tape, pens, and pencils.
3.- The sketchbook can be split into sections for each project or type of project (sewing, laser cutting, 3D printing, etc.). The end of each project section will give you space to write down the next steps for that project or to start new ones while you are motivated and full of fresh ideas. Alternatively, you can have a sketchbook for each kind of project. It can be substituted with a USB flash drive or cloud storage.
4.- A USB flash drive: This is used to save your projects and back them up on your computer to prevent the loss of data due to USB failure or misplacement. A USB holder can be made using the instructions from the sewing laboratories.
5.- If buying a USB flash drive is not an option, another choice is using cloud storage, such as the ones included with Gmail and Hotmail.
== Software ==
There are also many software applications that can be used on personal computers.
Text applications for focused writing that prevent any kind of distraction: Use focus-minded software that can be used in dark mode, such as FocusWriter (available for Windows and Linux) or Noto (for macOS).
A timer to program your working time and breaks: Use a tool like Balance Focus Timer (which has a portable version available) or any other timer application.
If privacy is a concern, encryption software can also be used to ensure confidentiality. Examples include Cryptomator (which encrypts an entire folder) and 7-Zip (which encrypts files but only allows you to modify and save text files directly inside the archive).
Inkscape: A software application used to create, design, or open vector files. It has versions for Windows, Mac, and Linux, and also offers portable versions.
== Techniques ==
Many techniques can be used to achieve your goals or even develop your skills to levels you never imagined were possible:
1.- Plan ahead: Planning ahead for the day(s) and times when you want to focus on developing your projects. Dedicating time to reach your workplace, preparing your setup, starting to work, taking breaks, enjoying your work, and selecting a time to prepare to finish and wrap up.
2.- Write down the next steps: As part of each project, writing down the development of your work will allow you to track what has been done for future reviews. You can set aside time during or right before finishing a project to note your next steps. This allows you to capture ideas while you are actively engaged and your thoughts are fresh and relevant.
Documenting activities for your next working session ensures you are never short of ideas and helps map out new techniques to learn. Maintaining this momentum will keep you in a steady flow and beat procrastination. Ultimately, this habit will elevate your skills and creative development to higher levels, preventing weeks, months, or years of inactivity and enabling you to achieve more goals in less time.
== Books in the labs ==
The following is a list of books completed or to be started:
[[Short introduction to the use of sewing machines]]
[[Short introduction to the use cutting plotter machines]]
[[Short guide to printing objects using 3D printers]]
[[Short guide to the use of laser cutting machines]]
svtibq90wqjkzstx7rhwhnqq2q91ahp
4676301
4676300
2026-10-15T20:41:41Z
The labs
3433734
/* Books in the labs */
4676301
wikitext
text/x-wiki
Welcome!
Creating, developing designer, artistic, and engineering projects are skills that can be learned on the go.
== Tools ==
Many tools can be used to achieve goals, including the following:
1.- A sketchbook: This tool works like storage memory where you can write down and capture your inspired concepts or projects to use them in the moment or execute them later on. It also allows you to register all the practices that you want to do or are executing before starting your own. This will allow you to create more projects after learning new techniques.
2.- Paper, measuring tape, pens, and pencils.
3.- The sketchbook can be split into sections for each project or type of project (sewing, laser cutting, 3D printing, etc.). The end of each project section will give you space to write down the next steps for that project or to start new ones while you are motivated and full of fresh ideas. Alternatively, you can have a sketchbook for each kind of project. It can be substituted with a USB flash drive or cloud storage.
4.- A USB flash drive: This is used to save your projects and back them up on your computer to prevent the loss of data due to USB failure or misplacement. A USB holder can be made using the instructions from the sewing laboratories.
5.- If buying a USB flash drive is not an option, another choice is using cloud storage, such as the ones included with Gmail and Hotmail.
== Software ==
There are also many software applications that can be used on personal computers.
Text applications for focused writing that prevent any kind of distraction: Use focus-minded software that can be used in dark mode, such as FocusWriter (available for Windows and Linux) or Noto (for macOS).
A timer to program your working time and breaks: Use a tool like Balance Focus Timer (which has a portable version available) or any other timer application.
If privacy is a concern, encryption software can also be used to ensure confidentiality. Examples include Cryptomator (which encrypts an entire folder) and 7-Zip (which encrypts files but only allows you to modify and save text files directly inside the archive).
Inkscape: A software application used to create, design, or open vector files. It has versions for Windows, Mac, and Linux, and also offers portable versions.
== Techniques ==
Many techniques can be used to achieve your goals or even develop your skills to levels you never imagined were possible:
1.- Plan ahead: Planning ahead for the day(s) and times when you want to focus on developing your projects. Dedicating time to reach your workplace, preparing your setup, starting to work, taking breaks, enjoying your work, and selecting a time to prepare to finish and wrap up.
2.- Write down the next steps: As part of each project, writing down the development of your work will allow you to track what has been done for future reviews. You can set aside time during or right before finishing a project to note your next steps. This allows you to capture ideas while you are actively engaged and your thoughts are fresh and relevant.
Documenting activities for your next working session ensures you are never short of ideas and helps map out new techniques to learn. Maintaining this momentum will keep you in a steady flow and beat procrastination. Ultimately, this habit will elevate your skills and creative development to higher levels, preventing weeks, months, or years of inactivity and enabling you to achieve more goals in less time.
== Books in the labs ==
The following is a list of books completed or to be started:
[[Short introduction to the use of sewing machines]]
[[Short introduction to the use of cutting plotter machines]]
[[Short guide to printing objects using 3D printers]]
[[Short guide to the use of laser cutting machines]]
o9ag2xtpo09tiprg2fx276l1gnq0jmc
4676302
4676301
2026-10-15T20:42:03Z
The labs
3433734
/* Software */
4676302
wikitext
text/x-wiki
Welcome!
Creating, developing designer, artistic, and engineering projects are skills that can be learned on the go.
== Tools ==
Many tools can be used to achieve goals, including the following:
1.- A sketchbook: This tool works like storage memory where you can write down and capture your inspired concepts or projects to use them in the moment or execute them later on. It also allows you to register all the practices that you want to do or are executing before starting your own. This will allow you to create more projects after learning new techniques.
2.- Paper, measuring tape, pens, and pencils.
3.- The sketchbook can be split into sections for each project or type of project (sewing, laser cutting, 3D printing, etc.). The end of each project section will give you space to write down the next steps for that project or to start new ones while you are motivated and full of fresh ideas. Alternatively, you can have a sketchbook for each kind of project. It can be substituted with a USB flash drive or cloud storage.
4.- A USB flash drive: This is used to save your projects and back them up on your computer to prevent the loss of data due to USB failure or misplacement. A USB holder can be made using the instructions from the sewing laboratories.
5.- If buying a USB flash drive is not an option, another choice is using cloud storage, such as the ones included with Gmail and Hotmail.
== Software ==
There are also many software applications that can be used on personal computers.
1.- Text applications for focused writing that prevent any kind of distraction: Use focus-minded software that can be used in dark mode, such as FocusWriter (available for Windows and Linux) or Noto (for macOS).
2.- A timer to program your working time and breaks: Use a tool like Balance Focus Timer (which has a portable version available) or any other timer application.
3.- If privacy is a concern, encryption software can also be used to ensure confidentiality. Examples include Cryptomator (which encrypts an entire folder) and 7-Zip (which encrypts files but only allows you to modify and save text files directly inside the archive).
4.- Inkscape: A software application used to create, design, or open vector files. It has versions for Windows, Mac, and Linux, and also offers portable versions.
== Techniques ==
Many techniques can be used to achieve your goals or even develop your skills to levels you never imagined were possible:
1.- Plan ahead: Planning ahead for the day(s) and times when you want to focus on developing your projects. Dedicating time to reach your workplace, preparing your setup, starting to work, taking breaks, enjoying your work, and selecting a time to prepare to finish and wrap up.
2.- Write down the next steps: As part of each project, writing down the development of your work will allow you to track what has been done for future reviews. You can set aside time during or right before finishing a project to note your next steps. This allows you to capture ideas while you are actively engaged and your thoughts are fresh and relevant.
Documenting activities for your next working session ensures you are never short of ideas and helps map out new techniques to learn. Maintaining this momentum will keep you in a steady flow and beat procrastination. Ultimately, this habit will elevate your skills and creative development to higher levels, preventing weeks, months, or years of inactivity and enabling you to achieve more goals in less time.
== Books in the labs ==
The following is a list of books completed or to be started:
[[Short introduction to the use of sewing machines]]
[[Short introduction to the use of cutting plotter machines]]
[[Short guide to printing objects using 3D printers]]
[[Short guide to the use of laser cutting machines]]
p64dzjengkjead023llc03rdax2epez
4676303
4676302
2026-10-15T20:43:05Z
The labs
3433734
/* Tools */
4676303
wikitext
text/x-wiki
Welcome!
Creating, developing designer, artistic, and engineering projects are skills that can be learned on the go.
== Tools ==
Many tools can be used to achieve goals, including the following:
1.- A sketchbook: This tool works like storage memory where you can write down and capture your inspired concepts or projects to use them in the moment or execute them later on. It also allows you to register all the practices that you want to do or are executing before starting your own. This will allow you to create more projects after learning new techniques.
2.- Paper, measuring tape, pens, and pencils.
3.- The sketchbook can be split into sections for each project or type of project (sewing, laser cutting, 3D printing, etc.). The end of each project section will give you space to write down the next steps for that project or to start new ones while you are motivated and full of fresh ideas. Alternatively, you can have a sketchbook for each kind of project. It can be substituted with a USB flash drive or cloud storage.
4.- A USB flash drive: This is used to save your projects and back them up on your computer to prevent the loss of data due to USB failure or misplacement. A USB holder can be made using the instructions from the sewing laboratories.
5.- If buying a USB flash drive is not an option, another choice is using cloud storage, such as the ones included with Gmail and Hotmail.
6.- Timer and alarm: Set an alarm to sound at the starting, wrapping up, and ending times for your workday.
== Software ==
There are also many software applications that can be used on personal computers.
1.- Text applications for focused writing that prevent any kind of distraction: Use focus-minded software that can be used in dark mode, such as FocusWriter (available for Windows and Linux) or Noto (for macOS).
2.- A timer to program your working time and breaks: Use a tool like Balance Focus Timer (which has a portable version available) or any other timer application.
3.- If privacy is a concern, encryption software can also be used to ensure confidentiality. Examples include Cryptomator (which encrypts an entire folder) and 7-Zip (which encrypts files but only allows you to modify and save text files directly inside the archive).
4.- Inkscape: A software application used to create, design, or open vector files. It has versions for Windows, Mac, and Linux, and also offers portable versions.
== Techniques ==
Many techniques can be used to achieve your goals or even develop your skills to levels you never imagined were possible:
1.- Plan ahead: Planning ahead for the day(s) and times when you want to focus on developing your projects. Dedicating time to reach your workplace, preparing your setup, starting to work, taking breaks, enjoying your work, and selecting a time to prepare to finish and wrap up.
2.- Write down the next steps: As part of each project, writing down the development of your work will allow you to track what has been done for future reviews. You can set aside time during or right before finishing a project to note your next steps. This allows you to capture ideas while you are actively engaged and your thoughts are fresh and relevant.
Documenting activities for your next working session ensures you are never short of ideas and helps map out new techniques to learn. Maintaining this momentum will keep you in a steady flow and beat procrastination. Ultimately, this habit will elevate your skills and creative development to higher levels, preventing weeks, months, or years of inactivity and enabling you to achieve more goals in less time.
== Books in the labs ==
The following is a list of books completed or to be started:
[[Short introduction to the use of sewing machines]]
[[Short introduction to the use of cutting plotter machines]]
[[Short guide to printing objects using 3D printers]]
[[Short guide to the use of laser cutting machines]]
ndqohqvpdsw9tekt1tpuytw6z44exm8
User talk:Codename Noreste
3
466307
4676308
4673637
2026-10-15T21:41:15Z
Ladsgroup
98768
/* Removal of rights of inactive patrollers */ new section
4676308
wikitext
text/x-wiki
{{talk header}} {{User:MiszaBot/config
|archive = User talk:Codename Noreste/Archive %(counter)d
|algo = old(14d)
|counter = 1
|maxarchivesize = 100K
|archiveheader = {{Automatic archive navigator}}
|minthreadstoarchive = 1
|minthreadsleft = 1
}}
== [[Wikibooks:Requests for deletion/Character Encodings]] ==
Note that some subpages are still around at [[:Category:Book:Character Encodings]]. However, I would also disagree with the deletion since the code pages provide useful information that is not found elsewhere. [[User:1234qwer1234qwer4|𝟙𝟤𝟯𝟺𝐪𝑤𝒆𝓇𝟷𝟮𝟥𝟜𝓺𝔴𝕖𝖗𝟰]] ([[User talk:1234qwer1234qwer4|𝗍𝗮𝘭𝙠]]) 22:08, 24 September 2026 (UTC)
: I want to apologize for being super busy with this, because of my real life commitments. I will get to undeleting the remaining pages (including the main one). [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:31, 2 October 2026 (UTC)
== Removal of rights of inactive patrollers ==
Hi, I started the script to remove the rights, sorry it took me a bit. I had to deal with an urgent issue. it's running as bot so it's not flooding RC. [[User:Ladsgroup|Ladsgroup]] ([[User talk:Ladsgroup|discuss]] • [[Special:Contributions/Ladsgroup|contribs]]) 21:41, 15 October 2026 (UTC)
kmk44dcop5v2xinuoddr5zv4pl76odz
4676309
4676308
2026-10-15T21:50:18Z
Codename Noreste
3441010
/* Removal of rights of inactive patrollers */ reply ([[mw:c:Special:MyLanguage/User:JWBTH/CD|CD]])
4676309
wikitext
text/x-wiki
{{talk header}} {{User:MiszaBot/config
|archive = User talk:Codename Noreste/Archive %(counter)d
|algo = old(14d)
|counter = 1
|maxarchivesize = 100K
|archiveheader = {{Automatic archive navigator}}
|minthreadstoarchive = 1
|minthreadsleft = 1
}}
== [[Wikibooks:Requests for deletion/Character Encodings]] ==
Note that some subpages are still around at [[:Category:Book:Character Encodings]]. However, I would also disagree with the deletion since the code pages provide useful information that is not found elsewhere. [[User:1234qwer1234qwer4|𝟙𝟤𝟯𝟺𝐪𝑤𝒆𝓇𝟷𝟮𝟥𝟜𝓺𝔴𝕖𝖗𝟰]] ([[User talk:1234qwer1234qwer4|𝗍𝗮𝘭𝙠]]) 22:08, 24 September 2026 (UTC)
: I want to apologize for being super busy with this, because of my real life commitments. I will get to undeleting the remaining pages (including the main one). [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:31, 2 October 2026 (UTC)
== Removal of rights of inactive patrollers ==
Hi, I started the script to remove the rights, sorry it took me a bit. I had to deal with an urgent issue. it's running as bot so it's not flooding RC. [[User:Ladsgroup|Ladsgroup]] ([[User talk:Ladsgroup|discuss]] • [[Special:Contributions/Ladsgroup|contribs]]) 21:41, 15 October 2026 (UTC)
: Thanks. Once you are done, you can request a steward to remove your ''temporary'' administrator and bot rights.
: While not related, one option is that you can request system administrator rights–after you add the request to SRGP explaining your use case, and then send a detailed use case to Wikimedia T&S by email.
: Once again, thank you for operating the behind the scenes on removing FlaggedRevs for good, as you had me on charge with the necessary patches. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 21:50, 15 October 2026 (UTC)
f9jm8b51prthuqk69wouefmbdl8xkxc
4676310
4676309
2026-10-15T22:09:19Z
Ladsgroup
98768
/* Removal of rights of inactive patrollers */ Reply
4676310
wikitext
text/x-wiki
{{talk header}} {{User:MiszaBot/config
|archive = User talk:Codename Noreste/Archive %(counter)d
|algo = old(14d)
|counter = 1
|maxarchivesize = 100K
|archiveheader = {{Automatic archive navigator}}
|minthreadstoarchive = 1
|minthreadsleft = 1
}}
== [[Wikibooks:Requests for deletion/Character Encodings]] ==
Note that some subpages are still around at [[:Category:Book:Character Encodings]]. However, I would also disagree with the deletion since the code pages provide useful information that is not found elsewhere. [[User:1234qwer1234qwer4|𝟙𝟤𝟯𝟺𝐪𝑤𝒆𝓇𝟷𝟮𝟥𝟜𝓺𝔴𝕖𝖗𝟰]] ([[User talk:1234qwer1234qwer4|𝗍𝗮𝘭𝙠]]) 22:08, 24 September 2026 (UTC)
: I want to apologize for being super busy with this, because of my real life commitments. I will get to undeleting the remaining pages (including the main one). [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:31, 2 October 2026 (UTC)
== Removal of rights of inactive patrollers ==
Hi, I started the script to remove the rights, sorry it took me a bit. I had to deal with an urgent issue. it's running as bot so it's not flooding RC. [[User:Ladsgroup|Ladsgroup]] ([[User talk:Ladsgroup|discuss]] • [[Special:Contributions/Ladsgroup|contribs]]) 21:41, 15 October 2026 (UTC)
: Thanks. Once you are done, you can request a steward to remove your ''temporary'' administrator and bot rights.
: While not related, one option is that you can request system administrator rights–after you add the request to SRGP explaining your use case, and then send a detailed use case to Wikimedia T&S by email.
: Once again, thank you for operating the behind the scenes on removing FlaggedRevs for good, as you had me on charge with the necessary patches. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 21:50, 15 October 2026 (UTC)
::yeah I know how to get rid of it, this is not my first time :D A couple months ago I needed similar rights on cywiki. I do this kind of thing once every couple of months. [[User:Ladsgroup|Ladsgroup]] ([[User talk:Ladsgroup|discuss]] • [[Special:Contributions/Ladsgroup|contribs]]) 22:09, 15 October 2026 (UTC)
sig7rqke1neex686196a957dis64xuf
4676316
4676310
2026-10-15T23:38:05Z
Codename Noreste
3441010
/* Removal of rights of inactive patrollers */ reply to Ladsgroup ([[mw:c:Special:MyLanguage/User:JWBTH/CD|CD]])
4676316
wikitext
text/x-wiki
{{talk header}} {{User:MiszaBot/config
|archive = User talk:Codename Noreste/Archive %(counter)d
|algo = old(14d)
|counter = 1
|maxarchivesize = 100K
|archiveheader = {{Automatic archive navigator}}
|minthreadstoarchive = 1
|minthreadsleft = 1
}}
== [[Wikibooks:Requests for deletion/Character Encodings]] ==
Note that some subpages are still around at [[:Category:Book:Character Encodings]]. However, I would also disagree with the deletion since the code pages provide useful information that is not found elsewhere. [[User:1234qwer1234qwer4|𝟙𝟤𝟯𝟺𝐪𝑤𝒆𝓇𝟷𝟮𝟥𝟜𝓺𝔴𝕖𝖗𝟰]] ([[User talk:1234qwer1234qwer4|𝗍𝗮𝘭𝙠]]) 22:08, 24 September 2026 (UTC)
: I want to apologize for being super busy with this, because of my real life commitments. I will get to undeleting the remaining pages (including the main one). [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 14:31, 2 October 2026 (UTC)
== Removal of rights of inactive patrollers ==
Hi, I started the script to remove the rights, sorry it took me a bit. I had to deal with an urgent issue. it's running as bot so it's not flooding RC. [[User:Ladsgroup|Ladsgroup]] ([[User talk:Ladsgroup|discuss]] • [[Special:Contributions/Ladsgroup|contribs]]) 21:41, 15 October 2026 (UTC)
: Thanks. Once you are done, you can request a steward to remove your ''temporary'' administrator and bot rights.
: While not related, one option is that you can request system administrator rights–after you add the request to SRGP explaining your use case, and then send a detailed use case to Wikimedia T&S by email.
: Once again, thank you for operating the behind the scenes on removing FlaggedRevs for good, as you had me on charge with the necessary patches. [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 21:50, 15 October 2026 (UTC)
::yeah I know how to get rid of it, this is not my first time :D A couple months ago I needed similar rights on cywiki. I do this kind of thing once every couple of months. [[User:Ladsgroup|Ladsgroup]] ([[User talk:Ladsgroup|discuss]] • [[Special:Contributions/Ladsgroup|contribs]]) 22:09, 15 October 2026 (UTC)
::: Wait, something weird happened: [[Special:Redirect/logid/5414075]]. No former autoreviewed user became autopatrolled. :( [[User:Codename Noreste|<span style="color: blue">Codename Noreste</span>]] /// [[User talk:Codename Noreste|⭐️✨]] 23:38, 15 October 2026 (UTC)
bq7s8f432mzz1lqxa9t753t6ubu7c6p
User:JustTheFacts33/sandbox
2
468255
4676283
4674960
2026-10-15T17:31:40Z
JustTheFacts33
3434282
/* Former factories */
4676283
wikitext
text/x-wiki
This is a '''history of [[w:General Motors|General Motors]] factories''' that are being or have been used to produce cars, vans, SUVs, trucks, buses, and automobile components.<ref name=GMfacilities>[https://web.archive.org/web/20080614231130/http://www.gm.com/corporate/responsibility/environment/plants/index.jsp GM facilities map]. Retrieved on July 8, 2009.</ref> The factories are sometimes idled for re-tooling.
Originally, GM's different divisions each had their own serial number formats and plant codes. Chevrolet cars, Pontiac, Oldsmobile, and Buick unified their serial number formats and plant codes in 1965. Cadillac adopted the same unified format in 1971. Chevrolet trucks and GMC trucks unified their serial number formats in 1972. Chevrolet trucks and GMC trucks were already using the same plant codes from 1964 and those were unified with the car divisions (other than Cadillac) in 1965. Cadillac did not use plant codes before 1971 as all Cadillacs were made at Cadillac's home plant in Detroit until 1971. In 1971, Cadillacs began to be made in more than one plant so they started using plant codes, using the same codes that the other GM car divisions were using since 1965. GM Canada used the same format as GM USA from 1967.
For US-built models:
For '''Chevrolet cars including El Camino''': Plant code was the 1st or 1st 2 digits of the serial number from 1928-1952. Plant code was the 4th position of the serial number from 1953-1957 6-cylinder models. Plant code was the 5th position of the serial number from 1955-1957 V8 models. Plant code was the 4th position of the serial number from 1958-1959. Plant code was the 6th position of the serial number from 1960-1964. Plant code was the letter or number in the 7th position of the serial number from 1965-1980.
For '''Chevrolet trucks''': Plant code was the 1st or 1st 2 digits of the serial number from 1947-1952. Plant code was the 4th position of the serial number from 1953-1954 & for the 1955 1st Series models. Plant code was the 5th position of the serial number for 1955 2nd Series models and 1956-1959 models with 6-cylinder engines. Plant code was the 6th position of the serial number for 1955 2nd Series models and 1956-1959 models with V8 engines. Plant code was the 6th position of the serial number from 1960-1971. Plant code was the letter or number in the 7th position of the serial number from 1972-1980 (including Chevy LUV).
For '''Pontiac''': Plant code was the 1st letter in the serial number from 1936-1938 for plants other than Pontiac, MI (Pontiac, MI omitted the 1st letter so the 1st position was a number rather than a letter for Pontiac, MI as Pontiac, MI didn't use a specific plant code). Plant code was the 1st position of the serial number from 1939-1958. Plant code was the 4th position of the serial number from 1959-1964. Plant code was the letter or number in the 7th position of the serial number from 1965-1980.
For '''Oldsmobile''': Plant code was the 1st of 2 letters in the serial number from 1937-1940 for plants other than Lansing (Lansing omitted the 1st letter so there was only 1 letter before the numbers rather than 2 letters for Linden & Southgate as Lansing didn't have a specific plant code). Plant code was the letter in the 3rd position of the serial number from 1941-1948 for plants other than Lansing (Lansing omitted the letter and didn't have a specific plant code). Plant code was the 4th position of the serial number from 1949-1964. Plant code was the letter or number in the 7th position of the serial number from 1965-1980.
For '''Buick''': Plant code was the number in the 1st position of the serial number from 1938-1953. Plant code was the number in the 3rd position of the serial number from 1954-1964. Plant code was the letter or number in the 7th position of the serial number from 1965-1980 (including '76-'79 Buick Opel by Isuzu).
For '''Cadillac''': Plant code was the letter or number in the 7th position of the serial number from 1971-1980. (Cadillac did not use plant codes before 1971 as all Cadillacs were made at Cadillac's home plant in Detroit until 1971.)
For '''GMC Sprint & Caballero''': Plant code was the letter or number in the 7th position of the serial number from 1971-1980.
For '''GMC trucks''': Plant code was the 6th position of the serial number from 1952-1954 & for 1955 1st Series models with manual transmission. Plant code was the 7th position of the serial number from 1952-1954 & for 1955 1st Series models with automatic transmission. Plant code was the 4th position of the serial number for 1955 2nd Series models and 1956-1959 models with 6-cylinder engines. Plant code was the 5th position of the serial number for 1955 2nd Series models and 1956-1959 models with V8 engines. Plant code was the 5th position of the serial number for 1960-1966 models with 2wd and V6 or V8 engines. Plant code was the 6th position of the serial number for 1960-1966 models with inline-6 engines or with 4wd. Plant code was the 7th position of the serial number from 1967-1971 (most models had a dash in the 6th position except for some models that had a special designation indicated in the 6th position). Plant code was the letter or number in the 7th position of the serial number from 1972-1980.
All models from 1981 on have the plant code in the 11th position as per standardized VIN regulations.
The above applies to Canadian-built models from 1967 on.
==Current factories==
{| class="wikitable sortable" style="font-size:90%"
!VIN !! Name !! City/State !! Country !! class="unsortable" | Products !! Opened !! Idled !! class="unsortable" | Comments
|-
|R (1963-1964 [[w:Chevrolet|Chevrolet]] and 1965-present)<br /><br />T (Pre-1965 [[w:Oldsmobile|Oldsmobile]] and Pre-1960 [[w:Pontiac (automobile)|Pontiac]])<br /><br />A (1960-1964 [[w:Pontiac (automobile)|Pontiac]])<br /><br />8 (Pre-1964 [[w:Buick|Buick]])||[[w:Arlington Assembly|Arlington Assembly]]||[[w:Arlington, Texas|Arlington, Texas]]||[[w:United States|United States]]||[[w:GMT T1XX|T1XX]] SUVs (2021-):<br />
[[w:Chevrolet Tahoe#Fifth generation (2021)|Chevrolet Tahoe]]<br />[[w:Chevrolet Suburban#Twelfth generation (2021)|Chevrolet Suburban]]<br />[[w:Chevrolet Tahoe#Yukon|GMC Yukon]]<br />[[w:Chevrolet Suburban#Yukon XL|GMC Yukon XL]]<br />[[w:Cadillac Escalade#Fifth generation (2021)|Cadillac Escalade]]<br />[[w:Cadillac Escalade#Fifth generation (2021)|Cadillac Escalade ESV]]
||1954|| ||Located at 2525 E Abram St.<br />Was originally part of the [[w:Buick-Oldsmobile-Pontiac Assembly Division|Buick-Oldsmobile-Pontiac Assembly Division]]. Production began on January 6, 1954. The first vehicle produced was a 1954 Pontiac Chieftain 4-door. Arlington began making Chevrolet passenger cars for 1963. BOP Assembly Division became GM Assembly Division in 1965. Arlington began making midsize cars for 1968 but focused exclusively on midsize cars from 1971-1987. Arlington resumed making full-size cars for 1988 for the first time since 1970. Arlington focused exclusively on rwd, full-size cars from 1988-1996. When Willow Run Assembly closed in 1993, Arlington became GM's only factory still building traditional body-on-frame, rwd, full-size cars. Passenger car production ended in 1996. It's interesting to note that Arlington has never built any fwd vehicles or any unibody vehicles. Arlington was then converted to build full-size SUVs. SUV production began for 1998. Full-size pickups were also built for 1998-2000. Arlington Assembly has produced models for all of GM's primary American brands: Chevrolet, Pontiac, Oldsmobile, Buick, Cadillac, and GMC. Arlington Assembly has produced over 13 million vehicles. A new 129,250-square-foot body shop on the plant's west side was announced in 2011 as part of retooling for the K2XX generation SUVs launched in 2014. A new stamping plant was announced in 2012 and opened in 2013 at Arlington Assembly, replacing stampings previously sourced from GM stamping plants elsewhere in the US.<br /> A $1.4 billion plant upgrade was completed to build the <br /> T1XX generation SUVs beginning in 2020. It included a new <br /> 1 million sq. ft. body shop & a 600,000-sq. ft. extension to the paint shop. The general assembly area was also upgraded. <br /> Past models:<br /> [[w:GM A platform (RWD)|GM A platform (RWD)]] (intermediate): [[w:Chevrolet Chevelle|Chevrolet Chevelle]] (1970-1977), [[w:Chevrolet El Camino|Chevrolet El Camino]] (1974-1981), [[w:Chevrolet Malibu|Chevrolet Malibu]] (1978-1981), [[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1970-1981), [[w:GMC Sprint|GMC Sprint]] (1974-1977), [[w:GMC Caballero|GMC Caballero]] (1978-1981), [[w:Oldsmobile Cutlass|Oldsmobile Cutlass]] (1971-1981), [[w:Oldsmobile Cutlass Supreme|Oldsmobile Cutlass Supreme]] (1971-1981), [[w:Oldsmobile 442|Oldsmobile 442]] (1971-1977), [[w:Pontiac GTO|Pontiac GTO]] (1968-1970), [[w:Pontiac LeMans|Pontiac LeMans]] (1968-1970), [[w:Pontiac Tempest|Pontiac Tempest]] (1968-1970)<br /> [[w:General Motors G platform (1969)|GM G platform (RWD) 1982-1988]]: [[w:Buick Regal|Buick Regal]] (1982-1983), [[w:Chevrolet El Camino|Chevrolet El Camino]] (1982-1984), [[w:Chevrolet Malibu|Chevrolet Malibu]] (1982-1983), [[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1982-1987), [[w:GMC Caballero|GMC Caballero]] (1982-1984), [[w:Oldsmobile Cutlass Supreme|Oldsmobile Cutlass Supreme]] (1982-1987), [[w:Oldsmobile 442|Oldsmobile 442]] (1985).<br /> [[w:General Motors A platform (1925)|GM full-size A platform]]: [[w:Pontiac Chieftain|Pontiac Chieftain]] (1954-1957), [[w:Pontiac Star Chief|Pontiac Star Chief]] (1954-1957)<br /> [[w:GM B platform|GM B platform]]: [[w:Buick Century#Second generation (1954–1958)|Buick Century]] (1954-1958), [[w:Buick Invicta|Buick Invicta]] (1959-1963), [[w:Buick LeSabre|Buick LeSabre]] (1959-1960), [[w:Buick Roadmaster#1991–1996|Buick Roadmaster sedan]] (1992-1996), [[w:Buick Estate#1991–1996|Buick Roadmaster Estate wagon]] (1994-1996), [[w:Buick Special#1949–1958|Buick Special]] (1954-1958), [[w:Buick Wildcat|Buick Wildcat]] (1963), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1963-1970), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1963-1970), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-1970, 1988-1996), [[w:Chevrolet Impala|Chevrolet Impala]] (1963-1970), [[w:Chevrolet Impala#Seventh generation (Impala SS, 1994–1996)|Chevrolet Impala SS]] (1994-1996), [[w:Oldsmobile 88|Oldsmobile 88]] (1955-1964), [[w:Oldsmobile Custom Cruiser#Second generation (1977–1990)|Oldsmobile Custom Cruiser]] (1988-1990), [[w:Oldsmobile Starfire#First generation (1961–1966)|Oldsmobile Starfire]] (1961-1966), [[w:Pontiac 2+2|Pontiac 2+2]] (1964-1967), [[w:Pontiac Bonneville|Pontiac Bonneville]] (1959-1968), [[w:Pontiac Catalina|Pontiac Catalina]] (1959-1970), [[w:Pontiac Grand Prix|Pontiac Grand Prix]] (1962-65, 1967-68), [[w:Pontiac Star Chief|Pontiac Star Chief]] (1963, 1966), [[w:Pontiac Ventura#1960–1970|Pontiac Ventura]] (1960-1961).<br />[[w:General Motors C platform (RWD)|GM C platform (RWD)]]: [[w:Buick Electra|Buick Electra]] (1959-1963), [[w:Buick Limited#1958 Limited|Buick Limited]] (1958), [[w:Buick Roadmaster|Buick Roadmaster]] (1955-1958), [[w:Buick Super|Buick Super]] (1955-1958), [[w:Oldsmobile 98|Oldsmobile 98]] (1954-1964) <br /> [[w:GM D platform|GM D platform]]: [[w:Cadillac Brougham|Cadillac Brougham]] (1988-1992), [[w:Cadillac Fleetwood#Rear-wheel drive 1993–1996|Cadillac Fleetwood]] (1993-1996) <br />[[w:GMT400|GMT400]] pickups: [[w:Chevrolet C/K (fourth generation)|Chevrolet C/K]] (1998-2000), [[w:Chevrolet C/K (fourth generation)|GMC Sierra]] (1998-2000).<br /> [[w:GMT400|GMT400]] SUVs: [[w:Chevrolet Tahoe#First generation (1992)|Chevrolet Tahoe]] (1998-1999), [[w:Chevrolet Tahoe#Tahoe Limited and Tahoe Z71|Chevrolet Tahoe Limited and Z71]] (2000), [[w:Chevrolet Tahoe#First generation (1992)|GMC Yukon]] (1998-1999), [[w:Chevrolet Tahoe#GMC Yukon Denali|GMC Yukon Denali]] (1999-2000), [[w:Cadillac Escalade#First generation (1999)|Cadillac Escalade]] (1999-2000)<br /> [[w:GMT800|GMT800]] SUVs: [[w:Chevrolet Tahoe#Second generation (2000)|Chevrolet Tahoe]] (2001-2006), [[w:Chevrolet Tahoe#Second generation (2000)|GMC Yukon]] (2001-2006), [[w:Cadillac Escalade#Second generation (2002)|Cadillac Escalade]] (2002-2006), [[w:Chevrolet Suburban#Ninth generation (2000)|Chevrolet Suburban]] (2001-2005), [[w:Chevrolet Suburban#Ninth generation (2000)|GMC Yukon XL]] (2001-2005).<br /> [[w:GMT900|GMT900]] SUVs: [[w:Chevrolet Tahoe#Third generation (2007)|Chevrolet Tahoe]] (2007-2014), [[w:Chevrolet Tahoe#Third generation (2007)|GMC Yukon]] (2007-2014), [[w:Chevrolet Tahoe#Third generation (2007)|GMC Yukon Denali]] (2009-2014), [[w:Cadillac Escalade#Third generation (2007)|Cadillac Escalade]] (2007-2014), [[w:Chevrolet Suburban#Tenth generation (2007)|Chevrolet Suburban]] (2007-2014), [[w:Chevrolet Suburban#Tenth generation (2007)|GMC Yukon XL]] (2007-2014), [[w:Chevrolet Suburban#Tenth generation (2007)|GMC Yukon XL Denali]] (2009-2014), [[w:Cadillac Escalade#Third generation (2007)|Cadillac Escalade ESV]] (2007-2014)<br /> [[w:GMT K2XX|K2XX]] SUVs (2015-2020): [[w:Chevrolet Tahoe#Fourth generation (2015)|Chevrolet Tahoe]], [[w:Chevrolet Tahoe#Fourth generation (2015)|GMC Yukon]], [[w:Cadillac Escalade#Fourth generation (2015)|Cadillac Escalade]], [[w:Chevrolet Suburban#Eleventh generation (2015)|Chevrolet Suburban]], [[w:Chevrolet Suburban#Eleventh generation (2015)|GMC Yukon XL]], [[w:Cadillac Escalade#Fourth generation (2015)|Cadillac Escalade ESV]]
|-
|U (Celestiq),<br> A ("Curated" models),<br> 0 (CT5-V Blackwing 20th Anniv. Ed.)||[[Artisan Center]]||[[w:Warren, Michigan|Warren, Michigan]]||United States||[[w:Cadillac Celestiq|Cadillac Celestiq]] (2025-),<br> [[w:Cadillac Escalade IQ|Cadillac Escalade IQ]] "Curated by Cadillac" program only (2027-)||2024|| ||Located at the [[w:General Motors Technical Center|GM Global Technical Center]] in Warren, Michigan. The Celestiq will be the first production vehicle sold to the public to be built at the GM Tech Center. The Celestiq will be built by hand on a special, low-volume production line and will be highly customizable. The Celestiq will be built to order and each one will be unique.<br/>
Past models: <br /> 2024 [[w:Cadillac CT5#CT5-V Blackwing|Cadillac CT5-V Blackwing 20th Anniversary Edition]] where the final 8 digits of the VIN are R0912004 through R0912024 or R0962004 through R0962024,<br> [[w:Cadillac CT5#CT5-V Blackwing|Cadillac CT5-V Blackwing]] "Curated by Cadillac" program only (2026)
|-
| ||[[Bay City Powertrain]]||[[w:Bay City, Michigan|Bay City, Michigan]]||United States||Engine components including connecting rods & camshafts||1916|| ||Located at 1001 Woodside Ave. Originally opened as National Cycle Manufacturing Co. in 1892 to make bicycles. Bought by Chevrolet in 1916 and joined GM along with Chevrolet in 1918.
|-
| ||[[Bedford Casting]]||[[w:Bedford, Indiana|Bedford, Indiana]]||United States||Cylinder heads, cylinder blocks, transmission cases, EV drive unit housings, structural components, Aluminum die casting||1942|| ||Located at 105 GM Drive.
|-
|5||[[w:Bowling Green Assembly Plant|Bowling Green Assembly Plant]]||[[w:Bowling Green, Kentucky|Bowling Green, Kentucky]]||United States||[[w:Chevrolet Corvette (C8)|Chevrolet Corvette (C8)]] (2020-)<br />
[[w:General Motors LS-based small-block engine#LT4|LT4 supercharged V8 engine]] for:<br> Cadillac Escalade-V '23-<br />
[[w:Chevrolet Gemini small-block engine|LT6 V8 engine]] ('23- Corvette Z06)
[[w:Chevrolet Gemini small-block engine#LT7|LT7 twin-turbo V8 engine]] ('25- Corvette ZR1, '26- Corvette ZR1X)
||1981|| ||Located at 600 Corvette Drive. Originally built by Chrysler's Airtemp division in 1969-1970 and used to build non-automotive A/C units, the plant closed in 1976 following Chrysler's sale of Airtemp to Fedders and was sold to GM in 1980. GM converted the facility into an automotive assembly plant and began building Corvettes in Bowling Green during June 1981, taking over production from the St. Louis plant.<br/>
Past models: <br />
[[w:Chevrolet Corvette (C3)|Chevrolet Corvette (C3)]] (1981-1982)<br />[[w:Chevrolet Corvette (C4)|Chevrolet Corvette (C4)]] (1984-1996)<br />[[w:Chevrolet Corvette (C5)|Chevrolet Corvette (C5)]] (1997-2004)<br />[[w:Chevrolet Corvette (C6)|Chevrolet Corvette (C6)]] (2005-2013)<br />[[w:Chevrolet Corvette (C7)|Chevrolet Corvette (C7)]] (2014-2019)
[[w:Cadillac XLR|Cadillac XLR]] (2004-2009)<br />
Performance Build Center relocated from Wixom, MI to Bowling Green Assembly in 2014.<br/> Past engines: [[w:Cadillac twin-turbo V8|Cadillac Blackwing 4.2L LTA twin-turbo V8]],<br />[[w:General Motors LS-based small-block engine#LT4|LT4 supercharged V8 engine]] for: Chevrolet Corvette Z06 (C7) (2015-2016 models with Z07 package or build your own engine option, 2017-2019 all Z06 models) &<br /> Chevrolet Camaro ZL1 (Gen 6) (phased in during 2020, all '21-'24), Cadillac CT5-V Blackwing '22-'26,<br />[[w:General Motors LS-based small-block engine#LT5|LT5 supercharged 6.2L Gen V Small Block V8]] ('19 Corvette ZR1)
|-
| ||[[Brownstown Battery Assembly Plant]]||[[w:Brownstown Charter Township, Michigan|Brownstown Charter Township, Michigan]]||United States||Battery packs for [[w:Chevrolet Corvette (C8)|Chevrolet Corvette <br> E-Ray]] & [[w:Cadillac Celestiq|Cadillac Celestiq]]<br />Electric drive units for Chevrolet Corvette <br> E-Ray<br />Assembles prototype battery packs||2009|| ||Located at 20001 Brownstown Center Dr.<br /> Battery packs for [[w:Chevrolet Volt|Chevrolet Volt]], [[w:Holden Volt|Holden Volt]], [[w:Opel Ampera|Opel/Vauxhall Ampera]], [[w:Cadillac ELR|Cadillac ELR]], [[w:Chevrolet Spark#Spark EV|Chevrolet Spark EV (2015-2016 only - LG Chem cells)]], [[w:GMC Hummer EV|GMC Hummer EV]], & [[w:Cadillac Lyriq|Cadillac Lyriq]] <br /> Roof module for [[w:Cruise AV|Cruise AV]]
|-
|6<br />9 (BrightDrop)||[[w:CAMI Automotive|CAMI Automotive]]||[[w:Ingersoll, Ontario|Ingersoll, Ontario]]||[[w:Canada|Canada]]|| ||1989||2025||Located at 300 Ingersoll St. S. Originally, a 50/50 joint venture with [[w:Suzuki|Suzuki]] called Canadian Automotive Manufacturing Inc. or CAMI until December 2009 when GM bought Suzuki's share. Production for Suzuki ended in June 2009. Chevy Equinox production ended April 29, 2022. After being retooled, CAMI reopened December 5, 2022 building the BrightDrop Zevo 600. In July 2023, GM announced a 400,000 square-foot expansion to assemble battery modules and packs. Plant idled in October 2023 and restarted in April 2024. Production was suspended in May 2025. Battery pack assembly also ended in May 2025. On October 21, 2025, GM announced that the BrightDrop van was discontinued and would not resume production anywhere.
Past models: [[w:BrightDrop Zevo 600|BrightDrop Zevo 600]] (2023-2024)<ref>{{Cite news |author=Tom Venetis |date=4 April 2022 |title=GM Canada Electric Vehicle Production in Ontario by the End of 2022 |work=Metroland Media Group |url=http://www.canadianautoworld.ca/industry-news/gm-canada-electric-vehicle-production-in-ontario-by-the-end-of-2022 |access-date=24 April 2022}}</ref>,<br> [[w:BrightDrop Zevo 400|BrightDrop Zevo 400]] (2024),<br>[[w:Chevrolet BrightDrop|Chevrolet BrightDrop 400]] (2025-2026),<br />[[w:Chevrolet BrightDrop|Chevrolet BrightDrop 600]] (2025-2026),<br /> [[w:Chevrolet Equinox|Chevrolet Equinox]] (2005-2022)<ref>{{Cite news |author=Bryan Bicknell |date=3 March 2022 |title=The finish line draws closer for gas powered vehicles at Ontario CAMI plant |work=CTV News |url=https://london.ctvnews.ca/the-finish-line-draws-closer-for-gas-powered-vehicles-at-ontario-cami-plant-1.5804523 |access-date=17 May 2022}}</ref>, [[w:Pontiac Torrent|Pontiac Torrent]] (2006-09), [[w:GMC Terrain#First generation (2010)|GMC Terrain]] (2010-2017), [[w:Suzuki XL-7#Second generation (XL7; 2006)|Suzuki XL7]] (2007-2009), [[w:Geo Tracker|Geo/Chevrolet Tracker]] (1990-2004),<br> [[w:Chevrolet Tracker (Americas)#Canada|Asuna/Pontiac Sunrunner]] (Canada only) (1992-1998),<br> [[w:Suzuki Vitara#First generation (ET/TA; 1988)|Suzuki Sidekick]] (1990-1998), [[w:Suzuki Grand Vitara|Suzuki Vitara]] (1999-2004), [[w:Geo Metro|Geo/Chevrolet Metro]] (1990-2001), [[w:Geo Metro|Suzuki Swift]] (1991-2001), [[w:Geo Metro|Pontiac Firefly]] (Canada only) (1991, 1994-2001).<br> Also assembled Ultium battery cells into modules and packs for BrightDrop Zevo & other vehicles made elsewhere from 2024-2025.
|-
|B||[[w:GM Defense|GM Defense]] Manufacturing Customer Innovation Center (MCIC)||[[w:Concord, North Carolina|Concord, North Carolina]]||United States|| [[w:M1301 Infantry Squad Vehicle|M1301 Infantry Squad Vehicle]] (ISV),<br />[[w:Chevrolet Suburban#HD SUV|Chevrolet Suburban Shield]] (a.k.a. HD SUV) (2024-) ||2021|| ||Located at 4280 Defender Way. Located next to Hendrick Motorsports, a partner in the ISV program. The ISV program for the US Army is based on the Chevrolet Colorado ZR2. The HD SUV program for the US State Dept. Diplomatic Security Service is based on the T1XX-generation Chevrolet Suburban but with a different chassis and frame to support higher vehicle weight, payload, and GVWR than civilian Suburbans. The Suburban Shield has also been supplied to Qatar for diplomatic security and VIP transport.
|-
| ||[[Defiance Foundry]]||[[w:Defiance, Ohio|Defiance, Ohio]]||United States||Aluminum engine blocks & heads||1948|| ||Located at 26427 State Route 281. Was part of GM's Central Foundry Division. Iron pouring ended in 2017. The plant now pours only aluminum blocks and heads. Defiance made the aluminum blocks and heads for the Buick 215 V8. Defiance has also supplied [[w:Toyota|Toyota]] with 4-cylinder engine blocks and [[w:Nissan|Nissan]] with V6 engine blocks.
|-
|U||[[w:Detroit/Hamtramck Assembly|Detroit/Hamtramck Assembly]]<br /> "Factory ZERO"||[[w:Hamtramck, Michigan|Hamtramck, Michigan]] & [[w:Detroit, Michigan|Detroit, Michigan]]||United States||[[w:GMC Hummer EV|GMC Hummer EV]] pickup (2022-)<br />[[w:GMC Hummer EV|GMC Hummer EV]] SUV (2024-)<br />[[w:Chevrolet Silverado EV|Chevrolet Silverado EV]] (2024-)<br />[[w:GMC Sierra EV|GMC Sierra EV]] (2024-)<br />[[w:Cadillac Escalade IQ|Cadillac Escalade IQ]] (2025-)<br />[[w:Cadillac Escalade IQ|Cadillac Escalade IQL]] (2026-)<br />Assembles Ultium battery cells into modules and packs for a variety of vehicles||1985|| ||Located at 2500 East Grand Blvd. Sometimes called the "Poletown" plant after the Detroit neighborhood where the plant is located. Part of the site was previously the "Dodge Main" plant which opened in 1911 before Dodge was part of the Chrysler Corp. and closed on January 4, 1980. GM bought the closed plant in 1981. Additional land including residential neighborhoods was acquired through the use of eminent domain. The plant straddles the line between 2 cities: Detroit & Hamtramck. The body shop is in Hamtramck while the general assembly area is in Detroit.<ref>{{Cite web|url=https://www.freep.com/story/money/cars/general-motors/2020/10/16/gm-detroit-hamtramck-assembly-plant-renamed-factory-zero/3665925001/|title = GM's Detroit-Hamtramck Assembly plant renamed 'Factory ZERO' amid shift to all-electric|author=Jamie LaReau|publisher=Detroit Free Press|date=October 16, 2020}}</ref> The current site includes a 16.5-acre wildlife habitat. Originally built E/K models. First vehicle produced was a 1986 Cadillac Eldorado on February 4, 1985. Also did final assembly on the Cadillac Allante, whose bodies were made in Italy by Pininfarina and were flown to Detroit and then trucked to Detroit/Hamtramck Assembly for final assembly. Started building fwd G-bodies for 1998. The last <br> E-body, the Cadillac Eldorado, was moved to the Lansing Craft Center during 2000. Started building EREVs based on Delta II for 2011. This was followed by the 2nd gen. Volt based on D2XX for 2016. Started building Epsilon-based cars for 2013. Also built the Omega-based Cadillac CT6 flagship, starting with 2016. The last gas-powered vehicles made at this plant were the Cadillac CT6 on January 24, 2020 & the Chevrolet Impala on February 27, 2020. Renamed "Factory ZERO" on October 16, 2020 to reflect its conversion into an electric vehicle assembly plant (zero for zero emissions). First vehicle produced following the conversion was a 2022 GMC Hummer EV pickup on December 17, 2021. Over 4 million vehicles have been built so far since opening in 1985. <br /> Past models:<br> [[w:Oldsmobile Toronado#Fourth generation (1986–1992)|Oldsmobile Toronado]] (1986-1992), [[w:Buick Riviera#Seventh generation (1986–1993)|Buick Riviera]] (1986-1993), [[w:Cadillac Eldorado|Cadillac Eldorado]] (1986-2000), [[w:Cadillac Seville|Cadillac Seville]] (1986-2004), [[w:Cadillac Allanté|Cadillac Allanté]] (1987-1993) (final assembly),<br> [[w:Cadillac Deville|Cadillac Deville]] (1994-2005), [[w:Cadillac DTS|Cadillac DTS]] (2006-2011),<br> [[w:Buick Park Avenue#Second generation (1997–2005)|Buick Park Avenue]] (1998-2000), [[w:Buick LeSabre#Eighth generation (2000–2005)|Buick LeSabre]] (2000-2005), [[w:Buick Lucerne|Buick Lucerne]] (2006-2011), [[w:Pontiac Bonneville#Tenth generation (2000–2005)|Pontiac Bonneville]] (2004-2005), [[w:Chevrolet Volt|Chevrolet Volt]] (2011-2019), [[w:Chevrolet Volt#Other markets|Holden Volt (RE)]] (2012-2015), [[w:Chevrolet Volt#Opel Ampera (Europe)|Opel/Vauxhall Ampera]] (2012-15), [[w:Cadillac ELR|Cadillac ELR]] (2014, 2016), [[w:Chevrolet Malibu#Eighth generation (2013)|Chevrolet Malibu (2013-2015)/Malibu Limited (2016)]], [[w:Chevrolet Impala#Tenth generation (2014-2020)|Chevrolet Impala]] (2014-2020), [[w:Buick LaCrosse#Third generation (2017)|Buick Lacrosse]] (2017-2019), [[w:Cadillac CT6|Cadillac CT6]] (2016-2020)
|-
| ||[[w:DMAX (engines)|DMAX Ltd.]]<br> Moraine Plant||[[w:Moraine, Ohio|Moraine, Ohio]]||United States||[[w:Duramax V8 engine|Duramax 6.6L V8 engine]]||2000|| ||Located on 3100 Dryden Rd. Was a joint venture with [[w:Isuzu|Isuzu]]. Originally, was 40% owned by GM & 60% owned by Isuzu. From 2002, 60% owned by GM & 40% owned by Isuzu. GM bought Isuzu's remaining stake in DMAX Ltd. at the end of March 2022 and DMAX Ltd. became a wholly owned subsidiary of GM in May 2022.
|-
| ||[[w:DMAX (engines)|DMAX Ltd.]] Brookville Plant||[[w:Brookville, Ohio|Brookville, Ohio]]||United States||[[w:Duramax V8 engine#8.3L Mongoose|8.3L Mongoose Duramax V8]] ||2021|| || Located at 101 W. Campus Blvd. In June 2023, GM announced a $920 million investment to build a 1.1 million square foot building next to the current 251,000 square foot facility in Brookville to take over Duramax V8 engine production from the original plant in Moraine in 2025.<br> Previously:<br> Machined engine components for [[w:Duramax V8 engine|Duramax 6.6L V8 engine]]
|-
| ||[[w:GM Egypt|GM Egypt]]||[[w:6th of October City|6th of October City]]|| [[w:Egypt|Egypt]]||[[w:Isuzu N-Series|Chevrolet N-Series]]<br/>[[w:Isuzu D-Max#Second generation (RT; 2011)|Chevrolet T-Series]]<br/>[[w:Chevrolet Move#Chevrolet N300/Move|Chevrolet Move]]<br/>[[w:Chevrolet Aveo#Third generation (310C; 2023)|Chevrolet Optra]] (2025-)||1985|| ||Partially owned by GM (46.5%). Produced its 1 millionth vehicle, a Chevrolet T-Series pickup truck, on September 22, 2024. GM Egypt is the first automaker in Egypt to produce <br> 1 million vehicles. <br /> Past models: [[w:Chevrolet Aveo (T200)|Chevrolet Aveo]], [[w:Chevrolet Captiva#First generation (C100, C140; 2006)|Chevrolet Captiva]], [[w:Chevrolet Frontera|Chevrolet Frontera]], [[w:Chevrolet Lanos|Chevrolet Lanos]], [[w:Baojun 630|Chevrolet Optra]] (2016-2023), [[w:Isuzu D-Max#First generation (RA, RC; 2002)|Chevrolet T-Series]], [[w:Isuzu MU#First generation (UCS55/UCS69GW; 1989–1998)|Isuzu Rodeo]], [[w:Isuzu TF|Isuzu TF-Series]], [[w:Opel Astra|Opel Astra]], [[w:Opel Corsa|Opel Corsa]], [[w:Opel Vectra|Opel Vectra]]
|-
|F||[[w:Fairfax II|Fairfax II]]||[[w:Kansas City, Kansas|Kansas City, Kansas]]||United States||[[w:Chevrolet Bolt#Second generation (2026)|Chevrolet Bolt]] (2027)
<br /> [[w:Chevrolet Equinox#Fourth generation (2025)|Chevrolet Equinox]] (Starting Mid-2027)
||1987|| ||Located at 3201 Fairfax Trafficway. Replaced original Fairfax Assembly Plant (Fairfax I) for 1988 model year production. Built on the site of the old Fairfax Municipal Airport. Originally built W-body cars. Switched to Epsilon-based cars for 2004. Chevy Malibu ended production in November 2024. Cadillac XT4 ended production in January 2025. Fairfax was then idled for retooling. Production of the updated Bolt electric car began in late 2025. The 2027 Bolt is an updated version of the old Bolt EUV. <br />Past models: [[w:Pontiac Grand Prix|Pontiac Grand Prix]] (1988-2003), [[w:Oldsmobile Cutlass Supreme#Fifth generation (1988–1997)|Oldsmobile Cutlass Supreme]] (1995-1997), [[w:Oldsmobile Intrigue|Oldsmobile Intrigue]] (1998-'02), [[w:Chevrolet Malibu#Sixth generation (2004)|Chevrolet Malibu (2004-2007)/Malibu Classic (2008)]], [[w:Chevrolet Malibu#Seventh generation (2008)|Chevrolet Malibu (2008-2012)]],<br> [[w:Chevrolet Malibu#Eighth generation (2013)|Chevrolet Malibu (2013-2015)/Malibu Limited (2016)]], [[w:Chevrolet Malibu#Ninth generation (2016)|Chevrolet Malibu (2016-2025)]], <br /> [[w:Saturn Aura|Saturn Aura]] (2007-2009), [[w:Buick LaCrosse#Second generation (2010)|Buick Lacrosse/Allure]] (2010-2016), [[w:Cadillac XT4|Cadillac XT4]] (2019-2025)
|-
| ||[[w:Flint Engine South|Flint Engine South/Flint Engine Operations]]||[[w:Flint, Michigan|Flint, Michigan]]||United States|| 3.0 [[w:Duramax I6 engine|Duramax I6 engine]], [[w:Generation VI (2027–present)|Gen VI Small-Block V8]]: [[w:#LS6_3|LS6 6.7L V8]], [[w:L76_3|L76 5.7L V8]], [[w:L78|L78 6.6L V8]] ||2000|| ||Located at 2100 Bristol Road. Located just to the south of Flint Truck Assembly and on the east side of Flint Metal Center. <br />Past engines: [[w:GM Atlas engine|4.2 Atlas I6]], 3.6 [[w:GM High Feature engine|High Feature V6 engine]],<br /> 1.4 [[w:GM Family 0 engine#Generation III|Family 0 I4]] (Cruze, Sonic, Volt/Ampera/ELR generator), [[w:GM small gasoline engine#LFV|GM Small Gasoline Engine]] (LFV 1.5 Turbo I4 - Malibu)
|-
| ||[[Flint Metal Center]]||[[w:Flint, Michigan|Flint, Michigan]]||United States|| Sheetmetal stampings for various GM models||1954|| ||Located at G-2238 Bristol Road. Located just to the south of Flint Truck Assembly and on the west side of Flint Engine South. Metal fabricating plant.
|-
| ||[[Flint Tool & Die]] (North American Engineering and Tooling Center)||[[w:Flint, Michigan|Flint, Michigan]]||United States||Tools & Dies for fabrication & assembly of sheetmetal body parts||1967|| ||Located at 425 Stevenson St. Was Plant 38 of the "Chevy in the Hole" complex. Last remaining manufacturing plant of the old "Chevy in the Hole" complex.
|-
|F <br/>(1953-present)<br/><br/> 1 (1947-1952)||[[w:Flint Truck Assembly|Flint Truck Assembly]]||[[w:Flint, Michigan|Flint, Michigan]]||United States||[[w:Chevrolet Silverado|Chevrolet Silverado]] (2001-)<br /> [[w:Chevrolet Silverado|GMC Sierra]] (2001-)||1947|| ||Located at G 3100 Van Slyke Road. This plant replaced vehicle production at the older "Chevy in the Hole" complex elsewhere in Flint, Michigan and became Chevrolet's new home plant. Began production in June 1947. This is GM's oldest, still active assembly plant in North America. Built all 300 1953 Corvettes on a small makeshift line (1 line for body & 1 for frame/chassis) from June 30 through December 24 in 1953. Built the 50 millionth car built by GM in the US on November 23, 1954. The car was a special gold painted '55 Chevy Bel Air 2-door Sport Coupe with a gold-painted chassis and 716 interior and exterior trim parts plated with 24-carat gold. Last built Chevy full-size cars in 1969. Last built passenger cars in 1970 (the midsize Chevelle & Monte Carlo). The last passenger car built at Flint Assembly was a Monte Carlo on June 24, 1970. At that point, the separate onsite Fisher Body operation (Flint #2) was merged into the Chevrolet operation (the rest of the plant) and the entire plant joined the GM Assembly Division. Since 1971, has only built full-size pickups, full-size SUV's, full-size vans, and medium duty commercial trucks. A new paint shop (Flint Assembly Paint Operations) was announced in December 2013 and opened in 2016, replacing the previous paint shop located inside the assembly plant. The new paint shop is further down Van Slyke Road from the assembly plant at 3848 Van Slyke Road, on the site of the former V8 engine plant that closed in 1999 and was subsequently demolished. Flint Truck Assembly has produced over 15 million vehicles. <br />Past models: [[w:Chevrolet Deluxe|Chevrolet Deluxe]], [[w:Chevrolet Stylemaster|Chevrolet Stylemaster]], [[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]], [[w:Chevrolet 150|Chevrolet 150]] (1953-1957),<br> [[w:Chevrolet 210|Chevrolet 210]] (1953-1957), [[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1969), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-69), [[w:Chevrolet Impala|Chevrolet Impala]] (1958-1969), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-69), [[w:Chevrolet Nomad|Chevrolet Nomad]] (1955-1957), [[w:Chevrolet Corvette (C1)|Chevrolet Corvette (1953 only)]]<br> [[w:Chevrolet El Camino#First generation (1959–1960)|Chevrolet El Camino]] (1959-1960),<br> [[w:Chevrolet Chevelle|Chevrolet Chevelle]] (1966, 1970),<br> [[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1970 only),<br> [[w:Chevrolet K5 Blazer|Chevrolet K5 Blazer]] (1969-1991), [[w:Chevrolet K5 Blazer|GMC K15 Jimmy]] (1970-91), [[w:Chevrolet Suburban|Chevrolet Suburban]] (1960-1991), [[w:GMC Suburban|GMC Suburban]] (1967-91),<br> [[w:Chevrolet Corvair|Chevrolet Corvair Forward Control]] (1961-1964), <br> [[w:Chevrolet van#Third generation (1971-1996)|Chevrolet Van/Sportvan]] (1993-1995),<br> [[w:Chevrolet van#1992-1996|Chevrolet Van/Sportvan G-Classic]] (1996),<br> [[w:Chevrolet van#Third generation (1971-1996)|GMC Vandura/Rally Van]] (1993-1995),<br> [[w:Chevrolet van#1992-1996|GMC Vandura/Rally Van G-Classic]] (1996),<br> [[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1947-1955), [[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959), [[w:Chevrolet C/K|Chevrolet C/K]] (1960-1986), [[w:Chevrolet C/K (second generation)|GMC C/K (Action Line)]] (1967-1972), [[w:Chevrolet C/K (third generation)|GMC C/K (Rounded Line)]] (1973-1986), [[w:Chevrolet C/K (third generation)#R/V-Series (1987–1991)|Chevrolet R/V]] (1987-1991), [[w:Chevrolet C/K (third generation)#R/V-Series (1987–1991)|GMC R/V]] (1987-1991), [[w:Chevrolet C/K (fourth generation)|Chevrolet C/K (GMT400)]] (1995-2000), [[w:Chevrolet C/K (fourth generation)|GMC Sierra (GMT400)]] (1995-98), [[w:Chevrolet C/K (fourth generation)|GMC Sierra Classic (GMT400)]] (1999-2000), [[w:Chevrolet C/K (fourth generation)#C3500HD (1991–2002)|Chevrolet/GMC C3500HD]] (1998-00), [[w:Chevrolet Kodiak#Third generation (2003–2009)|Chevrolet Kodiak/GMC Topkick]] ('03-'09), [[w:Chevrolet Kodiak#Isuzu H-Series|Isuzu H-Series]] (2005-2007), [[w:Isuzu Forward|Chevrolet T-Series]] (2004-2009), [[w:GMC T-Series|GMC T-Series]] (2004-2009), [[w:Isuzu F-Series|Isuzu F-Series]] (2004-2009) <br />
|-
|Z||[[w:Fort Wayne Assembly|Fort Wayne Assembly]]||[[w:Roanoke, Indiana|Roanoke, Indiana]]||United States||[[w:Chevrolet Silverado|Chevrolet Silverado]] (1999-)<br />[[w:Chevrolet Silverado|GMC Sierra]] (1988-)||1986|| ||Located at 12200 Lafayette Center Rd.<br /> Past models: [[w:Chevrolet C/K (fourth generation)|Chevrolet C/K]] (1988-1998)
|-
| ||[[Fuel Cell System Manufacturing LLC]]||[[w:Brownstown Charter Township, Michigan|Brownstown Charter Township, Michigan]]||United States||Fuel Cell Systems for [[w:Honda CR-V#CR-V e:FCEV|Honda CR-V e:FCEV]] & various other applications by GM & Honda & to outside companies||2024|| ||Located at 20001 Brownstown Center Dr. Located next to GM's Brownstown Battery Assembly Plant.<br /> A 50/50 joint venture with [[w:Honda|Honda]]. GM & Honda have been co-developing fuel cells since 2013. The manufacturing joint venture was established in January 2017. Production began in January 2024. Production is scheduled to end by the end of 2026.
|-
| ||Grand Rapids Operations||[[w:Wyoming, Michigan|Wyoming, Michigan]]||United States||Valvetrain products <br /> Axles for full-size trucks ||1943|| ||Located at 2100 Burlingame Avenue SW. Originally established as Diesel Equipment Division of GM. Spun off with Delphi Automotive Systems in 1999 (Delphi Powertrain Systems Grand Rapids); taken back under [[w:Delphi Corporation|Delphi Corporation]] bankruptcy and made part of [[w:General Motors Components Holdings|General Motors Components Holdings]] in 1999.
|-
|G||[[w:General Motors do Brasil|Gravatai Automotive Industrial Complex]]||[[w:Gravatai|Gravatai]], [[w:Rio Grande do Sul|Rio Grande do Sul]]||[[w:Brazil|Brazil]]||[[w:Chevrolet Onix|Chevrolet Onix]]<br /> ||2000|| ||Past models: [[w:Chevrolet Celta|Chevrolet Celta]]<br />[[w:Chevrolet Prisma (disambiguation)|Chevrolet Prisma]]<ref>{{cite web|url=http://www.autointell.com/nao_companies/general_motors/gm-manufacturing/blue-macaw-01.htm|title=General Motors: Gravatai Automotive Complex|access-date=2021-09-14 }}</ref><ref>[https://www.reuters.com/article/idUSN1533675720090715 UPDATE 2-GM to spend $1 bln in Brazil on new family of cars] Retrieved 14 September 2021</ref><br /> [[w:Suzuki Fun|Suzuki Fun]]
|-
| ||[[Joinville]]||[[w:Joinville|Joinville]], [[w:Santa Catarina (state)|Santa Catarina]]||[[w:Brazil|Brazil]]||[[w:GM E-Turbo engine|1.0 & 1.0 Turbo 3-cylinder engine]]<br />[[w:GM E-Turbo engine|1.2 & 1.2 Turbo 3-cylinder engine]] ||2013|| ||Past engines: [[w:GM Family 1 engine#SPE / 4|1.0L & 1.4L SPE / 4<br /> 4-cylinder engines]]
|-
| ||Kokomo Operations<ref>{{Cite web|url=https://plants.gm.com/media/us/en/gm/company_info/facilities/component-fac/kokomo.html|title=GM Corporate Newsroom - United States - Company}}</ref>||[[w:Kokomo, Indiana|Kokomo, Indiana]]||United States||Automotive Electronic Components including Engine Control Modules, Transmission Control Modules, Body Control Modules, & Airbag Sensing Diagnostic Modules||1936|| ||Located at 2603 South Goyer Rd. The site was first used in the 1890's to make cars by [[w:Haynes-Apperson|Haynes-Apperson]] and later by [[w:Haynes Automobile Company|Haynes]] until the company went out of business in 1925. Purchased by GM in 1936 from Crosley Radio Corp., which used the site to make radios for Chevrolet briefly during 1936. Initially run by Delco Remy, the site became a separate GM division called Delco Radio Division in June 1936. Delco Radio made radios for all GM cars as well as other electronic equipment. During WWII, Delco Radio made electronic equipment for the war effort. In 1970, Delco Radio merged with AC Electronics Division of Milwaukee to form [[w:Delco Electronics|Delco Electronics Division]]. On December 31, 1985, General Motors merged Hughes Aircraft, which it had acquired on December 20, 1985, with its Delco Electronics unit to form Hughes Electronics Corporation, an independent subsidiary. The group then consisted of Delco Electronics Corporation and Hughes Aircraft Company. In 1997, GM transferred Delco Electronics to its Delphi Automotive Systems business. Spun off with Delphi Automotive Systems in 1999 (Delco Electronics and Safety); taken back under [[w:Delphi Corporation|Delphi Corporation]] bankruptcy and made part of [[w:General Motors Components Holdings|General Motors Components Holdings]] in 2009.
|-
| ||[[w:GM Korea|GM Korea]]||[[w:Boryeong|Boryeong]], [[w:South Chungcheong Province|South Chungcheong Province]]||[[w:South Korea|South Korea]]||Automatic Transmissions||2008|| ||[[w:GM 6T40 transmission|GM 6T40 transmission]] (GF6)
|-
|B<br /><br />0 ('07-'08 Antara)||[[w:GM Korea|GM Korea]]||[[w:Bupyeong-gu|Bupyeong District]], [[w:Incheon|Incheon]]||[[w:South Korea|South Korea]]||[[w:Chevrolet Trailblazer (crossover)|Chevrolet Trailblazer]]<br/>[[w:Buick Encore GX|Buick Encore GX]]<br/>[[w:Buick Envista|Buick Envista]]
Engines: [[w:GM Family 0 engine|GM Family 0 engine]]<br />[[w:GM E-Turbo engine|1.3L Turbo 3-cylinder engine]]
|1962<br /><br/>1971 (engine plant)|| ||Bupyeong has 2 vehicle assembly plants and a powertrain plant. The Bupyeong 2 Assembly Plant ended production on November 26, 2022. Bupyeong 2 was last producing the Chevrolet Malibu and Trax and Buick Encore.<br />Past models : [[w:Chevrolet Aveo|Chevrolet Aveo]], [[w:Chevrolet Sonic|Chevrolet Sonic]], [[w:Chevrolet Captiva|Chevrolet Captiva]], [[w:Chevrolet Epica|Chevrolet Epica]], [[w:Chevrolet Evanda|Chevrolet Evanda]], [[w:Chevrolet Malibu|Chevrolet Malibu]], [[w:Chevrolet Trax#First generation (U200; 2013)|Chevrolet Trax]]<br />
[[w:Buick Encore#First generation (2013)|Buick Encore]]<br />
[[w:Buick LaCrosse#Korean market: Alpheon|Alpheon]]
[[w:Daewoo LeMans|Daewoo LeMans]], [[w:Daewoo Cielo|Daewoo Cielo]], [[w:Daewoo Espero|Daewoo Espero]], [[w:Daewoo Lanos|Daewoo Lanos]], [[w:Daewoo Leganza|Daewoo Leganza]], [[w:Daewoo Magnus|Daewoo Magnus]], [[w:Daewoo Tosca|Daewoo Tosca]], [[w:Daewoo Kalos|Daewoo Kalos]], [[w:Chevrolet Aveo (T200)#T250|Daewoo Gentra]], [[w:Daewoo Winstorm|Daewoo Winstorm]]
[[w:Holden Barina#Fifth generation (TK; 2005–2011)|Holden Barina (TK)]], [[w:Holden Barina#Sixth generation (TM; 2011–2018)|Holden Barina (TM)]], [[w:Opel Antara|Holden Captiva MaXX/Captiva 5]], [[w:Chevrolet Captiva#First generation (C100, C140; 2006)|Holden Captiva/Captiva 7]], [[w:Holden Epica|Holden Epica (EP)]], [[w:Chevrolet Malibu#Eighth generation (2013)|Holden Malibu (EM)]], [[w:Chevrolet Trax#First generation (U200; 2013)|Holden Trax (TJ)]] <br />
[[w:Opel Antara|GMC Terrain (Middle East only)]] <br />
[[w:Opel Mokka#First generation (J13; 2012)|Opel/Vauxhall Mokka]], [[w:Opel Antara|Opel/Vauxhall Antara]]<br />
[[w:Pontiac LeMans#Sixth generation (1988–1993)|Pontiac LeMans]], [[w:Pontiac Wave|Pontiac Wave]], [[w:Pontiac G3|Pontiac G3]] <br />
[[w:Suzuki Swift+|Suzuki Swift+]] (Canada only), [[w:Suzuki Verona|Suzuki Verona]]
Past engines: [[w:GM Family 1 engine|GM Family 1 engine]]
|-
|C||[[w:GM Korea|GM Korea]]||[[w:Changwon|Changwon]], [[w:Gyeongsang Province|Gyeongsang Province]]||[[w:South Korea|South Korea]]||[[w:Chevrolet Trax#Second generation (2023)|Chevrolet Trax]]<br/>[[w:GM small gasoline engine|GM small gasoline engine]] LV7, LE2<br/>Manual transmissions
|1991|| ||Past models: [[w:Daewoo Damas|Damas]], [[w:Daewoo Labo|Labo]]<br />[[w:Daewoo Matiz|Daewoo Matiz]], [[w:Daewoo Tico|Daewoo Tico]]<br />[[w:Opel Karl|Opel Karl]]/[[w:Vauxhall Viva#Name revival|Vauxhall Viva]]<br />[[w:Pontiac G2#Second generation (M200, M250; 2005)|Pontiac G2]], [[w:Pontiac Matiz#M150 (2000–2005)|Pontiac Matiz]],<br /> [[w:Chevrolet Spark|Chevrolet Spark]], [[w:Chevrolet Spark#Spark EV|Chevrolet Spark EV]]<br />[[w:Holden Spark#Australasia|Holden Barina Spark (MJ)]]<br>[[w:Holden Spark|Holden Spark (MP)]]
Past engines: [[w:Daewoo S-TEC engine#S-TEC II|Daewoo S-TEC II]]
|-
|J||[[w:Lansing Delta Township Assembly|Lansing Delta Township Assembly]]||[[w:Delta Township, Michigan|Delta Township, Michigan]]||United States||[[w:Chevrolet Traverse|Chevrolet Traverse]] (2010-)<br />[[w:Buick Enclave|Buick Enclave]] (2008-)<br />[[w:GMC Acadia#Third generation (2024)|GMC Acadia]] (2024-)||2006|| ||Located at 8175 Millett Hwy. Originally opened to build Lambda-based crossovers. Switched to C1XX-based models for 2018. <br /> Past models: [[w:Saturn Outlook|Saturn Outlook]] (2007-2010),<br>[[w:GMC Acadia#First generation (2007)|GMC Acadia]] (2007-2016), [[w:GMC Acadia#Acadia Limited|GMC Acadia Limited]] (2017), <br>[[w:Chevrolet Traverse#Second generation (2018)|Chevrolet Traverse Limited]] (2024)
|-
|0||[[w:Lansing Grand River Assembly|Lansing Grand River Assembly]]/Stamping||[[w:Lansing, Michigan|Lansing, Michigan]]||United States||[[w:Cadillac CT4|Cadillac CT4]] (2020-)<br />[[w:Cadillac CT5|Cadillac CT5]] (2020-)||2001|| ||Located at 920 Townsend Street. Stamping plant added in 2016. This newly constructed plant was built on the grounds of the former Oldsmobile home plant complex in Lansing. The former Oldsmobile HQ building ("Building 70") is still standing and still has "Oldsmobile Administration Center" carved into the marble barrier in front of the flagpole between the 2 stairways. Building 70 was Oldsmobile HQ from 1966-1996, when Oldsmobile HQ moved to Detroit. Building 70 is now vacant but the exterior is often used by GM for large ads that are wrapped around the side of the building on the corner of Townsend St. and William St. Originally opened to build vehicles on the Sigma platform. Started building vehicles on the Alpha platform for 2013.<br /> Past models: [[w:Cadillac CTS|Cadillac CTS]] (2003-2019), [[w:Cadillac SRX#First generation (2004)|Cadillac SRX]] (2004-2009), [[w:Cadillac STS|Cadillac STS]] (2005-2011), [[w:Cadillac ATS|Cadillac ATS]] (2013-2019), [[w:Chevrolet Camaro (sixth generation)|Chevrolet Camaro]] (2016-2024)
|-
| ||[[Lansing Regional Stamping]] (LRS)||[[w:Delta Township, Michigan|Delta Township, Michigan]]||United States|| ||2004|| ||Located within the Lansing Delta Assembly complex.
|-
|||[[w:Lansing Service Parts Operation|Lansing Redistribution Center]] (SPO)||[[w:Delta Township, Michigan|Delta Township, Michigan]]||United States|| ||1960|| ||Located at 4400 West Mount Hope Road. Previously Lansing Plant 4. Now called Lansing Redistribution Center, part of GM Customer Care and Aftersales.
|-
| ||[[Lockport Operations]]||[[w:Lockport, NY|Lockport, NY]]||United States||Thermal products (climate control systems, powertrain cooling systems) and stators for EV motors.||1914|| ||Located at 200 Upper Mountain Road. Founded in 1910 as the Harrison Radiator Company. Acquired by United Motors in 1916 which was then acquired by GM in 1918. Spun off with Delphi Automotive Systems in 1999 (Harrison Thermal Systems); taken back under [[w:Delphi Corporation|Delphi Corporation]] bankruptcy and made part of [[w:General Motors Components Holdings|General Motors Components Holdings]] in 2009.
|-
| ||[[Marion Metal Center]]||[[w:Marion, Indiana|Marion, Indiana]]||United States||Sheetmetal stamped parts & blanks for various GM models||1956|| ||Located at 2400 West Second St. Metal fabricating. Originally a Fisher Body division plant.
|-
| ||[[Mogi das Cruzes]]||[[w:Mogi das Cruzes|Mogi das Cruzes]], [[w:São Paulo (state)|São Paulo state]]||[[w:Brazil|Brazil]]||Stampings for new & replacement parts||1999|| ||Stamping plant
|-
|4||[[w:Orion Assembly|Orion Assembly]]||[[w:Orion Township, Michigan|Orion Township, Michigan]]||United States||Assembly of Battery packs for EVs:<br> Silverado EV, Sierra EV, Hummer EV, and Escalade IQ<br><br>Scheduled for Early 2027:
[[w:Chevrolet Silverado#Fifth-generation Silverado / sixth-generation Sierra (2026)|Chevrolet Silverado]] 1500 (2027-)<br />[[w:GMC Sierra#Fifth-generation Silverado / sixth-generation Sierra (2026)|GMC Sierra]] 1500 (2027-)
||1983||idled 2009; reopened 2011; idled 2023||Located at 4555 Giddings Road. Originally opened to build the 1985 Fwd C-bodies. Began building Fwd H-bodies for 1994. Began building Fwd G-bodies for 1995. On June 18, 2004, production of the Buick LeSabre & Park Ave., the last 2 models built at Orion Assembly, ended. Plant was then converted from building full-size cars to midsize cars for 2005, beginning with the Pontiac G6. Idled during 2009 as part of GM's bankruptcy. Reopened in 2011 with the help of govt. incentives & special agreement with the UAW to build the Chevy Sonic subcompact. Later added the Buick Verano compact car. In 2016, began building the Chevy Bolt EV, which was joined in 2021 by the slightly larger Bolt EUV. Idled in 2023 when both Bolts were discontinued. In late summer 2024, Orion Assembly began assembling battery cells supplied by Ultium Cells LLC in Warren, OH into packs which are then supplied to the Factory Zero plant for installation into the electric trucks & SUVs made there. Orion was going to be converted to building electric trucks, supplementing Factory Zero's production of Silverado EV & Sierra EV but that plan was postponed and later cancelled. In 2025, a new plan was announced for Orion to build fuel-powered Silverado & Sierra 1500 pickups & Escalade SUVs beginning in 2027.<br> Past models: [[w:Chevrolet Bolt EV|Chevrolet Bolt EV]] (2017-2023), [[w:Chevrolet Bolt EUV|Chevrolet <br> Bolt EUV]] (2022-2023), [[w:Cruise AV|Cruise AV]], [[w:Chevrolet Bolt#European countries|Opel Ampera-e]] (2017-19),<br> [[w:Chevrolet Sonic|Chevrolet Sonic]] (2012-2020), [[w:Buick Verano#First generation (2011)|Buick Verano]] (2012-2017), [[w:Chevrolet Malibu#Seventh generation (2008)|Chevrolet Malibu]] (2008-2010), [[w:Pontiac G6|Pontiac G6]] (2005-2010),<br> [[w:Buick Riviera#Eighth generation (1995–1999)|Buick Riviera]] (1995-1999), [[w:Oldsmobile Aurora|Oldsmobile Aurora]] (1995-2003),<br> [[w:Buick Park Avenue#Second generation (1997-2005)|Buick Park Avenue]] (1997-2005), [[w:Buick LeSabre#Eighth generation (2000–2005)|Buick LeSabre]] (2000-2005), [[w:Cadillac de Ville series#Sixth generation (1985–1993)|Cadillac DeVille]] (1985-1993), [[w:Cadillac Fleetwood#Front-wheel drive: 1985–1993|Cadillac Fleetwood]] (1985-1992), [[w:Cadillac Sixty Special#1987–1993|Cadillac Sixty Special]] (1989-1993), [[w:Oldsmobile 88#Tenth generation (1992–1999)|Oldsmobile 88]] (1994-99), [[w:Oldsmobile LSS|Oldsmobile LSS]] (1996-1999), [[w:Oldsmobile Regency|Oldsmobile Regency]] (1997-98), [[w:Oldsmobile 98#Eleventh generation (1985–1990)|Oldsmobile 98]] (1985-1990), [[w:Oldsmobile 98#Twelfth generation (1991–1996)|Oldsmobile 98]] (1991-1996), [[w:Oldsmobile Touring Sedan|Oldsmobile Touring Sedan]] (1988-1990),<br> [[w:Pontiac Bonneville#Ninth generation (1992–1999)|Pontiac Bonneville]] (1994-1998), [[w:Pontiac Bonneville#Tenth generation (2000–2005)|Pontiac Bonneville]] (2000-03)
|-
|1 (2022-)<br /><br />1 (Line 2 a.k.a. Consolidated Line)<br> (1984-2019)<br>/<br />9 (Line 1 a.k.a. Flex Line)<br> (1984-2020)<br /><br />1 (1967-1983)||[[w:Oshawa Car Assembly|Oshawa Car Assembly]]||[[w:Oshawa, Ontario|Oshawa, Ontario]]||[[w:Canada|Canada]]||[[w:Chevrolet Silverado#Fourth-generation Silverado / fifth-generation Sierra (T1XX; 2019)|Chevrolet Silverado 1500]] (2022-)<br />[[w:Chevrolet Silverado#Fourth-generation Silverado / fifth-generation Sierra (T1XX; 2019)|Chevrolet Silverado HD]] (2022-)||1953|| ||Located at 900 Park Rd South.<br />
Past models: [[w:Cadillac XTS|Cadillac XTS]] (2013-2019), [[w:Chevrolet Impala|Chevrolet Impala]] (1958-1985, 2000-2020), [[w:Chevrolet Impala#Impala Limited (2014–2016)|Chevrolet Impala Limited]] (2014-2016), [[w:Chevrolet Lumina|Chevrolet Lumina]] (1990-2001), [[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1995-2007), [[w:Buick Century#Sixth generation (1997–2005)|Buick Century]] (1997-2005), [[w:Buick Regal|Buick Regal]] (1988-2004, 2011-2017), [[w:Buick LaCrosse#First generation (2005)|Buick LaCrosse/Allure]] (2005-2009), [[w:Buick Special#1949–1958|Buick Special]] (1954-1958), [[w:Buick LeSabre|Buick LeSabre]] (1959-1966), [[w:Buick Century#Second generation (1954–1958)|Buick Century]] (1954-1958), [[w:Buick Invicta|Buick Invicta]] (1959-1962), [[w:Buick Wildcat|Buick Wildcat]] (1963-1966), [[w:Oldsmobile 88|Oldsmobile 88]] (1954-1966), [[w:Chevrolet 150|Chevrolet 150]] (1954-1957), [[w:Chevrolet 210|Chevrolet 210]] (1954-1957), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1955-1981), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-1975), [[w:Chevrolet Camaro (fifth generation)|Chevrolet Camaro]] (2010-2015), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-1985), [[w:Chevrolet Corvair|Chevrolet Corvair]] (1960-1966), [[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958), [[w:Chevrolet Equinox#Second generation (2010)|Chevrolet Equinox]] (2011-2017), [[w:Chevrolet Nova|Chevrolet Nova]] (1962-1967),<br> [[w:General Motors A platform (1925)#1964|A-body (rwd) cars]]: [[w:Chevrolet Chevelle|Chevrolet Chevelle]] (1964-1977)/[[w:Chevrolet Malibu|Chevrolet Malibu]] (1978-1983)/[[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1971-1981)/ [[w:Oldsmobile Cutlass|Oldsmobile Cutlass]]/[[w:Oldsmobile 442|Oldsmobile 442]]/[[w:Pontiac LeMans|Pontiac LeMans]] (1971, 1973-1981)/[[w:Pontiac GTO|Pontiac GTO]] (1970)/[[w:Buick Special|Buick Special]]/[[w:Buick Skylark|Buick Skylark]],<br> [[w:General Motors A platform (1982)|A-body (fwd) cars]]: [[w:Chevrolet Celebrity|Chevrolet Celebrity]] (1982-1987)/[[w:Pontiac 6000|Pontiac 6000]] (1982-1988)/[[w:Oldsmobile Cutlass Ciera|Oldsmobile Cutlass Ciera]] (1985-1988),<br> [[w:Pontiac Bonneville#Sixth generation (1977–1981)|Pontiac Bonneville]] (1977-1981), [[w:Pontiac Catalina#1977–1981|Pontiac Catalina]] (1977-1981), [[w:Pontiac Grand Prix#Eighth generation (2004–2008)|Pontiac Grand Prix]] (2004-2008), [[w:Pontiac Catalina#Canada and Canadian exports|Pontiac Laurentian]] (1954-1981), [[w:Pontiac Parisienne|Pontiac Parisienne]] (1958-1984, US: 1983-1984), [[w:Pontiac Pathfinder|Pontiac Pathfinder]] (1954-1958), [[w:Pontiac Catalina#Canada and Canadian exports|Pontiac Strato Chief]] (1958-1970), [[w:Acadian (automobile)|Acadian]] (1962-1967), [[w:Beaumont (automobile)|Beaumont]] (1966-1969), [[w:Chevrolet Silverado#Third-generation Silverado / fourth-generation Sierra (K2XX; 2014)|Chevrolet Silverado 1500 LD/2500HD]] (2019), [[w:Chevrolet Silverado#Third-generation Silverado / fourth-generation Sierra (K2XX; 2014)|GMC Sierra 1500 Limited/2500HD]] (2019). <br />
VIN code 1 (1984-2019): Chevrolet Celebrity (1984-1987), Pontiac 6000 (1984-1985), Buick Regal (1988-2004), Chevrolet Lumina 4-d (1990-2001), Buick Century (1997-05), Pontiac Grand Prix (2004-2008), Buick LaCrosse/Allure (2005-2009), Chevrolet Impala (2008-2013), Chevrolet<br /> Impala Limited (2014-2016), Chevrolet Equinox (2011-2017), Chevrolet Silverado 1500 LD/2500HD (2019),<br /> GMC Sierra 1500 Limited/2500HD (2019)
VIN code 9: Chevrolet Impala (1984-1985), Chevrolet Caprice (1984-1985), Pontiac Parisienne (1984), Pontiac 6000 (1985-1988), Oldsmobile Cutlass Ciera (1985-1988), Chevrolet Lumina 4-d (1990-1999), Chevrolet Lumina 2-d (1990-1994), Chevrolet Monte Carlo (1995-07), Chevrolet Impala (2000-08), Chevrolet Camaro (2010-2015), Buick Regal (2011-2017), Cadillac XTS (2013-2019), Chevrolet Impala (2014-2020)
The current Oshawa complex (South plant; also known as Autoplex beginning in the 1980's) opened on November 7, 1953. The passenger car assembly plant had 2 assembly lines. Operations were gradually moved from the older North plant to the newer South plant. Originally built Chevrolet, Pontiac, Oldsmobile, and Buick models. However, Oldsmobile production ended in 1969 and Buick production ended in 1971. Oldsmobile production resumed with the '85 Cutlass Ciera while Buick production resumed with the '88 Regal. Oldsmobile production again ended in 1988 while Buick production continued through 2017 with a temporary hiatus in 2009-2010 calendar years. Pontiac production at Oshawa ended after 1988; only resuming in 2003 for the '04 Grand Prix. Pontiac production at Oshawa ended for good in 2008. Cadillac production began at the Oshawa South plant for the first time in 2012 with the 2013 XTS. Full-size pickups were built on Line 2 for 2019. This was the first time that pickups were built on one of Oshawa's passenger car assembly lines and the first time that pickups were made in Oshawa since Oshawa Truck closed in 2009. The last XTS was built on Sept. 10, 2019, the last Oshawa-built Impala on Oct. 25, 2019, & the last pickups on Dec. 18, 2019. Vehicle production at the South plant ended in 2019; plant will be transformed for stamping and production of body panels and subassemblies. Restart of vehicle production announced in Nov. 2020 - Truck production started in late 2021 with Silverado HD followed by the Silverado 1500 in 2022. Oshawa is now the only plant producing both Silverado 1500 & Silverado HD.
Oshawa also produced face masks during the COVID-19 pandemic starting in 2020.
|-
| ||[[w:Oshawa Metal|Oshawa Metal]]||[[w:Oshawa, Ontario|Oshawa, Ontario]]||[[w:Canada|Canada]]||Stamped metal parts for new production and for service parts||1986|| ||Part of the overall Oshawa Assembly complex (Autoplex) on Park Road South. Located at 1000 Park Road South.
|-
| ||[[w:Parma Metal Center|Parma Metal Center]]||[[w:Parma, Ohio|Parma, Ohio]]||United States||Sheetmetal stampings & assemblies for various GM models||1948|| ||Located at 5400 Chevrolet Blvd.<br /> Metal fabricating
|-
| ||[[Pontiac Metal Center]]||[[w:Pontiac, Michigan|Pontiac, Michigan]]||United States||Sheetmetal stampings & assemblies for various GM models||1926|| ||Located at 260 E. Beverly Ave.<br />Metal fabricating<br />Originally, an [[w:Oakland Motor Car Company|Oakland Motor Car]] plant. Last remaining manufacturing plant of the original Pontiac Assembly complex, which was Pontiac's home plant.
|-
|S||[[w:Ramos Arizpe Assembly|Ramos Arizpe Assembly]]||[[w:Ramos Arizpe|Ramos Arizpe]]||[[w:Mexico|Mexico]]||[[w:Chevrolet Blazer EV|Chevrolet Blazer EV]] (2024-) <br /> [[w:Chevrolet Equinox EV|Chevrolet Equinox EV]] (2024-) <br />[[w:Cadillac Optiq|Cadillac Optiq EV]] (2025-) ||1981|| ||Ramos Arizpe opened building 4 Chevrolet models for the Mexican market: Citation, Celebrity, Malibu, and Monte Carlo. The 1985 El Camino & Caballero were the first Mexican-built GM models to be sold in the US. GM began exporting the Celebrity to the US for 1987 followed by the Buick Century for 1989. GM began exporting the Chevy Cavalier to the US for 1991 followed by the Pontiac Sunbird for 1993, which was replaced by the Sunfire for 1995. Stamping plant added in 1995 and a paint shop added in 1997. The plant was expanded to add a 2nd assembly line to build the Pontiac Aztek for 2001, followed by the Buick Rendezvous for 2002. The 2nd line was also used to build the Chevy HHR, Saturn Vue, Chevy Captiva Sport, Cadillac SRX, & Saab 9-4X. Some 2nd gen. Chevy Cruze sedans made at Ramos Arizpe were sold in the US for the '16-'17 model years. All 2nd gen. Chevy Cruze 5-d hatchbacks ('17-'19) were made in Ramos Arizpe. All Chevy Cruze production at Ramos Arizpe ended in <br> Dec. 2018. The Cruze was the last passenger car made at Ramos Arizpe. A new paint shop was added in 2021, replacing the original from 1997. EV production began in 2023.<br />Past Models: <br> Mexico or Latin America only: [[w:Chevrolet Citation|Chevrolet Citation]] (1982-1986), [[w:Chevrolet Celebrity|Chevrolet Celebrity]] (1982-1986), [[w:Chevrolet Malibu#Fourth generation (1978)|Chevrolet Malibu]] (1981), [[w:Chevrolet Monte Carlo#Fourth generation (1981–1988)|Chevrolet Monte Carlo]] (1981-1984), [[w:Oldsmobile Cutlass Ciera|Chevrolet Cutlass (Mexico only)]], [[w:Buick Century#Fifth generation (1982–1996)|Chevrolet Century (Mexico only)]], [[w:Chevrolet Chevy|Chevrolet Chevy]] (Mexico: 1995-2012), [[w:Chevrolet Captiva Sport|Chevrolet Captiva Sport]] (2008-2017), [[w:Chevrolet Sonic|Chevrolet Sonic]] (Mexico: 2012-2017).<br> Export to US: [[w:Chevrolet El Camino|Chevrolet El Camino]] (1985-1987), [[w:GMC Caballero|GMC Caballero]] (1985-1987), [[w:Chevrolet Celebrity|Chevrolet Celebrity]] (US: 1987-1989), [[w:Buick Century#Fifth generation (1982–1996)|Buick Century]] (1989-1994), [[w:Chevrolet Cavalier|Chevrolet Cavalier]] (1991-2004), [[w:Pontiac Sunbird#Second generation (1982–1988)|Pontiac Sunbird]] (1993-1994), [[w:Pontiac Sunfire|Pontiac Sunfire]] (1995-2005), [[w:Pontiac Aztek|Pontiac Aztek]] (2001-2005), [[w:Buick Rendezvous|Buick Rendezvous]] (2002-2007), [[w:Chevrolet HHR|Chevrolet HHR]] (2006-2011), [[w:Saturn Vue#Second generation (2008)|Saturn Vue]] (2008-2010), [[w:Chevrolet Captiva Sport|Chevrolet Captiva Sport]] (US: 2012-2015),<br> [[w:Cadillac SRX#Second generation (2010)|Cadillac SRX]] (2010-2016), [[w:Saab 9-4X|Saab 9-4X]] (2011),<br> [[w:Chevrolet Cruze#Second generation (J400)|Chevrolet Cruze]] (2016-2019), [[w:Chevrolet Equinox#Third generation (2018)|Chevrolet Equinox]] (2018-2024), [[w:Chevrolet Blazer (crossover)|Chevrolet Blazer]] (2019-2026), [[w:Honda Prologue|Honda Prologue EV]] (2024-26).<br> Export to Australia/New Zealand:<br> [[w:Holden Equinox|Holden Equinox (EQ)]] (2018-2020)
|-
| ||Ramos Arizpe Engine||[[w:Ramos Arizpe|Ramos Arizpe]]||[[w:Mexico|Mexico]]||[[w:GM E-Turbo engine|1.2L Turbo 3-cylinder engine]]<br />[[w:General Motors LS-based small-block engine#Generation V (2013–present)|Gen V Small Block V8 & V6]]||1982|| ||Past engines: [[w:General Motors 60° V6 engine|Chevrolet 60° V6 engine]]<br />[[w:GM High Value engine|GM High Value V6]]<br />[[w:GM High Feature engine|GM High Feature V6]]
|-
| ||Ramos Arizpe Transmission||[[w:Ramos Arizpe|Ramos Arizpe]]||[[w:Mexico|Mexico]]||VT40 (CVT250) [[w:Continuously variable transmission|CVT]] transmission ||1999|| ||Past transmissions: [[w:GM 4L60-E transmission|4L60-E/4L65-E 4-speed automatic]]<br />[[w:GM-Ford 6-speed automatic transmission|6T70/6T75 6-speed automatic (GF6)]]<br />4ET50 EVT (for [[w:Chevrolet Volt|Chevrolet Volt]])<br />4ET55 EVT (for [[w:Cadillac ELR|Cadillac ELR]])
|-
| ||[[w:Rochester Products Division|Rochester Operations]]||[[w:Rochester, NY|Rochester, NY]]||United States||Chevrolet, GMC, Cadillac, and Buick Components - Engine management systems, fuel injection systems, and related products. ||1939|| ||Located at 1000 Lexington Avenue. Founded in 1908 as the Rochester Coil Company. Renamed North East Electric Company in 1909. Acquired by GM in 1929. In 1930, merged with Delco-Light Co. to become Delco Appliance. A planned, second Delco Appliance plant on Lexington Ave. in Rochester instead became the Rochester Products Division of GM in 1939. This division made carburetors, fuel injection systems, & other fuel system equipment. During WWII, it made warplane and tank electrical accessories. In 1981, Rochester Products Division merged with GM's Diesel Equipment Division of Grand Rapids, Michigan retaining the Rochester Products Division name. On August 30, 1988, Rochester Products Division merged with GM's AC Spark Plug Division to form the AC Rochester Division. The Grand Rapids-based diesel fuel-injection business of the former Diesel Equipment Division was sold on August 26 to a joint venture of G.M. and the Penske Corporation called Diesel Technology Corporation (80% Penske, 20% Detroit Diesel, itself a joint venture between Penske & GM). Robert Bosch invested in Diesel Technology Corporation in 1992, eventually taking over the whole company by 2002. AC Rochester merged with parts of Delco Remy (the parts not spun off into Remy International) in 1994 to form AC Delco Systems. AC Delco Systems became part of GM's Delphi Automotive Systems subsidiary in 1995. Spun off with Delphi Automotive Systems in 1999 (Rochester Powertrain); taken back under [[w:Delphi Corporation|Delphi Corporation]] bankruptcy and made part of [[w:General Motors Components Holdings|General Motors Components Holdings]] in 2009.
|-
| ||[[w:Romulus Engine|Romulus Engine]]||[[w:Romulus, Michigan|Romulus, Michigan]]||United States||[[w:GM High Feature engine#Fourth generation|Gen4 High Feature V6]]
||1976|| ||Located at 36880 Ecorse Road. Originally part of GM's Detroit Diesel Allison Division where it built diesel engines and components. Switched to gasoline engines in the 1980's.<br /> Past engines: [[w:Chevrolet 90° V6 engine|Chevrolet 90° V6 engine]]<br />[[w:General Motors LS-based small-block engine#Generation III (1997–2007)|Gen III Small Block V8]]<br />[[w:GM LS engine#Generation IV (2005–2020)|Gen IV Small Block V8]]
|-
| ||[[w:Romulus Engine|Romulus Transmission]]||[[w:Romulus, Michigan|Romulus, Michigan]]||United States||[[w:"Ford-GM 10-speed automatic transmission#General Motors|10L80/90 Transmission]]||1995|| ||Located at 36880 Ecorse Road.<br />Past transmissions: [[w:GM 4L60-E transmission|GM 4L60-E transmission]]
|-
|R||Rosario||[[w:Alvear, Santa Fe|Alvear]], [[w:Rosario Department|Rosario Department]], [[w:Santa Fe Province|Santa Fe Province]]||[[w:Argentina|Argentina]]||<br/>[[w:Chevrolet Tracker (2019)|Chevrolet Tracker]]
Engines: [[w:GM small gasoline engine#LE2|1.4L Turbo I4 LE2]]
||1997|| ||Engine plant added in 2016.
Past Models:
[[w:Chevrolet Cruze#Second generation (J400)|Chevrolet Cruze]], [[w:Opel Corsa#Corsa C (X01; 2000)|Chevrolet Corsa C]], [[w:Opel Corsa#Corsa B|Chevrolet Corsa B/Corsa Classic/Classic]], [[w:Chevrolet Agile|Chevrolet Agile]]<br /> and [[w:Chevrolet Tracker (Americas)#Second generation|Suzuki Grand Vitara/Chevrolet Tracker]]
|-
| ||[[w:Saginaw Metal Casting Operations|Saginaw Metal Casting Operations]]||[[w:Saginaw, Michigan|Saginaw, Michigan]]||United States||Metal casting for powertrains (High Feature V6 engine): engine blocks, heads, and crankshafts<br/>Front 4WD axle assembly castings||1919|| ||Located at 1629 N. Washington Avenue. Originally the Grey Iron Foundry, a part of General Motors Saginaw Products Co. and renamed as Chevrolet Saginaw Grey Iron Foundry when transferred to Chevrolet Motor Division in 1927. Moved to Central Foundry Division in 1983. Joins GM Powertrain Division in 1991. Renamed Saginaw Metal Casting Operations in 1994 to reflect that it now pours aluminum. First production aluminum heads produced in 1995. Over the years, it has produced both cast iron and cast aluminum engine blocks for the Chevy Small-Block V8.
|-
|L||[[w:San Luis Potosí Assembly|San Luis Potosí Assembly]]||[[w:San Luis Potosí, San Luis Potosí|San Luis Potosí]]||[[w:Mexico|Mexico]]||[[w:Chevrolet Equinox#Fourth generation (2025)|Chevrolet Equinox]] (2025-)<br />[[w:GMC Terrain#Third generation (2025)|GMC Terrain]] (2025-)||2008|| ||Note: Aveo & G3 made in San Luis Potosi were not sold in the US but they were sold in Canada. Onix was not sold in the US or Canada. 2013-2014 Trax was sold in Canada & Mexico but not in the US.<br> Past models: [[w:Chevrolet Aveo (T200)|Chevrolet Aveo (T250)]] (2009-2018)<br />[[w:Pontiac G3|Pontiac G3/G3 Wave]] (2009-2010)<br />[[w:Chevrolet Onix#Second generation (2019)|Chevrolet Onix]] (2020-2022)<br />[[w:Chevrolet Trax#First generation (U200; 2013)|Chevrolet Trax]] (2013-2020)<br />[[w:Chevrolet Equinox#Third generation (2018)|Chevrolet Equinox]] (2018-2024)<ref>{{Cite web|url=https://vpic.nhtsa.dot.gov/mid/home/displayfile/7c659360-416a-4e96-ae38-0b69d916c106|title=GM Vehicle Identification Numbering Standard - 2021 - United States and Canada|date=August 14, 2020}}</ref><br />[[w:GMC Terrain#Second generation (2018)|GMC Terrain]] (2018-2024)
|-
| ||San Luis Potosí Transmission||[[w:San Luis Potosí, San Luis Potosí|San Luis Potosí]]||[[w:Mexico|Mexico]]||FWD GF9 9 Speed Transmissions||2009|| ||[[w:GM-Ford 6-speed automatic transmission|GM-Ford 6-speed automatic transmission]] 6T40/45 (GF6)
|-
|B||[[w:General Motors do Brasil|São Caetano do Sul Assembly]]||[[w:São Caetano do Sul|São Caetano do Sul]], [[w:São Paulo (state)|São Paulo]]||[[w:Brazil|Brazil]]|| [[w:Chevrolet Montana#Third generation (2022)|Chevrolet Montana]] <br /> [[w:Chevrolet Spin|Chevrolet Spin]]<br />[[w:Chevrolet Tracker (2019)|Chevrolet Tracker]]<br /> ||1930|| ||Past Models: [[w:Opel Astra#G|Chevrolet Astra]], [[w:Opel Astra#H |Chevrolet Vectra/Vectra GT]] (both until 2011), [[w:Chevrolet C/K#1985–1996|Chevrolet Bonanza]], [[w:Chevrolet C/K#1964–1984|Chevrolet C-10/C-14/C-15/Chevy 4/D-10/A-10]], [[w:Chevrolet D-20|Chevrolet A-10/C-10/A-20/C-20/D-20]], Chevrolet A40/D40, [[w:Chevrolet Cobalt#Second generation (2011)|Chevrolet Cobalt]], [[w:Chevrolet Comodoro|Chevrolet Comodoro]], [[w:Opel Corsa#Corsa B (S93; 1993)|Chevrolet Corsa B]], [[w:Chevrolet Corsa|Chevrolet Corsa Classic]], [[w:Chevrolet Cruze#First generation (J300; 2008)|Chevrolet Cruze]], [[w:Chevrolet Diplomata|Chevrolet Diplomata]], [[w:Chevrolet Onix|Chevrolet Joy]], [[w:Chevrolet Kadett|Chevrolet Kadett]] 1996-1998, [[w:Chevrolet Montana#Second generation (2011–2021)|Chevrolet Montana]], [[w:Opel Ascona#Chevrolet Monza|Chevrolet Monza]], [[w:Chevrolet Omega#Omega A|Chevrolet Omega A]], [[w:Chevrolet Opala|Chevrolet Opala]], [[w:Opel Vectra#Vectra A (1988–1995)|Chevrolet Vectra A]], [[w:Opel Vectra#Vectra B (1995–2002)|Chevrolet Vectra B]], [[w:Chevrolet Veraneio|Chevrolet C-1416/Veraneio]], Chevrolet 3100/Brasil/Amazona/Alvorada/Corisco, Chevrolet 6500, Chevrolet C64/C65/C68/D64/D65/D68/D74/D75/D78,<br> Bus bodies, Frigidaire appliances
|-
|C||[[w:General Motors do Brasil|São José dos Campos Assembly]]||[[w:São José dos Campos|São José dos Campos]], [[w:São Paulo (state)|São Paulo]]||[[w:Brazil|Brazil]]||
[[w:Chevrolet S-10#Third generation (2012)|Chevrolet S-10]]<br/>[[w:Chevrolet Trailblazer (SUV)#Second generation (RG; 2011)|Chevrolet Trailblazer]]
Engines:<br/> 2.8L turbodiesel <br> 4-cylinder engines<br />
Transmissions
|1959|| ||Supplied 1.8L & 2.0L SOHC Family II I4 engines to the US from 1982-1994. <br />Past Models: [[w:Chevrolet Montana#First generation (2003–2010)|Chevrolet Montana]]<br /> [[w:Chevrolet S-10 Blazer#Second generation (1995)|Chevrolet Blazer]], [[w:Opel Corsa#Corsa C (X01; 2000)|Chevrolet Corsa C]], [[w:Opel Corsa#Corsa C (X01; 2000)|Chevrolet Corsa Sedan C]], [[w:Opel Meriva#First generation (2003)|Chevrolet Meriva]], [[w:Opel Zafira#Zafira A (1999–2006)|Chevrolet Zafira]] (all until 2012)<br />[[w:Chevrolet Chevette|Chevrolet Chevette]], [[w:Chevrolet Chevette#Chevy 500|Chevrolet Chevy 500]], [[w:Chevrolet Kadett|Chevrolet Kadett]] 1989-1996, [[w:Chevrolet S-10#Second generation (1994)|Chevrolet S-10]], [[w:Chevrolet C/K#1997–2002|Chevrolet Silverado D20]], Chevrolet 11000/12000/14000/22000, [[w:GMC Chevette|GMC Chevette]], [[w:GMC Chevette|GMC 500]], [[w:Chevrolet C/K#1997–2002|GMC 6-100/6-150/3500HD]], [[w:Chevrolet Kodiak#Second generation (1990–2002)|GMC 12-170/14-190/16-220]], [[w:Isuzu Forward|GMC 15-190]]
Engines including: [[w:Chevrolet Stovebolt engine#261|Chevrolet Jobmaster 261 I6]], [[w:Chevrolet 153 4-cylinder engine#Brazil|Chevrolet 153 4-cylinder]], [[w:Chevrolet Turbo-Thrift engine|Chevrolet Turbo-Thrift engine]], [[w:GM Family 1 engine|GM Family 1 engine]], [[w:GM Family II engine|GM Family II engine]]<br />Detroit Diesel Series 53<br />Transmissions
|-
|G||[[Silao Assembly]]||[[w:Silao, Mexico|Silao]]||[[w:Mexico|Mexico]]||[[w:Chevrolet Silverado|Chevrolet Silverado]] (2006-)<br />[[w:Chevrolet Silverado|GMC Sierra]] (2006-), Chevrolet Cheyenne (Mexico)||1995|| || Stamping plant added in 1997. Began by building full-size SUVs for 1995. Was the sole assembler of GM's full-size SUTs. Began building full-size pickups for 2006. Full-size SUV production moved entirely to Arlington Assembly after the 2009 model year.<br> Past production models: [[w:Chevrolet Suburban|Chevrolet Suburban]] (1995-2009), [[w:Chevrolet Suburban#Eighth generation (1992)|GMC Suburban]] (1995-1999), [[w:GMC Yukon XL|GMC Yukon XL]] (2000-2006), [[w:Cadillac Escalade#Second generation (2002)|Cadillac Escalade ESV]] (2003-2006),<br> [[w:Chevrolet Suburban (eighth generation)#Holden Suburban|Holden Suburban (K8)]] (1998-2001),<br> [[w:Chevrolet Avalanche|Chevrolet Avalanche]] (2002-2013),<br> [[w:Cadillac Escalade EXT|Cadillac Escalade EXT]] (2002-2013)
|-
| ||Silao Engine||[[w:Silao, Mexico|Silao]]||[[w:Mexico|Mexico]]||[[w:General Motors LS-based small-block engine#Generation V (2013–present)|Gen V Small Block V8]]||2001|| ||[[w:General Motors LS-based small-block engine#Generation IV (2005–2020)|Gen IV Small Block V8]]
|-
| ||Silao Transmission||[[w:Silao, Mexico|Silao]]||[[w:Mexico|Mexico]]||[[w:GM 8L45 transmission|8L45]], [[w:GM 8L90 transmission|8L90]], [[w:Ford-GM 10-speed automatic transmission|10L80]]||2008|| ||[[w:GM 6L50 transmission|6L50]], [[w:GM 6L80 transmission|6L80/90]]
|-
|Z,<br />S (Traverse & Vue)||[[w:Spring Hill Manufacturing|Spring Hill Manufacturing]]||[[w:Spring Hill, Tennessee|Spring Hill, Tennessee]]||United States||<br /> [[w:Cadillac XT5|Cadillac XT5]]<br> (2017-2026)<br />[[w:Cadillac Lyriq|Cadillac Lyriq]] (2023-) <br />[[w:Cadillac Vistiq|Cadillac Vistiq]] (2026-) <br /><br /> [[w:Chevrolet Blazer (crossover)|Chevrolet Blazer]] (Starting 2027) <br /> <br />[[w:GM small gasoline engine#1.5|1.5L Turbo I4]]<br />[[w:GM Ecotec engine#Generation III|Ecotec Gen III 2.0L Turbo I4]]<br />[[w:GM L3B engine|2.7L L3B turbo I4]]<br />5.3 & 6.2 [[w:LS based GM small-block engine#Generation V (2013–present)|Gen V <br />Small-Block V8 Engine]]<br /><br />Stamping<br />Components||1990||2009-2012||Located at 100 Saturn Parkway. The original home of the [[w:Saturn Corporation|Saturn]] brand. Originally, Saturn built everything here - all its vehicles, engines, transmissions, stampings, and components. But, gradually, Saturn production was broadened to other plants and by 2007, Saturn production in Spring Hill had ended. Spring Hill made products for other GM brands and has continued to do so since Saturn was closed down during GM's bankruptcy. <br />
Past models: [[w:Saturn S-Series|Saturn S-Series]] (1991-2002), [[w:Saturn Ion|Saturn Ion]] (2003-2007), [[w:Saturn Vue#First generation (2002)|Saturn Vue]] (2002-2007), [[w:Chevrolet Traverse#First generation (2009)|Chevrolet Traverse]] (2009-2010), [[w:Chevrolet Equinox#Second generation (2010)|Chevrolet Equinox]] (2013-2016), [[w:GMC Acadia#Second generation (2017)|GMC Acadia]] (2017-2023), [[w:Holden Acadia|Holden Acadia (AC)]], [[w:Cadillac XT6|Cadillac XT6]] (2020-2025),<br /> [[w:Acura ZDX#Second generation (2024)|Acura ZDX EV]] (2024).<br />
Past Engines: [[w:Saturn I4 engine|Saturn I4 engine]], [[w:GM Ecotec engine#2.4|Ecotec Gen II 2.4L I4]],<br> [[w:GM Ecotec engine#LHU (A20NFT Opel)|Ecotec Gen II LHU 2.0L Turbo I4]], [[w:GM Ecotec engine#Generation III|Ecotec Gen III 2.5L I4]] <br />
[[w:Saturn MP transmission|Saturn MP series manual and automatic transmissions]] Transmission production in Spring Hill ended in 2002.
Ion production ended March 28, 2007 and was replaced by the Belgian-built Astra for the 2008 model year. Vue production ended March 30, 2007 and moved to Mexico for the 2008 model year. Assembly was idled for more than a year beginning April 1, 2007 for conversion to Chevy Traverse production. Traverse production began September 2, 2008. Assembly idled in November 2009 when Chevy Traverse production was moved to Lansing Delta Township Assembly. Assembly reopened in September 2012<ref>{{cite news| url=https://www.nytimes.com/2011/09/18/business/general-motors-said-to-offer-bonuses-in-new-deal-with-workers.html | work=The New York Times | author1=Bill Vlasic | author2=Nick Bunkley | title=G.M. Will Offer Bonuses in New Deal With Workers | date=September 17, 2011}}</ref> to produce the [[w:Chevrolet Equinox#Second generation (2010)|Chevrolet Equinox]].
Spring Hill also includes a plastic injection molding operation that produce various plastic components. Plastic components have also been produced for models not built in Spring Hill such as [[w:Chevrolet Traverse|Chevrolet Traverse]] and the [[w:Chevrolet Corvette (C7)|Chevrolet Corvette (C7)]].
|-
| ||[[w:St. Catharines Engine Plant|St. Catharines Propulsion Plant]]||[[w:St. Catharines, Ontario|St. Catharines, Ontario]]||[[w:Canada|Canada]]||[[w:General Motors LS-based small-block engine#Generation V (2013–present)|Gen V Small Block V8]]<br />[[w:Tremec|Tremec]] TR-9080 8-speed dual clutch transmission<br />Engine components||1954|| ||Located at 570 Glendale Avenue. Operated as part of GM subsidiary McKinnon Industries, Ltd. until 1969 when it became "General Motors of Canada Limited, St. Catharines".<br />Previously:<br />[[w:Chevrolet Turbo-Thrift engine|Chevrolet Turbo-Thrift I6 engine]] (1963-1967)<br />[[w:Oldsmobile V8 engine|Oldsmobile Rocket V8 engine]] (through 1966)<br />[[w:Buick V6 engine#225|Buick 225 V6 engine]] (through 1966)<br />[[w:Buick V8 engine|Buick V8 engine]] (300, 340, 401) (through 1966)<br /> [[w:General Motors 60° V6 engine|Chevrolet 60° OHV V6 engine]] (2.8, 3.1)<br />[[w:General Motors 60° V6 engine#LQ1|Chevrolet 3.4L DOHC LQ1 V6 engine]]<br />[[w:GM High Feature engine|High Feature V6 engine]] (2.8, 3.6)<br />[[w:Chevrolet small-block engine (first and second generation)|Chevrolet Small-Block V8]] (265/267/283/305/307/327/350)<br />[[w:General Motors LS-based small-block engine#Generation III (1997–2007)|Gen III Small Block V8]]<br />[[w:GM LS engine#Generation IV (2005–2020)|Gen IV Small Block V8]]<br />[[w:GM 6T40 transmission|(GF6) 6T45 6-speed automatic]]
|-
| ||[[w:Toledo Transmission|Toledo Transmission]]||[[w:Toledo, Ohio|Toledo, Ohio]]||United States||Transmissions:<br /> RWD GM-Allison 10-speed (10L1000) (AB1V) / 8-speed ([[w:GM 8L45 transmission|8L45]] & [[w:GM 8L90 transmission|8L90]]) <br /> FWD GF9 9 Speed Transmissions||1956|| ||Located at 1455 West Alexis Road. Acquired from the former Martin-Parry Corporation in 1955. Replaced the older Toledo plant on Central Ave. <br />Previously:<br /> [[w:Turbo-Hydramatic#THM350|THM350 3-speed automatic]]<br />[[w:Turbo-Hydramatic#THM700R4 / 4L60 / 4L60E / 4L65E / 4L70E|THM700R4/4L60 4-speed automatic]]<br />[[w:GM 4L60-E transmission|4L60-E/4L65-E/4L70-E 4-speed automatic]]<br />[[w:GM 6T40 transmission|(GF6) 6T30/35/40/45/50 6-speed automatic]] <br /> ([[w:GM 6L50 transmission|6L45/6L50]] & [[w:GM 6L80 transmission|6L80/6L90]]) 6-speed automatics
|-
|| ||Toluca Engine||[[w:Toluca|Toluca]], [[w:State of Mexico|State of Mexico]]
|[[w:Mexico|Mexico]]
|[[w:GM small gasoline engine|GM Small Gasoline Engine 1.4L/1.5L I4]] (including 1.5 turbo LSD I4 for Equinox/Terrain)
[[w:Chevrolet 153 4-cylinder engine#Vortec 3000|Vortec 3000 Marine & Industrial 4-cyl. engine]]<br />
5.0 & 5.7 Marine & Industrial V8 engines<br />
Small-Block V8 engines for the aftermarket<br />
Aluminum Foundry<br />
|1965
|
|Past engines:
[[w:GM Family 1 engine|GM Family 1 I4 engine]] <br />[[w:Chevrolet Turbo-Thrift engine#292|Chevrolet 292 (4.8L) Inline-6]]
|-
| ||[[w:Tonawanda Engine|Tonawanda Engine]]||[[w:Buffalo, New York|Buffalo, New York]]||United States||[[w:LS based GM small-block engine#LV1|LV1]] 4.3L V6
[[w:LS based GM small-block engine#L84|L84]] 5.3L V8
[[w:LS based GM small-block engine#L86/L87|L87]] 6.2L V8
[[w:General Motors LS-based small-block engine#LT2|LT2]] 6.2L V8
[[w:LS based GM small-block engine#L8T|L8T]] 6.6L V8
[[w:GM Ecotec engine#LSY|LSY]] 2.0T I4
|1938
| ||Located at 2995 River Rd. Includes 3 plants. Plant #1 opened in 1938. Plant #4 opened in 1941. Plant #5 opened in 2001.
Past engines:
Built the [[w:Pratt & Whitney R-1830 Twin Wasp|Pratt & Whitney R-1830 Twin Wasp]] radial engine used in the [[w:B-24 Liberator|B-24 Liberator]] bomber during WW-2
Built the [[w:Pratt & Whitney R-2800 Double Wasp|Pratt & Whitney R-2800 Double Wasp]] radial engine used in the [[w:P-61 Black Widow|P-61 Black Widow]] & [[w:P-47 Thunderbolt|P-47 Thunderbolt]] fighters during WW-2
[[w:Chevrolet 2300 engine|Chevrolet 2300 engine]] (Vega I4)
[[w:General Motors 122 engine|Chevrolet 122 engine]] (1.8/2.0/2.2L OHV I4)
[[w:GM Ecotec engine#2.2|Ecotec 2.2L Gen I]] (L850)
[[w:GM Ecotec engine#2.2_2|Ecotec 2.2L Gen II]], [[w:GM Ecotec engine#2.4|Ecotec 2.4L Gen II]]
[[w:GM Ecotec engine#LTG|Ecotec Gen III LTG 2.0T I-4]], [[w:GM Ecotec engine#2.5|Ecotec 2.5L Gen III]]
[[w:General Motors Atlas engine#LK5 (Vortec 2800)|Atlas 2.8/2.9 I4]]<br />[[w:General Motors Atlas engine#L52 (Vortec 3500)|Atlas 3.5/3.7 I5]]
[[w:Chevrolet Turbo-Air 6 engine|Corvair Flat-6 (all)]]
[[w:Chevrolet Stovebolt engine#Second generation: 1937–1962|Chevrolet Stovebolt / Blue Flame I6]]
[[w:Chevrolet 90° V6 engine|Chevrolet 3.3L/3.8L/4.3L 90° V6]]
[[w:General Motors 60° V6 engine|Chevrolet 60° V6 engine]], [[w:GM High Value engine|High Value 3.9L V6]]
[[w:Chevrolet small-block engine (first and second generation)|Chevrolet Small-Block V8]]
[[w:Chevrolet Big-Block engine|Chevrolet Big-Block V8]]
Gen V Small-Block 90° V6/V8: [[w:LS based GM small-block engine#LV3|LV3]] 4.3L V6, [[w:LS based GM small-block engine#L82|L82]] 5.3L V8, [[w:LS based GM small-block engine#L83|L83]] 5.3L V8, [[w:LS based GM small-block engine#L86|L86]] 6.2L V8, [[w:LS based GM small-block engine#LT1|LT1]] 6.2L V8, [[w:LS based GM small-block engine#LT4|LT4 6.2L Supercharged V8]]
|-
| ||[[w:Ultium#Production|Ultium Cells LLC - Spring Hill]]||[[w:Spring Hill, Tennessee|Spring Hill, Tennessee]]||United States||Ultium lithium-ion battery cells for EV's,<br> LFP batteries for energy storage systems||2024|| || Owned by Ultium Cells LLC, a 50/50 joint venture between General Motors and [[w:LG Energy Solution|LG Energy Solution]]. This is Ultium Cells' second plant. Located at 301 Donald F Ephlin Pkwy.
|-
| ||[[w:Ultium#Production|Ultium Cells LLC - Warren]]||[[w:Warren, Ohio|Warren, Ohio]]||United States||Ultium lithium-ion battery cells for EV's||2022|| || Owned by Ultium Cells LLC, a 50/50 joint venture between General Motors and [[w:LG Energy Solution|LG Energy Solution]]. This is Ultium Cells' first plant. Located at 7400 Tod Ave SW.
|-
|1||[[w:Wentzville Assembly|Wentzville Assembly]]||[[w:Wentzville, Missouri|Wentzville, Missouri]]||United States||[[w:Chevrolet Express|Chevrolet Express]] (1996-)<br />[[w:GMC Savana|GMC Savana]] (1996-)<br />[[w:Chevrolet Colorado|Chevrolet Colorado]] (2015-)<br />[[w:GMC Canyon|GMC Canyon]] (2015-)||1983|| ||Located at 1500 E. Rte. A. Originally opened to build the 1985 Fwd C-bodies. Began building Fwd H-bodies for 1986. On Oct. 29, 1991, Wentzville built the 30 millionth Pontiac, a white 1992 Bonneville SSEi. Ended passenger car production in 1994. Converted to truck production. Began building full-size vans in 1996. Added midsize pickups in 2014. <br />Past models: [[w:Buick Electra#Sixth generation (1985–1990)|Buick Electra]] (1985-1990), [[w:Buick Park Avenue#First generation (1991–1996)|Buick Park Avenue]] (1991-1994), [[w:Oldsmobile 88#Ninth generation (1986–1991)|Oldsmobile Delta 88/88]] (1986-1991),<br> [[w:Oldsmobile 88#Tenth generation (1992–1999)|Oldsmobile 88]] (1992-1993), [[w:Oldsmobile 98#Eleventh generation (1985–1990)|Oldsmobile 98]] (1985-1989), [[w:Oldsmobile Touring Sedan|Oldsmobile Touring Sedan]] (1989),<br> [[w:Pontiac Bonneville#Eighth generation (1987–1991)|Pontiac Bonneville]] (1989-1991), [[w:Pontiac Bonneville#Ninth generation (1992–1999)|Pontiac Bonneville]] (1992-93)
|-
|A||[[w:SAIC-GM|SAIC-GM]] Shanghai plant||[[w:Jinqiao|Jinqiao]], [[w:Pudong|Pudong]] district, [[w:Shanghai|Shanghai]]||[[w:China|China]]||[[w:Cadillac CT4|Cadillac CT4]]<br />[[w:Cadillac CT5|Cadillac CT5]]<br />[[w:Cadillac CT6|Cadillac CT6]]<br />[[w:Cadillac Lyriq|Cadillac Lyriq]]<br />[[w:Cadillac Vistiq|Cadillac Vistiq]]<br>[[w:Cadillac XT4|Cadillac XT4]]<br />[[w:Cadillac XT5|Cadillac XT5]]<br />[[w:Cadillac XT6|Cadillac XT6]]<br />[[w:Buick Enclave#China (2020)|Buick Enclave]]<br />[[w:Buick GL8#Third generation (2017–present)|Buick GL8 ES/Avenir/PHEV (Mk III)]]<br />[[w:Buick GL8#Fourth generation (2022)|Buick GL8 Century (Mk IV)]]<br />[[w:Buick GL8#Electra Encasa (2025)|Buick Electra Encasa (Mk V)]]<br />[[w:Buick LaCrosse|Buick LaCrosse]]<br />[[w:Buick Regal#Sixth generation (2018)|Buick Regal]] (E2XX)<br />Engines<br />Engine components<br />Transmissions<br />Ultium batteries||1998|| ||Operated by [[w:SAIC-GM|SAIC-GM]]. There are 3 vehicle production plants (North, South, & East). North was the original plant. South began production in 2005. The East or "Cadillac" plant began production in 2016. On October 28, 2025, the Shanghai plant produced its 4 millionth vehicle, a 2026 Cadillac XT5.
Past models: [[w:Buick Century#Sixth generation (1997–2005)|Buick New Century]] (W-body)<br />[[w:Buick Excelle#First generation (J200; 2003)|Buick Excelle]]<br />[[w:Buick GL8#First generation (2000–2016)|Buick GL8 Mk I (1999-2004)]]<br />[[w:Buick Park Avenue#Third generation (2007–2012)|Buick Park Avenue (WM)]] (CKD)<br />[[w:Buick Regal#China|Buick Regal]] (W-body)<br />[[w:Buick Regal#Fifth generation (2008)|Buick Regal]] (Epsilon II)<br />[[w:Buick Sail|Buick Sail]]<br />[[w:Buick Velite 5|Buick Velite 5]]<br />[[w:Buick Velite 7|Buick Velite 7]]<br />[[w:Chevrolet Malibu#Eighth generation (2013)|Chevrolet Malibu]]<br />[[w:Chevrolet Malibu#Ninth generation (2016)|Chevrolet Malibu XL]]<br />[[w:Chevrolet Blazer (crossover)#Chinese version|Chevrolet Blazer]]<br />[[w:Cadillac ATS#ATS-L|Cadillac ATS-L]]<br />[[w:Cadillac CTS#First generation (2003)|Cadillac CTS]]<br />[[w:Cadillac STS#Chinese Cadillac SLS|Cadillac SLS]]<br />[[w:Cadillac XTS|Cadillac XTS]]<br />
Past Engines: [[w:General Motors 60° V6 engine#Production in China by SAIC-GM|Chevrolet 60° OHV V6]]
|-
|D||[[w:SAIC-GM|SAIC-GM]] Dongyue Motors||[[w:Yantai|Yantai]], [[w:Shandong|Shandong]]||[[w:China|China]]||[[w:Buick Envision|Buick Envision]]<br />[[w:Cadillac GT4|Cadillac GT4]]||2001|| ||Operated by [[w:SAIC-GM|SAIC-GM]]. Originally founded in 2001 as Yantai Bodyshop Corp. which built Daewoo vehicles ([[w:Daewoo Lanos|Daewoo Lanos]]) under license from Daewoo Motor Co. SAIC-GM took over the plant in 2002. There are 2 vehicle production plants (North & South). SAIC-GM Dongyue Motors joint venture is owned 50% by SAIC-GM, 25% by GM China, & 25% by SAIC. <br />
Past models: [[w:Buick Encore#First generation (2013)|Buick Encore]]<br />[[w:Buick Encore GX|Buick Encore GX]]<br />[[w:Buick Encore GX|Buick Encore Plus]]<br />[[w:Buick Excelle#Second generation (2018)|Buick Excelle]]<br />[[w:Buick Excelle GT#First generation (2009)|Buick Excelle GT/XT]]<br />[[w:Chevrolet Sail#Buick Sail|Buick Sail]]<br />[[w:Chevrolet Aveo#Second generation (T300; 2012)|Chevrolet Aveo (T300)]]<br />[[w:Chevrolet Sail#Third generation (2014)|Chevrolet Aveo (Mex.)]]<br />[[w:Chevrolet Sail#Chevrolet Sail|Chevrolet Corsa Plus (Chile)]]<br />[[w:Daewoo Magnus|Chevrolet Epica (V200)]]<br />[[w:Daewoo Tosca|Chevrolet Epica]] (V250)<br />[[w:Chevrolet Aveo (T200)|Chevrolet Lova]]<br />[[w:Chevrolet Lova RV|Chevrolet Lova RV]]<br />[[w:Chevrolet Onix#Second generation (2019)|Chevrolet Onix]]<br />[[w:Chevrolet Orlando#Second generation (2018)|Chevrolet Orlando]]<br />[[w:Chevrolet Sail|Chevrolet Sail]]<br />[[w:Chevrolet Trailblazer (crossover)|Chevrolet Trailblazer]]<br />[[w:Chevrolet Trax|Chevrolet Trax]]
|-
| ||[[w:SAIC-GM|SAIC-GM]] Dongyue Powertrain||[[w:Yantai|Yantai]], [[w:Shandong|Shandong]]||[[w:China|China]]||Engines<br />Transmissions including: [[w:GM 6T40 transmission|6T30/6T40/6T45/6T50]], [[w:Continuously variable transmission|CVT]]||1999|| ||Operated by [[w:SAIC-GM|SAIC-GM]]. Originally founded in 1999 as Shandong Daewoo Automotive Engine Co., Ltd., a 50/50 joint venture between Daewoo Motor Co. & Chinese partners owned by the Shandong provincial govt. SAIC-GM took over the plant in 2005. SAIC-GM Dongyue Powertrain joint venture is owned 50% by SAIC-GM, 25% by GM China, & 25% by SAIC. <br />
Past Engines: [[w:GM Family 1 engine#Generation III|Family I, Gen 3 engine]]
|-
| ||[[w:SAIC-GM|SAIC-GM]] Norsom Motors||[[w:Shenyang|Shenyang]], [[w:Liaoning|Liaoning]]||[[w:China|China]]|| ||1992||2025||Operated by [[w:SAIC-GM|SAIC-GM]]. Originally founded in 1992 as Jinbei GM Automotive Co. Ltd., a 30/70 joint venture between GM & Shenyang Jinbei Automotive. Restructured into a 50/50 joint venture between GM & Jinbei in 1998. SAIC-GM took over the joint venture in 2004, buying out Jinbei. The new SAIC-GM Norsom Motors joint venture is owned 50% by SAIC-GM, 25% by GM China, & 25% by SAIC. Plant closed in February 2025 due to declining sales in China by SAIC-GM.
Past models:<br /> Jinbei GM:<br />[[w:Chevrolet S-10 Blazer#Second generation (1995–2005)|Chevrolet Blazer]]<br />[[w:Chevrolet S-10#Second generation (1994)|Chevrolet S-10 Crew Cab]]<br />SAIC-GM:<br />[[w:Chevrolet Cruze|Chevrolet Cruze]]<br />[[w:Chevrolet Captiva#First generation (C100, C140; 2006)|Chevrolet Captiva]]<br />[[w:Chevrolet Tracker (2019)|Chevrolet Tracker]] <br />[[w:Chevrolet Seeker|Chevrolet Seeker]]<br/> [[w:Buick Encore#Second generation (2020)|Buick Encore]]<br />[[w:Buick Envista|Buick Envista]]<br />[[w:Buick GL8#First generation (2000–2016)|Buick GL8 Mk I (2004-2016)]]<br />[[w:Buick GL8#Second generation (2010-present)|Buick GL8 Land Business Class (Mk II) (2010-2025)]]<br />[[w:Buick Verano#Second generation (2016)|Buick Verano]] <br/> Engines
|-
|V||[[w:SAIC-GM|SAIC-GM]] Wuhan Branch||[[w:Wuhan|Wuhan]], [[w:Hubei|Hubei]]||[[w:China|China]]||[[w:Buick Verano#Third generation (Pro, 2021)|Buick Verano Pro]]<br />[[w:Buick Velite 6|Buick Velite 6]]<br />[[w:Buick Electra E5|Buick Electra E5]]<br />[[w:Buick Electra L7|Buick Electra L7]]<br />[[w:Buick Electra E7|Buick Electra E7]]<br />[[w:Cadillac Optiq|Cadillac Optiq]]<br /> Engines||2015<ref>{{Cite news |author=Joseph Szczesny |date=30 January 2015 |title=Ford, GM Implement Expansion Plans in China |work=The Detroit Bureau |url=https://www.thedetroitbureau.com/2015/01/ford-gm-implement-expansion-plans-in-china/ |access-date=19 June 2022}}</ref>|| ||Operated by [[w:SAIC-GM|SAIC-GM]].<ref>{{Cite news |author=Jamie L. LaReau |date=27 February 2020 |title=Restart of GM's plant in China stalls due to coronavirus crisis |work=Detroit Free Press |url=https://www.freep.com/story/money/cars/general-motors/2020/02/27/gm-delays-start-production-china-plant-due-coronavirus-crisis/4884203002/ |access-date=19 June 2022}}</ref>
Past models: [[w:Chevrolet Cavalier#China|Chevrolet Cavalier]] <br />[[w:Chevrolet Monza (China)|Chevrolet Monza]]<br />[[w:Chevrolet Menlo|Chevrolet Menlo]]<br />[[w:Chevrolet Equinox#Third generation (2018)|Chevrolet Equinox]]<br />[[w:Chevrolet Equinox#Fourth generation (2025)|Chevrolet Equinox Plus]]<br />[[w:Buick Electra E4|Buick Electra E4]]<br />[[w:Buick Excelle GT#Second generation (2015)|Buick Excelle GT/GX]]<ref>{{Cite news |author=Sam McEachern|date=28 February 2020 |title=GM Delays Production Restart At Wuhan Plant As Coronavirus Crisis Continues |work=GM Authority |url=https://gmauthority.com/blog/2020/02/gm-delays-production-restart-at-wuhan-plant-as-coronavirus-crisis-continues/ |access-date=19 June 2022}}</ref><br />[[w:Buick GL6|Buick GL6]]
|-
| ||[[w:SAIC-GM-Wuling|SAIC-GM-Wuling]] (HQ plant)||[[w:Liuzhou|Liuzhou]], [[w:Guangxi Zhuang Autonomous Region|Guangxi Zhuang Autonomous Region]]||[[w:China|China]]|| [[w:SAIC-GM-Wuling|Wuling]] models<br />Engines||1982|| ||Operated by [[w:SAIC-GM-Wuling|SAIC-GM-Wuling]]. There are 2 vehicle production plants (East & West). SAIC & GM jointly created the joint venture with Wuling in 2002. The SAIC-GM-Wuling joint venture was originally owned 50.1% by SAIC, 34% by GM China, & 15.9% by Liuzhou Wuling Automobile Industry Co., Ltd. Since 2011, SAIC-GM-Wuling is now owned 50.1% by SAIC, 44% by GM China, & 5.9% by Liuzhou Wuling Motors Co., Ltd. Engine plant added in 2007.
Past models: [[w:Chevrolet Spark#Lechi (China)|Chevrolet Lechi (Spark)]], [[w:Baojun 630|Baojun 630]]
|-
| ||[[w:SAIC-GM-Wuling|SAIC-GM-Wuling]] [[w:Baojun|Baojun]] Base||Liudong New District, [[w:Liuzhou|Liuzhou]], [[w:Guangxi Zhuang Autonomous Region|Guangxi Zhuang Autonomous Region]]||[[w:China|China]]|| [[w:Baojun|Baojun]] models<br />Engines||2012|| ||Operated by [[w:SAIC-GM-Wuling|SAIC-GM-Wuling]]. SAIC & GM jointly created the joint venture with Wuling in 2002. The SAIC-GM-Wuling joint venture was originally owned 50.1% by SAIC, 34% by GM China, & 15.9% by Liuzhou Wuling Automobile Industry Co., Ltd. Since 2011, SAIC-GM-Wuling is now owned 50.1% by SAIC, 44% by GM China, & 5.9% by Liuzhou Wuling Motors Co., Ltd. Engine plant added in 2015.
Past models: [[w:Chevrolet Spark#Lechi (China)|Baojun Lechi]], [[w:Baojun 610|Baojun 610]], [[w:Baojun 630|Baojun 630]]
|-
| ||[[w:SAIC-GM-Wuling|SAIC-GM-Wuling]] Chongqing Branch||[[w:Chongqing|Chongqing]]||[[w:China|China]]|| [[w:SAIC-GM-Wuling|Wuling]] models<br />Engines||2014|| ||Operated by [[w:SAIC-GM-Wuling|SAIC-GM-Wuling]]. Since 2011, SAIC-GM-Wuling is owned 50.1% by SAIC, 44% by GM China, & 5.9% by Liuzhou Wuling Motors Co., Ltd.
|-
| ||[[w:SAIC-GM-Wuling|SAIC-GM-Wuling]] Qingdao Branch||[[w:Qingdao|Qingdao]], [[w:Shandong|Shandong]]||[[w:China|China]]|| [[w:SAIC-GM-Wuling|Wuling]] models<br />Engines||2000|| ||Operated by [[w:SAIC-GM-Wuling|SAIC-GM-Wuling]]. Originally founded in 1997 as [[w:Etsong Vehicle Manufacturing|Etsong Vehicle Manufacturing]]. SAIC-GM-Wuling took over the plant in 2005. Since 2011, SAIC-GM-Wuling is owned 50.1% by SAIC, 44% by GM China, & 5.9% by Liuzhou Wuling Motors Co., Ltd. Engine plant added in 2009.
|-
|J||[[w:SGMW Motor Indonesia|SGMW Motor Indonesia]]||[[w:Cikarang|Cikarang]], [[w:West Java|West Java]]||[[w:Indonesia|Indonesia]]|| [[w:Wuling Air EV|Wuling Air EV]]<br />[[w:Wuling Aira EV|Wuling Aira EV]]<br>[[w:Wuling Binguo|Wuling Binguo EV]]<br />[[w:Wuling Cloud EV|Wuling Cloud EV ]]<br />[[w:Wuling Almaz|Wuling Almaz]]<br />[[w:Wuling Alvez|Wuling Alvez]]<br />[[w:Wuling Eksion|Wuling Eksion]]<br>[[w:Wuling Confero|Wuling Confero]]<br />[[w:Wuling Cortez|Wuling Cortez]]<br />[[w:Wuling Darion|Wuling Darion]]<br>[[w:Wuling Formo|Wuling Formo]]<br />[[w:Wuling Mitra EV|Wuling Mitra EV]]<br>[[w:MG4 EV|MG4 EV]], [[w:MG ZS (crossover)|MG ZS EV]], [[w:MGS5 EV|MGS5 EV]]<br>Battery packs||2017|| ||100% owned and operated by [[w:SAIC-GM-Wuling|SAIC-GM-Wuling]]. Since 2011, SAIC-GM-Wuling is owned 50.1% by SAIC, 44% by GM China, & 5.9% by Liuzhou Wuling Motors Co., Ltd. In 2024, SGMW Motor Indonesia began producing MG models on behalf of PT SAIC Motor Indonesia. MG is owned by SAIC, a shareholder of SGMW.
Past models: [[w:Chevrolet Captiva#Second generation (CN202S; 2019)|Chevrolet Captiva]]
|}
== Current partner factories ==
{| class="wikitable sortable" style="font-size:90%"
!VIN !! Name !! City/State !! Country !! class="unsortable" | Products !! Opened !! Idled !! class="unsortable" | Comments
|-
| ||[[Azermash CP LLC]]||[[w:Hajiqabul|Hajiqabul]]||[[w:Azerbaijan|Azerbaijan]]||[[w:Chevrolet Cobalt#Second generation (2011)|Chevrolet Cobalt]], [[w:Chevrolet Lacetti|Chevrolet Lacetti]], [[w:Chevrolet Malibu#Ninth generation (2016)|Chevrolet Malibu]], [[w:Chevrolet Onix#Second generation (2019)|Chevrolet Onix]], [[w:Chevrolet Aveo (T200)|Chevrolet Nexia (T250)]], [[w:Chevrolet Tracker (2019)|Chevrolet Tracker]], [[w:Suzuki Carry#Daewoo Damas|Chevrolet Damas/Labo]] ||2017|| ||Built under contract by Azermash CP LLC for GM & UzAuto Motors.
|-
|A||[[w:GM Uzbekistan|GM Uzbekistan]]/[[w:UzAuto Motors|UzAuto Motors]]||[[w:Asaka, Uzbekistan|Asaka]], [[w:Andijan Region|Andijan Region]]||[[w:Uzbekistan|Uzbekistan]]||[[w:Chevrolet Cobalt#Second generation (2011)|Chevrolet Cobalt]], [[w:Chevrolet Lacetti|Chevrolet Lacetti]], [[w:Chevrolet Onix#Second generation (2019)|Chevrolet Onix]], [[w:Chevrolet Tracker (2019)|Chevrolet Tracker (2022-)]]||1996|| ||Originally established as Uz-DaewooAuto, a 50/50 joint venture between Daewoo Motor & the Uzbek government. Became GM Uzbekistan, a 25/75 joint venture between GM & state owned UzAvtosanoat in 2008. GM was bought out by the Uzbek govt. in 2019 & the company was renamed UzAuto Motors. Vehicles now built under license from GM by UzAuto Motors.
Previous models: [[w:Daewoo Tico|Daewoo Tico]], [[w:Chevrolet Spark#First generation (M100, M150; 1998)|Daewoo Matiz (M150)]], [[w:Daewoo Nexia|Daewoo Nexia]], [[w:Daewoo Nexia|Chevrolet Nexia]], [[w:Daewoo Gentra#Uzbekistan (2013–2015)|Daewoo Gentra]], [[w:Daewoo Damas|Daewoo Damas]], [[w:Daewoo Labo|Daewoo Labo]], [[w:Chevrolet Captiva#First generation (C100, C140; 2006)|Chevrolet Captiva]], [[w:Chevrolet Epica|Chevrolet Epica]], [[w:Chevrolet Aveo (T200)|Chevrolet Nexia 3]], [[w:Chevrolet Spark#Third generation (M300; 2009)|Chevrolet Spark (M300)]], [[w:Chevrolet Tacuma|Chevrolet Tacuma]], [[w:Chevrolet Trax|Chevrolet Tracker]], [[w:Chevrolet Spark#First generation (M100, M150; 1998)|Ravon Matiz]], [[w:Chevrolet Spark#Third generation (M300; 2009)|Ravon R2]], [[w:Chevrolet Aveo#Ravon Nexia R3|Ravon Nexia R3]], [[w:Chevrolet Cobalt#Second generation (2011)|Ravon R4]], [[w:Daewoo Gentra|Ravon Gentra R5]]
|-
| ||[[w:GM Uzbekistan|GM Uzbekistan]]/[[w:UzAuto Motors|UzAuto Motors]]||[[w:Pitnak|Pitnak]], [[w:Khorezm Region|Khorezm Region]]||[[w:Uzbekistan|Uzbekistan]]||[[w:Chevrolet Damas|Chevrolet Damas]]<br> [[w:Chevrolet Labo|Chevrolet Labo]] ||2014|| ||Was part of GM Uzbekistan, a 25/75 joint venture between GM & state owned UzAvtosanoat formed in 2008. GM was bought out by the Uzbek govt. in 2019 & the company was renamed UzAuto Motors. Vehicles now built under license from GM by UzAuto Motors. In 2021, a new press shop opened at the Pitnak plant.
Previous models: [[w:Chevrolet Orlando#First generation (J309; 2010)|Chevrolet Orlando]], [[w:Daewoo Damas|Daewoo Damas]], [[w:Daewoo Labo|Daewoo Labo]]
|-
| ||[[w:GM Uzbekistan|GM Uzbekistan]]/[[w:UzAuto Motors|UzAuto Motors]]||[[w:Tashkent|Tashkent]]||[[w:Uzbekistan|Uzbekistan]]||Repair of used cars ||2009||2019||Was part of GM Uzbekistan, a 25/75 joint venture between GM & state owned UzAvtosanoat formed in 2008. GM was bought out by the Uzbek govt. in 2019 & the company was renamed UzAuto Motors. Vehicles now built under license from GM by UzAuto Motors. Plant assembled SKD vehicles. SKD production ended in 2019. Plant is now used to repair & overhaul used cars acquired as trade-ins for new cars, which are then resold by UzAuto.
Previous models: [[w:Chevrolet Captiva#First generation (C100, C140; 2006)|Chevrolet Captiva]], [[w:Chevrolet Malibu#Eighth generation (2013)|Chevrolet Malibu]], [[w:Chevrolet Malibu#Ninth generation (2016)|Chevrolet Malibu]], [[w:Chevrolet Trax|Chevrolet Tracker (initial production from SKD)]]
|-
| ||[[w:GM Uzbekistan|GM Powertrain Uzbekistan]]/[[w:GM Uzbekistan|UzAuto Motors Powertrain]]||[[w:Tashkent|Tashkent]]||[[w:Uzbekistan|Uzbekistan]]||[[w:Daewoo S-TEC engine|1.2L & 1.5L DOHC I4 engines]]<br />[[w:GM E-Turbo engine|1.2L GM E-Turbo I3 engine]]<br />Engine components (crankshaft, block, heads)<br />Aluminum Foundry ||2011|| ||GM Powertrain Uzbekistan is a 52/48 joint venture between GM & state owned UzAvtosanoat. In 2019, the company was renamed UzAuto Motors Powertrain after UzAvtosanoat bought out GM's share of the joint venture. It now builds engines & components under license from GM.
|-
|0,4,7,8,9||[[w:Isuzu|Isuzu]] Fujisawa plant||[[w:Fujisawa, Kanagawa|Fujisawa, Kanagawa]]||[[w:Japan|Japan]]||[[w:Isuzu Elf|Chevrolet Low Cab Forward 4500 & 5500 diesel]] (2016-)<br />[[w:Isuzu N-Series|Isuzu N-Series]]<br />[[w:Isuzu F-Series|Isuzu F-Series]]||1961|| ||[[w:Isuzu|Isuzu]] plant. <br /> Previous models:<br /> [[w:Isuzu Gemini#In other markets|Buick Opel]] (1976-1979) [Plant Code: 8]<br />[[w:Chevrolet LUV|Chevrolet LUV]] (1972-1982) [Plant Code: 8]<br />[[w:Chevrolet Spectrum|Chevrolet Spectrum]] (1985-1988)<br> [Plant Code: 8 ('85-'87), 7 ('88)]<br />[[w:Chevrolet W-Series|Chevrolet W-Series]] (1986-2009)<br> [Plant Code: 8 ('86-'87), 7 ('88-'09)]<br />[[w:Geo Spectrum|Geo Spectrum]] (1989) [Plant Code: 7]<br />[[w:Geo Storm|Geo Storm]] (1990-1993) [Plant Code: 7]<br />[[w:GMC W-Series|GMC W-Series]] (1986-2009)<br> [Plant Code: 8 ('86-'87), 7 ('88-'09)]<br />[[w:Isuzu Faster#First generation (1972–1980)|Bedford KB25]]<br />[[w:Isuzu Faster#Second generation (1980–1988)|Bedford KB26/41]]<br />[[w:Opel Campo#Third generation (TF; 1988–2002)|Opel Campo/Bedford Brava/Vauxhall Brava]]<br />[[w:Holden Jackaroo#First generation (1981)|Holden Jackaroo (Gen 1)]]<br />[[w:Opel Monterey#Second generation (1991)|Opel/Vauxhall Monterey/Holden Jackaroo (Gen 2)/Monterey]]<br />[[w:Holden Rodeo|Holden Rodeo]] (1981-2002) (KB/TF)<br />[[w:Holden Piazza#First generation (JR120/130; 1980)|Holden Piazza]]<br />[[w:Holden Shuttle|Holden Shuttle]]<br />[[w:Isuzu I-Mark|Isuzu I-Mark]], [[w:Isuzu Impulse|Isuzu Impulse]], [[w:Isuzu Stylus|Isuzu Stylus]]
|-
| ||PACE (Planta Automotiva do Ceará=Ceará Automotive Plant)||[[w:Horizonte, Ceará|Horizonte, Ceará]]||[[w:Brazil|Brazil]]||[[w:Chevrolet Spark EUV|Chevrolet Spark EUV]] (2026-),<br /> [[w:Wuling Starlight S|Chevrolet Captiva EV]]||2025|| ||Assembled from semi-knockdown kits imported from China under contract for GM. Production for GM began on December 3, 2025 with the Spark EUV. Production for non-GM brands is also expected. The plant is the former [[w:Troller|Troller]] plant that was bought by Ford in 2007 and closed in 2021. The plant is now operated by Comexport.
|-
| ||[[SaryarkaAvtoProm]]/<br>Allur Automobile Plant||[[w:Kostanay|Kostanay]]||[[w:Kazakhstan|Kazakhstan]]||[[w:Chevrolet Cobalt#Second generation (2011)|Chevrolet Cobalt]], [[w:Chevrolet Onix#Second generation (2019)|Chevrolet Onix]], [[w:Chevrolet Tracker (2019)|Chevrolet Tracker]]||2017|| ||Built under contract by SaryarkaAvtoProm for GM & UzAuto Motors.
Past models: [[w:Chevrolet Malibu#Ninth generation (2016)|Chevrolet Malibu]], [[w:Chevrolet Aveo (T200)|Chevrolet Nexia]], [[w:Chevrolet Niva|Chevrolet Niva]], [[w:Suzuki Carry#Daewoo Damas|Chevrolet Damas/Labo]], [[w:Chevrolet Aveo (T200)|Ravon Nexia R3]]
|-
|S||[[w:Shyft Group|Shyft Group]] - Charlotte plant||[[w:Charlotte, Michigan|Charlotte, Michigan]]||[[w:United States|United States]]||[[w:Isuzu Elf|Chevrolet Low Cab Forward 3500/4500/5500 gas]] (2016-)<br />[[w:Isuzu F-Series|Chevrolet Low Cab Forward 6500XD & 7500XD]] (2018- & 2023-)<br />[[w:Isuzu N-Series|Isuzu N-Series gas]] (2012-)<br />[[w:Isuzu F-Series|Isuzu FTR/FVR]] (2018- & 2023-)||1961|| ||[[w:Shyft Group|Shyft Group]] plant. Built under contract for Isuzu and GM.
|}
== Former factories ==
{| class="wikitable sortable" style="font-size:90%"
! style="width:20px;"|VIN
! style="width:60px;"| Name
! style="width:20px;"| City/State
! style="width:20px;"| Country
! style="width:90px;" class="unsortable" | Products
! style="width:10px;"| Opened
! style="width:10px;"| Idled
! style="width:190px;" class="unsortable" |Comments
|-
| ||AC Electronics||[[w:Oak Creek, Wisconsin|Oak Creek, Wisconsin]]||[[w:United States|United States]]||Automotive Electronics; Avionics, precision guidance systems, & electro-mechanical devices for military use and space exploration (Apollo program) ||1948||1999||Located at 7929 S. Howell Ave. First known as GM's Electronics Division. In 1965, the Milwaukee Operations became known as AC Electronics Division of GM. In 1970, the division merged with Delco Radio and became known as Delco Electronics Division. Spun off with Delphi Automotive Systems (Delphi Electronics & Safety) in 1999. Closed by Delphi in 2008. Is now Drexel Town Square, a retail, commercial, residential and civic development.
|-
| ||[[w:ACDelco#AC Spark Plug Division|AC Spark Plug Division]]||[[w:Flint, Michigan|Flint, Michigan]]||United States||AC Spark Plugs||1929||1975||Located on Industrial Ave at Harriet St. Built in 1909. Champion Ignition Co. moved here from their original location on the 3rd floor of a Buick building on Hamilton Ave. that they used from 1908. This complex was expanded multiple times and was on both sides of Industrial Ave. with 2 overhead walkways connecting the 2 sides. Champion Ignition Co. changed its name to AC Spark Plug in 1922. After founder Albert Champion died in 1927, GM took over AC Spark Plug in 1929. It became a GM division in 1933. Production gradually moved to the Flint East complex until the Industrial Ave. complex closed in 1975. Demolished in 1975-76. Site later used by Buick for parking as it was next to the Buick City complex.
|-
| ||[[w:Flint East|AC Spark Plug Flint East]]||[[w:Flint, Michigan|Flint, Michigan]]||United States||Components (spark plugs, dashboard components such as instrument clusters, fuel system components, air/oil/fuel filters, and fuel pumps)||1929||1999||Located at 1300 North Dort Highway. (Now referred to as 2926 Davison Road, which is the north side instead of the west side of the property.) Purchased by AC Spark Plug in 1925. Plant previously belonged to [[w:Dort Motor Car Company|Dort Motor Car Company]], which went out of business in 1924. Initially produced all products other than spark plugs that were made by AC Spark Plug Co. After founder Albert Champion died in 1927, GM took over AC Spark Plug in 1929. It became a GM division in 1933. Production gradually moved from the old Industrial Ave. complex to the Flint East complex until the Industrial Ave. complex closed in 1975. Became known as Flint East in 1987, when AC took over the "Chevy in the Hole" complex from Chevrolet on Flint's west side, which became known as Flint West. Became AC Rochester in 1988 when AC Spark Plug Division merged with Rochester Products Division. AC Rochester initially had its world headquarters here, just as AC Spark Plug had before the merger. Subsequently, AC Rochester headquarters moved to the Great Lakes Technology Center in the old Flint Fisher Body plant. In 1994, AC Rochester merged with Delco Remy and became AC Delco Systems. Grouped under GM's Delphi Automotive Systems subsidiary in 1995. Spun off with [[w:Delphi Corporation|Delphi Corporation]] in 1999. GM supplied the UAW workers from 2007 under agreement with Delphi and the UAW. Closed by Delphi in 2013.
|-
| ||[[w:ACDelco#AC Spark Plug Division|AC Spark Plug]]||[[w:Sioux City, Iowa|Sioux City, Iowa]]||[[w:United States|United States]]||[[w:Throttle#Throttle body|Throttle Body Fuel Injection Systems]]||1981||1993||Located at 1805 Zenith Drive. Formerly a Zenith Radio Factory. Now the headquarters of Bomgaars Supply, Inc.
|-
| ||[[w:ACDelco#AC Spark Plug Division|AC Spark Plug]]||[[w:Wichita Falls, Texas|Wichita Falls, Texas]]||United States||AC Air Filters||1972||1999||Located at 8600 Interstate 44 Service Rd. Spun off with Delphi Automotive Systems in 1999. Closed by Delphi in 2008. Now owned by Panda Biotech.
|-
| ||[[w:ACDelco#AC Spark Plug Division|AC Spark Plug Overseas Corp. - Kirkby plant]]||[[w:Kirkby|Kirkby]], [[w:Merseyside|Merseyside]], [[w:England|England]]||[[w:United Kingdom|United Kingdom]]||Instrument panels, Gauges, Fuel pumps, Fuel/temperature senders, Oil pressure switches, Radiator caps, Thermostats||1958||?||Plant is near Liverpool. Located on Moorgate Road. Kirkby was originally part of the AC-Delco division of GM Ltd. When the Kirkby plant opened in 1958, production of fuel pumps, thermostats, and instruments was moved there from the Dunstable components plant. In 1979, Kirkby became aligned with AC Spark Plug in the US. In 1982, GM Ltd. was dissolved and the Kirkby plant became part of AC Spark Plug Overseas Corp., part of GM Overseas Corp.
|-
| ||[[w:ACDelco#AC Spark Plug Division|AC Spark Plug Overseas Corp. - Southampton plant]]||[[w:Southampton|Southampton]], [[w:Hampshire|Hampshire]], [[w:England|England]]||[[w:United Kingdom|United Kingdom]]||Air filter elements, Oil filters, Fuel filters, Catalytic converters||1952||?|| Located on West Bay Road in the New Dock area of Southampton. Originally opened in 1938 as a vehicle assembly plant making Chevrolets (See listing for "GM Ltd."). Plant acquired by GM Ltd. in 1951. Southampton was originally part of AC-Sphinx Plug Co., a division of GM Ltd. In 1952, AC-Sphinx Plug Co. was renamed AC-Delco division of GM Ltd. When the Southampton plant opened in 1952, production of automotive filters (air filters, fuel filters) was moved there from the Dunstable components plant. In 1979, Southampton became aligned with AC Spark Plug in the US. In 1982, GM Ltd. was dissolved and the Southampton plant became part of AC Spark Plug Overseas Corp., part of GM Overseas Corp.
|-
| ||Allison,<br> [[w:Allison Transmission|Allison Transmission]], Allison Gas Turbine||[[w:Indianapolis|Indianapolis]], Indiana||United States||Allison Transmissions,<br> Engines for airplanes & helicopters,<br> Bearings and Gears||1929||2007||Located at 4700 W. 10th St. Founded in 1915 as Speedway Team Co. In 1920, it was renamed Allison Engineering Co. Acquired by GM in 1929, it became the Allison Division of GM. GM began designing the CD-850 transmission for tracked military vehicles in 1941; the design was completed in 1944 and Allison was awarded the contract to manufacture the prototypes. In February 1945, General Motors formed the Allison Transmission Engineering Section. In 1946, GM divided the division into 2 sections: Aircraft Operations and Transmission Operations. In 1970, Allison Division merged with the Detroit Diesel Engine Division to become the Detroit Diesel-Allison Division. In 1983, the aviation turbine engine operations were separated out to form a separate division called the Allison Gas Turbine Division. In 1987, the transmission operations are separated out to form the Allison Transmission Division. Allison Gas Turbine was sold in a management buyout in 1993 becoming the Allison Engine Company. [[w:Allison Engine Company|Allison Engine Company]] was then sold in 1995 to [[w:Rolls-Royce Holdings|Rolls-Royce PLC]]. GM sold Allison Transmission in 2007 to private equity groups Carlyle Group & Onex Corp., becoming Allison Transmission Inc. Allison went public as Allison Transmission Holdings Inc. in 2012, trading on the New York Stock Exchange.
|-
| ||Cadillac Amsterdam Street plant||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||[[w:Cadillac|Cadillac]]s||1903||1920||Cadillac's first volume production plant. Located at 450 Amsterdam Street, at the intersection with Cass Avenue. Rebuilt in 1904 after a fire destroyed the original plant. This plant predated Cadillac being part of GM. Replaced by the Clark Street plant in 1921.
|-
|5 (Plant 2)<br /><br /> 6 (Plant 1)<br /><br />9 (Pre-1976)||Antwerp||[[w:Antwerp|Antwerp]]||[[w:Belgium|Belgium]]||[[w:Opel Astra|Opel Astra]]/[[w:Vauxhall Astra|Vauxhall Astra]]<br />[[w:Opel Astra#Astra H (A04; 2004)|Opel/Vauxhall Astra GTC & OPC/VXR (H)]]<br />[[w:Opel Astra#TwinTop|Opel/Vauxhall Astra TwinTop]]<br />[[w:Opel Astra#Saturn Astra|Saturn Astra]] (2008 & in Canada '09)<br />[[w:Holden Astra#Fourth generation (TS; 1998)|Holden Astra (TS)]]<br />[[w:Holden Astra#Fifth generation (AH; 2004)|Holden Astra (AH)]] ||1925||2010||Originally known as GM Continental SA, then as Opel Antwerp from 1994-2004, & finally as GM Belgium from 2004 on. The original plant was an ex-abbey on Fortuinstraat. In 1926, production moved to an old velodrome on the corner of St. Laureystraat & Haantjeslei. In 1929, production moved to a site in the port of Antwerp near the Albert dock. The site at the port was destroyed by bombing raids in World War II. Production temporarily moved back to the velodrome from 1946-1953. In 1953, a new plant opened on the Noorderlaan which would later come to be known as Plant 1. In 1967, a second plant opened about 6.2 miles (10 km) north of the Noorderlaan plant near the Churchill dock. This was called Plant 2. In August 1988, production was consolidated in Plant 2 and Plant 1 was used as a parts warehouse until 1992 and the property was then sold. Plant 2 ended production in December 2010. First vehicle off the line was a Chevrolet. Assembled Opel & Vauxhall cars, Bedford trucks and American GM brands (Chevrolet, Pontiac, Oldsmobile, Buick, & Cadillac) from CKD kits. Also built the [[w:Ranger (automobile)#Europe|Ranger]]. The plant finally closed its doors on December 17, 2010, about two days after last Opel car rolled off the assembly line. <br />Past models: [[w:Chevrolet Camaro (first generation)|Chevrolet Camaro]] (first generation from CKD kits)<br />[[w:Chevrolet Corvair|Chevrolet Corvair]] (from CKD kits supplied from Oshawa)<br />[[w:Opel Ascona|Opel Ascona]]<br />[[w:Opel Kadett|Opel Kadett]]<br />[[w:Opel Manta|Opel Manta]]<br />[[w:Opel Olympia|Opel Olympia]]<br />[[w:Opel Rekord|Opel Rekord]]<br />[[w:Opel Vectra|Opel Vectra]]<br />[[w:Vauxhall Cresta|Vauxhall Cresta]]<br />[[w:Vauxhall Velox|Vauxhall Velox]]<br />[[w:Vauxhall Victor|Vauxhall Victor]]
|-
| ||[[w:General Motors de Argentina|General Motors de Argentina]]||[[w:San Telmo, Buenos Aires|San Telmo]] and [[w:Barracas, Buenos Aires|Barracas]] in [[w:Buenos Aires|Buenos Aires]] & [[w:San Martín, Buenos Aires|San Martin]]||[[w:Argentina|Argentina]]||Chevrolet (cars and trucks) including [[w:Chevrolet 400|Chevrolet 400]], [[w:Chevrolet Chevy Malibu|Chevrolet Chevy]], & [[w:Chevrolet C/K|Chevrolet C/K]] <br />[[w:Chevrolet C/K (second generation)#Medium-duty trucks|Chevrolet C-50/C-60/C-70]]<br />[[w:Chevrolet/GMC B series|Chevrolet B-60 bus chassis]]<br /> Oldsmobile <br />[[w:Opel K 180|Opel K 180]]<br />[[w:Bedford TJ|Bedford TJ]]<br />[[w:Chevrolet 153 4-cylinder engine#Argentina|Chevrolet 153 4-cylinder]]<br />[[w:Chevrolet Turbo-Thrift engine|Chevrolet Turbo-Thrift engine]]<br />Bedford diesel engines||1925 (San Telmo)<br />1928 (Barracas)<br />1940 (San Martin plant)||1978 (San Martin plant)||Other GM brands manufactured included GMC, Opel, and Bedford trucks along with Pontiac, Oakland, Marquette, Buick, LaSalle, Cadillac, Opel, and Vauxhall passenger cars.<ref>{{cite web|url=https://history.gmheritagecenter.com/wiki/index.php/GM_Argentina|title=GM Argentina}}</ref> Also Frigidaire refrigerators.
|-
| ||[[w:Aymesa|Aymesa]]||[[w:Quito, Ecuador|Quito]]||[[w:Ecuador|Ecuador]]|| ||1973||1999 (Last GM production)|| First automotive assembler in Ecuador. GM bought 36.95% of AYMESA in 1982 & increased its stake to 45.9% in 1984. GM sold off its stake in 1999 and switched to using OBB as its Ecuadorian partner. Aymesa now assembles vehicles for Kia and Hyundai.
Past models: [[w:Opel Corsa#Corsa B (S93; 1993)|Chevrolet Corsa]]<br />[[w:Suzuki Cultus#First generation (1983)|Suzuki Forsa]]<br />[[w:Suzuki Cultus#Second generation (1988)|Suzuki Forsa II/Chevrolet Swift]]<br />[[w:General Motors T platform (1973)|Chevrolet San Remo]]<br />Aymesa Gacela<br />Aymesa Condor<br />[[w:Bedford HA#The BTV|Aymesa Andino]]<br />Aymesa Amigo
|-
|3 (since 1993)<br />A (before 1993)||Azambuja||[[w:Azambuja|Azambuja]]||[[w:Portugal|Portugal]]||[[w:Opel Combo#Kadett Combo (Combo A; 1986)|Opel Kadett Combo A/Bedford & Vauxhall Astravan & Astramax]]<br />[[w:Opel Combo#Combo B (1993-2001)|Opel/Vauxhall/Holden Combo]] B<br />[[w:Opel Combo#Combo C (2001-2012)|Opel/Vauxhall/Holden Combo]] C||1963||2006||Past models:<br />[[w:Opel Corsa#Corsa Van|Opel Corsavan]]<br /> [[w:Opel Kadett|Opel Kadett]]<br />[[w:Opel Rekord|Opel Rekord]]<br />[[w:Vauxhall Victor|Vauxhall Victor]]<br />[[w:Vauxhall Viva|Vauxhall Viva]]<br />[[w:Bedford HA#The BTV|Amigo]]<br />[[w:Bedford CF|Bedford CF]]<br />[[w:Bedford TJ|Bedford TJ]]<br />[[w:Bedford TK|Bedford TK]]<br />Various Opel, Vauxhall, & Bedford models.
|-
|B <br />(1953-1964 [[w:Chevrolet|Chevrolet]]<br />and 1964 [[w:Pontiac (automobile)|Pontiac]]<br /> and 1965-2005)<br /><br />14 (1935-1952 [[w:Chevrolet|Chevrolet]]) <br /><br /> 7 (1964 [[w:Buick|Buick]])||[[w:Baltimore Assembly|Baltimore Assembly]]||[[w:Baltimore|Baltimore]], [[w:Maryland|Maryland]]||United States||[[w:Chevrolet Astro|Chevrolet Astro]] (1985-2005)<br />[[w:Chevrolet Astro|GMC Safari]] (1985-2005) ||1935||2005||Located at 2122 Broening Highway. Production began in March 1935 (March 11 for trucks and March 26 for cars). Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Baltimore Assembly began making Pontiac and Buick passenger cars for 1964. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. Baltimore Assembly joined the GM Assembly Division in 1968. During WWII, the Chevrolet side of the plant operated as a military parts depot where parts were received, processed, and packaged for shipment around the world. It also built 2,650 [[w:GMC CCKW 2½-ton 6×6 truck|GMC CCKW 6x6 trucks]]. The Fisher Body side of the plant became part of GM's Eastern Aircraft Division and assembled the rear fuselage, tail assembly, & all control surfaces for Grumman carrier-based aircraft. Car production ended on March 31, 1984. Converted to a Truck and Bus Group assembly plant for 1985. Production restarted in August 1984. Closed on May 13, 2005. Baltimore Assembly produced over 12 million vehicles. Demolished. Now the Chesapeake Commerce Center and an Amazon distribution center.<br />
Past models:<br /> [[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Master|Chevrolet Master]]<br />[[w:Chevrolet Deluxe|Chevrolet Deluxe]]<br />[[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]]<br />[[w:Buick Gran Sport|Buick GS]] (1965-1968),<br /> [[w:Buick Skylark|Buick Skylark]] (1964-68),<br /> [[w:Buick Special|Buick Special]] (1964-67), [[w:Chevrolet 150|Chevrolet 150]] (1953-57), [[w:Chevrolet 210|Chevrolet 210]] (1953-57), [[w:Chevrolet AK Series|Chevrolet AK Series]], [[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1947-1955), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1963), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-1963), [[w:Chevrolet C/K|Chevrolet C/K]] (1960-1980), [[w:Chevrolet Chevelle|Chevrolet Chevelle]] (1964-1977), [[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958), [[w:Chevrolet El Camino|Chevrolet El Camino]] (1959-1960, 1964-1977), [[w:Chevrolet Impala|Chevrolet Impala]] (1958-1963), [[w:Chevrolet Malibu#Fourth generation (1978)|Chevrolet Malibu]] (1978-1983), [[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1970-1984), [[w:Chevrolet Nomad|Chevrolet Nomad]] (1955-1957), [[w:Chevrolet Suburban|Chevrolet Suburban]] (1957, 1962, 1964-1966), [[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959), [[w:Chevrolet C/K (second generation)|GMC C/K (Action Line)]] (1967-1972), [[w:Chevrolet C/K (third generation)|GMC C/K (Rounded Line)]] (1973-1980), [[w:GMC Sprint|GMC Sprint]] (1971-1977), [[w:Pontiac Bonneville#Seventh generation (1982–1986)|Pontiac Bonneville]] (1983-1984), [[w:Pontiac Grand Prix#Fifth generation (1978–1987)|Pontiac Grand Prix]] (1983-1984), [[w:Pontiac GTO|Pontiac GTO]] (1964-1970), [[w:Pontiac LeMans|Pontiac LeMans]] (1964-1970, 1978-1981), [[w:Pontiac Tempest|Pontiac Tempest]] (1964-1970)
|-
| ||[[w:Baltimore Transmission|Baltimore Transmission]]||[[w:White Marsh, Maryland|White Marsh]], [[w:Maryland|Maryland]]||United States||Allison 1000 Series transmissions: [[w:Chevrolet Silverado|Silverado HD]], [[w:GMC Sierra|Sierra HD]]<br />Hybrid 2-mode transmissions ([[w:Global Hybrid Cooperation|2ML70]]): [[w:Chevrolet Tahoe#Third generation (2007)|Chevrolet Tahoe Hybrid]], [[w:Chevrolet Tahoe#Third generation (2007)|GMC Yukon Hybrid]], [[w:Cadillac Escalade#Hybrid|Cadillac Escalade Hybrid]], [[w:Chevrolet Silverado#Second-generation Silverado / third-generation Sierra (GMT900; 2007)|Chevrolet Silverado Hybrid]], [[w:Chevrolet Silverado#Second-generation Silverado / third-generation Sierra (GMT900; 2007)|GMC Sierra Hybrid]]<br />Electric motor (MME) & final-drive unit (1ET35) for [[w:Chevrolet Spark#Spark EV|Chevy Spark EV]]<br />Torque converters for 6-speed rwd automatic transmissions||2000||2019||Located at 10301 Philadelphia Road. Originally part of Allison Transmission. Became a GM Powertrain facility in 2004. Name changed to Baltimore Operations in 2012 with the addition of the Electric Motor Plant built next to the existing Transmission Plant. Closed in 2019.<ref>{{Cite web|url=https://gmauthority.com/blog/2019/04/gm-baltimore-employees-irate-over-plant-closure/|title = GM Baltimore Employees Irate over Plant Closure|author=Anthony Alaniz|publisher=GMAuthority.com|date = 19 April 2019}}</ref> Now called White Marsh Interchange Park, a complex of 9 new one-story buildings of office and warehouse space that replaces the previous GM plant which has been demolished.
|-
|T||[[w:Bedford Dunstable plant|Bedford Dunstable plant]]||[[w:Dunstable|Dunstable]], [[w:Bedfordshire|Bedfordshire]], [[w:England|England]]||[[w:United Kingdom|United Kingdom]]||[[w:Bedford Vehicles|Bedford trucks and buses]] including:<br> [[w:Bedford S type|Bedford S series]]<br />[[w:Bedford TA|Bedford TA/TD]]<br />[[w:Bedford TJ|Bedford TJ]]<br />[[w:Bedford TK|Bedford TK/KM]]<br />[[w:Bedford TL|Bedford TL]]<br />[[w:Bedford TM|Bedford TM]]<br />[[w:Bedford SB|Bedford SB]]<br />[[w:Bedford VAL|Bedford VAL]]<br />[[w:Bedford VAM|Bedford VAM]]<br />[[w:Bedford VAS|Bedford VAS]]<br />[[w:Bedford Y series|Bedford Y series]]<br />Bedford gas & diesel engines||1942 (for wartime production)<br><br> 1955 (for civilian production)||1987||Was located on Boscombe Road. Bedford truck and bus production was moved to Dunstable from Luton in 1955. GM sold the Bedford heavy truck business to AWD Trucks in 1987. AWD Trucks went bankrupt in 1992. Parts of the site were demolished in 1993. More was demolished in 1997. The remainder was demolished in 2005. The [[w:Commer|Commer]] plant was located across Boscombe Road in Dunstable from the 1960's.
|-
| ||Bombay||[[w:Bombay|Bombay]], [[w:Maharashtra|Maharashtra]]||[[w:India|India]]||[[w:Chevrolet|Chevrolet]] cars, trucks, & buses||1928||1954||The first automobile assembly plant in India. The original GM India Ltd. was closed in 1954.
|-
|12 (Buffalo Assembly from 1928)||[[w:Buffalo Assembly|Buffalo Assembly]]/<br />Buffalo Gear & Axle||[[w:Buffalo, New York|Buffalo, New York]]||United States||[[w:Chevrolet Superior|Chevrolet Superior]]<br />[[w:Chevrolet Series AA Capitol|Chevrolet Series AA Capitol]]<br />[[w:Chevrolet Series AB National|Chevrolet Series AB National]]<br />[[w:Chevrolet Series AC International|Chevrolet Series AC International]]<br />[[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]]<br />[[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]]<br />[[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]]<br />[[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]]<br />[[w:Chevrolet Master|Chevrolet Master]]<br />[[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Suburban|Chevrolet Suburban]]<br /> Axles, drivetrain components||1923||1994||Located at 1001 E. Delavan Ave. Built cars until World War II & was then converted to make axles. Operation was renamed Saginaw Gear and Axle in 1984. Sold to [[w:American Axle|American Axle]] in 1994. All operations ended in 2007 & the factory closed. Called the Historic American Axle Building. Purchased by Viridi in 2018.
|-
|H (1965-1999)<br /><br /> 1 (1938-1964 [[w:Buick|Buick]])||[[w:Buick City|Buick City]]||[[w:Flint, Michigan|Flint, Michigan]]||United States||[[w:Buick LeSabre|Buick LeSabre]] (1959-1999)<br />[[w:Buick Park Avenue|Buick Park Avenue]] (1994-1996)<br />[[w:Oldsmobile 88|Oldsmobile 88]] (1987, 1989-1995)<br />[[w:Pontiac Bonneville#Ninth generation (1992–1999)|Pontiac Bonneville]] (1996-1999)||1904||1999||This was Buick's home plant. It predated the founding of GM in 1908. This is the part of the Buick factory complex south of Leith St. stretching south to E. Hamilton Ave. The complete complex, including both North and South portions totals 412,947 acres. The original factory was at one time the largest in the world and was completely vertically integrated, making nearly every component within the complex. During WWII, Buick built [[w:M18 Hellcat|M18 Hellcat]] tanks & [[w:M39 armored utility vehicle|M39 armored utility vehicles]] here. The plant was converted to build unibody, fwd cars for 1986 instead of the previous body-on-frame, rwd cars. The modernized plant was renamed Buick City. The factory closed in June 1999. Last car built was a 1999 Buick LeSabre. Demolished by 2002. The site of Buick's administration building, 902 E. Hamilton Ave., is now a seating plant owned by Lear Corp., which opened in 2018. It supplies seats to GM's nearby Flint Truck Assembly Plant as well as GM's Fort Wayne Assembly Plant in Indiana. A large piece of the property is now being redeveloped as Flint Commerce Center.<br> Past models: [[w:Buick Centurion|Buick Centurion]] (1971–1973),<br> [[w:Buick Century|Buick Century]] (1936-42, 1954-1958, 1973-1981), [[w:Buick Electra|Buick Electra]] (1959-1984), [[w:Buick Estate|Buick Estate]] (1940-64, 1970-76), [[w:Buick GS|Buick GS]] (1965-1972), [[w:Buick Invicta|Buick Invicta]] (1959-1963), [[w:Buick Limited|Buick Limited]] (1936-42, 1958), [[w:Buick Regal|Buick Regal]] (1973-1985), [[w:Buick Riviera|Buick Riviera]] (1963-1978), [[w:Buick Roadmaster|Buick Roadmaster]] (1936-58), [[w:Buick Skylark#1953–1954|Buick Skylark]] (1953-1954), [[w:Buick Skylark|Buick Skylark]] (1961-72), [[w:Buick Special|Buick Special]] (1936-58, 1961-69), [[w:Buick Sport Wagon|Buick Sport Wagon]] (1964-1971), [[w:Buick Super|Buick Super]] (1940-1958), [[w:Buick Wildcat|Buick Wildcat]] (1963-1970) [[w:Marquette (automobile)#Buick brand|Marquette]] (1930), [[w:Chevrolet Caprice#Third generation (1977–1990)|Chevrolet Caprice]] (1984-1985), [[w:Chevrolet Impala#Sixth generation (1977–1985)|Chevrolet Impala]] (1984-1985),<br> [[w:Oldsmobile Cutlass Supreme#Fourth generation (1978–1988)|Oldsmobile Cutlass Supreme]] (1985).
|-
| ||Cadillac Stamping||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||Stamped body parts for Cadillac||1956||1987||Located at 9501 Conner St. Originally built by Clayton & Lambert Manufacturing Company for their Knodell Division. Sold to Hudson Motor Car Company in 1925. Made bodies for Hudson. Bought by GM in 1956. Demolished in 2021. Site used by [[w:Lear Corp.|Lear Corp.]] to make seats to supply GM's Factory Zero plant.
|-
| ||[[w:Cartercar|Cartercar]]||[[w:Pontiac, Michigan|Pontiac]], [[w:Michigan|Michigan]]||United States||Cartercar automobiles||1909||1915||Located on Franklin Rd. where Franklin turns into Linfere St. which then intersects with Brush St. This factory previously belonged to Pontiac Spring & Wagon Works. Cartercar moved into this factory in 1908. Cartercar was purchased by GM on October 26, 1909. Cartercar was known for its [[w:Friction drive|friction drive transmission]]. GM closed Cartercar in 1915. There was then talk that GM would build a 6-cylinder Oakland model at this factory but it doesn't seem to have ever happened. GM sold the factory to Olympian Motors Company in 1917, which built Olympian cars there from 1917-1919. In 1920, the factory was sold to Friend Motors Corporation. Initially, Friend Motors Corporation continued production of Olympian cars and then switched to production of new Friend cars in 1921 but production ended with less than 50 cars built and Friend Motors went out of business. In 1922, Friend Motors owner Otis Friend filed for bankruptcy and factory ownership was transferred to Gotham National Bank in a foreclosure sale. The next occupant of the plant was the Wolverine Manufacturing Company which built furniture. Later, it was used as an agricultural supply warehouse. Most of the complex is gone but one building remains at 20 Franklin Rd. It was last occupied by House of Bedrooms, a furniture store. One side of the building still says "The Wolverine" at the top. The other side that faces Brush St. still says "Pontiac Spring & Wagon Works" right under what were the highest row of windows.
|-
| ||Chevrolet Gear & Axle||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||Axles, gears, other components||1919||1994||Located at 1840 Holbrook Ave. Absorbed the former Northway engine plant on Holbrook Ave. in 1926 when Northway was liquidated by GM. Straddles the border of [[w:Detroit|Detroit]] and [[w:Hamtramck, Michigan|Hamtramck, Michigan]]. Sold to [[w:American Axle|American Axle]] & Manufacturing Inc. in 1994. Closed in 2012, demolished in 2013.
|-
| ||Fisher Body - Chicago Metal Fabrication||[[w:Willow Springs, Illinois|Willow Springs, Illinois]]||United States||Stampings (such as floorpans) for GM vehicles||1953||1989||Located at 79th Street and Willow Springs Road. Buick produced J65-B-3 jet engines here for the [[w:Republic F-84F Thunderstreak|Republic F-84F Thunderstreak]]/RF84-F Thunderflash for use in the Korean War. Plant was associated with Buick-Oldsmobile-Cadillac Group but made body parts for all 5 of GM's passenger car divisions. Sold to [[w:United Parcel Service|UPS]].
|-
| ||[[w:General Motors de Chile|General Motors de Chile]]||[[w:Arica|Arica]]||[[w:Chile|Chile]]||[[w:Isuzu Faster#Second generation (1980–1988)|Chevrolet LUV]]<br />[[w:Isuzu Faster#Third generation (TF; 1988–2002)|Chevrolet LUV (TF)]]<br />[[w:Isuzu Faster#South America 2|Chevrolet Grand LUV (TF)]]<br />[[w:Isuzu D-Max#First generation (RA, RC; 2002)|Chevrolet D-Max]]||1968<br>1974||1971<br>2008||Originally belonged to Alberto Avayú y Cía. S.A.I.C. (part of Empresas Indumotora) which built vehicles under license for GM beginning in 1960. Avayú built the [[w:Chevrolet Chevy II / Nova|Chevrolet Chevy II / Nova]], [[w:Chevrolet C/K (first generation)|Chevrolet C-1434]], [[w:Opel Rekord|Opel Rekord]], [[w:Opel Rekord|Opel Furgón (van)]]. GM bought the plant in 1968. Built [[w:Chevrolet Chevy II / Nova|Chevrolet Chevy II / Nova]] & [[w:Chevrolet C/K (second generation)|Chevrolet C10]]. GM left Chile at the end of 1971 but returned in 1974. Past models: [[w:Chevrolet C/K (third generation)|Chevrolet C-10 and C-30]], [[w:Chevrolet C/K|Chevrolet C/K]] medium duty truck, [[w:Chevrolet Chevette#Latin America|Brazilian Chevrolet Chevette]], and Japanese [[w:Isuzu Aska#South America (Chile, Ecuador)|Chevrolet Aska]]
|-
| ||Fisher Body - Cleveland Division||[[w:Cleveland|Cleveland]], [[w:Ohio|Ohio]]||United States||Bodies for GM vehicles||1921||1983||Located at Coit Road and E. 140th Street. Founded as Fisher Body Ohio Co. GM bought 60% of Fisher Body in 1919 and the remaining 40% in 1926. Began by building bodies for Chandler, Cleveland (a subsidiary of Chandler), Chrysler, and the Oakland & Chevrolet divisions of GM. After 1926, it only made bodies for GM. In 1936, the plant switched from making whole bodies to doing metal trim and fabrication due to a decrease in demand for cars due to the Depression. Production of auto bodies resumed after World War II. Built bodies for low-volume models like the 55-57 Chevy Nomad and convertible models. In the 1970's, it built large stamping dies and upholstery & trim sets. Closed in August 1983 as a metal fabrication plant.
|-
| ||[[w:Cleveland Diesel Engine Division|Cleveland Diesel Engine Division]]||[[w:Cleveland|Cleveland]], [[w:Ohio|Ohio]]||United States||Heavy-duty diesel engines for locomotives, marine use (ships and submarines), and stationary use||1930||1962||Founded by Alexander Winton, company began operation in Nov. 1912 as the Winton Gas Engine & Mfg. Co. at 2116 W. 106th St. Renamed the Winton Engine Works in 1916 and later as the Winton Engine Company. GM bought Winton Engine Co. on June 20, 1930 and renamed it Winton Engine Corp. on June 30, 1930. In 1938, it was renamed Cleveland Diesel Engine Division. In January 1941, locomotive engine development and production was transferred to GM's Electro-Motive Division. Marine and stationary diesel engines were still handled by Cleveland Diesel Engine Division. In the 1950s, Cleveland Diesel Engine expanded with the acquisition of plants at 2160 W. 106th St. and 8200 Clinton Rd. The advent of nuclear-powered submarines in the 1950's reduced the US Navy's need for the large diesel engines produced by Cleveland Diesel and in 1962, GM closed down the division and transferred any remaining engine production to Electro-Motive Division's La Grange plant in McCook, Illinois.
|-
| ||[[w:GM Colmotores|GM Colmotores]]||[[w:Bogotá|Bogotá]]||[[w:Colombia|Colombia]]||Products from [[w:GM do Brasil|GM do Brasil]]: [[w:Chevrolet Onix#First generation (2013)|Chevrolet Joy]]
<br />Products from [[w:Isuzu|Isuzu]]: [[w:Isuzu Forward|Chevrolet F-Series Bus]], [[w:Isuzu Forward|Chevrolet F-Series truck]], [[w:Isuzu Elf|Chevrolet N-Series Bus]], [[w:Isuzu Elf|Chevrolet N-Series truck]], Chevrolet LV-series Bus
||1979||2024||Founded in 1956 as Colmotores, production began in 1962 with the [[w:Austin Motor Company|Austin]] brand, then switched to the [[w:Dodge|Dodge]] brand in 1965 when Chrysler took a 60% stake in what was now Colmotores-Chrysler. GM took over Colmotores in 1979 (Chrysler was dropped from the company name at this point). Chevrolet truck production began in 1980. Chevrolet car production began in 1982. Colmotores became GM Colmotores in 1991. Closed in April 2024.<ref>{{Cite web|url=https://gmauthority.com/blog/2024/04/gm-shutting-down-manufacturing-operations-in-colombia-and-ecuador/|title = GM Shutting Down Manufacturing Operations In Colombia And Ecuador|author=Deivis Centeno|publisher=GMAuthority.com|date = April 29, 2024}}</ref><ref>{{Cite web|url=https://www.americaeconomia.com/en/business-industries/general-motors-announces-end-car-manufacturing-operations-colombia-and-ecuador/|title = General Motors announces the end of car manufacturing operations in Colombia and Ecuador|publisher=AmericaEconomia.com|date = April 26, 2024}}</ref>
Past products from [[w:Chevrolet|Chevrolet]]: [[w:Chevrolet C/K#Third generation (1973–1991)|Chevrolet C-10]], [[w:Chevrolet C/K#Third generation (1973–1991)|Chevrolet C-30]], [[w:Chevrolet Celebrity|Chevrolet Celebrity]], [[w:Chevrolet Cruze#First generation (J300; 2008)|Chevrolet Cruze]], [[w:Chevrolet Kodiak|Chevrolet Kodiak]], [[w:GMC Brigadier|Chevrolet Brigadier/Super Brigadier]]<br />Past products from [[w:GM do Brasil|GM do Brasil]]: [[w:Chevrolet Chevette#Latin America|Chevrolet Chevette]], [[w:Chevrolet Cobalt#Second generation (2011)|Chevrolet Cobalt]], [[w:Opel Ascona#Chevrolet Monza|Chevrolet Monza]]<br />Past products from [[w:Isuzu|Isuzu]]: [[w:Isuzu Faster|Chevrolet LUV]], [[w:Isuzu Trooper#First generation (1981–1991)|Chevrolet Trooper]]<br />Past products from [[w:Suzuki|Suzuki]]: [[w:Suzuki Cultus#First generation (1983)|Chevrolet Sprint]] (note: this is the same name as the one that was sold in the U.S. and Canada in the 80's), [[w:Suzuki Cultus#Second generation (1988)|Chevrolet Swift]], [[w:Suzuki Alto#Fifth generation (1998)|Chevrolet Alto]], [[w:Suzuki Cultus Crescent|Chevrolet Esteem]], [[w:Suzuki Jimny#Third generation (1998)|Chevrolet Jimny]], [[w:Suzuki Jimny#Second generation (1981)|Chevrolet Samurai]], [[w:Suzuki Solio#Predecessor: Wagon R-Wide (MA61S/MB61S; 1997)|Chevrolet Wagon R+]]<br />Past products from [[w:Opel|Opel]]: [[w:Opel Corsa|Chevrolet Corsa]]<br />Past products from [[w:GM Korea|Daewoo/GM Korea]]: [[w:Daewoo Matiz#Second generation (M200, M250; 2005)|Chevrolet Spark]], [[w:Daewoo Matiz#Third generation (M300; 2009)|Chevrolet Spark GT]], [[w:Daewoo Lacetti|Chevrolet Optra]], [[w:Daewoo Kalos|Chevrolet Aveo]]<br />Products from [[w:SAIC-GM|SAIC-GM]]: [[w:Chevrolet Sail#Second generation (2010)|Chevrolet Sail]]
|-
| ||Constantine Transmission||[[w:Constantine, Michigan|Constantine, Michigan]]||United States||Automatic Transmissions||Between 1977 and 1980||Between 1987 and 1994|| Part of GM St. Joseph County Operations & GM Hydramatic Division.
|-
| ||Danville Foundry||[[w:Danville, Illinois|Danville, Illinois]]||United States||[[w:Casting|Iron castings]]||1943||1995|| Was part of GM's Central Foundry Division. Leased by [[w:Defense Plant Corporation|Defense Plant Corporation]] to pour castings for military equipment during [[w:World War II|World War II]]. Also supplied castings to Ford, Chrysler, and AMC.
|-
| ||Delco Chassis||[[w:Livonia, Michigan|Livonia, Michigan]]||United States||Bumpers||1953||1998||Site bought by GM in 1953. Located at 12950 and 13000 Eckles Road. Buildings demolished in 2001. Redeveloped into multi-tenant commercial use. One of the tenants is Amazon.
|-
| ||[[Delco Moraine NDH]] Dayton North (NDH=New Departure Hyatt)||[[w:Dayton, Ohio|Dayton, Ohio]] (Needmore Rd.)||United States||Master Cylinders/Brake Pads/Brake Calipers/ABS Assemblies||1965||1999||Located at 3100 Needmore Road. Spun off with [[w:Delphi Automotive|Delphi]] in 1999. Closed by Delphi in 2008. Demolished.
|-
| ||[[Delco Moraine NDH]] Dayton South (NDH=New Departure Hyatt)||[[w:Dayton, Ohio|Dayton, Ohio]] (Wisconsin Blvd.)||United States||Engine Bearings/Master Cylinders/Brake Pads/Brake Calipers/ABS Assemblies||1936||1999||Located at 1420 Wisconsin Boulevard. Delphi Chassis Systems. Spun off with [[w:Delphi Automotive|Delphi]] in 1999. Demolished in 2003.
|-
| ||[[Delco Moraine NDH]] (NDH=New Departure Hyatt)||[[w:Sandusky, Ohio|Sandusky, Ohio]]||United States||Wheel Bearings & Wheel Bearing Assemblies||1946||1999||Located at 2509 Hayes Ave. Transferred to Delphi in 1995 which was then spun off in 1999, later sold to Hephaestus Holdings Inc. (HHI, Inc.), through its subsidiary Kyklos Bearing International (KBI) in 2008. HHI's parent, KPS Capital Partners, sold HHI to American Securities LLC in 2012. American Securities combined HHI with Metaldyne, which it also acquired in 2012, to form Metaldyne Performance Group (MPG) in 2014. Metaldyne closed the plant in 2017 when it exited the wheel bearing business.
|-
| ||[[Delco Products]]||[[w:Kettering, Ohio|Kettering, Ohio]]||United States||Shock Absorbers, Struts, Impact Absorbers, Electric Motors, Windshield Wiper Assemblies||1957||1999||Located at 2555 Woodman Dr. (Administrative offices were at 2000 Forrer Blvd.) Spun off with Delphi Automotive Systems in 1999. A large portion of the site has been used by [[w:Tenneco|Tenneco Inc.]] since 2008.
|-
| ||[[Delco Products Overseas Corp.]]||[[w:Dunstable|Dunstable]], [[w:Bedfordshire|Bedfordshire]], [[w:England|England]]||[[w:United Kingdom|United Kingdom]]||Windshield wiper motors, Wiper/washer units, Heater blower motors, Cooling fan motors, Ignition coils, Distributors, etc.||1934|| ?||Located on High Street North. In 1923, AC Sphinx Sparking Plug Co., Ltd. was created by a 50/50 merger of the British branch of AC Spark Plug Co. and the Sphinx Manufacturing Co., a British spark plug manufacturer based in Birmingham. When AC Spark Plug founder Albert Champion died in 1927, AC Sphinx became wholly owned by AC Spark Plug Co. of Flint, MI. GM was already the major shareholder in AC Spark Plug and took it over completely in 1933, including AC Sphinx in the UK. AC Sphinx Sparking Plug Co., Ltd. moved to Dunstable from their original site in Birmingham beginning in 1934. The transfer to Dunstable was completed in 1936 and the Birmingham plant was relinquished. Dunstable made spark plugs as well as many other automotive components. In 1946, GM Ltd. acquired AC Sphinx as well as Delco-Remy and Hyatt Ltd. from parent GM in the US. In 1947, AC Sphinx was renamed AC-Sphinx Plug Co., a division of GM Ltd. In 1952, AC-Sphinx Plug Co. was renamed AC-Delco division of GM Ltd. When the Southampton plant was added in 1952, production of automotive filters (air filters, fuel filters) was moved there from Dunstable. When the Kirkby plant was added in 1958, production of fuel pumps, thermostats, and instruments was moved there from Dunstable. In 1979, Dunstable became aligned with Delco Products in the US. In 1982, GM Ltd. was dissolved and Dunstable became Delco Products Overseas Corp., part of GM Overseas Corp.
|-
| ||[[w:Delco Remy|Delco Remy]]||[[w:Anaheim, California|Anaheim, California]]||United States||Batteries||1954||1999||Known as Plant 13. Located at 1201 N. Magnolia St. Supplied batteries to GM's California assembly plants like Fremont, Southgate and Van Nuys and to the West Coast aftermarket. Spun off with Delphi Automotive Systems in 1999. Closed by Delphi in 2005. Demolished. Is now Northgate Gonzalez Market.
|-
| ||[[w:Delco Remy|Delco Remy]]||[[w:Anderson, Indiana|Anderson, Indiana]]||United States||Starters, Generators, HEI Ignition, DIS Ignition, Switches, Magnets||1906||1994/1999|| The Heavy Duty Systems unit and a portion of the Automotive Systems unit (passenger car cranking motors) were spun off as [[w:Remy International|Delco Remy International]] in 1994, which was renamed [[w:Remy International|Remy International]] in 2004. Delco Remy International closed all manufacturing in Anderson in 2003. These parts of Delco Remy (the parts not spun off into Remy International) - Ignition (Plant 20) and Generator (Plant 11) products along with the Engineering Center (Plant 18) and Tooling (Plant 16) - merged with AC Rochester in 1994 to form AC Delco Systems. AC Delco Systems became part of GM's Delphi Automotive Systems subsidiary in 1995. Spun off with Delphi Automotive Systems in 1999. Delphi has since closed all 4 facilities in Anderson. Plant 11 closed in 2005 & was demolished in 2006. Plant 16 (2316 Jefferson St.) was sold in 2011 ERTL Enterprises & is now used by multiple businesses. Plant 18 (2900 South Scatterfield Road) closed in 2003 & was turned over to the city Of Anderson in 2006. Plant 20 (2812 E 38th St.) closed in 2007 & is now a distribution center for Sutong Tire Resources, a Chinese tire importer. Plant 45, at 6435 South Scatterfield Road, was the Magnequench plant that produced rare earth neodymium magnets. That business is now owned by NEO Material Technologies of Toronto, Ontario, Canada but the plant itself is now owned by Home Design Products, which makes plastic chairs and other products.
|-
| ||[[w:Delco Remy|Delco Remy]]||[[w:Bloomfield, New Jersey|Bloomfield, New Jersey]]||United States||Batteries||1936||1945||Located on 55 La France Ave. During WWII, became part of GM's Eastern Aircraft Division from 1942 making wiring harnesses, hydraulic tubing and assemblies, and ammunition boxes for the Avenger bombers & Wildcat fighters made by Eastern Aircraft. After WWII, it was replaced by the New Brunswick Battery Plant as it wasn't considered economically practical to convert back to battery production. Bloomfield produced 8 million batteries for Delco Remy. In 1950, the plant was sold to General Plastics for doing fluoropolymer coating. General Plastics and the building still exist today.
|-
| ||[[w:Delco Remy|Delco Remy]]||[[w:Fitzgerald, Georgia|Fitzgerald, Georgia]]||United States||Batteries||1973||1999||Known as Plant 22. Located at 342 Perry House Road. Supplied batteries to GM's Georgia assembly plants like Lakewood and Doraville and to the regional aftermarket. Spun off with Delphi Automotive Systems in 1999. Delphi sold its battery business to Johnson Controls in in July 2005 but the Fitzgerald plant continued supplying batteries to Johnson Controls through 2007. Closed by Delphi in 2007. Demolished.
|-
| ||[[w:Delco Remy|Delco Remy]]||[[w:Meridian, Mississippi|Meridian, Mississippi]]||United States||Starting motors, permanent magnet gear reduction cranking motors, powdered metal forge||1976||1994||Plant was originally built for National Homes Corp. Known as Plant 25. Spun off with [[w:Remy International|Delco Remy International]] in 1994. Closed by Delco Remy International in 1998. Production consolidated in Anderson, Indiana.
|-
| ||[[w:Delco Remy|Delco Remy]]/<br>[[w:Sheridan (automobile)|Sheridan]]||[[w:Muncie, Indiana|Muncie, Indiana]]||United States||Sheridan automobiles <br>Batteries||1919<br>1928||1921<br>1978||Located on West Willard Street. Originally built in 1908 by [[w:Inter-State Automobile Company|Inter-State Automobile Company]] which went bankrupt in 1913 and was renamed Inter-State Motor Company, resuming production in 1914. Built tractors for the military in WWI but did not resume civilian production in 1918 and the factory was idled. GM owned the plant from 1919-1921 to build the [[w:Sheridan (automobile)|Sheridan]] brand. Sold to [[w:Durant Motors|Durant Motors]] in 1921. Bought by Delco Remy division of GM in 1928. Known as Plant 9. Replaced by more modern Plant 26 in 1978. Plant 9 was demolished in 1978-79.
|-
| ||[[w:Delco Remy|Delco Remy]]||[[w:Muncie, Indiana|Muncie, Indiana]]||United States||Batteries||1977||1994|| Located at 4500 S. Delaware Dr. Known as Plant 26. Replaced Plant 9 in 1978. Plant 26 closed and was demolished in 1998.
|-
| ||[[w:Delco Remy|Delco Remy]]||[[w:New Brunswick, New Jersey|New Brunswick, New Jersey]]||United States||Batteries||1946||1999||Known as Plant 12. Located at 167 Jersey Ave. Replaced the pre-war Bloomfield plant. Supplied batteries to GM's East Coast assembly plants like Tarrytown, Wilmington, and Baltimore and to the East Coast aftermarket. Started making Freedom batteries in 1973 for Chevy Vega. Spun off with Delphi Automotive Systems in 1999. Delphi sold to Johnson Controls in August 2006. Closed by Johnson Controls in 2007. Partly demolished in 2014 (the south half of the building along with the guard shack in front of the plant). The remaining facility at the north end of the property is now the Cal-Chlor Corp. East Packaging and Distribution Facility. The former south end of the plant is now used for storage by Cal-Chlor.
|-
| ||[[w:Delco Remy|Delco Remy]]||[[w:Olathe, Kansas|Olathe, Kansas]]||United States||Batteries||1956||1999||Known as Plant 14. Located at 400 W. Dennis Ave. Supplied batteries to GM's Midwest assembly plants like Fairfax, Oklahoma City and Wentzville. Olathe was the first plant to produce the maintenance-free battery in 1970-1971 employing what was described as wire wound grid technology. The product was sold exclusively to JC Penny. Spun off with Delphi Automotive Systems in 1999. Last product produced was a heavy duty battery for Caterpillar. Closed by Delphi in 2005. Demolished. Site being redeveloped as Olathe Commerce Park. Some of the site is now a Jett Trucking terminal.
|-
|9 (1979-1988)<br /><br /> Q (1971-1978)||[[w:Detroit Assembly|Detroit Assembly]] (Cadillac Clark Street plant)||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||[[w:Cadillac|Cadillac]]s including <br> [[w:Cadillac Series 62|Cadillac Series 62]] (1940-1942, 1946-1964),<br> [[w:Cadillac Calais|Cadillac Calais]] (1965-1976), <br> [[w:Cadillac DeVille|Cadillac DeVille]] (1949-1984),<br> [[w:Cadillac Sixty Special|Cadillac Sixty Special]] (1938-1942, 1946-1976),<br> [[w:Cadillac Fleetwood Brougham|Cadillac Fleetwood Brougham]] (1977-1986),<br> [[w:Cadillac Brougham|Cadillac Brougham]] (1987-1988),<br> [[w:Cadillac Eldorado|Cadillac Eldorado]] (1953-1978),<br> [[w:Cadillac Eldorado#1957–1958 Eldorado Brougham|Cadillac Eldorado Brougham (Series 70)]] (1957-1958),<br> [[w:Cadillac Eldorado#1959–60 Eldorado Brougham|Cadillac Eldorado Brougham (Series 6900)]] (1959-1960) (chassis & final finishing),<br> [[w:Cadillac Seville#First generation (1976–1979)|Cadillac Seville]] (1976-1979), <br />[[w:LaSalle (automobile)|LaSalle]] (1934-1940)<br />[[w:Chevrolet Caprice#Third generation (1977–1990)|Chevrolet Caprice]] (1986-1987)<br />[[w:Oldsmobile Custom Cruiser#Second generation (1977–1990)|Oldsmobile Custom Cruiser]] (1985-1987)<br />[[w:Oldsmobile 88#Eighth generation (1977–1985)|Oldsmobile Delta 88]] (1984-1985) <br />Cadillac engines (V8, V12, V16) <br /> LaSalle straight-8 (1934-1936) (based on Oldsmobile straight-8 but assembled by Cadillac from Oldsmobile supplied components)||1921||1987||Located at 2860 Clark St. This was Cadillac's home plant and built all Cadillacs until 1971. During WWII, it built M5 & M5A1 Stuart tanks and M24 Chaffee tanks. Cadillac also built the V8 engines that powered these tanks & it also supplied engines to power these tank models made by other GM divisions and other companies as well as to power other types of armored vehicles. Cadillac also made components for aircraft engines made by GM's Allison Division. Cadillac also made M8 75mm howitzer motor carriages & M19 Twin 40mm anti-aircraft carriages. Factory closed December 1987. Chrome plating operation closed in March 1993. Engineering building (including tool room) closed in March 1994. Demolished entirely. Redeveloped into Clark Street Technology Park in 1997.
|-
| ||[[w:Fleetwood Metal Body#Purchase by Fisher|Fleetwood - Detroit Body Assembly]] (Fisher Body No. 18)||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||Bodies for [[w:Cadillac|Cadillac]] & [[w:LaSalle (automobile)|LaSalle]]||1917||1987||Originally built to build aircraft for World War I. Taken over by Fisher Body in 1919 & given to Fleetwood Metal Body after Fisher Body took over Fleetwood in 1925. Fleetwood Metal Body plant. Also known as Fisher Body Plant #18. Supplied bodies to Cadillac's Clark St. plant in Detroit. Located at 261 West End Ave in the [[w:Delray, Detroit|Delray]] neighborhood of Detroit. Redeveloped into Container Port Group's Detroit facility.
|-
| ||[[w:Detroit Diesel|Detroit Diesel]]||[[w:Redford, Michigan|Redford, Michigan]]||United States||Diesel engines for commercial vehicles||1938||1994||Located at 13400 W. Outer Drive. Was the Detroit Diesel-Allison Division from 1970 through 1987 when it again became the the Detroit Diesel Division. Spun off in 1988 as the Detroit Diesel Corp., a joint venture with Penske Corp., which had a majority stake of 60%. Penske increased its stake to 80% later in 1988 and then to 100% in 1994. Penske sold Detroit Diesel to DaimlerChrysler in 2000. DaimlerChrysler became Daimler AG in 2007. In 2019, Daimler AG spun off its truck and bus operations including Detroit Diesel into a separate company called Daimler Truck Holding AG.
|-
| ||Detroit Forge||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||Forged metal components||c.1919||1994||Located at 8435 St Aubin St. Straddles the border of [[w:Detroit|Detroit]] and [[w:Hamtramck|Hamtramck]]. Sold to [[w:American Axle|American Axle]] & Manufacturing Inc. in 1994. Closed in 2008, subsequently demolished around 2014.
|-
|3||Chevrolet-Detroit Truck & Bus Plant||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||[[w:Chevrolet Step-Van|Chevrolet Step-Van]]<br />[[w:Chevrolet Step-Van|GMC Value-Van]]<br />Chevrolet & GMC P-Series motorhome & commercial chassis<br />[[w:Chevrolet van#1992–1996|Chevrolet Van G30 HD/ GMC Vandura G3500 HD cutaway]] (Based on P-series P30 chassis with extended front end & forward-tilting hood) 1993-1996||1974||1999||Located at 601 Piquette Ave. in Detroit (Formerly Fisher Body No. 23). P-Series motorhome & stepvan chassis business (Commercial and Motorhome Chassis Division) was sold to investors (not including the Detroit plant) and became Workhorse Custom Chassis in 1999. Workhorse was later acquired by Navistar International in 2005, which later closed the Workhorse business in 2012 and sold the assets to AMP Electric Vehicles in 2013.
|-
| ||Detroit Transmission Division - Detroit||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||[[w:Hydramatic|Hydramatic]] automatic transmissions||1939||1949||Was located at 5140 Riopelle St. (between Farnsworth St. & Theodore St.) in what had been Fisher Body Plant #10. Original assembly site for the world's first production, fully automatic transmission and the headquarters of the new GM division created to produce it - the Detroit Transmission Division. First production Hydramatic shipped to Oldsmobile in October 1939. Debuted on the 1940 Oldsmobile. A heavier-duty version then launched on the 1941 Cadillac. Hydramatics continued to be produced during World War II for use in M5/M5A1 Stuart and M24 Chafee tanks (mated to Cadillac V8s), T17E1 Staghound and T18E2 Boarhound armored cars (mated to GMC inline-6's), M8 75mm howitzer motor carriages (mated to Cadillac V8s), LVT-3 Bushmaster amphibious landing vehicles (mated to Cadillac V8s), & Mark 1 Armored Snowmobiles made by Bombardier of Canada (mated to a Cadillac V8). Hydramatic became optional on Pontiacs in 1948. Hydramatic also became optional on Lincolns in 1949. The 1 millionth Hydramatic was built in January 1949. Needing more production capacity than the original factory in Detroit could handle, the Detroit Transmission Division relocated to a newer and much bigger plant in Livonia, Michigan in September 1949. Was later used by Cadillac as a parts warehouse supplying its Clark St. plant in Detroit. Closed by GM in the early 1980's and sold. Was subsequently used by Total Foods. Last occupied by Palmer Promotional Products. Heavily damaged by a fire in February 2014. The remains of the building were then demolished by summer 2014.
|-
| ||Detroit Transmission Division - Livonia||[[w:Livonia, Michigan|Livonia]], [[w:Michigan|Michigan]]||United States||[[w:Hydramatic|Hydramatic]] automatic transmissions||1949||1953||The Detroit Transmission Division moved from Detroit to a newer and larger factory in Livonia in 1949. In addition to Pontiac, Oldsmobile, & Cadillac, Livonia also supplied Hydramatics to Lincoln, Nash, Hudson, Kaiser, and Fraser. However, the factory burned down in August 1953 causing 6 deaths and more than $80 million in damage. GM quickly arranged to lease Kaiser’s Willow Run factory to replace the destroyed Livonia plant and GM then bought the plant outright in November 1953 for $26 million. Salvaged equipment from Livonia was taken to [[w:Willow Run#General Motors operations|Willow Run]]; see [[w:Willow Run Transmission|Willow Run Transmission]].
|-
|5<br /><br />C (1962-1978)||[[w:General Motors Diesel|General Motors Diesel]]||[[w:London, Ontario|London, Ontario]]||[[w:Canada|Canada]]||[[w:List of GM-EMD locomotives|EMD Locomotives]]<br />[[w:GM New Look (Fishbowl) Bus|GM New Look bus]] (1961-1978)<br />Terex earthmovers (1965-1980)<br />Military vehicles including:<br />[[w:AVGP|Grizzly/Cougar/Husky LAV I]]<br />[[w:LAV II|LAV II (LAV-25/Bison/Coyote)]]<br />[[w:LAV III|LAV III]]<br />[[w:Stryker|Stryker]]||1950 (GM Electro-Motive Division)<br /><br />1961 (Transit bus)||1979 (Transit bus)<br /><br />2003 (GM Defense)<br /><br />2005 (GM Electro-Motive Division)||Transit bus production began in London, Ontario in late 1961. Transit bus production moved to Saint-Eustache factory in 1979. The part of the property making military vehicles (armored fighting vehicles like the [[w:Stryker|Stryker]]) as GM Defense was sold in 2003 to [[w:General Dynamics Land Systems|General Dynamics Land Systems]], becoming [[w:General Dynamics Land Systems#General Dynamics Land Systems Canada|General Dynamics Land Systems – Canada (GDLS-C)]]. Located at 1991 Oxford St E. Interestingly, General Dynamics Land Systems was originally formed in 1982 when General Dynamics bought Chrysler Defense, Chrysler's tank division in the US, which was then renamed General Dynamics Land Systems. The locomotive operations were sold in 2005 and renamed [[w:Electro-Motive Diesel|Electro-Motive Diesel]], Inc. Electro-Motive was then sold to [[w:Caterpillar Inc.|Caterpillar's]] [[w:Progress Rail|Progress Rail]] subsidiary in 2010. The London, ON plant was then shuttered in 2012 & operations moved to a new plant in Muncie, Indiana. This part of the plant is now used by HCL Logistics, which provides logistics services to next door General Dynamics Land Systems – Canada. Located at 2021 Oxford St. E.
|-
|3 (1981-1987)<br /><br />M (1979-1980)||[[w:General Motors Diesel|General Motors Diesel]] Saint-Eustache Bus Plant||[[w:Saint-Eustache, Quebec|Saint-Eustache, Quebec]]||[[w:Canada|Canada]]||[[w:GM New Look (Fishbowl) Bus|GM New Look bus]] (1979-1986)<br />[[w:Classic (transit bus)|GM Classic bus]] (1983-1987)||1979||1987||Located at 1000 Industriel Blvd. Manufactures [[w:transit bus|transit bus]]es. GM consolidated Canadian transit bus production here from the London, Ontario and St. Laurent, Quebec plants in 1979. New Look transit bus production ended in 1986. Sold to [[w:Motor Coach Industries|Motor Coach Industries]], along with the designs for the [[w:Classic (transit bus)|Classic]] bus models this factory still produced in 1987. Later sold to [[w:Nova Bus|Nova Bus]] in 1993. Production of the Classic model bus ended in 1997. Still owned by [[w:Nova Bus|Nova Bus]], which is owned by [[w:Volvo AB|Volvo AB]] through [[w:Prevost (bus manufacturer)|Prevost Car]]. Prevost bought 51% of Nova Bus in 1998 and bought the remaining 49% from Henlys Group in 2004.
|-
|M|| [[w:General Motors Diesel|General Motors Diesel]] Saint Laurent Bus Plant || [[w:Saint Laurent, Quebec|Saint Laurent, Quebec]] || Canada || [[w:GM New Look bus|GM New Look bus]] (1975-1979)
|| 1974 || 1979 || Bus operations moved to [[w:Saint-Eustache, Quebec|Saint-Eustache, Quebec]].
|-
|D <br />(1960-1964 [[w:Pontiac (automobile)|Pontiac]] and 1965-2009)<br /><br /> C (1964 [[w:Chevrolet|Chevrolet]])<br /><br />A (Pre-1965 [[w:Oldsmobile|Oldsmobile]] and Pre-1960 [[w:Pontiac (automobile)|Pontiac]])<br /><br />6 (Pre-1964 [[w:Buick|Buick]])||[[w:Doraville Assembly|Doraville Assembly]]||[[w:Doraville, Georgia|Doraville, Georgia]]||United States||[[w:Chevrolet Uplander|Chevrolet Uplander]] (2005-2008 & '09 in Canada)<br />[[w:Pontiac Montana#Second generation (2005)|Pontiac Montana SV6]] (2005-2006 & '07-'09 in Canada)<br />[[w:Buick Terraza|Buick Terraza]] (2005-2007)<br />[[w:Saturn Relay|Saturn Relay]] (2005-2007)||1947||2008||Located at 3900 Motors Industrial Way. Was originally part of the [[w:Buick-Oldsmobile-Pontiac Assembly Division|Buick-Oldsmobile-Pontiac Assembly Division]]. First vehicle built in Nov. 1947 was an Oldsmobile. Some of the original property bought by GM for the Doraville plant in 1945 was deemed as excess and was sold off. One of the parts that was sold (82 acres) was sold to Chevrolet to build a parts warehouse. Doraville began making Chevrolet passenger cars for 1964. BOP Assembly Division became GM Assembly Division in 1965. Oldsmobile and Pontiac production ended in Dec. 1965, leaving just Chevrolet and Buick. Oldsmobile production resumed in Aug. 1967 for the 1968 model year. Oldsmobile production again ended in April 1970 followed by Buick production in July 1970. Pontiac production resumed in Aug. 1970 for the 1971 model year. B-body full-size Chevrolet and Pontiac production ended in Dec. 1973 and midsize A-body Chevrolet and Oldsmobile production began in Jan. 1974.[https://dekalbhistory.org/wp-content/uploads/2020/04/history-of-doraville-gm-plant.pdf] Doraville switched to building fwd A-body Oldsmobiles and Buicks for 1982. Doraville then switched to building W-body Oldsmobiles for 1988. Passenger car production ended in 1995 and the Cutlass Supreme coupe & sedan were moved to Fairfax II during 1995 while the convertible was discontinued. Doraville was converted to build minivans for 1997. Production ended in September 2008. Last vehicle built was a Chevy Uplander. Demolished in 2014-2015. Site is being redeveloped. Parts of the site are now occupied by Nalley Automotive Group (Infiniti dealership & a Collision Center), Mike Rezi Nissan (formerly Nalley Nissan), Assembly Studios Atlanta, Third Rail Studios at Assembly Atlanta, and Serta Simmons Bedding.<br />Past models: [[w:Chevrolet Venture|Chevrolet Venture]] (1997-2005), [[w:Oldsmobile Silhouette#Second generation (1997–2004)|Oldsmobile Silhouette]] (1997-2004), [[w:Pontiac Trans Sport#Second generation (1997-1999)|Pontiac Trans Sport]] (1997-1998), [[w:Pontiac Montana|Pontiac Montana]] (1999-2005), [[w:Pontiac Trans Sport#Second generation (Chevrolet)|Chevrolet Trans Sport]] (Europe: '97-'04), [[w:Buick Century#Second generation (1954–1958)|Buick Century]] (1954-1958), [[w:Buick Century#Fifth generation (1982–1996)|Buick Century]] (1982-1987), [[w:Buick Electra|Buick Electra]] (1959-1962), [[w:Buick Invicta|Buick Invicta]] (1959-1962), [[w:Buick LeSabre|Buick Lesabre]] (1959-1970), [[w:Buick Roadmaster|Buick Roadmaster]] (1951-1952, 1954-1958), [[w:Buick Special|Buick Special]] (1950-1958), [[w:Buick Super|Buick Super]] (1955, 1957-1958), [[w:Buick Wildcat|Buick Wildcat]] (1963, 1965-1970), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1964-1970), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1964-70), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-74), [[w:Chevrolet Chevelle#Third generation (1973–1977)|Chevrolet Chevelle]] (1974-77), [[w:Chevrolet Impala|Chevrolet Impala]] (1964-1974), [[w:Chevrolet Malibu#Fourth generation (1978)|Chevrolet Malibu]] (1978-1981), [[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1975-1980), [[w:Oldsmobile Cutlass#Fourth generation (intermediate) 1973–1977|Oldsmobile Cutlass]] (Gen 4) (1974-1977), [[w:Oldsmobile Cutlass#Fifth-generation (intermediate) 1978–1988|Oldsmobile Cutlass]] (Gen 5) (1978-1981), [[w:Oldsmobile Cutlass Ciera|Oldsmobile Cutlass Ciera]] (1982-1987), [[w:Oldsmobile Cutlass Supreme#Fifth generation (1988–1997)|Oldsmobile Cutlass Supreme]] (1988-1995), [[w:Oldsmobile 88|Oldsmobile 88]] (1949-1966, 1968-1970), [[w:Oldsmobile 98|Oldsmobile 98]] (1948-1963), [[w:Oldsmobile Starfire#First generation (1961–1966)|Oldsmobile Starfire]] (1961-1966), [[w:Pontiac 2+2|Pontiac 2+2]] (1964-1966), [[w:Pontiac Bonneville|Pontiac Bonneville]] (1958, 1960-1966), [[w:Pontiac Grand Prix#First generation (1962–1964)|Pontiac Grand Prix]] (1962-1964), [[w:Pontiac Catalina|Pontiac Catalina]] (1960-1966, 1971-1974), [[w:Pontiac Chieftain|Pontiac Chieftain]] (1951, 1953, 1955, 1958), [[w:Pontiac Grand Ville|Pontiac Grand Ville]] (1973-1974), [[w:Pontiac Star Chief|Pontiac Star Chief]] (1955-1958, 1964), [[w:Pontiac Ventura#1960–1970|Pontiac Ventura]] (1961),<br> [[w:Chevrolet El Camino|Chevrolet El Camino]] (1974-1981), [[w:GMC Sprint |GMC Sprint]] (1974-77), [[w:GMC Caballero|GMC Caballero]] (1978-1981),<br> [[w:Opel Sintra|Opel Sintra]]/[[w:Vauxhall Sintra|Vauxhall Sintra]] (1997-1999).
|-
| ||General Motors East Africa||[[w:Nairobi|Nairobi]]||[[w:Kenya|Kenya]]||[[w:Isuzu F-Series|Isuzu F-Series]]<br />[[w:Isuzu N-Series|Isuzu N-Series]]<br />Isuzu buses<br /><br />||1977||2017||Originally established in 1975 as GM Kenya, a joint venture with the Kenyan govt. Renamed GM East Africa in 2003. Other shareholders are Kenya’s Industrial and Commercial Development Corporation (ICDC): 20%, Centum Investment Co. Ltd.: 17.8%, & Itochu Corporation: 4.5%.
Isuzu moved pickup production to South Africa in 2012 so it could focus on trucks & buses at the Nairobi plant. <br />
GM sold its 57.7% stake in the factory to Isuzu in 2017 and left the Kenyan market. Now known as Isuzu East Africa. <br />
Past models: [[w:Isuzu D-Max|Isuzu D-Max]], [[w:Bedford Vehicles|Bedford trucks]], [[w:Bedford HA#The BTV|BTV]]
|-
| ||ELAZ-GM||[[w:Yelabuga|Yelabuga]], [[w:Tatarstan|Tatarstan]]||[[w:Russia|Russia]]||[[w:Chevrolet S-10 Blazer#Second generation (1995)|Chevrolet Blazer]]||1996||2001||GM owned about 25% & ELAZ owned the other 75%. Joint venture dissolved in 2001.
|-
| ||[[w:Electro Motive Division|Electro Motive Division]] - [[w:Electro-Motive Diesel#EMD La Grange (McCook)|La Grange Operations]]||[[w:McCook, Illinois|McCook, Illinois]]||United States||[[w:List of GM-EMD locomotives|Locomotives]]<br />Engines<br />Components||1936|| ||Located at 9301 W. 55th St.<br /> Electro-Motive headquarters and R&D operations. Locomotive production ended in 1991 and was moved to London, ON, Canada. Sold in 2005, renamed [[w:Electro-Motive Diesel|Electro-Motive Diesel]], bought by Caterpillar's Progress Rail subsidiary in 2010.
|-
| ||[[w:Elmore Manufacturing Company|Elmore]]||[[w:Clyde, Ohio|Clyde]], [[w:Ohio|Ohio]]||United States||Elmore automobiles||1909||1912|| Factory was located on Amanda St. Bought by GM in November 1909. Elmore was known for its two-stroke engines. GM closed it down in the fall of 1912. GM sold the factory to a truckmaker named Krebs Commercial Car Company in 1912. In 1917, Krebs Commercial Car Company merged with Clyde Cars Company and Lincoln Motor Truck Company to form what became Clydesdale Motor Truck Company in 1919. Clydesdale Motor Truck Company closed in 1939 and the factory was then used by Clyde Porcelain Steel Company until the factory burned down November 11, 1945. The factory would be rebuilt and used for making washing machines by various companies, most recently, Whirlpool Corp.
|-
| ||Ewing||[[w:Geneva, Ohio|Geneva]], [[w:Ohio|Ohio]]||United States||Ewing automobiles||1909||1911||Bought by GM in October 1909. Made taxis. GM closed it down in 1911.
|-
|X (1965–1987)<br /><br />K (Pre-1965 [[w:Oldsmobile|Oldsmobile]] & [[w:Pontiac (automobile)|Pontiac]])<br /><br />4 (Pre-1965 [[w:Buick|Buick]])||[[w:Fairfax Assembly|Fairfax Assembly]] (Fairfax I)||[[w:Kansas City, Kansas|Kansas City, Kansas]]||United States||[[w:Buick Centurion|Buick Centurion]] (1971-1973), [[w:Buick Century#Second generation (1954–1958)|Buick Century]] (1954-1958), [[w:Buick Electra|Buick Electra]] (1959-1963, 1971-1974), [[w:Buick Estate|Buick Estate]] (1970-1979), [[w:Buick Estate#1977–1990|Buick Electra Estate]] (1980-1987), [[w:Buick Invicta|Buick Invicta]] (1959-1962), [[w:Buick LeSabre|Buick LeSabre]] (1959-1985), [[w:Buick Estate#1977–1990|Buick LeSabre Estate]] (1980-1987), [[w:Buick Limited|Buick Limited]] (1958), [[w:Buick Roadmaster|Buick Roadmaster]] (1948-1949, 1951, 1953, 1956-1958), [[w:Buick Skylark#First generation (1961–1963)|Buick Skylark]] (1962-1963), [[w:Buick Special|Buick Special (B-body)]] (1947-1950, 1952-1958), [[w:Buick Special#1961–1963|Buick Special (Y-body)]] (1962-1963), [[w:Buick Super|Buick Super]] (1954-1958), [[w:Buick Wildcat|Buick Wildcat]] (1963-1970), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1982-1987), [[w:Chevrolet Impala|Chevrolet Impala]] (1982-1985), [[w:Oldsmobile 88|Oldsmobile 88]] (1949-1984), [[w:Oldsmobile 98|Oldsmobile 98]] (1948-1963), [[w:Oldsmobile F-85|Oldsmobile F-85/<br>Cutlass]] (1962-1963), [[w:Oldsmobile Custom Cruiser|Oldsmobile Custom Cruiser]] (1974-1984), [[w:Oldsmobile Jetstar I|Oldsmobile Jetstar I]] (1964-1965), [[w:Oldsmobile Starfire#First generation (1961–1966)|Oldsmobile Starfire]] (1961-1966), [[w:Pontiac 2+2|Pontiac 2+2]] (1964-1967), [[w:Pontiac Bonneville#Sixth generation (1977–1981)|Pontiac Bonneville]] (1958-70, 1975-1981), [[w:Pontiac Catalina|Pontiac Catalina]] (1959-1981), [[w:Pontiac Chieftain|Pontiac Chieftain]] (1950-1958), [[w:Pontiac Executive|Pontiac Executive]] (1967-1968), [[w:Pontiac Grand Prix|Pontiac Grand Prix]] (1962-1968), [[w:Pontiac Grand Ville|Pontiac Grand Ville]] (1971-1975), [[w:Pontiac LeMans#First generation (1961–1963)|Pontiac LeMans]] (1962-1963), [[w:Pontiac Parisienne#Fifth generation: 1977–1986|Pontiac Parisienne]] (1984-1986), [[w:Pontiac Safari|Pontiac Safari]] (1987), [[w:Pontiac Star Chief|Pontiac Star Chief]] (1954-1959, 1964, 1966), [[w:Pontiac Tempest#First generation (1961–1963)|Pontiac Tempest]] (1962-1963), [[w:Pontiac Ventura#1960–1970|Pontiac Ventura]] (1960-1961) ||1946||1987||Located at 100 Kindelberger Road. Originally, the location of the [[w:North American Aviation|North American Aviation]] Bomber Production Plant (built in 1940) where the [[w:B-25 Mitchell|B-25 Mitchell]] was manufactured during World War II. After the war, GM leased it in 1945 and converted the plant to auto production. Automotive production began in June 1946. GM later bought the plant in 1960. Was originally part of the [[w:Buick-Oldsmobile-Pontiac Assembly Division|Buick-Oldsmobile-Pontiac Assembly Division]]. BOP Assembly Division became GM Assembly Division in 1965. Fairfax mostly focused on full-size cars ([[w:General Motors A platform (RWD)#1926-1959|A-]], B-, & C-body) but it also built B-O-P Y-body compact cars for 1962-1963. Fairfax only began making Chevrolet passenger cars for 1982. Also built [[w:F-84F Thunderstreak|F-84F Thunderstreak]] fighter jets alongside cars beginning in 1952 and ending in May 1955 when the contract ended. Plant closed May 1987. Production moved to new building on adjacent site (Fairfax II) for 1988 model year production.
|-
| ||[[w:History of General Motors#Corporate restructuring and operating losses|Fiat-GM Powertrain Polska]]||[[w:Bielsko-Biala|Bielsko-Biala]]||[[w:Poland|Poland]]||[[w:Fiat JTD engine#1.3 JTDm/Multijet/CDTI/D/DDiS/HDi|GM Small Diesel Engine]] ||2003||2010|| Engine began production here in 2003 as part of Fiat-GM Powertrain, a 50/50 joint venture between GM & Fiat involving joint development and production of engines and transmissions. The joint venture was disbanded in 2005. As part of the dissolution, GM took a 50% stake in the Bielsko-Biala engine plant and the intellectual property of the 1.3 liter diesel engine produced there. In 2010, GM sold its half of the Bielsko-Biala engine plant back to Fiat. However, GM kept its half of the intellectual property of the 1.3 liter diesel engine produced there and continued to source the 1.3 liter diesel engine from the Bielsko-Biala engine plant. Chevrolet stopped using this engine around 2015. Opel was still using this engine when it was sold by GM to PSA in 2017. Opel last used this engine in 2019. This plant became part of [[w:Fiat Chrysler Automobiles|FCA]] in 2014 when Fiat and Chrysler Group merged. This plant became part of [[w:Stellantis|Stellantis]] in 2021 when FCA merged with PSA Group. Stellantis has announced that the Bielsko-Biala engine plant will close by the end of 2024.
|-
| ||Fisher Body No. 10||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||Auto bodies ||1917-<br />1919||1939||Was located at 5140 Riopelle St. (between Farnsworth St. & Theodore St.).GM bought 60% of Fisher Body in 1919 and bought the remainder in 1926. From 1926, Fisher Body only supplied bodies to GM brands. In 1939, became headquarters and manufacturing site of GM's new Detroit Transmission Division, which manufactured Hydramatic fully automatic transmissions that first appeared on the 1940 Oldsmobile.
|-
| ||[[w:Fisher Body#Fisher Body Corporation and General Motors|Fisher Body No. 12]]||[[w:Detroit|Detroit]], Michigan||United States|| ||1916||1942||Located at 1961 E. Milwaukee Ave. Previously used by Metzger Motor Car Company from 1910-1913 and [[w:Maxwell Motor Company|Maxwell Motor Company]] from 1913-1916. Owned by Fisher from 1916-1942 then sold to J. Lee Hackett Co. which owned it until 1973. Used for warehousing from 1973-1981 and then demolished.
|-
| ||[[w:Fisher Body#Fisher Body Corporation and General Motors|Fisher Body No. 21]]||[[w:Detroit|Detroit]], Michigan||United States||Bodies for Buick & Cadillac<br />Engineering and Tool & Die operations<br />Bodies for Cadillac limousines<br />Pre-production Pilot bodies||1919||1984||Located at 700 Piquette Ave. In 1999, was re-addressed as 6051 Hastings Street. Made bodies for Buick through 1926 when Buick body production moved to Fisher Body Plant No. 1 - Flint on S. Saginaw St. Made bodies for Cadillac through 1929 when Cadillac body production moved to the Fisher Body Plant No. 18/Fleetwood Body plant. Became an engineering facility from 1930-1955. Produced parts for B-25 & B-29 bombers in World War II (Aircraft Unit). Also did product development and engineering during World War II (Central Development and Experimental Unit). In 1955, GM transferred production of Cadillac limousine bodies from the Fleetwood plant in Detroit to Fisher #21 plant due to it being a low-volume operation. Closed April 1984. Sold to Cameo Color Coat in 1985 which transferred it to Carter Color Coat in 1990. Carter Color Coat then went bankrupt and the property was abandoned in 1993. GM removed some paints and other hazardous materials in the early 1990s. It's been owned by the city of Detroit since 2000. Now being converted into Fisher 21 Lofts, a mixed residential and commercial development scheduled to open in 2027.
|-
| ||[[w:Fisher Body#Fisher Body Corporation and General Motors|Fisher Body No. 23/23B]]||[[w:Detroit|Detroit]], Michigan||United States||Tool & Die plant through 1972.||1921||1972||Located at 601 Piquette Ave. #23 was the six story portion while #23B was the one story portion. Known as the Detroit Die and Machine Plant. In WWII, made B-25, B-29, P-80 aircraft tools and fixtures; M4, M10, M36, M26, M18 tank parts; 3-inch and 5-inch Naval Gun Breech Housings, 155mm and 8-in. gun parts, Diesel Engine parts and Torqmatic Transmission parts. Became Chevrolet's Detroit Truck & Bus plant in 1974.
|-
| ||[[w:Fisher Body#Fisher Body Corporation and General Motors|Fisher Body No. 37]]||[[w:Detroit|Detroit]], Michigan||United States||Large bodyside stampings||1919||1985||Located at 950 E Milwaukee Ave. Produced aircraft and tank assemblies, 90 mm AA guns, 5” naval gun housings and Lockheed missile parts during World War II. In 1989, bought by Lakeside Stamping which was renamed New Center Stamping in 1994. In 2019, New Center Stamping Inc. was taken over by Soave Enterprises and still stamps parts for automakers including GM, Ford, and Stellantis.
|-
| ||Fisher Body No. 40||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||Tooling ||1928||1983-1984||Was located at 1500 E. Ferry St. Plant 41 was next door and was used for storage.
|-
| ||Fisher Body Overseas Corp. - Dundonald plant||[[w:Dundonald, County Down|Dundonald]], [[w:Northern Ireland|Northern Ireland]]||[[w:United Kingdom|United Kingdom]] ||Seat Belts, window regulators, door locks, door switches, & other automotive hardware||1980||1988||Located at 770 Upper Newtownards Road at the corner of Carrowreagh Road. Dundonald is an eastern suburb of Belfast. From 1966-1977, was a Rolls-Royce plant making aircraft engine parts. GM's Fisher Body division bought the plant in 1978 and reopened it in 1979. Production began in 1980. In 1982, the Dundonald plant became part of Fisher Body Overseas Corp., part of GM Overseas Corp. Sold to Takata Corp. in 1988. Operated as European Components Corp. (ECC) and later as TK-ECC, still making seat belts, until it was closed in 2004. Plant was later demolished.
|-
| ||Fisher Body Overseas Corp. - Kennedy Way plant||[[w:Belfast|Belfast]], [[w:Northern Ireland|Northern Ireland]]||[[w:United Kingdom|United Kingdom]] ||Seat Belt Buckles, Door switches, & other automotive hardware||1982||?||Located in Kennedy Way Industrial Estate on Blackstaff Road in western Belfast. The Kennedy Way plant was part of Fisher Body Overseas Corp., part of GM Overseas Corp.
|-
| ||[[w:Flint, Michigan auto industry#Flint Plant #1|Flint Body Assembly]] (Fisher Body Flint Plant #1)||[[w:Flint, Michigan|Flint]], Michigan||United States||Bodies for Buick and later also Chevrolet & Oldsmobile<br />||1923||1987||Located at 4000-4500 S. Saginaw St. Originally a [[w:Durant Motors|Durant Motors]] plant. Bought by GM in 1926. Became Fisher Body Plant No. 1 - Flint. Supplied bodies to the Buick plant in Flint (later known as Buick City). After Buick City switched to unibody, fwd cars for 1986, Flint Body began supplying bodies for G-cars built at the Pontiac Assembly plant in Pontiac, MI. Closed in Dec. 1987 when G-body production at Pontiac Assembly ended. Last body built was a Buick Regal Grand National to be completed at Pontiac Assembly. Most of the site was demolished and the remainder was converted into the Great Lakes Technology Center. GM leased space there for R&D and offices (including AC Rochester world headquarters) until 2009. Various medical-related companies now occupy much of the property. The original administration building at 4300 S. Saginaw St. still stands as of 2022 and still has a Fisher Body logo at the top of the front of the building in the center.
|-
| ||[[w:Flint, Michigan auto industry#Flint V8 Engine Plant/Flint Engine South|Chevrolet-Flint (V8) Engine Plant]] (Van Slyke Road)||[[w:Flint, Michigan|Flint, Michigan]]||United States||[[w:Chevrolet small-block engine (first and second generation)|Chevrolet Small-Block V8]]<br />[[w:Chevrolet Turbo-Thrift engine|Chevrolet Turbo-Thrift I6]]<br />[[w:Chevrolet 153 4-cylinder engine|Chevrolet 153 4-cylinder engine]]<br />[[w:List of Isuzu engines#Isuzu G engine|Isuzu G140 & G161Z SOHC gas<br> 4-cylinder engine for Chevy Chevette & Pontiac 1000/Acadian]]<ref>{{cite news| title = 1975, Chevrolet Turns to Opel for the New Fuel-Saving Chevette| url = https://web.archive.org/web/20180116081057/https://history.gmheritagecenter.com/wiki/index.php/1975%2C_Chevrolet_Turns_to_Opel_for_the_New_Fuel-Saving_Chevette| archive-date = 2018-01-16| publisher = General Motors| access-date = 2014-06-05| url-status = dead}}</ref>||1954||1999||Located at 3848 Van Slyke Road, down the block from the Flint Truck Assembly Plant. Chevy Small-Block V8 engine production began here on July 9, 1954. Only V8 engines were made until 1961, when 4 & 6 cylinder engines began to be made for the 1962 Chevy II. Around 45 million Chevy small-block V8 engines were built at this plant. Plant closed in 1999 and was demolished. Land is now used by a new paint shop for the [[w:Flint Truck Assembly|Flint Truck Assembly Plant]]. The new paint shop (Flint Assembly Paint Operations) was announced in December 2013 and opened in 2016, replacing the previous paint shop inside the assembly plant.
|-
|1 (1928-1947)||[[w:Flint, Michigan auto industry#Flint Manufacturing Div./Delphi Flint West/Flint Tool and Die|Chevrolet-Flint Manufacturing Complex]] ("Chevy in the Hole") /<br /> Flint West||[[w:Flint, Michigan|Flint, Michigan]]||United States||[[w:Chevrolet|Chevrolet]] vehicles including [[w:Chevrolet Series 490|Chevrolet Series 490]]<br />[[w:Chevrolet Superior|Chevrolet Superior]]<br />[[w:Chevrolet Series AA Capitol|Chevrolet Series AA Capitol]]<br />[[w:Chevrolet Series AB National|Chevrolet Series AB National]]<br />[[w:Chevrolet Series AC International|Chevrolet Series AC International]]<br />[[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]]<br />[[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]]<br />[[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]]<br />[[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]]<br />[[w:Chevrolet Master|Chevrolet Master]]<br />[[w:Chevrolet Deluxe|Chevrolet Deluxe]]<br />[[w:Chevrolet Stylemaster|Chevrolet Stylemaster]]<br />[[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]]<br />[[w:Chevrolet AK Series|Chevrolet AK Series]]<br />[[w:Chevrolet Suburban|Chevrolet Suburban]] (Gen 1 & 2)<br /><br />[[w:Chevrolet|Chevrolet]] engines including [[w:Chevrolet Inline-4 engine#171|Chevrolet Inline-4 engine]]<br />[[w:Chevrolet Stovebolt engine|Chevrolet Stovebolt / Blue Flame I6]]<br />||1913||2004||Located at 300 N. Chevrolet Ave. (formerly known as Wilcox Street). This was Chevrolet's home plant. It predated Chevrolet becoming part of GM in 1918. The complex originally included metal stamping, body assembly, vehicle assembly, engine assembly, and various component manufacturing plants. On January 11, 1940, the 25 millionth GM vehicle built in the US, a 1940 Chevrolet Special Deluxe Sedan, was built here. Plant 2 (vehicle assembly) & 2A (Fisher Body) were replaced by new plants on Van Slyke Road elsewhere in Flint in 1947 (now the [[w:Flint Truck Assembly|Flint Truck Assembly Plant]]). Plant 4 was the engine plant. It closed in 1984 but was ultimately reopened later. In 1987, the complex was taken over by the AC Spark Plug division and became AC Spark Plug Flint West. In 1988, it became AC Rochester Flint West, and in 1994 AC Delco Systems Flint West following further consolidations. In early 1995, it was renamed Delphi Flint West. Around this time, plants in the complex began to be demolished until Plant 4 closed in 2004 and was subsequently demolished. Plant 4 last made generators and fuel filters. Building 35 still exists as part of [[w:Kettering University|Kettering University]]. It is now the C.S. Mott Science and Engineering Building after the addition of another floor and a new façade. Plant 38 still exists as GM's Flint Tool & Die plant. All the other buildings are gone. Much of the property is being redeveloped into a park called [[w:Chevy Commons|Chevy Commons]].
|-
| ||[[w:Flint North|Flint North]] Powertrain||[[w:Flint, Michigan|Flint, Michigan]]||United States||[[w:Buick V8 engine|Buick V8 engine]]<br />[[w:Buick V6 engine|Buick V6 engine]]<br />Engine Components<br />[[w:Dynaflow|Dynaflow]] transmissions<br />transmission components<br /> torque converters<br />coil springs||1905||2010||Complex was made up of several factories. Flint North is the part of the Buick City factory complex north of Leith St. stretching north to E. Pierson Rd. [[w:Liberty L-12|Liberty aircraft engines]] were made here during WWI. Factory 36 was the engine plant. Factory 36 opened in 1952 and closed in 2008. The remainder of the complex closed by December 2010. Demolished by 2012. Part of the site (1225 E. Marengo Ave.) is now occupied by American SpiralWeld Pipe Co.
|-
||7||[[w:Arlington Assembly#History|Fort Worth Assembly]]||[[w:Fort Worth, TX|Fort Worth, Texas]]||United States||[[w:Chevrolet Series 490|Chevrolet Series 490]]||1917||1924
|Built by Chevrolet before it became part of GM. Located at 2601 W. 7th St. (then known as Arlington Heights Blvd.). Is across the street from what is now Montgomery Plaza. A 3rd story was added to the building in 1920. Closed due to flood damage from the April 1922 flooding of the Trinity River and the subsequent imposition of flood-control taxes.<ref>https://books.google.com/books?id=mTvuAwAAQBAJ&dq=1920+fort+worth+chevrolet+factory&pg=PA52 Lost Fort Worth, page 52</ref> Montgomery Ward leased the empty Chevy plant between 1924 and 1928 to house a temporary store while its main Fort Worth facility was built across what is now West Seventh Street. That building is now Montgomery Plaza. The Chevy plant was later used by various different companies including GM's Frigidaire division as a sales and warehouse facility and later by Tandy Corp., first for its Radio Shack division and later for its corporate HQ. Demolished in 1986. Site is now Olympus 7th Street Station, a luxury apartment building.
|-
|G <br />(1960-1964 [[w:Chevrolet|Chevrolet]] and 1965-1989)<br /><br /> B (Pre-1960 [[w:Oldsmobile|Oldsmobile]])<br /><br /> F (Pre-1960 [[w:Pontiac (automobile)|Pontiac)]]<br /><br /> 7 (Pre-1960 [[w:Buick|Buick]])||[[w:Framingham Assembly|Framingham Assembly]]||[[w:Framingham, Massachusetts|Framingham, Massachusetts]]||United States||[[w:General Motors A platform (1925)#1964|GM rwd A-bodies]]: [[w:Chevrolet Chevelle|Chevrolet Chevelle]] (1965-1969), [[w:Pontiac Tempest|Pontiac Tempest]] (1967-1970), [[w:Pontiac LeMans|Pontiac LeMans]] (1967-1972, 1974-1976), [[w:Pontiac GTO|Pontiac GTO]] (1966-1969, 1971-1972), [[w:Oldsmobile Cutlass|Oldsmobile Cutlass]] (1967-1981), [[w:Oldsmobile Cutlass Supreme|Oldsmobile Cutlass Supreme]] (1967-1981), [[w:Oldsmobile 442|Oldsmobile 442]] (1967-1977), [[w:Oldsmobile Vista Cruiser|Oldsmobile Vista Cruiser]] (1968-1977), [[w:Buick Skylark#Third generation (1968–1972)|Buick Skylark]] (1970-1972), [[w:Buick GS|Buick GS]] (1970-1972), [[w:Buick Century|Buick Century]] (1973-1981), [[w:Buick Regal|Buick Regal]] (1973-1981)
[[w:General Motors A platform (1982)|GM fwd A-bodies]]: [[w:Chevrolet Celebrity|Chevrolet Celebrity]] (1982-1988), [[w:Pontiac 6000|Pontiac 6000]] (1982), [[w:Oldsmobile Cutlass Ciera|Oldsmobile Cutlass Ciera]] (1983-1989), [[w:Buick Century#Fifth generation (1982–1996)|Buick Century]] (1989)
||1948||1989|| Located at 63 Western Ave. First vehicle produced was a 1948 Buick on February 26, 1948. Was originally part of the [[w:Buick-Oldsmobile-Pontiac Assembly Division|Buick-Oldsmobile-Pontiac Assembly Division]]. Framingham is the only BOP Assembly Division plant to switch to the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Framingham switched to Chevrolet Assembly Division in August 1959 [https://www.worthpoint.com/worthopedia/gm-framingham-ma-canada-pontiac-buick-olds-plant]. Framingham began making Chevrolet passenger cars for 1960. BOP Assembly Division became GM Assembly Division in 1965. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were then gradually transferred to the GM Assembly Division. Framingham Assembly joined the GM Assembly Division in 1968. Idled October 1, 1982 but reopened March 14, 1983. Closed August 1, 1989. Sold to ADESA to use as a vehicle auction site. <br/>Past models: <br/> [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1960-1966), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1960-1966), [[w:Chevrolet Impala|Chevrolet Impala]] (1960-1966), [[w:Chevrolet Chevy II / Nova#First generation (1962–1965)|Chevrolet Chevy II/Nova]] (1962-1963), [[w:Buick Century#Second generation (1954–1958)|Buick Century]] (B-body), [[w:Buick Roadmaster|Buick Roadmaster]] (1949-1950, 1955, 1958), [[w:Buick Special#1949–1958|Buick Special]] (1952-1953, 1955-1958), [[w:Buick Super|Buick Super]] (1954), [[w:Oldsmobile 88|Oldsmobile 88]], [[w:Oldsmobile 98|Oldsmobile 98]], [[w:Pontiac Bonneville|Pontiac Bonneville]] (1958), [[w:Pontiac Chieftain|Pontiac Chieftain]] (1951, 1954, 1956), [[w:Pontiac Star Chief|Pontiac Star Chief]] (1955, 1957, 1959)
|-
| ||General Motors France S.A.||[[w:Gennevilliers|Gennevilliers]]||[[w:France|France]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Buick|Buick]]||1939||1940||Operations interrupted by German invasion of France and seizure of the plant in 1940 during WWII.
|-
|Z (1965-1982)<br /><br />H (1963-1964 [[w:Chevrolet|Chevrolet]] and [[w:GMC (automobile)|GMC]])<br /><br />F (1964 [[w:Pontiac (automobile)|Pontiac]] and [[w:Oldsmobile|Oldsmobile]])<br /><br />3 (1964 [[w:Buick|Buick]])||[[w:Fremont Assembly|Fremont Assembly]]||[[w:Fremont, California|Fremont, California]]||United States||[[w:Buick Century|Buick Century]] (1973-1981)<br />[[w:Buick GS|Buick GS]] (1965-1972)<br />[[w:Buick Regal|Buick Regal]] (1973-1981)<br />[[w:Buick Skylark|Buick Skylark]] (1964-1972)<br />[[w:Buick Special|Buick Special]] (1964-1969)<br />[[w:Buick Sport Wagon|Buick Sport Wagon]] (1965)<br />[[w:Chevrolet K5 Blazer#1973–1991|Chevrolet K5 Blazer]] (1977-1979)<br />[[w:Chevrolet C/K|Chevrolet C/K]] (1963-1982)<br />[[w:Chevrolet Celebrity|Chevrolet Celebrity]] (1982)<br />[[w:Chevrolet Chevelle|Chevrolet Chevelle]] (1964-1969, 1973-1977)<br />[[w:Chevrolet El Camino|Chevrolet El Camino]] (1964-1969, 1973-1981)<br />[[w:Chevrolet Malibu|Chevrolet Malibu]] (1978-1981)<br />[[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1973-1981)<br />[[w:Chevrolet Suburban|Chevrolet Suburban]] (1964-1971)<br />[[w:GMC C/K|GMC C/K]] (1963-1982)<br />[[w:GMC Caballero|GMC Caballero]] (1978-1981)<br />[[w:Chevrolet K5 Blazer#1973–1991|GMC Jimmy]] (1977-1979)<br />[[w:GMC Sprint|GMC Sprint]] (1973-1977)<br />[[w:GMC Suburban|GMC Suburban]] (1964-1971)<br />[[w:Oldsmobile Cutlass|Oldsmobile Cutlass]] (1964-1972)<br />[[w:Oldsmobile Cutlass Ciera|Oldsmobile Cutlass Ciera]] (1982)<br />[[w:Oldsmobile Cutlass Supreme|Oldsmobile Cutlass Supreme]] (1966-1972)<br />[[w:Oldsmobile 442|Oldsmobile 442]] (1964-1972)<br />[[w:Oldsmobile Vista Cruiser|Oldsmobile Vista Cruiser]] (1965-1966)<br />[[w:Pontiac Grand Prix#Third generation (1969–1972)|Pontiac Grand Prix]] (1970)<br />[[w:Pontiac LeMans|Pontiac LeMans]] (1964-1974)<br />[[w:Pontiac GTO|Pontiac GTO]] (1964-1973)<br />[[w:Pontiac Tempest|Pontiac Tempest]] (1964-1969)||1963||1982||Located at 45500 Fremont Blvd.<br />
Operated from 1963-1982 as a GM factory. Was originally part of the [[w:Buick-Oldsmobile-Pontiac Assembly Division|Buick-Oldsmobile-Pontiac Assembly Division]] though it also built Chevrolet passenger cars from the beginning. Fremont built GM's midsize A-bodies. Was the first BOP Assembly Division plant to also build Chevrolet and GMC trucks. Regular truck production began June 10, 1963. First production car built September 3, 1963. BOP Assembly Division became GM Assembly Division in 1965. Plant was idled March 1982.<br />
From 1984-2010, operated as [[w:NUMMI|New United Motor Manufacturing Inc. (NUMMI)]], which was a 50/50 joint venture between GM and [[w:Toyota|Toyota]] and assembled both GM and Toyota vehicles.<br />
Sold to [[w:Tesla Motors|Tesla, Inc.]] in May 2010.<ref>{{cite news|author=Sam Abuelsamid|title=Tesla to buy old resources from GM, Toyota for NUMMI plant|url=http://www.autoblog.com/2010/08/22/tesla-to-buy-old-resources-from-gm-toyota/|access-date=20 August 2015|publisher=Autoblog.com|date=August 22, 2010}}</ref> Tesla began production at Fremont in 2012.
|-
|P||[[w:Fabryka Samochodów Osobowych|FSO]]||[[w:Warsaw|Warsaw]]||[[w:Poland|Poland]]||[[w:Opel Astra#F|Opel Astra]]<br />[[w:Opel Vectra#Vectra B (1995–2002)|Opel Vectra]]||1994||2000||Built by an [[w:Fabryka Samochodów Osobowych|FSO]] - GM joint venture operating out of a converted old FSO warehouse.
|-
|W||[[w:Fabryka Samochodów Osobowych|FSO]]||[[w:Warsaw|Warsaw]]||[[w:Poland|Poland]]||[[w:Chevrolet Aveo (T200)|Chevrolet Aveo]]||2007||2011||Built by [[w:Fabryka Samochodów Osobowych|FSO]] for GM as part of a joint venture between [[w:Ukrainian Automobile Corporation|UkrAvto]] (parent of FSO) & GM. [[w:Ukrainian Automobile Corporation|Ukravto]] owned 60% & [[w:GM Daewoo|GM Daewoo]] owned 40%. The production license ended in 2011 & was not renewed.
|-
| ||[[General Motors Gmbh]]||[[w:Berlin|Berlin]]||Germany||[[w:Chevrolet|Chevrolet]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Oakland (automobile)|Oakland]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Buick|Buick]]<br />[[w:Cadillac|Cadillac]]||1927||1932||Replaced Hamburg plant. Located in Borsigwalde area of Berlin. Also predates the acquisition of [[w:Opel|Opel]] by GM.
|-
| ||[[General Motors Gmbh]]||[[w:Hamburg|Hamburg]]||Germany||[[w:Chevrolet|Chevrolet]] trucks||1926||1927||GM's first German plant predating the acquisition of [[w:Opel|Opel]]. Located in a leased warehouse.
|-
| ||[[General Motors Ltd.]]||[[w:Hendon|Hendon]], [[w:England|England]]||United Kingdom||[[w:Chevrolet|Chevrolet]] <br /> [[w:GMC (automobile)|GMC]] ||1924||1930||GM's first British plant predating the acquisition of [[w:Vauxhall Motors|Vauxhall]]. Operated out of a leased plant. When Chevrolet production was moved to Luton in 1930, Hendon was used for parts distribution. Later, Frigidaire made appliances at Hendon. In 1970, Hendon began producing steering columns. In 1971, more automotive components began to be produced in place of Frigidaire appliances. In 1980, GM sold the Hendon site for redevelopment but leased back an area for construction of a new plant for Saginaw Steering Gear. The new plant opened in 1981. See listing for "Saginaw Steering Gear Overseas Corp. - Southampton plant" for more details.
|-
| ||[[General Motors Ltd.]]||[[w:Southampton|Southampton]], [[w:Hampshire|Hampshire]], [[w:England|England]]||United Kingdom||[[w:Chevrolet|Chevrolet]]||1938||1946||Located on West Bay Road in the New Dock area of Southampton. Operations interrupted by German bombing of the UK during WWII. Plant was bombed in 1940 & 1941. Plant was reoccupied in 1946. Plant acquired by GM Ltd. in 1951 and converted to produce automotive components in 1952. See listing for "AC Spark Plug Overseas Corp. - Southampton plant" for more details.
|-
| ||[[w:Ghandhara Industries|Ghandhara Industries]]||[[w:Karachi|Karachi]], [[w:Sindh|Sindh]]||[[w:Pakistan|Pakistan]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Vauxhall Motors|Vauxhall]]<br />[[w:Bedford Vehicles|Bedford trucks and buses]] including [[w:Bedford TJ|Bedford TJ]]<br />[[w:Holden|Holden]]||1953||1970's||Originally a GM owned plant (General Motors Overseas Distribution Corporation). Sold to [[w:Ghandhara Industries|Ghandhara Industries]] Ltd. in 1963. Nationalized in 1972, it then became National Motors Ltd. Privatized to the [[w:Bibojee Group|Bibojee Group]] in 1992 who reverted back to the previous name, Ghandhara Industries. Ghandara Industries assembles Isuzu vehicles today.
|-
| ||[[GM-Auto]]||[[w:Saint-Petersburg|Saint-Petersburg]]||[[w:Russia|Russia]]||[[w:Chevrolet Cruze|Chevrolet Cruze]]<br />[[w:Opel Astra|Opel Astra]]
[[w:Chevrolet Trailblazer (SUV)#Second generation (RG; 2011)|Chevrolet Trailblazer]]
[[w:Chevrolet Captiva#First generation (C100, C140; 2006)|Chevrolet Captiva]]<br />[[w:Opel Antara|Opel Antara]]
||2007||2015||Includes operations at the temporary "Arsenal plant" & the permanent plant in [[w:Shushary, Saint Petersburg|Shushary]]. GM ceased most operations in Russia back in 2015 and the GM-Auto plant closed. Sold to Hyundai Motor in 2020.
|-
| ||[[w:GM-AvtoVAZ|GM-AvtoVAZ]]||[[w:Tolyatti|Togliatti]]||[[w:Russia|Russia]]||[[w:Chevrolet Niva|Chevrolet Niva]]<br />[[w:Chevrolet Viva|Chevrolet Viva]]||2002||2019||Was originally owned 41.5% by GM, 41.5% by AvtoVAZ, & 17% by [[w:EBRD|EBRD]]. In 2012, [[w:EBRD|EBRD]] was bought out & GM-AvtoVAZ became 50/50 owned by GM & AvtoVAZ. The GM-AvtoVAZ joint venture was dissolved in 2019 when AvtoVAZ bought out GM. The Chevrolet Niva was renamed Lada Niva Travel during 2020. AvtoVAZ was a part of [[w:Renault Group|Renault Group]] from 2016 until 2022.
|-
|4||GM España S.A.||[[w:Figueruelas|Figueruelas]], [[w: Zaragoza (province)| Zaragoza (province)]]||[[w:Spain|Spain]]||[[w:Opel Corsa|Opel/Vauxhall Corsa]] A, B, C, D, E (5 door, van)<br />[[w:Opel Meriva|Opel/Vauxhall Meriva]] A, B<br />[[w:Opel Combo#Combo C (2001-2012)|Opel/Vauxhall/Holden Combo]] C<br />[[w:Opel Tigra#Tigra A (1994–2000)|Opel/Vauxhall Tigra A]]<br />[[w:Vauxhall Nova|Vauxhall Nova]]<br />[[w:Holden Barina#Third generation (SB; 1994–2000)|Holden Barina (SB)]]<br />[[w:Holden Barina#Fourth generation (XC; 2001–2005)|Holden Barina (XC)]]||1982||2017|| [[w:Adam Opel AG|Opel plant]]. Sold to [[w:PSA Group|PSA Group]] in 2017. Part of [[w:Stellantis|Stellantis]] since 2021.
|-
| ||GM Indonesia||Pondok Ungu, [[w:Bekasi|Bekasi]], [[w:West Java|West Java]]||[[w:Indonesia|Indonesia]]||After reopening:<br /> [[w:Chevrolet Spin|Chevrolet Spin]]<br /><br />Before temporary closure in 2005:<br /> [[w:Chevrolet S-10 Blazer#Second generation (1995)|Chevrolet Blazer]]<br />[[w:Opel Blazer|Opel Blazer]]<br />[[w:Opel Astra#F|Opel Optima]]<br />[[w:Opel Vectra#Vectra A (1988–1995)|Opel Vectra]]||1995||2015||PT Garmak Motor assembled models under license from GM beginning in 1976, before the establishment of their joint venture with GM in 1993. These license built models include: [[w:Bedford Vehicles|Bedford]] trucks, [[w:Bedford HA#The BTV|Morina]], [[w:Opel Rekord Series E|Opel Rekord E 3-d panel van]], [[w:Opel Kadett#Kadett D (1979–1984)|Opel Kadett D]], [[w:Isuzu Faster#First generation (1972–1980)|Chevrolet LUV (Mk 1)]], [[w:Isuzu Faster#Second generation (1980–1988)|Chevrolet LUV (Mk II)]], & [[w:Isuzu Trooper#First generation (1981–1991)|Chevrolet Trooper/Stallion]].
Originally established as PT General Motors Buana Indonesia, which was owned 60% by GM and 40% by PT Garmak Motor. GM bought out Garmak in 1997 taking 100% of the shares. The assembly plant was closed from 2005-2011 and reopened in 2012 to make the Chevy Spin. Closed again in June 2015.
|-
| ||GM Java||[[w:Tanjung Priok|Tanjung Priok]], [[w:North Jakarta|North Jakarta]], [[w:Jakarta|Jakarta]]||[[w:Indonesia|Indonesia]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Opel|Opel]] ([[w:Opel 1.2 Liter|1.2 Liter]])<br />[[w:Vauxhall Motors|Vauxhall]] ([[w:Vauxhall 10-4|10-4]])||1927||1953||First Car Factory in what is now Indonesia (at the time, it was the Dutch East Indies). GM pulled out of Indonesia in 1954 and liquidated the company by 1956. Sold to P.N. Gaja Motors, which assembled the Opel Rekord and Kadett in the 1960's. Eventually became part of Astra International and its joint ventures with Toyota/Daihatsu.
|-
| ||GM Malaysia Sdn. Bhd.||[[w:Tampoi, Johor|Tampoi]], [[w:Johor|Johor]]||[[w:Malaysia|Malaysia]]||[[w:Opel Ascona|Opel Ascona]]<br />[[w:Opel Commodore|Opel Commodore]]<br />[[w:Opel Gemini|Opel Gemini]]<br />[[w:Opel Kadett|Opel Kadett]]<br />[[w:Opel Manta|Opel Manta]]<br />[[w:Opel Rekord|Opel Rekord]]<br />[[w:Bedford HA#The BTV|Bedford Harimau]]<br />[[w:Holden|Holden]]||1968||1982||Originally Capital Motor Assembly Corp., which assembled Opel models under license from GM beginning in 1968. These license built models include: [[w:Opel Commodore|Opel Commodore]] A, [[w:Opel Kadett|Opel Kadett B]], [[w:Opel Rekord Series C|Opel Rekord C]], & components. Capital Motor also assembled cars for Honda and Datsun (Nissan). GM bought Capital Motor Assembly in 1971 and renamed it GM Malaysia. Malaysian government policies that said Malaysians had to own a majority of local auto assembly plants forced GM to sell GM Malaysia to Oriental Holdings in 1980 which then renamed the unit Oriental Assemblers. Assembly of GM vehicles ended in 1982. Oriental Assemblers continued making Honda cars at this plant until around 2004.
|-
| ||GM Philippines, Inc.||[[w:Paco, Manila|Paco district]], [[w:Manila|Manila]]||[[w:Philippines|Philippines]]||[[w:Buick Electra|Buick Electra]]<br />[[w:Chevrolet Bel Air|Chevrolet Bel Air]]<br />[[w:Chevrolet Camaro (first generation)|Chevrolet Camaro]]<br />[[w:Chevrolet Impala|Chevrolet Impala]]<br />[[w:Chevrolet Malibu|Chevrolet Malibu]]<br />Chevrolet trucks<br />[[w:Holden EH|Holden EH]]<br />[[w:Holden HD|Holden HD]]<br />[[w:Holden HR|Holden HR]]<br />[[w:Holden HK|Holden HK]]<br />[[w:Holden HT|Holden HT]]<br />[[w:Holden HG|Holden HG]]<br />[[w:Holden HQ|Holden HQ]]<br />[[w:Holden Torana|Holden Torana]]<br />[[w:Isuzu Gemini|Isuzu Gemini]]<br />[[w:Opel Ascona|Opel Ascona]]<br />[[w:Opel Kadett|Opel Kadett]]<br />[[w:Opel Manta|Opel Manta]]<br />[[w:Opel Rekord|Opel Rekord]]<br />[[w:Pontiac Parisienne#Philippines|Pontiac Parisienne]]<br />[[w:Vauxhall Victor|Vauxhall Victor]]<br />[[w:Vauxhall Viva|Vauxhall Viva]]<br />[[w:Vauxhall VX4/90|Vauxhall VX4/90]]<br />[[w:Bedford HA#The BTV|GM Amigo/Tiger/Harabas]]<br />[[w:Bedford Vehicles|Bedford trucks]] ||1953||1985||Originally Yutivo Sons Hardware Co. Yutivo assembled various models under license from GM beginning in 1953. GM bought a 49% stake in Yutivo in 1972 and renamed it GM Philippines. Isuzu invested in the company in 1979 and it was renamed GM Pilipinas, Inc. Assembly of GM vehicles ended in 1985 and GM sold the plant to Isuzu in 1994. Isuzu closed this plant and company in 1995 and replaced it with a new plant in Biñan, Laguna owned by a new subsidiary (Isuzu Philippines Corporation).
|-
|G||[[w:GM Manufacturing Poland|GM Manufacturing Poland Sp. z o.o.]]||[[w:Gliwice|Gliwice]]||[[w:Poland|Poland]]||[[w:Opel Astra#Astra K (B16; 2015)|Opel Astra]] K (5-door)<br />[[w:Holden Astra#Seventh generation (BK, BL; 2016)|Holden Astra (BK)]] (5-door)<br />[[w:Opel Astra#Astra J (P10; 2009)|Opel/Vauxhall Astra J]] (3-door, 4-door sedan, 5-door)<br />[[w:Opel Astra#Astra H (A04; 2004)|Opel Astra Classic III]] sedan<br />[[w:Holden Astra#Sixth generation (PJ; 2015)|Holden Astra (PJ)]] (GTC, VXR)<br />[[w:Opel Astra#Astra H (A04; 2004)|Opel Astra H]] sedan<br />[[w:Opel Astra#Astra G (T98; 1998)|Opel Astra Classic II]]<br />[[w:Holden Astra#Fourth generation (TS; 1998)|Holden Astra Classic (TS)]]<br />[[w:Opel Astra#Astra F (T92; 1992)|Opel Astra Classic I]]<br />[[w:Opel Agila#First generation (H00; 2000)|Opel/Vauxhall Agila A]]<br />[[w:Suzuki Solio#First generation (MA63S/MA64S/MA32S; 1999)|Suzuki Wagon R+ (2005-2007)]]<br />[[w:Opel Cascada|Opel/Vauxhall Cascada]]<br />[[w:Buick Cascada|Buick Cascada]]<br />[[w:Holden Cascada|Holden Cascada (CJ)]]<br />[[w:Opel Zafira#Zafira B (2005)|Opel/Vauxhall Zafira B]]||1998||2019|| [[w:Adam Opel AG|Opel]] plant. Sold to [[w:PSA Group|PSA Group]] in 2017. Continued to supply the [[w:Buick Cascada|Buick Cascada]] to GM through 2019. Part of [[w:Stellantis|Stellantis]] since 2021.
|-
| ||GM Powertrain Fredericksburg||[[w:Fredericksburg, Virginia|Fredericksburg, Virginia]]||United States||Torque converter clutches for automatic transmissions||1979||2010|| Located at 11032 Tidewater Trail. Originally part of Delco Moraine Division, which bought the plant in 1978 from American Poclain. Moved to GM Powertrain division in 1993. Sold to idX Corp. in 2017.
|-
| ||[[w:GM Powertrain Poland|GM Powertrain Poland]]||[[w:Tychy|Tychy]]||[[w:Poland|Poland]]||Diesel engines including the Isuzu [[w:Circle L engine|Circle L engine]]||1999||2017|| [[w:Adam Opel AG|Opel]] plant. Originally founded as Isuzu Motors Polska (ISPOL) in 1996. GM bought 60% in 2002 & the remaining 40% in 2013. Sold to [[w:PSA Group|PSA Group]] along with Opel in 2017. Part of [[w:Stellantis|Stellantis]] since 2021.
|-
| ||[[w:Grand Blanc Metal Center|Grand Blanc Metal Center]]||[[w:Grand Blanc, Michigan|Grand Blanc, Michigan]]||United States||Metal stampings and metal fabrication of body components, Tooling jigs-and-fixtures||1942||2013||Located at 10800 S. Saginaw St. Originally built by the US govt. and opened in 1942 to build tanks. Also known as the Fisher Body Tank Plant as it was operated by GM's Fisher Body Div. Built [[w:M4 Sherman|M4 Sherman]] (M4A2, M4A3 & M4A3E2) and [[w:M26 Pershing|M26 Pershing]] (T26E3) tanks as well as M10 & M10A1 "Wolverine" Tank Destroyers during WWII and [[w:M48 Patton|M48 Patton]] (M48 and M48A1) tanks beginning in 1952 for the Korean War. Grand Blanc also made a 90mm main gun that Grand Blanc installed on the last 300 M10A1s built at Grand Blanc, thus converting them into the M36 "Jackson". The Grand Blanc-built 90mm main gun was also installed on other M10A1s by other companies and by Grand Blanc on the M4A3 Sherman tank to create the M36B1 & M36B2 tank destroyers. Grand Blanc also supplied 2,445 turrets and 1,511 hulls for the 2,507 M18 Hellcats built by the Buick Division. Production ended in 1945 as WWII wound down. Buick then leased Grand Blanc and used it as a warehouse from 1947 until Fisher Body bought it in 1951. The M48 Patton was built from 1952-1955. Converted in 1955 into an automotive body metal fabricating plant. Became part of GM's Metal Fabricating Division in 1994 and became Grand Blanc Weld Tool Center in 2002, making tooling for GM. Closed July 2013. Most of the work done at Grand Blanc was transferred to Parma, OH. Now called Grand Blanc Center, apparently used as a warehouse.
|-
| ||Grand Rapids Metal Center||[[w:Wyoming, Michigan|Wyoming, Michigan]]||United States|| ||1936||2009||Located at 300 36th Street SW. Metal fabricating plant. Demolished.
|-
| ||Guide Lamp Division||[[w:Anderson, Indiana|Anderson, Indiana]]||United States||Headlamp, Taillamp assemblies||1929||1998||GM bought Guide Motor Lamp Manufacturing Company in 1928, becoming part of the Delco Remy division initially before becoming the separate Guide Lamp Division in 1929. Guide Lamp Division was renamed Guide Division in 1975. Guide Division merged with Fisher Body in 1984 to create Fisher Guide. Fisher Guide then merged with the Inland Division in 1990 to form Inland Fisher Guide. In 1998, Guide operations were sold to [[w:Palladium Equity Partners|Palladium Equity Partners]] which turned the operation into Guide Corp. In 2007, Guide Corp. closed down.
|-
|H||[[w:General Motors India|Halol]]||[[w:Halol|Halol]], [[w:Gujarat|Gujarat]]||[[w:India|India]]||[[w:Chevrolet Sail#India|Chevrolet Sail U-VA]] (hatchback)<br />[[w:Chevrolet Sail#India|Chevrolet Sail]] (sedan)<br />[[w:Chevrolet Cruze|Chevrolet Cruze]]<br />[[w:Chevrolet Tavera|Chevrolet Tavera]]||1995||2017||Past models:
[[w:Chevrolet Aveo (T200)|Chevrolet Aveo]], [[w:Chevrolet SRV|Chevrolet SRV]] (sports hatch), [[w:Chevrolet Optra|Chevrolet Optra]], [[w:Chevrolet Enjoy|Chevrolet Enjoy]], [[w:Opel Corsa|Opel Corsa]](sedan), [[w:Opel Corsa|Opel Corsa Sail]] (hatchback), [[w:Opel Corsa|Opel Corsa Swing]](station wagon), [[w:Opel Astra|Opel Astra]]. <br />
The new [[w:General Motors India|GM India]] began as a 50/50 joint venture with [[w:Hindustan Motors|Hindustan Motors]] in 1994.The Halol plant was bought from [[w:Hindustan Motors|Hindustan Motors]] in 1995. GM bought out [[w:Hindustan Motors|Hindustan Motors]] in 1999.
Sold to SAIC to produce [[w:MG Motor India|MG Motor India]] vehicles in 2017.
|-
| ||Fisher Body - Hamilton-Fairfield Stamping Plant||[[w:Hamilton, Ohio|Hamilton, Ohio]]||United States||Stampings & Bodies for GM vehicles||1947||1988||Located at 4400 Dixie Highway. Now the Fisher Industrial Park.
|-
| ||Harrison Radiator Division - Moraine||[[w:Moraine|Moraine]], [[w:Ohio|Ohio]]||United States||Machining and assembly of automotive A/C compressors, valves, and accumulator dehydrators||1941||1999||Located at 3600 Dryden Road. Originally built for [[w:Frigidaire|Frigidaire]]. In 1975, automotive and appliance operations were split with the automotive operations becoming Delco Air Conditioning Division. [[w:Frigidaire|Frigidaire]] appliance division was sold in 1979. Delco Air Conditioning Division merged into Harrison Radiator Division in 1981. Spun off with [[w:Delphi Automotive Systems|Delphi Automotive Systems]] in 1999. Became Delphi Harrison Thermal Systems. Closed by Delphi in 2003. Demolished by 2005.
|-
|H1, H2,<br> H3, H4 [https://www.uniquecarsandparts.com.au/holden_identification]||Holden Acacia Ridge Plant||[[w:Acacia Ridge, Queensland|Acacia Ridge, Queensland]]||[[w:Australia|Australia]]||[[w:Holden|Holden]] models including:<br /> [[w:Holden HD|Holden HD]]<br />[[w:Holden HR|Holden HR]]<br />[[w:Holden HK|Holden HK]]<br />[[w:Holden HT|Holden HT]]<br />[[w:Holden HG|Holden HG]]<br />[[w:Holden Torana|Holden Torana]]<br />[[w:Holden HQ|Holden HQ]]<br />[[w:Holden HJ|Holden HJ]]<br />[[w:Holden HX|Holden HX]]<br />[[w:Holden HZ|Holden HZ]]<br />[[w:Holden Gemini#First generation|Holden Gemini TX, TC, TD, TE, TF, TG]]<br />[[w:Holden Commodore (VC)|Holden Commodore (VC)]]<br />[[w:Holden Camira|Holden Camira]]||1966||1984||[[w:Holden|Holden]] plant. Replaced Fortitude Valley plant.
|-
|A||Holden Birkenhead Plant||[[w:Birkenhead, South Australia|Birkenhead, South Australia]]||[[w:Australia|Australia]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Oakland (automobile)|Oakland]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Buick|Buick]]<br />[[w:Cadillac|Cadillac]]<br />[[w:GMC (automobile)|GMC]]<br />[[w:Vauxhall Motors|Vauxhall]]<br />[[w:Bedford Vehicles|Bedford]]<br />[[w:Holden|Holden]]<br />||1926||1981||[[w:Holden|Holden]] plant. Built by GM Australia before it merged with Holden's Motor Body Builders Ltd. Plant was closed from 1931 until 1938. Also produced military vehicles & equipment during WWII. Before WWII, Birkenhead combined bodies made in Woodville with CKD chassis assembled in Melbourne. After WWII, Birkenhead assembled CKD chassis imported from the US, Canada, & the UK and combined them with bodies made in Woodville. Once Holden brand cars started to be made in 1948, body and chassis components came from Woodville & powertrain came from Fishermans Bend and complete cars were assembled in Birkenhead. Vehicle production ended in 1965 when the Elizabeth plant started making complete vehicles. Birkenhead was then used as an export boxing area, a parts warehouse, and also assembled earthmoving equipment for Terex (then owned by GM) from 1969 until the mid 1970's.
|-
|M,<br> J1, J2, J3, <br> and J4-J9||Holden Dandenong Plant||[[w:Dandenong|Dandenong]], [[w:Victoria, Australia|Victoria]]||[[w:Australia|Australia]]||[[w:Holden|Holden]] models including:<br /> [[w:Holden FE|Holden FE]]<br />[[w:Holden FC|Holden FC]]<br />[[w:Holden FB|Holden FB]]<br />[[w:Holden EK|Holden EK]]<br />[[w:Holden EJ|Holden EJ]]<br />[[w:Holden EH|Holden EH]]<br />[[w:Holden HD|Holden HD]]<br />[[w:Holden HR|Holden HR]]<br />[[w:Holden HQ|Holden HQ]]<br />[[w:Holden HZ|Holden HZ]]<br />[[w:Holden HK|Holden HK]]<br />[[w:Holden Torana|Holden Torana]] LH, LX, UC<br />[[w:Holden Sunbird|Holden Sunbird]] LX, UC<br />[[w:Holden Commodore (VB)|Holden Commodore (VB)]]<br />[[w:Holden Commodore (VC)|Holden Commodore (VC)]]<br />[[w:Holden Commodore (VH)|Holden Commodore (VH)]]<br />[[w:Holden Commodore (VK)|Holden Commodore (VK)]]<br />[[w:Holden Commodore (VL)|Holden Commodore (VL)]]<br />[[w:Holden Camira|Holden Camira]]<br />[[w:Holden Nova|Holden Nova]] LE, LF <br /> [[w:Toyota Corolla (E90)#Australia|Toyota Corolla (E90)]]<br />Bedford by Isuzu & [[w:Isuzu|Isuzu]] trucks<br />Body making<br />Torque converters & other components||1956|||1996||[[w:Holden|Holden]] plant. Also assembled Chevrolet trucks, Bedford vans & trucks and Frigidaire appliances. Built the 1 millionth Holden (an EJ) in October 1962, the 2 millionth Holden (an HK) in March 1969, and the 4 millionth Holden (a VC Commodore) in June 1981. Vehicle production by Holden ceased in 1988, vehicle production by Toyota for itself and for Holden lasted from 1989-1994 under a plant lease agreement<ref>{{cite web |author=Takahiro Fujimoto |date=October 1998 |url=http://e-server.e.u-tokyo.ac.jp/cirje/research/dp/98/cf23/dp.pdf |title=Toyota Motor Manufacturing Australia in 1995: An Emergent Global Strategy |publisher=[[w:University of Tokyo|University of Tokyo]] |page=23 |archive-url=https://www.webcitation.org/5xJZkwEEX?url=http://e-server.e.u-tokyo.ac.jp/cirje/research/dp/98/cf23/dp.pdf |archive-date=2011-03-20 |url-status=dead }}</ref>. Minor assembly until 1996. Then became known as Holden Service Parts Operations (HSPO) which manages the distribution and marketing of Holden service parts and accessories for the Holden dealer network and international customers.
|-
|L,<br><br> L1, L2, <br> L3-L5||Holden Elizabeth Plant||[[w:Elizabeth, South Australia|Elizabeth, South Australia]]||[[w:Australia|Australia]]||[[w:Holden Berlina|Holden Berlina]]<br />[[w:Holden Calais|Holden Calais]]<br /> [[w:Holden Caprice|Holden Caprice]]<br /> [[w:Holden Commodore|Holden Commodore]]<br /> [[w:Holden Ute|Holden Ute]]<br /> [[w:Holden Statesman|Holden Statesman]]<br /> [[w:Vauxhall VXR8|Vauxhall VXR8]]<br />[[w:Chevrolet SS (2013)|Chevrolet SS]] (2014-2017)<br />[[w:Chevrolet Caprice PPV|Chevrolet Caprice PPV]] (2011-2017)
|1959||2017||[[w:Holden|Holden]] manufacturing plant. Holden Vehicle Manufacturing Operations. Located at 180 Philip Highway. First opened as a body hardware plant making components, then expanded to making complete vehicle bodies in 1962, then expanded to making complete vehicles in 1965. Elizabeth became Holden’s only remaining car manufacturing plant in Australia in 1994. Built the 5 millionth Holden (a VN Calais) in August 1990, the 6 millionth Holden (a VX Commodore SS) in June 2001, and the 7 millionth Holden (a VE Commodore) in August 2008. Total number of vehicles built at all plants in Australia by Holden (including export models) from 1948-2017 is 7,687,675. Production ended October 20, 2017. Final vehicle made at Elizabeth and final Australian-built Holden was a VFII Commodore Redline with a manual transmission.[https://www.carsales.com.au/editorial/details/holdens-manufacturing-closure-by-the-numbers-109466/] Epicurean Food Group bought the site in 2023 and is using it as a farm to grow mushrooms.
Cars produced before its final year before closure included the [[w:Pontiac GTO#Fifth generation|Pontiac GTO]] (2004-2006), [[w:Vauxhall Monaro|Vauxhall Monaro]], [[w:Holden Monaro|Holden Monaro]], [[w:Pontiac G8|Pontiac G8]] (2008-2009), [[w:Holden Gemini#Second generation|Holden Gemini (RB)]], [[w:Chevrolet Cruze#First generation (J300; 2008)|Holden Cruze (JH)]], [[w:Holden Torana|Holden Torana]], [[w:Opel Vectra#Vectra B (1995–2002)|Holden Vectra (JS)]], [[w:Statesman (automobile)|Statesman brand WB]], [[w:Holden WB|Holden WB]] Ute & One-Tonner, [[w:Holden Adventra|Holden Adventra]], [[w:Holden Crewman|Holden Crewman]], [[w:Chevrolet Lumina#Holden-based models|Chevrolet Lumina]], [[w:Chevrolet Caprice#Fifth generation (1999–2006)|Chevrolet Caprice]], [[w:Chevrolet Cruze#First generation (J300; 2008)|Chevrolet Cruze]] 5-door, [[w:Chevrolet Omega|Chevrolet Omega]] B & C, [[w:Buick Royaum|Buick Royaum]], [[w:Daewoo Statesman|Daewoo Statesman]], and [[w:Daewoo Veritas|Daewoo Veritas]]. Also, [[w:United Australian Automobile Industries#Toyota Lexcen|Toyota Lexcen]].
|-
| ||Holden Fishermans Bend Plant (Port Melbourne)||[[w:Port Melbourne|Port Melbourne]], [[w:Victoria, Australia|Victoria]]||[[w:Australia|Australia]]||[[w:GM High Feature engine|Holden Alloytec V6 engine]]<br />[[w:Buick V6 engine#3800 V6|Buick V6]]<br />[[w:GM Family II engine|GM Family II I4 engine]]<br />[[w:Holden V8 engine]]<br />[[w:Holden straight-six motor#Starfire|Holden Starfire I4]]<br />[[w:Holden straight-six motor|Holden straight-six motor]]<br />Manual transmissions<br />[[w:Holden Salisbury differential|Holden Banjo/Salisbury differentials]]<br />Axles<br />Stampings<br />Components<br />Foundry ||1936||2016||Headquarters of GM Holden Ltd. <br /> Holden's Engine Company/Holden Engine Operations.<br />
Used to build vehicles as well including the [[w:Holden 48-215|Holden 48-215]] & [[w:Holden FJ|Holden FJ]]. Vehicle assembly ended in 1956 and was moved to Dandenong. <br /> Versions of the Alloytec/High Feature V6 were also supplied to [[w:Saab Automobile|Saab]] & [[w:Alfa Romeo|Alfa Romeo]] from this plant. <br />
Sold to the Victorian state Government in 2016.
|-
|B||Holden Fortitude Valley Plant||[[w:Fortitude Valley|Fortitude Valley]], [[w:Queensland|Queensland]]||[[w:Australia|Australia]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Oakland (automobile)|Oakland]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Buick|Buick]]<br />[[w:Cadillac|Cadillac]]<br />[[w:GMC (automobile)|GMC]]<br />[[w:Vauxhall Motors|Vauxhall]]<br />[[w:Bedford Vehicles|Bedford]]<br />[[w:Holden 48-215|Holden 48-215]]<br />[[w:Holden FJ|Holden FJ]]<br />[[w:Holden FE|Holden FE]]<br />[[w:Holden FC|Holden FC]]<br />[[w:Holden FB|Holden FB]]<br />[[w:Holden EK|Holden EK]]<br />[[w:Holden EJ|Holden EJ]]<br />[[w:Holden EH|Holden EH]]<br />||1927||1965||[[w:Holden|Holden]] plant. Built by GM Australia before it merged with Holden's Motor Body Builders Ltd. Plant was closed from 1931 until 1934. Fortitude Valley combined bodies made in Woodville with CKD chassis assembled in Melbourne. Replaced by Acacia Ridge plant.
|-
| ||Holden Marrickville Plant||[[w:Marrickville, New South Wales|Marrickville, New South Wales]]||[[w:Australia|Australia]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Oakland (automobile)|Oakland]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Marquette (automobile)#Buick brand|Marquette]]<br />[[w:Buick|Buick]]<br />[[w:Cadillac|Cadillac]]<br />[[w:GMC (automobile)|GMC]]<br />[[w:Vauxhall Motors|Vauxhall]]<br />[[w:Bedford Vehicles|Bedford]]||1926||1940||[[w:Holden|Holden]] plant. Built by GM Australia before it merged with Holden's Motor Body Builders Ltd. Plant was closed from 1931 until 1934. Marrickville combined bodies made in Woodville with CKD chassis assembled in Melbourne. Building sold. Replaced by Pagewood plant.
|-
| ||Holden Melbourne Plant (City Road)||[[w:Melbourne|Melbourne]], [[w:Victoria, Australia|Victoria]]||[[w:Australia|Australia]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Oakland (automobile)|Oakland]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Buick|Buick]]<br />[[w:Cadillac|Cadillac]]<br />[[w:GMC (automobile)|GMC]]<br />[[w:Vauxhall Motors|Vauxhall]]||1926||1936||[[w:Holden|Holden]] plant. Acquired by GM Australia before it merged with Holden's Motor Body Builders Ltd. Melbourne combined bodies made in Woodville with CKD chassis assembled in Melbourne. Building sold. Replaced by Fishermans Bend plant.
|-
|P,<br> L6||Holden Mosman Park Plant||[[w:Mosman Park, Western Australia|Mosman Park (formerly Cottesloe Beach)]], [[w:Western Australia|Western Australia]]||[[w:Australia|Australia]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Oakland (automobile)|Oakland]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Buick|Buick]]<br />[[w:Cadillac|Cadillac]]<br />[[w:GMC (automobile)|GMC]]<br />[[w:Vauxhall Motors|Vauxhall]]<br />[[w:Bedford Vehicles|Bedford]]<br />[[w:Holden|Holden]]<br />||1926||1972||[[w:Holden|Holden]] plant. Built by GM Australia before it merged with Holden's Motor Body Builders Ltd. Plant was closed from 1932 until 1935. Also produced military vehicles & equipment during WWII. Before WWII, Mosman Park combined bodies made in Woodville with CKD chassis assembled in Melbourne. After WWII, Mosman Park assembled CKD chassis imported from the US, Canada, & the UK and combined them with bodies made in Woodville. Once Holden brand cars started to be made in 1948, body and chassis components came from Woodville & powertrain came from Fishermans Bend and final assembly was done in Mosman Park. Plant was closed down in 1972. Demolished in the early 1990s.
|-
|S,<br> H5, H6, H7,<br> H8, H9||Holden Pagewood Plant||[[w:Pagewood, New South Wales|Pagewood, New South Wales]]||[[w:Australia|Australia]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Vauxhall Motors|Vauxhall]]<br />[[w:Bedford Vehicles|Bedford]]<br />[[w:Holden 48-215|Holden 48-215]]<br />[[w:Holden FJ|Holden FJ]]<br />[[w:Holden FE|Holden FE]]<br />[[w:Holden FC|Holden FC]]<br />[[w:Holden FB|Holden FB]]<br />[[w:Holden EK|Holden EK]]<br />[[w:Holden EJ|Holden EJ]]<br />[[w:Holden EH|Holden EH]]<br />[[w:Holden HD|Holden HD]]<br />[[w:Holden HR|Holden HR]]<br />[[w:Holden HK|Holden HK]]<br />[[w:Holden HT|Holden HT]]<br />[[w:Holden HG|Holden HG]]<br />[[w:Holden Monaro|Holden Monaro]]<br />[[w:Holden HQ|Holden HQ]]<br />[[w:Holden HJ|Holden HJ]]<br />[[w:Holden HX|Holden HX]]<br />[[w:Holden HZ|Holden HZ]]<br />[[w:Holden Torana|Holden Torana]]<br /> [[w:Holden Commodore (VB)|Holden Commodore (VB)]]<br />[[w:Statesman (automobile)|Statesman brand HQ-HZ]]<br />Body making||1940||1980||[[w:Holden|Holden]] plant. Also produced military equipment during WWII. Before WWII, Pagewood combined bodies made in Woodville with CKD chassis assembled in Melbourne. After WWII, Pagewood assembled CKD chassis imported from the US, Canada, & the UK and combined them with bodies made in Woodville. Also made Frigidaire appliances. Built the 3 millionth Holden (an HQ) in June 1974. Vehicle production ended in 1980 while plant closedown operations extended into 1981.
|-
| ||[[w:Holden Woodville Plant|Holden Woodville Plant]]||[[w:Woodville, South Australia|Woodville, South Australia]]||[[w:Australia|Australia]]||[[w:Holden|Holden]]:<br />Stamping<br />Body making<br />Paint shop<br />Body Hardware<br />Trim<br />Tool & Die<br />[[w:Tri-Matic|Tri-Matic]] automatic transmission||1923||1965||[[w:Holden|Holden]] plant. Built before Holden was taken over by GM. Built car bodies for many brands of cars including GM brands (Chevrolet, Pontiac, Oakland, Oldsmobile, Marquette, Buick, LaSalle, Cadillac, GMC, Vauxhall, & Bedford) and non-GM brands (Chrysler, DeSoto, Dodge, Plymouth, Willys, Hudson, Nash, Studebaker, Austin, Morris, Rover, Standard, Fiat, & others). (Holden Motor Body Works.) Also produced military equipment during WWII. Once Holden brand cars started to be made in 1948, body and chassis components were made in Woodville. Also produced replacement parts for discontinued models. Most operations transferred to Elizabeth between 1959 & 1965. Built the Tri-Matic automatic transmission from 1969-1987. Plant sold in 1984. Tri-Matic production area was leased back until production ended. Other companies continued production of spare parts.
|-
|V||[[w:IBC Vehicles|IBC Vehicles Ltd.]]/<br>[[w:GMM Luton|GMM Luton]]<ref>{{cite web |title=Company Profile |publisher=Vauxhall |url=http://media.gm.com/gb/vauxhall/en/company/c_company-profile/index.html |access-date=2009-06-29 |archive-url=https://web.archive.org/web/20090629105853/http://media.gm.com/gb/vauxhall/en/company/c_company-profile/index.html |archive-date=2009-06-29}}</ref>||[[w:Luton|Luton]], [[w:Bedfordshire|Bedfordshire]]||[[w:United Kingdom|United Kingdom]]||[[w:Bedford CF#CF2|Bedford CF2]]<br />[[w:Isuzu Fargo#Bedford Midi / Vauxhall Midi|Bedford/Vauxhall/GME/Isuzu Midi/<br>Bedford Seta/Vauxhall Albany]]<br />[[w:Suzuki Carry#Bedford Rascal|Bedford/Vauxhall/GME Rascal]]<br />[[w:Suzuki Carry#Export models|Suzuki Super Carry]]<br />[[w:Isuzu MU#First generation (UCS55/UCS69GW; 1989–1998)|Opel/Vauxhall Frontera A]]<br />[[w:Isuzu MU#Second generation (UER25FW, UES25FW, UES73FW; 1998–2004)|Opel/Vauxhall Frontera B]]<br />[[w:Holden Frontera#First generation (UCS55/UCS69GW; 1989–1998)|Holden Frontera (UT)]]<br />[[w:Renault Trafic#Second generation (X83; 2001)|Opel/Vauxhall Vivaro]] A (low roof versions only)<br />[[w:Renault Trafic#Third generation (X82; 2014)|Opel/Vauxhall Vivaro]] B (low roof versions only)<br />[[w:Renault Trafic#Second generation (X83; 2001)|Renault Trafic (X83)]] (low roof versions only)<br />[[w:Renault Trafic#Second generation (X83; 2001)|Nissan Primastar (X83)]] (low roof versions only)||1950 (as AA Block of Luton plant)<br><br>1984 (as Bedford Luton Van Plant)||2017|| [[w:Vauxhall Motors|Vauxhall plant]]. Began as the Bedford van plant when Bedford vans were moved out of the Luton passenger car plant and into a separate, nearby plant (AA Block [body assembly and paint] &<br> K Block [trim and final assembly] of the Luton complex) connected by a bridge so that components for the CF van made in the car plant could be easily transferred to the van plant. Was part of the Bedford Commercial Vehicles Division of the GM Overseas Commercial Vehicles Corp. CF2 production ended in July 1987. Built the Isuzu-designed Midi from December 20, 1984 through May 23, 1996 though the Midi was still available through the 1997 model year. An upscale, 7-psgr. variant of the Midi called the Vauxhall Albany was built for 1991 only. Built the Suzuki-designed Rascal from February 1986 through July 3, 1993. Also built the Rascal's Suzuki counterpart, the Super Carry, for the UK & other European markets. Became a joint venture with [[w:Isuzu|Isuzu]] called IBC Vehicles Ltd., which was incorporated on January 20, 1987. Production under IBC Vehicles began in October 1987 after the plant was reorganized and staff was retrained. GM owned 60% & Isuzu held 40%. The Bedford brand was discontinued and replaced by the Vauxhall brand on light commercial vehicles as of June 1, 1990. GM bought Isuzu's stake in IBC Vehicles back in Sept. 1998 & the operation was again a subsidiary of GM. It was then renamed GMM (GM Manufacturing) Luton. Began making Vivaro and Trafic midsize commercial vans in 2001, followed by the Primastar in 2002. Frontera SUV ended production at the end of 2003 and GMM Luton focused solely on light commercial vehicles from that point onwards. Sold to [[w:PSA Group|PSA Group]] in 2017. Part of [[w:Stellantis|Stellantis]] since 2021. Production ended March 28, 2025. Last vehicle produced was a Vauxhall Vivaro. Site has been sold for redevelopment into an industrial park.
|-
| ||[[w:IDA-Opel|IDA-Opel]]||[[w:Kikinda|Kikinda]], [[w:Socialist Republic of Serbia|Socialist Republic of Serbia]]||[[w:Yugoslavia|Yugoslavia]]||[[w:Opel Ascona#Ascona C (1981–1988)|Opel Ascona]] C<br />[[w:Opel Corsa#Corsa A (S83; 1982)|Opel Corsa]] A<br />[[w:Opel Kadett|Opel Kadett]] D & E<br />[[w:Opel Kikinda#Senator A (1978–1986)|Opel Kikinda]] (Senator A)<br />[[w:Opel Omega#Omega A (1986–1994)|Opel Omega]] A<br />[[w:Opel Rekord Series E|Opel Rekord]] E<br />[[w:Opel Vectra#Vectra A (1988–1995)|Opel Vectra]] A<br />Iron castings, brake, and axle components||1977||1992|| [[w:Adam Opel AG|Opel affiliate]]. A joint venture owned 49% by GM & 51% by Kikinda Iron Foundry. IDA = Industrija Delova Automobila or Industry of Automobile Parts. The operation exported iron castings, brake, and axle components to GM/Opel, thus allowing partially built Opels to be imported into Yugoslavia and not be counted as imports. Ended by the wars of the breakup of Yugoslavia and imposition of sanctions on Yugoslavia in 1992. The plant was later restructured as the Livnica Kikinda metal foundry, which was taken over by Slovenia's Cimos in 2004 and manufactures auto parts for various European manufacturers including Opel.
|-
| ||Indianapolis Metal Center||[[w:Indianapolis|Indianapolis]], [[w:Indiana|Indiana]]||United States||Metal stampings for trucks||1930||2011||Located at 340 S. White River Parkway W. Drive. Stamping plant. Acquired from the former Martin-Parry Corporation in 1930. Became a Chevrolet plant making truck bodies. Became part of GM Truck & Bus Group in 1982 and in early 1992, became part of NATP (North American Truck Platforms) and later transferred to CLCD (Cadillac/Luxury Car Division) before joining the Metal Fabrication Division in 1994. Closed in June 2011. Demolished in 2014-2015.
|-
| ||Inland Fisher Guide Plant (Columbus, Ohio)||[[w:Columbus, Ohio|Columbus, Ohio]]||United States||Door Panel Assemblies & Small Components||1946||1999||Located at 200 Georgesville Road. Originally opened as a plant for the Ternstedt Division of General Motors. Then, Fisher Hardware Fabrication when Ternstedt merged back into Fisher Body in 1969. Fisher became Fisher Guide in 1984 and Inland Fisher Guide in 1989. In 1995, Inland Fisher Guide became the Delphi Interior and Lighting Systems division of GM's [[w:Delphi Automotive Systems|Delphi Automotive Systems]] subsidiary. Spun off with [[w:Delphi Automotive Systems|Delphi Automotive Systems]] in 1999. Closed by Delphi in 2007.
|-
| ||Inland Fisher Guide Dayton Plant||[[w:Dayton, Ohio|Dayton]], [[w:Ohio|Ohio]]||United States||Engine Mounts<br />Transmission Mounts<br />Strut Mounts<br />Steering Wheels<br />Liteflex Springs<br />Brake Linings<br />Brake Hose<br />Brake Pads<br />Ball Joints<br />Ice Cube Trays ||1921||1999||Located at 2701 Home Avenue (originally Home Road). The first factory building was built in 1910 by the Wright Company and made airplanes and components. The 2nd factory building was built in 1911 & made airplane engines. Aircraft production ceased in 1916. 13 different types of planes had been produced. In Feb. 1917, the plants were sold to the Darling Motor Co. but they went bankrupt shortly thereafter. The Dayton-Wright Company bought the site from Darling Motor on March 22, 1917 and made aircraft parts at the site for its Moraine assembly plant from 1918 to 1919. Dayton-Wright Company was bought by GM in 1919 & it was initially run as a GM subsidiary. In 1923, the aircraft part of the business was sold to Consolidated Aircraft Co. & this site switched from aviation production to automotive production. Inland Manufacturing Division (originally Inland Mfg. Company) of GM was formed on January 6, 1923 at this site, initially to make steering wheels. Merged with Fisher Guide to became Inland Fisher Guide in 1989. In 1995, Inland Fisher Guide became the Delphi Interior and Lighting Systems division of GM's [[w:Delphi Automotive Systems|Delphi Automotive Systems]] subsidiary. Spun off with [[w:Delphi Automotive Systems|Delphi Automotive Systems]] in 1999. Delphi closed it in 2008. The 2 original Wright Brothers' buildings were left standing and became part of Dayton Aviation Heritage National Historical Park in 2009 but the rest was demolished around 2014. The Wright Brothers factory buildings were damaged by fire in March 2023.
|-
| ||Inland Fisher Guide Plant (Detroit - Fort St.)||[[w:Detroit, Michigan|Detroit, Michigan]]||United States||Door hinges and interior parts||1920||1989||Located at 6307 W. Fort St. & Livernois St. Was Ternstedt's headquarters until 1962. Originally opened by Ternstedt Manufacturing Co., which was taken over by Fisher Body Co. in 1920. Became part of GM when GM took over Fisher Body in 1926. Ternstedt became a separate division of GM in 1948 before merging back in to Fisher Body in 1969. Was a plant for the Ternstedt Division (Plant# 16) of General Motors. Then, Fisher Hardware Fabrication. Fisher became Fisher Guide in 1984 and Inland Fisher Guide in 1989. Is now Evans Distribution Systems.
|-
| ||Inland Fisher Guide Plant (Elyria, Ohio)||[[w:Elyria, Ohio|Elyria, Ohio]]||United States||Car seats||1947||1990||Located at 1400 Lowell St. Originally opened as a plant for the Ternstedt Division of General Motors. Then, Fisher Hardware Fabrication when Ternstedt merged back into Fisher Body in 1969. Fisher became Fisher Guide in 1984 and Inland Fisher Guide in 1989.
|-
| ||Inland Fisher Guide Plant (Euclid, Ohio)||[[w:Euclid, Ohio|Euclid, Ohio]]||United States||Vehicle Bodies until 1970<br />Then, trim fabrication, seat covers & backs, upholstery, door panels, sunvisors, & other interior parts.<br />Also made seats & cushions for Sea Ray Boats||1947||1993||Located at 20001 Euclid Ave. Originally built in 1943. Bought by GM in 1947 from Cleveland Pneumatic Aerol Co., which made rocket shells and aircraft landing gear there during WWII. Was a Fisher Body plant making bodies for Chevrolet, Pontiac, Oldsmobile, & Buick until 1970. Then became a Fisher Trim Fabrication plant. Fisher became Fisher Guide in 1984 and Inland Fisher Guide in 1989. Closed in 1993. Site currently in use by an industrial supply store (HGR) and indoor sports facilities (The Sports Plant).
|-
| ||[[w:Automotive industry in Flint, Michigan#Coldwater Road Plant|Inland Fisher Guide Plant (Flint - Coldwater Road)]]||[[w:Genesee Township, Michigan|Genesee Township, Michigan]]||United States||Window regulators, door hinges, door modules and seat adjusters||1953||1996||Located at 1245 East Coldwater Road. Originally opened as a plant for the Ternstedt Division of General Motors. Then, Fisher Hardware Fabrication when Ternstedt merged back into Fisher Body in 1969. Fisher became Fisher Guide in 1984 and Inland Fisher Guide in 1989. In 1995, Inland Fisher Guide became the Delphi Interior and Lighting Systems division of GM's [[w:Delphi Automotive Systems|Delphi Automotive Systems]] subsidiary. Sold to Peregrine Inc. in 1996, which continued making window regulators and door hinges and modules. Closed by Peregrine in 1998. A GM subsidiary called REALM bought the property in 1999 and GM used the administration building until 2000. Demolished by 2001. Site now used by Deployment Strategies Group LLC for container storage.
|-
| ||Inland Fisher Guide Plant (Grand Rapids, Michigan)||[[w:Walker, Michigan|Walker, Michigan]]||United States||Interior trim||1942||1998||Located at 2150 Alpine Avenue NW. Built by Haskelite Manufacturing Corporation to make wooden gliders for use in WWII. Bought by GM in the early 1950's. Built fuselages for [[w:F-84F Thunderstreak|F-84F Thunderstreak]] fighter jets. Fisher became Fisher Guide in 1984 and Inland Fisher Guide in 1989. In 1995, Inland Fisher Guide became the Delphi Interior and Lighting Systems division of GM's [[w:Delphi Automotive Systems|Delphi Automotive Systems]] subsidiary. Became part of Delphi in 1995. Sold by GM to [[w:Lear Corp.|Lear Corp.]] in 1998. Closed by Lear in 2005. Now called Avastar Park, a multi-tenant industrial site.
|-
| ||Inland Fisher Guide Plant (Livonia, Michigan)||[[w:Livonia, Michigan|Livonia, Michigan]]||United States||Seat Cushions, Seat Pads, Seat Backs, Door Panel Trim||1954||1995||Built on the site of the former Detroit Transmission Division plant that burned down in 1953. Located at 28400 Plymouth Road. Fisher became Fisher Guide in 1984 and Inland Fisher Guide in 1989. In 1995, Inland Fisher Guide became the Delphi Interior and Lighting Systems division of GM's [[w:Delphi Automotive Systems|Delphi Automotive Systems]] subsidiary. Closed in 1995. Sold to Peregrine Inc. in 1996, which continued making interior trim parts. Peregrine then closed the plant in 1998. Now the Plymouth Road Technical Center, a multi-tenant site for industrial, warehousing, and logistics purposes.
|-
| ||Inland Fisher Guide Plant (Syracuse)||[[w:Salina, New York|Salina, New York]]||United States||Metal auto parts (die casting, stamping, machining, painting, plating), Plastic trim parts - exterior and interior (injection molding)||1952||1993||Located at One General Motors Drive (address sometimes listed as 1000 Town Line Road). Plastic operations were added in the early 1960's. Metal operations were subsequently reduced and ultimately replaced by the plastic operations by the early 1970's. Fisher became Fisher Guide in 1984 and Inland Fisher Guide in 1989. Closed December 1993. Property is now Salina Industrial Powerpark, a multi-tenant industrial park.
|-
| ||Inland Fisher Guide Plant (Tecumseh, Michigan)||[[w:Tecumseh, Michigan|Tecumseh, Michigan]]||United States||Seat Pads & Backs||1966||1988||Located at 5550 Occidental Highway. Fisher became Fisher Guide in 1984. Now occupied by Uniloy Inc., a plastics company.
|-
| ||[[w:Inland Fisher Guide Plant (New Jersey)|Inland Fisher Guide Plant (Trenton)]]||[[w:West Trenton, New Jersey|West Trenton]], [[w:Ewing Township, New Jersey|Ewing Township]], [[w:New Jersey|New Jersey]]||United States||Door handles<br />Hinges<br />Door locks<br />Seat adjusters<br />Exterior body moldings and painted components||1938||1998||Located at 1445 Parkway Ave. Built 7,546 [[w:TBM Avenger|TBM Avenger]] torpedo bombers during WWII under license from Grumman as part of GM's Eastern Aircraft Division. In 1961, the facility became the first commercial user in the United States to use a programmable industrial robot to replace human workers. Brief article about the plant's closing and displaced workers. 1993 Plant closing date was later delayed until Summer of 1998 : [https://query.nytimes.com/gst/fullpage.html?res=9E0CEEDB1E3EF937A35751C1A964958260] Originally part of the [[w:Flint, Michigan auto industry#Ternstedt Division|Ternstedt Division]] of Fisher Body, then the Ternstedt Division of GM in 1948 before Ternstedt merged back in to Fisher Body in 1969. Then, Fisher Hardware Fabrication. Fisher became Fisher Guide in 1984 and Inland Fisher Guide in 1989. In 1995, Inland Fisher Guide became the Delphi Interior and Lighting Systems division of GM's [[w:Delphi Automotive Systems|Delphi Automotive Systems]] subsidiary. Closed in 1998. Plant was subsequently demolished. Site redeveloped into Ewing Town Center, a mixed retail and residential complex.
|-
| ||Inland Fisher Guide Plant (Vandalia, Ohio)||[[w:Vandalia, Ohio|Vandalia, Ohio]]||United States||Door Panel Assemblies<br />Seat Pads<br />Instrument Panels||1941||1999||Located at 250 Northwoods Boulevard. Originally a GM Aeroproducts division facility making aircraft propellers, Aeroproducts division became part of GM's Allison division in 1952, site was absorbed by GM's Inland division in 1961 after propeller production moved to Allison's Indianapolis operation in 1960, merged into Inland Fisher Guide division in 1991, became part of GM's [[w:Delphi Automotive Systems|Delphi Automotive Systems]] subsidiary in 1995 and transferred to Delphi Chassis Division. Spun off with Delphi in 1999. Transferred to Delphi Thermal Division in 2007. Sold in 2015 to [[w:Mahle GmbH|Mahle GmbH]]. Mahle transferred operations to its Behr plant in Dayton and closed the Vandalia plant by 2016. Mahle sold the property in 2017.
|-
| ||General Motors International A/S||[[w:Copenhagen|Copenhagen]]||[[w:Denmark|Denmark]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Oakland (automobile)|Oakland]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Buick|Buick]]<br />[[w:Opel|Opel]]<br />[[w:Vauxhall Motors|Vauxhall]]||1924||1974||GM's 1st European assembly plant & 1st assembly plant outside North America. First vehicle off the line was a Chevrolet utility truck on January 7, 1924. Pontiac assembly began July 24, 1926. Oakland, Oldsmobile, & Buick assembly began in 1929. In the 1960's, the Chevy Chevelle & Buick Skylark were assembled along with most Opel & Vauxhall models. Station wagon-based vans were assembled as was the Opel 1500, based on the 1200. Production ended in Oct. 1974. Over 550,000 units had been produced.
|-
| ||[[w:General Motors do Brasil|Ipiranga]]||[[w:Ipiranga (district of São Paulo)|Ipiranga]], [[w:São Paulo (state)|São Paulo (state)]]||[[w:Brazil|Brazil]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Oakland (automobile)|Oakland]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Buick|Buick]]<br />[[w:Cadillac|Cadillac]]||1925||1930||GM's 1st Brazilian assembly plant. Replaced by Sao Caetano do Sul plant.
|-
| ||[[w:Pars Khodro|General Motors Iran]]||[[w:Tehran|Tehran]]||[[w:Imperial State of Iran|Imperial State of Iran]]||[[w:Opel Commodore#Foreign assembly|Chevrolet Iran 2500/2800/Royale]]<br />[[w:Chevrolet Nova#Fourth generation (1975–1979)|Chevrolet Iran (Nova)]]<br />[[w:Buick Skylark#Buick Skylarks in Iran|Buick Iran (Skylark)]]<br />[[w:Cadillac Seville#First generation (1976–1979)|Cadillac Iran (Seville)]]<br />[[w:Chevrolet C/K (third generation)|Chevrolet C/K pickup]] ||1974||1987||When the Shah ruled Iran, GM established a joint venture in Iran called GM Iran. GM held 45% while Pars Khodro held the other 55%. Production began on January 15, 1974 of the Opel Commodore-based Chevrolet Iran 2500/2800/Royale. By 1977, this was replaced by the American Chevrolet Nova, Buick Skylark, & Cadillac Seville. Chevy pickups followed. Once the Shah was overthrown in the 1979 Revolution and Iran was taken over by fanatics, GM abandoned the factory & Iran. The company became Pars Khodro and the local management changed. Production of GM models continued sporadically until 1987 when it finally ended.
|-
|J (1953-2009)<br /><br />21 (1928-1952 [[w:Chevrolet|Chevrolet]])||[[w:Janesville Assembly Plant|Janesville Assembly Plant]]||[[w:Janesville, Wisconsin|Janesville, Wisconsin]]||United States||[[w:Chevrolet K5 Blazer|Chevrolet K5 Blazer]] (1992-1994)<br /> [[w:Chevrolet Tahoe|Chevrolet Tahoe]] (1995-2009) <br />[[w:Chevrolet Suburban|Chevrolet Suburban]] (1947-1966, 1992-2009)<br /> [[w:Chevrolet Tiltmaster|Chevrolet Tiltmaster/W-Series (Gas-powered)]] (1994-2009)<br /> [[w:GMC Forward|GMC Forward/W-Series (Gas-powered)]] (1994-2009)<br /> [[w:Isuzu N-Series|Isuzu N-Series (Gas-powered)]] (1994-2009)<br />[[w:Chevrolet Tahoe|GMC Yukon]] (1992-2009)<br /> [[w:Chevrolet Tahoe#Second generation (2000)|GMC Yukon Denali (GMT800)]] (2001-2006)<br /> [[w:Chevrolet Tahoe#Third generation (2007)|GMC Yukon Denali (GMT900)]] (2007-2009) <br />[[w:GMC Suburban|GMC Suburban]] (1992-1999)<br />[[w:GMC Yukon XL|GMC Yukon XL]] (2000-2009) <br /> [[w:Chevrolet Suburban#Ninth generation (2000)|GMC Yukon XL Denali (GMT800)]] (2001-2006) <br /> [[w:Chevrolet Suburban#Tenth generation (2007)|GMC Yukon XL Denali (GMT900)]] (2007-2009)||1919||2009||Located at 1000 General Motors Dr. Was the oldest active GM assembly plant at time of its closure in 2009; largest under one roof in the U.S.
Originally built [[w:Samson Tractor|Samson tractors]] from 1919-1922. Also made [[w:Samson Tractor#Trucks and a car|Samson trucks]] from 1920-1922. On October 1, 1922, the Janesville plant was transferred to Chevrolet. Started producing Chevrolets on Feb. 14, 1923. Shortly thereafter, a neighboring Fisher Body plant was added. Plant closed from September 1932 - late 1933. During World War II, both the Chevy & Fisher Body sides of the plant were controlled by Oldsmobile and made artillery shells. Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. Janesville Assembly joined the GM Assembly Division in 1968. On April 21, 1967, the 100 millionth GM vehicle built in the US, a blue, two-door Chevrolet Caprice, was produced at the Janesville plant. Full-size cars ended production in 1982 and were replaced by the compact J-cars like the Cavalier. Last passenger car built was the 1991 Chevy Cavalier. Only SUVs and trucks were subsequently built. SUV production ended Dec. 23, 2008. Last vehicle produced was a black 2009 Chevy Tahoe. Medium-duty truck production ended on April 23, 2009, marking the end of vehicle production at Janesville. Officially, the plant was placed on "standby" status but production never restarted and the 2015 GM-UAW contract allowed Janesville to be closed permanently. Demolished from 2018-2019.<br />
Past models: [[w:Chevrolet Superior|Chevrolet Superior]], [[w:Chevrolet Series AA Capitol|Chevrolet Series AA Capitol]], [[w:Chevrolet Series AB National|Chevrolet Series AB National]], [[w:Chevrolet Series AC International|Chevrolet Series AC International]], [[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]], [[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]], [[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]], [[w:Chevrolet Standard Six|Chevrolet Standard Six]], [[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]], [[w:Chevrolet Master|Chevrolet Master]], [[w:Chevrolet Deluxe|Chevrolet Deluxe]], [[w:Chevrolet Stylemaster|Chevrolet Stylemaster]], [[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]], [[w:Chevrolet 150|Chevrolet 150]] (1953-1957), [[w:Chevrolet 210|Chevrolet 210]] (1953-1957), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1970), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-1972), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-1982), [[w:Chevrolet Cavalier|Chevrolet Cavalier]] (1982-1991), [[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958), [[w:Chevrolet El Camino#First generation (1959–1960)|Chevrolet El Camino]] (1959-1960), [[w:Chevrolet Impala|Chevrolet Impala]] (1958-1982), [[w:Chevrolet Nomad|Chevrolet Nomad]] (1955-1957), [[w:Buick Skyhawk#Second generation (1982–1989)|Buick Skyhawk]] (1988-1989), [[w:Cadillac Cimarron|Cadillac Cimarron]] (1982-1988), [[w:Chevrolet AK Series|Chevrolet AK Series]], [[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1947-1955), [[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959), [[w:Chevrolet C/K|Chevrolet C/K]] (1960-1986), [[w:Chevrolet C/K (third generation)#R/V-Series (1987–1991)|Chevrolet R/V]] (1987-1989), [[w:Chevrolet C/K (fourth generation)|Chevrolet C/K crew cab (GMT400)]] (1992-1994), [[w:Chevrolet C/K (fourth generation)#C3500HD (1991–2002)|Chevrolet C3500HD]] (1991-1998), [[w:Chevrolet Kodiak#Second generation (1990–2002)|Chevrolet Kodiak (GMT530)]] (1990-2002), [[w:Chevrolet/GMC B series#Third generation (1993–2003)|Chevrolet B-series]] (1993-02), [[w:Isuzu Forward|Chevrolet T-Series]] (1997-2002), [[w:Chevrolet C/K (second generation)|GMC C/K (Action Line)]] (1967-1972), [[w:Chevrolet C/K (third generation)|GMC C/K (Rounded Line)]] (1973-1986), [[w:Chevrolet C/K (third generation)#R/V-Series (1987–1991)|GMC R/V]] (1987-1989), [[w:Chevrolet C/K (fourth generation)|GMC Sierra crew cab (GMT400)]] (1992-1994), [[w:Chevrolet C/K (fourth generation)#C3500HD (1991–2002)|GMC Sierra C3500HD]] (1991-1998), [[w:Chevrolet Kodiak#Second generation (1990–2002)|GMC TopKick (GMT530)]] (1990-02), [[w:Chevrolet/GMC B series#Third generation (1993–2003)|GMC B-series]] (1993-2002), [[w:GMC T-Series|GMC T-Series]] (1997-2002), [[w:Isuzu F-Series|Isuzu F-Series]] (1997-2002)
|-
| ||Kalamazoo Metal Center||[[w:Kalamazoo, Michigan|Kalamazoo, Michigan]]||United States||Stamped Body panels ||1965||1999|| Located at 5200 East Cork Street. Metal stamping plant. Started out as a Fisher Body plant. Now Midlink Business Park.
|-
|K||[[w:GM Korea|GM Korea]]||[[w:Gunsan|Kunsan]], [[w:Jeolla Province|Jeolla]]||[[w:South Korea|South Korea]]||[[w:Chevrolet Cruze|Chevrolet Cruze]]<br />[[w:Holden Cruze#Australia|Holden Cruze (JG sedan/JH wagon)]]<br />[[w:Holden Astra#Seventh generation (BK, BL; 2016)|Holden Astra Sedan (BL)]] (4-door)<br />[[w:Chevrolet Orlando|Chevrolet Orlando]]<br />[[w:GM Family Z engine|Family Z diesel engine]]||1997||2018||Past models: [[w:Daewoo Lacetti|Daewoo Lacetti]], [[w:Daewoo Nubira|Daewoo Nubira]], [[w:Daewoo Tacuma|Daewoo Tacuma]], [[w:Chevrolet Optra|Chevrolet Optra]], [[w:Chevrolet Vivant|Chevrolet Vivant]], [[w:Holden Viva|Holden Viva (JF)]], [[w:Suzuki Forenza|Suzuki Forenza]], [[w:Suzuki Reno|Suzuki Reno]]
This factory also produced Chevrolet vehicles for [[w:General Motors Europe|General Motors Europe]] and [[w:Chevrolet Europe|Chevrolet Europe]]. The factory permanently closed on May 31, 2018, due to low productivity caused by GM's withdrawal from Europe in 2017 and due to GM's restructuring of its GM Korea operations. Sold to Myoung Shin Co., Ltd. in 2018. Diesel engines were produced at an adjacent facility beginning in 2006.
|-
|A<br />(1953-1964 [[w:Chevrolet|Chevrolet]] and 1965-1990)<br /><br />8 <br />(1929-1952 [[w:Chevrolet|Chevrolet]])||[[w:Lakewood Assembly|Lakewood Assembly]]||[[w:Lakewood Heights, Atlanta|Lakewood Heights, Georgia]]||United States ||[[w:Chevrolet Caprice|Chevrolet Caprice]] (1966, 1987-1990)<br />[[w:Pontiac Safari|Pontiac Safari wagon]] (1987-1989)<br />[[w:Buick Estate#1977–1990|Buick LeSabre Estate wagon]] (1987-1989)<br /> [[w:Buick Estate#1977–1990|Buick Electra Estate wagon]] (1987-1989)<br />[[w:Buick Estate#1977–1990|Buick Estate wagon]] (1990)||1928||1990||Located at McDonough Boulevard and Sawtell Avenue. Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. Lakewood Assembly joined the GM Assembly Division in 1968. Idled from September 1982 to early 1984. Production ended with Chevrolet Caprice Classic & Buick Estate Wagon. Last vehicle produced was a gray Chevy Caprice on <br> August 6, 1990.<br /> Past models:<br /> [[w:Chevrolet Series AC International|Chevrolet Series AC International]]<br />[[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]]<br />[[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]]<br />[[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]]<br />[[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]]<br />[[w:Chevrolet Master|Chevrolet Master]]<br />[[w:Chevrolet Deluxe|Chevrolet Deluxe]]<br />[[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]]<br /> [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1966), [[w:Chevrolet 150|Chevrolet 150]] (1953-1957), [[w:Chevrolet 210|Chevrolet 210]] (1953-1957), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-1966), [[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958), [[w:Chevrolet El Camino#First generation (1959–1960)|Chevrolet El Camino]] (1959-1960), [[w:Chevrolet Impala|Chevrolet Impala]] (1958-1966), [[w:Chevrolet Nomad|Chevrolet Nomad]] (1955-1957), [[w:Chevrolet Suburban|Chevrolet Suburban]] (1957, 1965-1966). Also built the <br> [[w:Chevrolet Chevette|Chevrolet Chevette]] (1981-1982, 1984-1987) & [[w:Pontiac 1000|Pontiac 1000]] (1981-1982, 1984-1987),<br> [[w:Pontiac Acadian|Pontiac Acadian]] (Canada only).<br> GM G-body: [[w:Pontiac Grand Prix#Third generation (1969–1972)|Pontiac Grand Prix]] (1970-1972). GM A-body: [[w:Chevrolet Chevelle|Chevrolet Chevelle]] (1964-1970), [[w:Chevrolet El Camino#Second generation (1964–1967)|Chevrolet El Camino]] (1965), [[w:Pontiac Grand Prix|Pontiac Grand Prix]] (1973-1979), [[w:Pontiac GTO|Pontiac GTO]] (1969, 1971-1973), [[w:Pontiac LeMans|Pontiac LeMans]] (1971-1977).<br> [[w:Chevrolet AK Series|Chevrolet AK Series]], [[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1948-1955), [[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959), [[w:Chevrolet C/K|Chevrolet C/K]] (1960-80), [[w:Chevrolet C/K (second generation)|GMC C/K (Action Line)]] (1967-1972),<br> [[w:Chevrolet C/K (third generation)|GMC C/K (Rounded Line)]] (1973-1980).
|-
| ||[[w:Lansing Car Assembly|Lansing Car Assembly - Body]]||[[w:Lansing, Michigan|Lansing, Michigan]]||United States||Automotive bodies||1920||2005||Located at 401 N. Verlinden St. Opened as a [[w:Durant Motors|Durant Motors]] plant in 1920. Durant Motors went out of business in 1931 and the plant was vacant until GM bought it in 1935. Known as GM's Lansing Plant 6. The plant reopened as a Fisher Body plant replacing the Fisher Body operation within the main Oldsmobile plant (Lansing Plant 1) that operated out of space leased from Oldsmobile since 1923. It supplied bodies to the main Oldsmobile plant (Lansing Plant 1 or Lansing Car Assembly - Chassis). Together with the chassis plant, they made up Lansing Car Assembly. Demolished in 2008-2009.
|-
|M (1949-1984 [All], 1985-2005 [North Line])||[[w:Lansing Car Assembly|Lansing Car Assembly - Chassis (North)]]||[[w:Lansing, Michigan|Lansing, Michigan]]||United States||,<br> [[w:Chevrolet Cavalier#Third generation (1995)|Chevrolet Cavalier coupe]] (1995-1998),<br> [[w:Chevrolet Malibu#Fifth generation (1997)|Chevrolet Malibu]] (2001-2003),<br> [[w:Chevrolet Malibu#Fifth generation (1997)|Chevrolet Classic]] (2004-2005),<br> [[w:Pontiac Grand Am|Pontiac Grand Am]] (1992-2005),<br> [[w:Oldsmobile Calais|Oldsmobile Calais]] (1985-1987),<br> [[w:Oldsmobile Cutlass Calais|Oldsmobile Cutlass Calais]] (1988-1991),<br> [[w:Oldsmobile Achieva|Oldsmobile Achieva]] (1992-1998),<br> [[w:Buick Skylark#Sixth generation (1985–1991)|Buick Somerset Regal/Somerset/Skylark]] (1985-1991)||1902||2005|| "M" - North assembly line. Part of GM's Lansing Plant 1. Located around 1014 Townsend St., next to the former Oldsmobile headquarters at 920 Townsend St. This was Oldsmobile's home plant. It predated the founding of GM in 1908. Fisher Body leased space here to build bodies for Oldsmobile beginning in 1923, when Fisher started making bodies for 1924 Oldsmobiles. In 1935, Fisher Body moved to the ex-Durant Motors plant on Verlinden St. that GM bought earlier that year. Oldsmobile then took back the space that Fisher Body had been using (Bldg. 26). Lansing Car Assembly was converted to build unibody, fwd, compact cars for 1985 for multiple GM brands instead of the previous body-on-frame, rwd midsize & full-size cars exclusively for Oldsmobile. Demolished in 2007.
Past models: [[w:Oldsmobile F-Series|Oldsmobile F-Series]] (1928-1938), [[w:Oldsmobile L-Series|Oldsmobile L-Series]] (1932-1938), [[w:Oldsmobile Series 60|Oldsmobile Series 60]] (1939-1948), [[w:Oldsmobile Series 70|Oldsmobile Series 70]] (1939-1950), [[w:Oldsmobile 88|Oldsmobile 88]] (1949-1984), Oldsmobile 80 (1939), [[w:Oldsmobile 98#First generation (1941)|Oldsmobile 90]] (1940), [[w:Oldsmobile 98#First generation (1941)|Oldsmobile 96]] (1941), [[w:Oldsmobile 98|Oldsmobile 98]] (1941-1984), [[w:Oldsmobile 98#1953|Oldsmobile 98 Fiesta]] convertible (1953),<br> [[w:Oldsmobile Custom Cruiser#First generation (1971–1976)|Oldsmobile Custom Cruiser]] (1971-1976), [[w:Oldsmobile Cutlass|Oldsmobile Cutlass]] (1961-1984), [[w:Oldsmobile Cutlass Supreme|Oldsmobile Cutlass Supreme]] (1966-1984), [[w:Oldsmobile 442|Oldsmobile 442]] (1964-80), [[w:Oldsmobile Jetstar I|Oldsmobile Jetstar I]] (1964-1965), [[w:Oldsmobile Starfire#First generation (1961–1966)|Oldsmobile Starfire]] (1961-1966), [[w:Oldsmobile Toronado|Oldsmobile Toronado]] (1966-1978), [[w:Oldsmobile Vista Cruiser|Oldsmobile Vista Cruiser]] (1964-1977), [[w:Viking (automobile)|Viking]] (1929-1931)<br />Oldsmobile engines:<br />[[w:Oldsmobile straight-6 engine|Oldsmobile straight-6 engine]]<br />[[w:Oldsmobile straight-8 engine|Oldsmobile straight-8 engine]]<br />[[w:Oldsmobile V8 engine|Oldsmobile Rocket V8 engine]]<br />[[w:Oldsmobile V8 engine#Aluminum 215|Oldsmobile Rockette V8 engine]]<br />[[w:Oldsmobile Diesel engine|Oldsmobile Diesel V8]]
|-
|C (1985-2004 [South Line])||[[w:Lansing Car Assembly|Lansing Car Assembly - Chassis (South)]]||[[w:Lansing, Michigan|Lansing, Michigan]]||United States||[[w:Pontiac Grand Am|Pontiac Grand Am]] (1985-2004),<br> [[w:Oldsmobile Calais|Oldsmobile Calais]] (1985-1986),<br> [[w:Oldsmobile Alero|Oldsmobile Alero]] (1999-2004),<br> [[w:Chevrolet Alero|Chevrolet Alero]] (Export only: 1999-2001),<br> [[w:Buick Skylark#Seventh generation (1992–1998)|Buick Skylark]] (1992-1998)||1902||2004||"C" - South assembly line. Only started using a separate plant code from the North plant beginning with the 1985 N-body cars. Part of GM's Lansing Plant 1. Located around 1014 Townsend St., next to the former Oldsmobile headquarters at 920 Townsend St. Demolished in 2007.
|-
|B<br />(0 for EV1)||[[w:Lansing Craft Centre|Lansing Craft Centre]]||[[w:Lansing Township, Michigan|Lansing Township, Michigan]]||United States||[[w:Chevrolet SSR|Chevrolet SSR]] (2003–2006)||1987||2006||Located at 2801 West Saginaw Street, across the street from the Lansing Metal Center. Originally built by Ryan-Bohn Foundry and opened in 1920. Owned by Driggs Aircraft Company from 1927-1930. Owned by R.E. Olds from 1930-1940 but not used. Bought by GM's Oldsmobile Division in 1940. Became GM's Lansing Plant 2. Also known as Olds Forge. Built artillery shells during WWII. Oldsmobile used this plant as a forge (through 1983) and for making axles and differentials (through 1984). Became known as the Oldsmobile Differential Plant and Foundry. Converted into a full vehicle assembly plant including stamping, body shop and general assembly areas. First opened as a vehicle assembly plant known as the Reatta Craft Centre in 1988 though pilot production began in December 1986. After Buick Reatta production ended in 1991, plant was renamed Lansing Craft Centre. Used by the Genasys joint venture with [[w:American Specialty Cars|ASC]] to complete production of the Chevy Cavalier and Pontiac Sunfire convertibles. Cavalier and Sunfire convertible production ends during 1999. Cadillac Eldorado production moved here from Detroit-Hamtramck Assembly during 2000. Eldorado production ended April 22, 2002. Plant was then converted to truck production for the Chevy SSR. First saleable production SSR completed on July 29, 2003. Final SSR built March 17, 2006. Closed in 2006. Demolished in 2008-2009.
Past models: [[w:Buick Reatta|Buick Reatta]] (1988–1991), [[w:Chevrolet Cavalier#Third generation (1995)|Chevrolet Cavalier convertible]] (1995–2000), [[w:Pontiac Sunfire|Pontiac Sunfire]] convertible (1995–2000), [[w:General Motors EV1|General Motors EV1]] (1997, 1999), [[w:Cadillac Eldorado#Twelfth generation (1992–2002)|Cadillac Eldorado]] (2000-2002)
|-
|||[[w:Lansing Engine Plant|Lansing Engine]]||[[w:Delta Township, Michigan|Delta Township, Michigan]]||United States||[[w:Oldsmobile Diesel engine|Oldsmobile Diesel V6]]<br />[[w:Quad 4 engine|Quad 4 engine]]<br />[[w:GM Ecotec engine|GM Ecotec engine]] (2002 only)||1981||2002||Located at 2901 S. Canal Road. Known as GM's Lansing Plant 5. Also known as Delta Engine. Built to produce experimental diesel engine; part of Ryder Logistics since 2005.
|-
| ||[[w:Lansing Metal Center|Lansing Metal Center]]||[[w:Lansing Township, Michigan|Lansing Township, Michigan]]||United States|| Stamping and electroplating bumpers; general machining of crankshafts and connecting rods; and machining, welding, and stamping of other automobile parts||1952||2006|| Located at 2800 W. Saginaw Street, across the street from the Lansing Craft Centre. Known as GM's Lansing Plant 3. Also known as the Olds Jet plant. Originally built to manufacture turbine blades for Buick-built J65 axial flow jet engines. Metal fabricating plant. Electroplating operation ended in May 1987. Closed in March 2006. Demolished in 2008-2010.
|-
|K <br />(1953-1964 [[w:Chevrolet|Chevrolet]] and 1965-1988)<br /><br />5 (1929-1952 [[w:Chevrolet|Chevrolet]])<br /><br />M (1964 [[w:Pontiac (automobile)|Pontiac]])<br /><br />8 (1964 [[w:Buick|Buick]]) ||[[w:Leeds Assembly|Leeds Assembly]]||[[w:Kansas City, Missouri|Kansas City, Missouri]]||United States||[[w:Chevrolet Cavalier|Chevrolet Cavalier]] (1984-1987),<br> [[w:Oldsmobile Firenza|Oldsmobile Firenza]] (1982-1988),<br> [[w:Buick Skyhawk#Second generation (1982–1989)|Buick Skyhawk]] (1982-1988)<br>[[w:Pontiac Sunbird#Second generation (1982–1994)|Pontiac J2000]] (1982)||1929||1988||Located at 6817 Stadium Drive. Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Leeds Assembly began making Pontiac and Buick passenger cars for 1964. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. Leeds Assembly joined the GM Assembly Division in 1968. Retooled to build fwd J-cars for 1982. Closed April 15, 1988. <br />[[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]]<br />[[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]]<br />[[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]]<br />[[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]]<br />[[w:Chevrolet Master|Chevrolet Master]]<br />[[w:Chevrolet Deluxe|Chevrolet Deluxe]]<br />[[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]]<br />[[w:Buick Apollo|Buick Apollo]] (1974), [[w:Buick GS|Buick GS]] (1965-1968, 1970), [[w:Buick Regal|Buick Regal]] (1980-1981), [[w:Buick Skylark|Buick Skylark]] (1964-1970, 1975-76), [[w:Buick Special#1964–1967|Buick Special]] (1964-1967), [[w:Chevrolet 150|Chevrolet 150]] (1953-1957), [[w:Chevrolet 210|Chevrolet 210]] (1953-1957), [[w:Chevrolet AK Series|Chevrolet AK Series]], [[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1947-1955), [[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959), [[w:Chevrolet C/K (first generation)|Chevrolet C/K]] (1960-1966), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1963), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-1963), [[w:Chevrolet Corvair|Chevrolet Corvair]] (1960-1961), [[w:Chevrolet Chevelle|Chevrolet Chevelle]] (1964-1974, 1977), [[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958), [[w:Chevrolet El Camino|Chevrolet El Camino]] (1964-1974, 1978-80), [[w:Chevrolet Impala|Chevrolet Impala]] (1958-1963), [[w:Chevrolet Malibu|Chevrolet Malibu]] (1978-1981), [[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1971-1981), [[w:Chevrolet Nomad|Chevrolet Nomad]] (1955-1957), [[w:Chevrolet Nova|Chevrolet Chevy II/Nova]] (1962-63, 1974-1977),[[w:Chevrolet Suburban|Chevrolet Suburban]] (1952, 1956, 1959, 1961-1962), [[w:GMC Sprint|GMC Sprint]] (1971-1974), [[w:GMC Caballero|GMC Caballero]] (1978-1980), [[w:Pontiac GTO|Pontiac GTO]] (1964-1968), [[w:Pontiac LeMans|Pontiac LeMans]] (1964-1968), [[w:Pontiac Tempest|Pontiac Tempest]] (1964-1965)
|-
|K ('94-'05)<br /><br />E ('65-'91)<br /><br />L (Pre-1965 [[w:Oldsmobile|Oldsmobile]] & [[w:Pontiac (automobile)|Pontiac]]) <br /><br /> 3 (Pre-1964 [[w:Buick|Buick]]) ||[[w:Linden Assembly|Linden Assembly]]||[[w:Linden, New Jersey|Linden, New Jersey]]||United States||[[w:Chevrolet S-10 Blazer#Second generation (1995)|Chevrolet Blazer]] (1995-2005)<br />[[w:Chevrolet S-10 Blazer#Second generation (1995)|GMC Jimmy]] (1995-2005)<br />[[w:Chevrolet S-10#Second generation (1994)|Chevrolet S-10]] (1994-2004)<br /> [[w:Chevrolet S-10#Second generation (1994)|GMC Sonoma]] (1994-2004)||1937||2005||Located at 1016 W. Edgar Road. Linden Assembly was the 2nd GM multi-brand assembly plant (the 1st was Southgate, CA), assembling Buick, Oldsmobile, and Pontiac models. It was operated by GM's Linden Division through January 1942. During WWII, GM built 5,837 [[w:FM-1 Wildcat|FM-1 Wildcat]] and [[w:FM-2 Wildcat|FM-2 Wildcat]] fighter planes at Linden under license from Grumman as part of GM's Eastern Aircraft Division. After the war ended, in 1945, Linden & Southgate were both placed in a new division called the [[w:Buick-Oldsmobile-Pontiac Assembly Division|Buick-Oldsmobile-Pontiac Assembly Division]]. BOP Assembly Division became GM Assembly Division in 1965. In 1971, Linden Assembly became the first plant outside Cadillac's home plant in Detroit to assemble Cadillacs when it began to assemble C-body Cadillacs like the DeVille & Calais. In 1979, Linden became the sole source for all three of GM's E-body personal luxury coupes, the Oldsmobile Toronado, Buick Riviera, and Cadillac Eldorado. The closely related K-body Cadillac Seville was added in 1980. In the mid-1980s, the factory was retooled to produce the new L-body Chevy Beretta & Corsica, which began production in 1987. This was the first time Linden built a Chevrolet model. Linden was idled in September 1991 for conversion to truck and SUV production. It reopened in 1993 to produce the 1994 S-10 and Sonoma pickups, adding the Blazer and Jimmy SUVs for 1995. Closed April 2005. Last vehicle built was a white 2005 four-door Chevy Blazer on April 20, 2005. Demolished in 2008. Now Legacy Square, a complex of retail stores, and Legacy Commerce Center, an industrial space at the back of the property along Linden Ave.<br /> [[w:Chevrolet Corsica|Chevrolet Corsica]] (1987-1991), [[w:Chevrolet Beretta|Chevrolet Beretta]] (1987-1991), [[w:Buick Riviera#Sixth generation (1979–1985)|Buick Riviera]] (1979-1985), [[w:Oldsmobile Toronado#Third generation (1979–1985)|Oldsmobile Toronado]] (1979-1985), [[w:Cadillac Eldorado#Tenth generation (1979–1985)|Cadillac Eldorado]] (1979-1985), [[w:Cadillac Seville#Second generation (1980–1985)|Cadillac Seville]] (1980-85), [[w:Buick Century|Buick Century]] (1939, 1955-1957), [[w:Buick Electra|Buick Electra]] (1959-1963, 1971-1978), [[w:Buick Invicta|Buick Invicta]] (1959-1962), [[w:Buick LeSabre|Buick LeSabre]] (1959-1963), [[w:Buick Roadmaster|Buick Roadmaster]] (1948-1949, 1953-1957), [[w:Buick Special|Buick Special]] (1952-1957), [[w:Buick Super|Buick Super]] (1955-1957), [[w:Buick Wildcat|Buick Wildcat]] (1963), [[w:Cadillac Calais|Cadillac Calais]] (1971-1976), [[w:Cadillac DeVille|Cadillac DeVille]] (1971-1978), [[w:Oldsmobile 88|Oldsmobile 88]] (1949-1976), [[w:Oldsmobile 98|Oldsmobile 98]] (1941-1963, 1971-1978), [[w:Oldsmobile Cutlass|Oldsmobile Cutlass]] (1968-1970), [[w:Oldsmobile 442|Oldsmobile 442]] (1968-1970), [[w:Oldsmobile Jetstar I|Oldsmobile Jetstar I]] (1964-1965), [[w:Oldsmobile Starfire#First generation (1961–1966)|Oldsmobile Starfire]] (1961-1966), [[w:Pontiac Bonneville|Pontiac Bonneville]] (1958-1970, 1972-1973), [[w:Pontiac Catalina|Pontiac Catalina]] (1959-1970), [[w:Pontiac Chieftain|Pontiac Chieftain]] (1949, 1953, 1955, 1958), [[w:Pontiac Executive|Pontiac Executive]] (1967-1970), [[w:Pontiac Grand Prix|Pontiac Grand Prix]] (1962-1968), [[w:Pontiac Star Chief|Pontiac Star Chief]] (1955-1958, 1962, 1965-1966), [[w:Pontiac 2+2|Pontiac 2+2]] (1964-1967), [[w:Pontiac Ventura#1960–1970|Pontiac Ventura]] (1960-61)
|-
| ||[[w:Livonia Engine|Livonia Engine]]||[[w:Livonia, Michigan|Livonia, Michigan]]||United States||[[w:Cadillac High Technology engine|Cadillac High Technology engine]] (4.1/4.5/4.9L OHV V8)<br>[[w:GM Premium V engine|Premium V engine]] (4.6L Northstar V8, 4.0L Aurora V8, 3.5L Shortstar V6)||1971||2010|| Located at 12200 Middlebelt Road. Originally built as a parts supplier to Cadillac. Converted into an engine plant for the HT-series V8 that debuted for 1982. Now a multi-tenant commercial space including [[w:Penske Corporation|Penske Logistics]] and [[w:KUKA|KUKA]]. The [[w:KUKA|KUKA]] facility appears to be the one building the initial batch of [[w:BrightDrop Zevo 600|BrightDrop Zevo 600]] electric vans for GM prior to production moving to GM's [[w:CAMI Automotive|CAMI Automotive]] plant.
|-
||7 (1979-2019)<br /><br /> U (1966-1978)||[[w:Lordstown Assembly|Lordstown Assembly]]||[[w:Warren, Ohio|Warren, Ohio]]||United States||[[w:Chevrolet Cruze#Second generation (J400)|Chevrolet Cruze (2016-2019)]]||1966||2019
|GM bought the property in 1955 and announced plans for the new Chevrolet plant in 1956 but construction didn't begin until 1964. Production began on April 28, 1966. Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. Lordstown Assembly joined the GM Assembly Division in 1971. <br /> Past models: [[w:Chevrolet Cruze#First generation (J300; 2008)|Chevrolet Cruze (2011-2015)/ Cruze Limited (2016)]], [[w:Chevrolet Cobalt|Chevrolet Cobalt]] (2005-2010)/[[w:Pontiac G5|Pontiac G5]] (2007-2009, Canada: 2007-2010), [[w:Chevrolet Cavalier|Chevrolet Cavalier]] (1982-2005)/[[w:Pontiac Sunbird#Second generation (1982–1994)|Pontiac J2000/2000/2000 Sunbird/Sunbird]] (1982-1994)/ [[w:Pontiac Sunfire|Pontiac Sunfire]] (1995-2004), [[w:Chevrolet Vega|Chevrolet Vega]] (1971–1977)/[[w:Pontiac Astre|Pontiac Astre]] (1975-1977), [[w:Chevrolet Monza|Chevrolet Monza]] (1978-1980)/[[w:Pontiac Sunbird#First generation (1976–1980)|Pontiac Sunbird]] (1978-1980)/[[w:Oldsmobile Starfire#Second generation (1975–1980)|Oldsmobile Starfire]] (1978-1980)/ [[w:Buick Skyhawk#First generation (1975–1980)|Buick Skyhawk]] (1978-1980), [[w:Chevrolet van#Third generation (1971-1996)|Chevrolet Van/Sportvan]] (1971-1992), [[w:Chevrolet van#Third generation (1971-1996)|GMC Vandura/ Rally Van]] (1971-1992), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1966-1970), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1966-1970), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-1970), [[w:Chevrolet Impala|Chevrolet Impala]] (1966-1970), [[w:Pontiac Firebird#First generation (1967–1969)|Pontiac Firebird]] (1967-1969), [[w:Pontiac Pursuit|Pontiac Pursuit/G5 Pursuit]] (Canada: 2005-2006), [[w:Toyota Cavalier|Toyota Cavalier]] (1996-2000).
Located at 2300 Hallock-Young Road. Main assembly plant is the East part of the complex on Hallock-Young Road. Stamping plant added in 1970. Paint shop added in 2004. Stamping plant and paint shop are part of the West part of the complex on Ellsworth-Bailey Road. <br /> Closed on March 6, 2019. Sold to [[w:Lordstown Motors|Lordstown Motors]] in 2019. Lordstown Motors sold the plant to [[w:Foxconn|Foxconn]] in 2022 and Foxconn will do contract assembly for Lordstown Motors and others.
|-
|1 (Lotus Omega &<br />Lotus Carlton)<br /><br />H (Lotus models)||[[w:Lotus Cars|Lotus Cars]]||[[w:RAF Hethel|RAF Hethel]], [[w: Hethel|Hethel]], [[w:Norfolk|Norfolk]], [[w:England|England]]||[[w:United Kingdom|United Kingdom]]||
[[w:Opel Lotus Omega|Opel Lotus Omega]] A / [[w:Vauxhall Lotus Carlton|Vauxhall Lotus Carlton]]<br /> 1990-1992, 950 units
[[w:Lotus Esprit|Lotus Esprit]], [[w:Lotus Excel|Lotus Excel]], [[w:Lotus Elan#Elan (M100)|Lotus Elan]]
||1986||1993||GM owned Lotus from 1986-1993. GM sold Lotus in 1993 to A.C.B.N. Holdings S.A. of Luxembourg, a company controlled by Italian businessman Romano Artioli, who also owned Bugatti Automobili SpA. Artioli sold Lotus to Malaysian automaker [[w:Proton Holdings|Proton]] in 1996.
|-
| ||Mansfield Metal Center||[[w:Ontario, Ohio|Ontario, Ohio]]||United States||Metal stamping||1955||2010||Located at 2525 W. 4th St. Mostly demolished. Redeveloped into Ontario Commerce Park.
|-
| ||[[w:Massena Castings Plant|Massena Castings Plant]]||[[w:Rooseveltown, New York|Rooseveltown, New York]]||United States|| Aluminum engine blocks & cylinder heads for [[w:Chevrolet Turbo-Air 6 engine|Corvair engine]], Aluminum engine blocks for [[w:Chevrolet 2300 engine|Vega engine]], & aluminum cylinder heads & blocks for other engines.<br /> Also clutch housings, transmission cases, pistons, aluminum intake manifolds||1959||2009||Located at 56 Chevrolet Rd, Rooseveltown, NY 13662 <br /> Originally a Chevrolet facility. In 1978, became part of GM's Central Foundry Division. In 1991, Central Foundry became part of GM Powertrain. <br />Production ended April 23, 2009. Demolished in 2011.
|-
|M||Mexico City Assembly||[[w:Mexico City|Mexico City]]||[[w:Mexico|Mexico]]||[[w:Chevrolet|Chevrolet]] trucks & vans||1937||1995<ref>{{cite news|author=Thomas H. Klier, James Rubenstein|title=Mexico’s Growing Role in the Auto Industry Under NAFTA: Who Makes What and What Goes Where|url=https://www.chicagofed.org/publications/economic-perspectives/2017/6.|publisher=Federal Reserve Bank of Chicago, Economic Perspectives, Vol. 41, No. 6|at=see table 11 and footnotes right under table 11|date=September 2017}}</ref>||[[w:Chevrolet|Chevrolet]] including: Caprice, Chevelle, Corvair, Impala, Malibu, Nova, Malibu Rallye (Nova-based), trucks<br />[[w:Pontiac (automobile)|Pontiac]], [[w:Oldsmobile|Oldsmobile]], [[w:Buick|Buick]], [[w:Cadillac|Cadillac]],<br /> [[w:Opel Olympia|Opel Olympia]],<br> [[w:Opel Rekord|Opel Rekord/MX-1/<br>Olimpico/Fiera]] <br /> Located at 843 Avenida Ejército Nacional (formerly Calzada de Los Morales) although the old headquarters building was demolished in 2018. The current headquarters is in the GM Tower at the other end of the property on Blvd. Miguel de Cervantes Saavedra. Started with trucks then added passenger cars in the early 1940s. Switched from assembly to manufacturing in 1965. Production ended in 1995 and most of the property was sold but GM de Mexico still has its corporate headquarters at this location. Most of the location is now Plaza Antara, an open-air shopping center.
|-
|2||[[w:Moraine Assembly|Moraine Assembly]]||[[w:Moraine, Ohio|Moraine, Ohio]]||United States||[[w:Chevrolet S-10#First generation (1982)|Chevrolet S-10]] (1982-1992)<br /> [[w:Chevrolet S-10 Blazer#First generation (1983–1994)|Chevrolet S-10 Blazer]] 4-door (1991-1994)<br /> [[w:Chevrolet S-10 Blazer#Second generation (1995–2005)|Chevrolet Blazer]] (1995-2001)<br />[[w:GMC S-15#First generation (1982)|GMC S-15]] (1982-1990)<br />[[w:GMC Sonoma#First generation (1982)|GMC Sonoma]] (1991-1992)<br /> [[w:GMC S-15 Jimmy#First generation (1983–1994)|GMC S-15 Jimmy/Jimmy]] 4-door (1991-1994)<br /> [[w:GMC S-15 Jimmy#Second generation (1995–2005)|GMC Jimmy]] (1995-2001)<br /><br /> [[w:Chevrolet TrailBlazer#First generation (KC; 2001)|Chevrolet TrailBlazer]] (2002-2009)<br /> [[w:GMC Envoy#Second generation (2002–2009)|GMC Envoy]] (2002-2009)<br /> [[w:Isuzu Ascender|Isuzu Ascender]] (2003-2008)<br />[[w:Oldsmobile Bravada|Oldsmobile Bravada]] (1991-1994, 1996-2004)<br />[[w:Buick Rainier|Buick Rainier]] (2004-2007) <br />[[w:Saab 9-7X|Saab 9-7X]] (2005-2009)<br /><br />[[w:Grumman LLV|Grumman LLV]] chassis (1987-1994)||1951<br><br>1981 (Vehicle production)||2008|| Located at 2601 West Stroop Road. Began in 1951 as part of the [[w:Frigidaire|Frigidaire]] Division of General Motors Corporation producing household appliances. [[w:Frigidaire|Frigidaire]] production ended in 1979 when GM sold [[w:Frigidaire|Frigidaire]] to [[w:White Consolidated Industries|White Consolidated Industries]] but kept the Moraine plant and converted it to build vehicles. Vehicle production began in 1981. Was part of GM's Truck & Bus Group. Closed on December 23, 2008. Sold to [[w:Fuyao Group#Fuyao Glass America Inc.|Fuyao Group]] in 2014; began production of automotive glass for GM and other automakers in 2016.
|-
| ||Moraine Engine||[[w:Moraine, Ohio|Moraine, Ohio]]||United States||[[w:Detroit Diesel V8 engine|Detroit Diesel V8 engine]] 6.2L/6.5L||1981||2000||Located at 4100 Springboro Pike. Also began as a [[w:Frigidaire|Frigidaire]] plant. Replaced by the nearby DMAX Ltd. engine plant (originally a joint venture with Isuzu) which builds the replacement engine ([[w:Duramax V8 engine|Duramax V8 engine]]). Demolished by 2003. Production of the 6.5-liter diesel V8 moved to a new AM General plant in Franklin, OH known as General Engine Products. AM General makes the engine for its own use and for GM service parts, & 3rd party customers.
|-
| ||Muncie Transmission||[[w:Muncie, Indiana|Muncie, Indiana]]||United States||Transmissions including: [[w:Getrag 282 transmission|Getrag 282/NVG T550]], Getrag 284, Muncie M17, Muncie M20/M21/M22, Muncie M62/M64, [[w:Muncie SM420 transmission|Muncie SM420 transmission]], [[w:Muncie SM465 transmission|Muncie SM465 transmission]], [[w:New Venture Gear 3500 transmission|NV3500/NV3550]], [[w:New Venture Gear 4500 transmission|NV4500]]<br />Valves, Steering gears<br />Forge||1919||2006||Located at 1200 W. Eighth St. Originally founded as Warner Gear Company in 1902. Bought by GM in 1919. Became Muncie Products Division. Closed in 1932. Reopened by Chevrolet in 1935 (Chevrolet Muncie). Moved to Detroit Diesel Allison Division in 1984 & then to Hydramatic Division in 1986. Became part of [[w:New Venture Gear|New Venture Gear]] joint venture with Chrysler in 1990. GM owned 36% while [[w:Chrysler|Chrysler]] owned 64%. GM sold its stake to [[w:DaimlerChrysler|DaimlerChrysler]] in 2002 but took back the Muncie plant. Became Manual Transmissions of Muncie. The plant closed in 2006. Demolished in 2008-09.
|-
| ||GM Near East||[[w:Alexandria|Alexandria]]|| [[w:Egypt|Egypt]]||[[w:Chevrolet|Chevrolet]] cars and trucks <br />[[w:Buick|Buick]]||1936||1958||Began CKD assembly of trucks in 1936 followed by cars in 1938. In 1951, GM Near East became the Alexandria Branch of GM Middle East. Plant was liquidated in 1958.
|-
| ||[[w:General Motors New Zealand|General Motors New Zealand]]||[[w:Petone|Petone]]||[[w:New Zealand|New Zealand]]||[[w:Chevrolet|Chevrolet]] including [[w:Chevrolet Deluxe|Chevrolet Deluxe]], [[w:Chevrolet 210|Chevrolet 210]], [[w:Chevrolet Bel Air|Chevrolet Bel Air]], [[w:Chevrolet Impala|Chevrolet Impala]], [[w:Chevrolet Thriftmaster|Chevrolet Thriftmaster]]<br />[[w:Pontiac (automobile)|Pontiac]] including [[w:Pontiac Laurentian|Pontiac Laurentian]], [[w:Pontiac Parisienne#New Zealand|Pontiac Parisienne]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Buick|Buick]]<br />[[w:Opel Kadett#Kadett I (1936–1940)|Opel Kadett]]<br />[[w:Vauxhall Motors|Vauxhall]] including [[w:Vauxhall Cresta|Vauxhall Cresta]] (E, PA, PC), [[w:Vauxhall Wyvern|Vauxhall Wyvern]], [[w:Vauxhall Velox|Vauxhall Velox]], [[w:Vauxhall Viva|Vauxhall Viva]], [[w:Vauxhall Victor|Vauxhall Victor]]<br />[[w:Bedford Vehicles|Bedford]] including [[w:Bedford CF|Bedford CF]], [[w:Bedford TK|Bedford TK]]<br />[[w:Holden|Holden]] including [[w:Holden FE|Holden FE]], [[w:Holden FB|Holden FB]], [[w:Holden EJ|Holden EJ]], [[w:Holden EH|Holden EH]], [[w:Holden HD|Holden HD]]||1926||1984||Also made [[w:Frigidaire|Frigidaire]] refrigerators, freezers, washers, and dryers (Frigidaire was owned by GM from 1919 to 1979). <br />
Axle tube assemblies, oil filters, and spark plugs.
|-
|Z1-Z9 [https://forums.justcommodores.com.au/threads/commodore-vin-decoder-vb-to-zb.279978/]||[[w:General Motors New Zealand|General Motors New Zealand]]||[[w:Trentham, New Zealand|Trentham]]||[[w:New Zealand|New Zealand]]||[[w:Vauxhall Motors|Vauxhall]] including [[w:Vauxhall Chevette|Vauxhall Chevette]], [[w:Vauxhall Cresta#Cresta PC|Vauxhall Cresta]], [[w:Vauxhall Viva|Vauxhall Viva]]<br />[[w:Holden|Holden]] including [[w:Holden HQ|Holden HQ]], [[w:Statesman (automobile)#HQ|Holden Statesman HQ]], [[w:Holden HJ|Holden HJ]], [[w:Statesman (automobile)#HJ|Holden Statesman HJ]], [[w:Holden HX|Holden HX]], [[w:Statesman (automobile)#HX|Holden Statesman HX]], [[w:Holden HZ|Holden HZ]], [[w:Statesman (automobile)#HZ|Holden Statesman HZ]], [[w:Statesman (automobile)#WB|Holden Statesman WB]],<br /> [[w:Holden Commodore (VB)|Holden Commodore (VB)]],<br /> [[w:Holden Commodore (VC)|Holden Commodore (VC)]],<br /> [[w:Holden Commodore (VH)|Holden Commodore (VH)]],<br /> [[w:Holden Commodore (VK)|Holden Commodore (VK)]],<br /> [[w:Holden Commodore (VL)|Holden Commodore (VL)]],<br /> [[w:Holden Commodore (VN)|Holden Commodore (VN)]], [[w:Holden Royale|Holden Commodore Royale (VH/VK/VL)]] <br />[[w:Holden Torana|Holden Torana]]<br /> [[w:Isuzu Faster#Second generation (1980–1988)|Holden Rodeo]]<br />[[w:Isuzu Gemini#In other markets|Isuzu Gemini/Holden Gemini]]<br />[[w:Holden Camira|Holden Camira]]<br />[[w:Holden Barina#First generation (MB, ML; 1985–1988)|Holden Barina]]<br />[[w:Suzuki Cultus#First generation (1983)|Suzuki Swift]]<br />[[w:Daihatsu Charade#First generation (G10, G20; 1977–1983)|Daihatsu Charade (under contract for Daihatsu)]]<br />[[w:Datsun Truck#Nissan D21|Nissan Navara pickup (under contract for Nissan)]]||1967||1990||
|-
| ||GM Nordiska AB||Södra Hammarbyhamnen, [[w:Stockholm|Stockholm]]||[[w:Sweden|Sweden]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Opel|Opel]]<br />[[w:Vauxhall Motors|Vauxhall]]<br />[[w:Bedford Vehicles|Bedford]] trucks||1928||1957|| Converted into a warehouse in 1957.
|-
| ||Northway Motor Plant||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||Northway engines||1905||Burned down 1987||Located at 4584 Maybury Grand Ave. (Jeffries Expressway Service Drive) and W. Hancock St. Around 4646 Lawton St. (rear side) is the remnants of a water tower and railroad spur. Northway Motor and Manufacturing Company was acquired by GM in 1909, becoming Northway Motor and Manufacturing Division. Northway had made engines for both GM brands (in particular [[w:Oakland Motor Car Company|Oakland]], [[w:Oldsmobile|Oldsmobile]], [[w:Sheridan (automobile)|Sheridan]], [[w:Scripps-Booth|Scripps-Booth]], [[w:Samson Tractor|Samson Tractor]], and [[w:GMC (automobile)|GMC]]) and other automakers. Became part of GM Intercompany Parts Group. In 1920, Northway moved to a new plant on Holbrook Ave. in Detroit. This address was subsequently been used by [[w:Frigidaire|Frigidaire]] in the 1920's and 1930's and then by Refrigeration Service Inc. in the 1950's. At some point, the building was sold to Motor City Wiping Cloth Co. but they abandoned the property in 1983, leaving behind massive bales of rags and cloths. The building burned down in a horrific fire in 1987 after homeless people in the building were burning fires there to keep warm. The fire killed three firefighters and injured ten others. The fire even spread to the nearby Continental Paper warehouse.
|-
| ||Northway Motor Plant/General Motors Truck Co. Plant No. 7/ <br>Chevrolet Gear and Axle Div.||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||Northway engines, Axles, parts for past model Chevrolets||1920||1994||Located at 1806 Holbrook Ave. Northway Motor and Manufacturing Company was acquired by GM in 1909, becoming Northway Motor and Manufacturing Division. Northway had made engines for both GM brands (in particular [[w:Oakland Motor Car Company|Oakland]], [[w:Oldsmobile|Oldsmobile]], [[w:Sheridan (automobile)|Sheridan]], [[w:Scripps-Booth|Scripps-Booth]], [[w:Samson Tractor|Samson Tractor]], and [[w:GMC (automobile)|GMC]]) and other automakers. Became part of GM Central Products Division. In 1920, Northway moved here from their original plant on Maybury Grand Ave. and primarily supplied engines to GMC. In 1925, became part of Yellow Truck & Coach Manufacturing Company as part of the merger of Yellow Cab Manufacturing Company and General Motors Truck Corp., the manufacturer of GMC trucks. In 1926, Northway Motor Division was liquidated and its Detroit plant was sold to Chevrolet on March 31 to become the Chevrolet Gear and Axle Div. Part of the engine tooling machinery was transferred to the Yellow Sleeve-Valve Engine Works at East Moline, IL. Some Northway engines were still used by some GMC trucks (K-series) through 1930. Was part of the Detroit complex sold to [[w:American Axle|American Axle]] in 1994. Now part of American Axle's Advanced Technology Development Center.
|-
|N<br />(1953-1964 [[w:Chevrolet|Chevrolet]]) and 1965-1987<br /><br />9 <br />(1928-1952 [[w:Chevrolet|Chevrolet]])||[[w:Norwood Assembly|Norwood Assembly]]||[[w:Norwood, Ohio|Norwood, Ohio]]||United States||[[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1961)<br />[[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-1961)<br />[[w:Chevrolet Camaro|Chevrolet Camaro]] (1967-1987)<br />[[w:Chevrolet Caprice|Chevrolet Caprice]] (1966)<br />[[w:Chevrolet El Camino#First generation (1959–1960)|Chevrolet El Camino]] (1959-1960)<br />[[w:Chevrolet Impala|Chevrolet Impala]]<br /> (1958-1961, 1965-1966)<br />[[w:Chevrolet Nomad|Chevrolet Nomad]] (1955-1957)<br />[[w:Chevrolet Nova|Chevrolet Chevy II/Nova]]<br> (1962-1966, 1972)<br />[[w:Pontiac Firebird|Pontiac Firebird]] (1969-1987)<br />[[w:Buick Apollo|Buick Apollo]] (1973)||1923||1987||Located at 5025 Carthage Ave. First vehicle produced was a Chevrolet Superior on August 13, 1923. Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. Norwood Assembly joined the GM Assembly Division in 1971. Closed August 26, 1987. Last vehicle produced was a Chevy Camaro IROC-Z. Demolished. Now Linden Pointe on the Lateral, a mixed use retail and office space. <br />[[w:Chevrolet Superior|Chevrolet Superior]]<br />[[w:Chevrolet Series AA Capitol|Chevrolet Series AA Capitol]]<br />[[w:Chevrolet Series AB National|Chevrolet Series AB National]]<br />[[w:Chevrolet Series AC International|Chevrolet Series AC International]]<br />[[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]]<br />[[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]]<br />[[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]]<br />[[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]]<br />[[w:Chevrolet Master|Chevrolet Master]]<br />[[w:Chevrolet Deluxe|Chevrolet Deluxe]]<br />[[w:Chevrolet Stylemaster|Chevrolet Stylemaster]]<br />[[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]]<br />[[w:Chevrolet 150|Chevrolet 150]] (1953-1957)<br />[[w:Chevrolet 210|Chevrolet 210]] (1953-1957)<br />[[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958)<br />[[w:Chevrolet AK Series|Chevrolet AK Series]]<br />[[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1947-1955)<br />[[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959)<br />[[w:Chevrolet C/K (first generation)|Chevrolet C/K]] (1960-1966)<br />[[w:Chevrolet Suburban|Chevrolet Suburban]] (1952)
|-
|Z||[[w:NUMMI|NUMMI]]||[[w:Fremont, California|Fremont, California]]||United States||[[w:Chevrolet Chevy II / Nova#Fifth generation (1985–1988)|Chevrolet Nova]] (1985-1988)<br />[[w:Geo Prizm|Geo Prizm]] (1989-1997)<br />[[w:Chevrolet Prizm|Chevrolet Prizm]] (1998-2002)<br />[[w:Pontiac Vibe|Pontiac Vibe]] (2003-2010)<br />[[w:Toyota Corolla (E80)|Toyota Corolla FX]] (1987-1988)<br />[[w:Toyota Corolla|Toyota Corolla]] (1989-2010) (E90/E100/E110/E130/E140)<br />[[w:Toyota Hilux#Fifth generation (N80, N90, N100, N110; 1988)|Toyota Pickup]] (1992-1995)<br />[[w:Toyota Tacoma|Toyota Tacoma]] (1995-2010)<br />[[w:Toyota Voltz|Toyota Voltz]] (Japan: '02-'04)||1984||2009||Located at 45500 Fremont Blvd.<br /> Operated from 1963-1982 as a GM factory.<br />From 1984-2010, operated as [[w:NUMMI|New United Motor Manufacturing Inc. (NUMMI)]], which was a 50/50 joint venture between GM and [[w:Toyota|Toyota]] and assembled both GM and Toyota vehicles. First vehicle produced was a yellow Chevrolet Nova in December 1984. First Toyota produced was a Corolla FX16 3-d hatchback in September 1986. This was followed by the Corolla FX 3-d hatchback in February 1987. Nova and Corolla FX production ended in September 1988. That same month, NUMMI began producing the Toyota Corolla 4-door sedan. Geo Prizm production began in November 1988. In August 1991, Toyota pickup production began with the Regular Cab 4x2. The 4x4 followed in February 1992 ant the Xtracab followed in March 1993. Tacoma pickup production began in January 1995, replacing the previous unnamed Toyota pickup model. Prizm production ended in December 2001. In January 2002, Pontiac Vibe production began. In June 2002, production began of the Toyota Voltz, a rhd version of the Pontiac Vibe built for export to Japan. In September 2004, the 2nd generation Tacoma pickup began production. Pontiac Vibe production ended on August 17, 2009, ending GM production at Fremont. Tacoma pickup production ended March 26, 2010. The last vehicle built at NUMMI, a red Corolla sedan, was built April 1, 2010. NUMMI produced 7.7 million vehicles. <br />Sold to [[w:Tesla Motors|Tesla, Inc.]] in May 2010.<ref>{{cite news|author=Sam Abuelsamid|title=Tesla to buy old resources from GM, Toyota for NUMMI plant|url=http://www.autoblog.com/2010/08/22/tesla-to-buy-old-resources-from-gm-toyota/|access-date=20 August 2015|publisher=Autoblog.com|date=August 22, 2010}}</ref> Tesla only bought 210 of the total 370 acres owned by NUMMI. Tesla also bought $15 million worth of equipment and parts from the former NUMMI plant. Tesla took possession of the plant in October 2010. Tesla began production at Fremont in June 2012 with the Model S.
|-
|O <br />(1953-1963 [[w:Chevrolet|Chevrolet]])<br /><br />6 <br />(1928-1952 [[w:Chevrolet|Chevrolet]])<br /><br />C ([[w:GMC (automobile)|GMC]])||[[w:Oakland Assembly|Oakland Assembly]] (Chevrolet)||[[w:Oakland, California|Oakland, California]]||United States||[[w:Chevrolet Series 490|Chevrolet Series 490]]<br />[[w:Chevrolet Superior|Chevrolet Superior]]<br />[[w:Chevrolet Series AA Capitol|Chevrolet Series AA Capitol]]<br />[[w:Chevrolet Series AB National|Chevrolet Series AB National]]<br />[[w:Chevrolet Series AC International|Chevrolet Series AC International]]<br />[[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]]<br />[[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]]<br />[[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]]<br />[[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]]<br />[[w:Chevrolet Master|Chevrolet Master]]<br />[[w:Chevrolet Deluxe|Chevrolet Deluxe]]<br />[[w:Chevrolet Stylemaster|Chevrolet Stylemaster]]<br />[[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]]<br />[[w:Chevrolet 150|Chevrolet 150]] (1953-1957)<br />[[w:Chevrolet 210|Chevrolet 210]] (1953-1957)<br />[[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1963)<br />[[w:Chevrolet Corvair|Chevrolet Corvair]] (1960-1963)<br />[[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958)<br />[[w:Chevrolet Impala|Chevrolet Impala]] (1958-1963)<br />[[w:Chevrolet Nova|Chevrolet Chevy II/Nova]] (1962-1963)<br />[[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1947-1955)<br />[[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959)<br />[[w:Chevrolet C/K (first generation)|Chevrolet C/K]] (1960-1963)<br />[[w:GMC New Design|GMC New Design]] (1952-1954)<br />[[w:GMC Blue Chip|GMC Blue Chip]] (1955-1959)<br />[[w:Chevrolet C/K (first generation)|GMC C/K]] (1960-1963)<br />[[w:Chevrolet Suburban|Chevrolet Suburban]] (1952-1953, 1955, 1957, 1959, 1963)<br />[[w:GMC Suburban|GMC Suburban]]||1917||1963||Located at 73rd Ave. & Foothill Blvd. Built by Chevrolet before it became part of GM. Began building GMC trucks in December 1937 for the 1938 model year. Replaced by Fremont Assembly plant. Demolished. Site became Eastmont Mall which is now [[w:Eastmont Town Center|Eastmont Town Center]].
|-
| ||[[w:Oakland Motor Car Company|Oakland Motor Car Co.]]||[[w:Pontiac, Michigan|Pontiac, Michigan]]||United States||Oakland automobiles <br /> Pontiac 1926-1927||1909||1931||Located at 196 Oakland Ave. (now Cesar E Chavez Ave.). Also bordered by Baldwin Ave. and W. Howard St. GM bought Oakland Motor Car Co. in 1909. Oakland introduced sister brand Pontiac in 1926. Pontiac replaced Oakland for 1932. Early Pontiacs were built here before production moved to the new factory stretching from Baldwin Ave. east to Joslyn Ave. a little farther north. This was Pontiac's first headquarters until 1970 when Pontiac headquarters moved north to the Pontiac Assembly complex on Joslyn Ave. and <br> E. Montcalm St. Some of the buildings are still standing.
|-
| ||[[w:es:General Motors OBB|GM-OBB]]||[[w:Quito, Ecuador|Quito]]||[[w:Ecuador|Ecuador]]||[[w:Isuzu D-Max#Second generation (RT; 2011)|Chevrolet D-Max 2011]]||1980 (1st GM product)||2024||OBB (Ómnibus BB Transportes) was founded in 1975. GM bought 22% of OBB in 1981 & became majority shareholder in 1988. GM announced in April 2024 that GM-OBB will shut down at the end of August 2024.<ref>{{Cite web|url=https://gmauthority.com/blog/2024/04/gm-shutting-down-manufacturing-operations-in-colombia-and-ecuador/|title = GM Shutting Down Manufacturing Operations In Colombia And Ecuador|author=Deivis Centeno|publisher=GMAuthority.com|date = April 29, 2024}}</ref><ref>{{Cite web|url=https://www.americaeconomia.com/en/business-industries/general-motors-announces-end-car-manufacturing-operations-colombia-and-ecuador/|title = General Motors announces the end of car manufacturing operations in Colombia and Ecuador|publisher=AmericaEconomia.com|date = April 26, 2024}}</ref>
Past models: [[w:Chevrolet Aveo (T200)|Chevrolet Aveo]]<br />[[w:Chevrolet K5 Blazer|Chevrolet K5 Blazer]]<br />[[w:Opel Corsa#Corsa B (S93; 1993)|Chevrolet Corsa]], [[w:Opel Corsa#Corsa C (X01; 2000)|Chevrolet Corsa Evolution]]<br />[[w:Suzuki Cultus Crescent|Chevrolet Esteem]], [[w:Suzuki Cultus#Second generation (1988)|Chevrolet Forsa]]<br />[[w:Isuzu Gemini#Second generation (1985)|Chevrolet Gemini]]<br />[[w:Isuzu Faster#TF|Chevrolet LUV]], [[w:Isuzu D-Max#First generation (RA, RC; 2002)|Chevrolet LUV D-Max]]<br />[[w:Isuzu MU#First generation (UCS55/UCS69GW; 1989–1998)|Chevrolet Rodeo]], [[w:Isuzu Trooper#First generation (1981–1991)|Chevrolet Trooper]]<br />[[w:Chevrolet Sail#Second generation (2010)|Chevrolet Sail (Gen 2)]], [[w:Chevrolet Sail#Third generation (2014)|Chevrolet Sail (Gen 3)]]<br />[[w:Chevrolet C/K (third generation)|Chevrolet Silverado]]<br />[[w:Chevrolet Tracker (Americas)|Chevrolet Vitara]], [[w:Chevrolet Tracker (Americas)#Second generation|Chevrolet Grand Vitara]], [[w:Suzuki Vitara#Third generation (JT; 2005)|Chevrolet Grand Vitara SZ]]
|-
|6||[[w:Oklahoma City Assembly|Oklahoma City Assembly]]||[[w:Oklahoma City, Oklahoma|Oklahoma City, Oklahoma]]||United States||[[w:Chevrolet Trailblazer (SUV)#EXT|Chevrolet TrailBlazer EXT]] (2002-2006)<br />[[w:GMC Envoy XL#Second generation (2002–2009)|GMC Envoy XL]] (2002-2006)<br />[[w:GMC Envoy#Envoy XUV|GMC Envoy XUV]] (2004-2005)<br />[[w:Isuzu Ascender|Isuzu Ascender extended length]] (2003-2006)||1979||2006||Located at 7447 SE 74th Street. <br /> Initially produced front wheel drive [[w:GM X platform (FWD)|X platform]] vehicles ([[w:Chevrolet Citation|Chevrolet Citation]] (1980-1983) & [[w:Pontiac Phoenix#Second generation (1980–1984)|Pontiac Phoenix]] (1980-1982)) followed by front wheel drive [[w:General Motors A platform (FWD)|A platform]] vehicles ([[w:Chevrolet Celebrity|Chevrolet Celebrity]] (1982-1989), [[w:Pontiac 6000|Pontiac 6000]] (1988-1991), [[w:Oldsmobile Cutlass Ciera|Oldsmobile Cutlass Ciera]] (1989-1996), [[w:Buick Century#Fifth generation (1982–1996)|Buick Century]] (1982-1996)) as well as [[w:Chevrolet Malibu#Fifth generation (1997)|Chevrolet Malibu]] (1997-2001) & [[w:Oldsmobile Cutlass#Sixth generation (midsize) 1997–1999|Oldsmobile Cutlass]] (1997-1999). Converted to build body-on-frame SUVs for 2002 model year. Damaged by a tornado on May 8, 2003, but the company repaired the damage and returned the plant to operation just 53 days later. Idled February 20, 2006. Last vehicle produced was a white 2006 Chevrolet TrailBlazer EXT. Plant was taken over by Oklahoma City in 2008 and leased to neighbor Tinker Air Force Base. Now known as Building 9001 Tinker Aerospace Complex. Used for maintaining jet engines and for software engineering.
|-
|2||[[w:Opel|Opel]] Werk Bochum||[[w:Bochum|Bochum]], [[w:North Rhine-Westphalia|North Rhine-Westphalia]]||[[w:Germany|Germany]]||[[w:Opel Olympia#Name revival: Opel Olympia (1967–1970)|Opel Olympia]] A<br />[[w:Opel Ascona|Opel Ascona]] A, B<br />[[w:Opel Kadett|Opel Kadett]] A, B, C, D, & E<br />[[w:Opel Astra|Opel Astra]] F, G, & H<br />[[w:Opel Astra#H|Opel Astra]] H Classic (5-door, Caravan)<br />[[w:Opel GT#GT (1968–1973)|Opel GT]]<br />[[w:Opel Manta|Opel Manta]] A, B<br />[[w:Opel Zafira#Zafira Tourer C (2011–2019)|Opel/Vauxhall Zafira Tourer]] C<br />[[w:Opel Zafira#Zafira B (2005–2014)|Opel/Vauxhall Zafira]] B/Zafira Family<br />[[w:Opel Zafira#Zafira A (1999–2006)|Opel/Vauxhall Zafira]] A<br />[[w:Vauxhall Astra|Vauxhall Astra]]<br />Engines<br />Transmissions<br />Axles||1962||2014|| Plant I was the vehicle assembly plant. First car off the line was a Kadett A. Plant II was the engine, transmission, & axle plant. Engine production ended in 2004. Axle production ended in 2011. Transmission production ended Oct. 7, 2013. Vehicle production ended December 5, 2014.
|-
| ||[[w:Opel|Opel]] [[w:Opelwerk Brandenburg|Werk Brandenburg]]||[[w:Brandenburg an der Havel|Brandenburg an der Havel]], [[w:Brandenburg|Brandenburg]]||[[w:Germany|Germany]]||[[w:Opel Blitz|Opel Blitz]]<br />||1935||1944|| Bombed and heavily damaged by the Allies on Aug. 6, 1944. Factory was dismantled and shipped to the Soviet Union after the war ended as reparations.
|-
|6||[[w:Opel Eisenach|Opel Eisenach GmbH]]||[[w:Eisenach|Eisenach]], [[w:Thuringia|Thuringia]]||[[w:Germany|Germany]]||[[w:Opel Corsa#Corsa E (X15; 2014)|Opel/Vauxhall Corsa]] E (3-door)<br />[[w:Opel Corsa#Corsa D (S07; 2006)|Opel/Vauxhall Corsa]] D (3-door)<br />[[w:Opel Corsa#Corsa C (X01; 2000)|Opel/Vauxhall Corsa]] C (3-door)<br />[[w:Opel Corsa#Corsa B (S93; 1993)|Opel/Vauxhall Corsa]] B <br /> [[w:Opel Adam|Opel/Vauxhall Adam]]<br />[[w:Opel Astra#F|Opel Astra F]] (1992-1995)<br />[[w:Opel Astra#G|Opel Astra G]] (1998-2003)||1992||2017|| [[w:Adam Opel AG|Opel plant]]. Began production with Astra F in 1992. Began Corsa production in 1993 with Corsa B. Added production of the Adam in 2013. Sold to [[w:PSA Group|PSA Group]] in 2017. Part of [[w:Stellantis|Stellantis]] since 2021.
|-
| ||[[w:Adam Opel AG|Opel]] Werk Kaiserslautern||[[w:Kaiserslautern|Kaiserslautern]], [[w:Rhineland-Palatinate|Rhineland-Palatinate]]||[[w:Germany|Germany]]||Components<br />Engines:<br /> Four-cylinder turbo diesel engines:<br /> [[w:Fiat JTD engine#2.0 Multijet II|2.0 CDTI Family B turbodiesel 4-cyl.]]<br />[[w:Fiat JTD engine#1.9|1.9 CDTI turbodiesel 4-cyl.]]<br /> [[w:GM Ecotec Diesel (1997)|2.0/2.2 Ecotec direct injection turbodiesel]]
Four-cylinder gasoline engines:<br /> [[w:GM Ecotec engine|GM Ecotec engine]] 2.2<br />[[w:GM Ecotec engine#2.0|GM Ecotec engine]] 2.0 supercharged (LSJ) <br />[[w:GM Family II engine|GM Family II engine]] 1.6, 1.8, 2.0 <br />
|1966||2017||[[w:Adam Opel AG|Opel plant]]. Sold to [[w:PSA Group|PSA Group]] in 2017. Part of [[w:Stellantis|Stellantis]] since 2021.
|-
|1<br /><br />R (Catera)<br /><br />5 (Pre-1976)||[[w:Adam Opel AG|Opel]] Werk Rüsselsheim||[[w:Rüsselsheim|Rüsselsheim]], [[w:Hesse|Hesse]]||[[w:Germany|Germany]]||[[w:Opel Insignia|Opel/Vauxhall Insignia]] (sedan, hatchback, Sports Tourer, Country Tourer)<br />[[w:Buick Regal#Fifth generation (2008)|Buick Regal]] (2011MY from March 1, 2010-March 25, 2011)<br />[[w:Buick Regal#Sixth generation (2018)|Buick Regal]] (2018-2020)<br />[[w:Holden Insignia#First generation (G09; 2008)|Holden Insignia VXR (GA)]] (2015-2017)<br />[[w:Holden Commodore ZB|Holden Commodore (ZB)]] (2018-2020)<br />[[w:Opel Astra#J|Opel/Vauxhall Astra J]] (5-door)<br />[[w:Opel Zafira|Opel/Vauxhall Zafira Tourer C]]<br />[[w:Opel Vectra|Opel/Vauxhall Vectra]]<br />[[w:Opel Vectra#Vectra B (1995–2002)|Holden Vectra (JR)]]<br />[[w:Opel Vectra#Vectra C (2002–2010)|Holden Vectra (ZC)]]<br />[[w:Opel Signum|Opel/Vauxhall Signum]]<br />[[w:Opel Omega|Opel/Vauxhall Omega]]<br />[[w:Cadillac Catera|Cadillac Catera]] (1997-2001)<br />[[w:Opel Senator|Opel/Vauxhall Senator & Vauxhall Royale]]<br />[[w:Opel Calibra|Opel/Vauxhall/Holden Calibra (YE)]]<br />[[w:Opel Monza|Opel Monza/Vauxhall Royale Coupe]]<br />[[w:Opel Commodore|Opel Commodore/Vauxhall Viceroy]]<br />[[w:Opel Kapitan|Opel Kapitan]]<br />[[w:Opel Admiral|Opel Admiral]]<br />[[w:Opel Diplomat|Opel Diplomat]]<br />[[w:Opel Kadett#Kadett I (1936–1940)|Opel Kadett]]<br />[[w:Opel Olympia|Opel Olympia]]<br />[[w:Opel Blitz|Opel Blitz]]<br />axles<br />components<br />[[w:GM F40 transmission|GM F40 transmission]]<br />Frigidaire refrigerators (1937-c.1940 & 1946-1959)||1899 (1st production car built)<br><br> 1929 (part of GM)||2017 (left GM)<br><br>2020 (production for GM ended)|| [[w:Adam Opel AG|Opel plant]]. GM bought 80% of Opel in March 1929 and bought the rest in 1931, making Opel a full GM subsidiary. Russelsheim previously make engines. Sold to [[w:PSA Group|PSA Group]] in 2017. Rüsselsheim continued to supply the Buick Regal & the Holden Commodore ZB to GM through 2020. Part of [[w:Stellantis|Stellantis]] since 2021.
|-
|S||[[w:Opel Szentgotthárd|Opel Szentgotthárd]]||[[w:Szentgotthárd|Szentgotthárd]]||[[w:Hungary|Hungary]]||[[w:Opel Astra|Opel Astra]] F 1992-1997, 80,835 units<br />[[w:Opel Vectra#Vectra B (1995–2002)|Opel Vectra]] B1 and B2 1998-1999, 4,404 units<br />Opel Engines including:<br /> [[w:GM Family 1 engine| Family 1 engine]] DOHC versions 1.4, 1.6, 1.8<br />[[w:GM small gasoline engine|GM Small Gasoline Engine]]<br />[[w:GM Medium Gasoline Engine|GM Medium Gasoline Engine]]<br />[[w:GM Medium Diesel engine|GM Medium Diesel engine]]<br />[[w:VTi transmission|"VTi" CVT transmission]]<br /> [[w:Allison Transmission|Allison]] 3000, 4000, & Torqmatic Series automatic transmissions||1992||2017 (left GM)<br><br>2019 (production for GM ended)|| [[w:Adam Opel AG|Opel plant]]. Originally a joint venture between GM & Hungarian truck and engine maker Raba. GM bought out Raba & became 100% owner in 1995. Production of Allison Transmissions began in 2000. Sold to [[w:PSA Group|PSA Group]] in 2017. Szentgotthárd continued to supply the [[w:GM Medium Diesel engine|1.6L LH7 turbodiesel I4]] to GM through 2019. Part of [[w:Stellantis|Stellantis]] since 2021.
|-
| ||[[w:Opel Wien|Opel Wien GmbH]]||[[w:Aspern|Aspern]]||[[w:Austria|Austria]]||[[w:Family 0 engine|Family 0]] engines (1.0, 1.2, 1.4, 1.4 Turbo)<br />Transmissions (Easytronic automated manual, F15/F17 five-speed manual and M20/M32 six-speed manual)||1982||2017|| [[w:Adam Opel AG|Opel plant]]. Sold to [[w:PSA Group|PSA Group]] in 2017. Part of [[w:Stellantis|Stellantis]] since 2021. Closed by Stellantis in 2024. <br /> Past engines: [[w:GM Family 1 engine|GM Family 1 engine]] SOHC versions.
|-
| ||Osaka Assembly (Built on land leased from [[w:Sojitz|Nihon Menka]])<ref>{{cite book|url=https://books.google.com/books?id=TY4l3qWIIh4C&q=general+motors+assembly+plant+location+osaka+japan&pg=PA70|title=American Multinationals and Japan: The Political Economy of Japanese Capital Controls, 1899-1980|author=Mark Mason|date=14 October 1992|publisher=Harvard Univ Asia Center|isbn=9780674026308|via=Google Books}}</ref>||[[w:Osaka|Osaka]]||[[w:Japan|Japan]]||Chevrolet, Pontiac, Oldsmobile, Buick from CKD kits||1927||1941||Factory was seized by [[w:Imperial Japanese|Imperial Japanese]] Government, see also [[w:General Motors Japan|General Motors Japan]]<ref>{{cite web|url=http://www.autonews.com/article/20080914/ANA03/809150388/gm-had-early-start-in-japan-but-was-hobbled-by-nationalism|title=GM early history in Japan|author=Hans Greimel|publisher=Autonews.com|date=September 14, 2008}}</ref><ref>{{cite web|url=https://history.gmheritagecenter.com/wiki/index.php/File:1926-6-1.jpg|title=Image of Osaka facility}}</ref>
|-
| ||[[w:Oshawa Truck Assembly|Oshawa Battery Plant]]||[[w:Oshawa, Ontario|Oshawa, Ontario]]||[[w:Canada|Canada]] ||Batteries||19?||1990's?||Was part of the overall Oshawa Assembly complex (Autoplex) on Park Road South. Referred to by Delco Remy as Plant 41. This operation was closed.
|-
|9 (1917-Mid 1923 Chevrolet)||Oshawa North||[[w:Oshawa, Ontario|Oshawa, Ontario]]||[[w:Canada|Canada]]||<br />||1907||1996||The original Oshawa (North) plant opened in 1907 as a McLaughlin Motor Car Co. plant. It produced McLaughlin-Buick cars by fitting Buick engines and chassis to McLaughlin bodies. It also built Chevrolets for Chevrolet Motor Co. beginning in 1915 as the Chevrolet Motor Car Co. of Canada. McLaughlin Motor Car Co. and the Chevrolet Motor Car Co. of Canada were bought out by GM in 1918 becoming GM of Canada. GM of Canada continued to make Chevrolets and McLaughlin-Buicks (which became simply Buick after WWII) and also assembled [[w:Oakland Motor Car Company|Oakland]] 1921-1930, [[w:Oldsmobile|Oldsmobile]] 1920-1942, 1946-1969, [[w:Marquette (automobile)#Buick brand|Marquette]] 1929-1930, [[w:Buick|Buick]] 1908-1942, 1951-1971, [[w:LaSalle (automobile)|LaSalle]] 1927-1930, 1932-1935, [[w:Cadillac|Cadillac]] 1923-1936. [[w:Pontiac (automobile)|Pontiac]] production in Oshawa began shortly after US production in 1926. From the 1950's into the 1980's, Canadian market full-size Pontiacs were built on Chevrolet chassis and were powered by Chevrolet engines and had model names different from US-market Pontiacs (Pathfinder, Strato Chief, Laurentian, and Parisienne). Car production shifted to the current Oshawa complex Car Assembly plant (South plant; also known as Autoplex beginning in the 1980's) which opened in 1953. [[w:Chevrolet|Chevrolet]] trucks were made beginning in 1919 and [[w:GMC (automobile)|GMC]] trucks were made beginning in 1923 before truck production shifted to the Oshawa Truck plant located next to the South car plant in 1965. Oshawa also produced 65 [[w:Samson Tractor#Trucks and a car|Samson trucks]] from 1920-1921. Oshawa also produced military vehicles and equipment during both WWI and WWII. Also, Maple Leaf trucks.
Operations were gradually moved from the older North plant to the newer South plant. The North plant, by then known as the GM North Fabrication plant making metal and plastic parts, was sold to Peregrine, Inc. in 1996. It was then sold to ACSYS Technologies Inc. in 2001. Both companies continued to operate as an auto parts manufacturer supplying GM. ACSYS closed the plant in 2004. The North plant ended all operations in 2005 and the last of it was demolished by 2006. Much of the site of the North plant at 155 Division Street (Ritson Road North is on the other side) is now a Costco.
|-
|1||[[w:Oshawa Truck Assembly|Oshawa Truck Assembly]]||[[w:Oshawa, Ontario|Oshawa, Ontario]]||[[w:Canada|Canada]]||[[w:Chevrolet Silverado|Chevrolet Silverado]] (1999-2009)<br />[[w:GMC Sierra|GMC Sierra]] (1988-2009)||1965||2009||Part of the overall Oshawa Assembly complex (Autoplex) on Park Road South. Truck plant was at 1100 Park Road South at the southern end of the Autoplex. Production ended May 14, 2009. Over 10 million vehicles were produced. Now the GM Canadian Technical Centre's (CTC) McLaughlin Advanced Technology Track. <br />Past models: [[w:Chevrolet C/K|Chevrolet C/K]] (-1986, 1988-1998), [[w:GMC C/K|GMC C/K]] (-1986)
|-
| ||[[w:Delphi Automotive Systems|Packard Electric]]<br /> Main complex||[[w:Warren, Ohio|Warren, Ohio]]||United States||Automotive wiring<br>Electric Motors||1932||1999||Packard Electric was acquired by GM in 1932. Located between Griswold St NE on the north side, Dana St NE on the south side, Paige Ave NE on the east side, and N. Park Ave on the west side. Some of the earliest Packard cars were built here before Packard Automobile split from Packard Electric in 1902. Plant 4, which opened in 1938, was originally used by GM's Sunlight Electrical Division, which made electric motors. GM had acquired the former Sunlight Electrical Manufacturing Co. in March 1933. On July 1, 1943, Sunlight Electrical Division merged into GM's Packard Electric Division. Sunlight motors were still made in Plant 4. Became part of GM's Delphi Automotive Systems subsidiary in 1995 as Delphi Packard Electric Systems. Spun off with Delphi in 1999. Closed in 2006.
|-
| ||[[w:Delphi Automotive Systems|Packard Electric]]<br /> Plant# 41||[[w:Warren, Ohio|Warren, Ohio]]||United States||Automotive wiring||1947||1998||Packard Electric was acquired by GM in 1932. Located at 1554 Thomas Rd SE. Became part of GM's Delphi Automotive Systems subsidiary in 1995 as Delphi Packard Electric Systems. Closed in 1998. Sold in 2004 to Wetzel, Inc. Sold to Berk Enterprise, Inc. in 2009.
|-
| ||[[w:Delphi Automotive Systems|Packard Electric]]<br /> North River Road complex||[[w:Bazetta Township, Ohio|Bazetta Township, Ohio]] and [[w:Howland Township, Trumbull County, Ohio|Howland Township, Ohio]]||United States||Automotive wiring||1955||1999||Packard Electric was acquired by GM in 1932. Located on North River Road and Larchmont Avenue NE. The plant is in Bazetta Township and extends across the border into Howland Township. The majority is in Bazetta Township. Became part of GM's Delphi Automotive Systems subsidiary in 1995 as Delphi Packard Electric Systems. Spun off with Delphi in 1999. Parts of the site have been closed and demolished and/or sold but Delphi successor Aptiv still operates part of the site at 1265 North River Road.
|-
| ||[[w:Delphi Automotive Systems|Packard Electric]]<br /> Brookhaven Plant||[[w:Brookhaven, Mississippi|Brookhaven, Mississippi]]||United States||Automotive wiring||1977||1999||Packard Electric was acquired by GM in 1932. Located at 925 Industrial Park Road NE. Became part of GM's Delphi Automotive Systems subsidiary in 1995 as Delphi Packard Electric Systems. Spun off with Delphi in 1999. Delphi successor Aptiv still operates the Brookhaven plant.
|-
| ||[[w:Delphi Automotive Systems|Packard Electric]]<br /> Clinton Plant||[[w:Clinton, Mississippi|Clinton, Mississippi]]||United States||Automotive wiring||1973||1999||Packard Electric was acquired by GM in 1932. Located at 1001 Industrial Park Dr. Became part of GM's Delphi Automotive Systems subsidiary in 1995 as Delphi Packard Electric Systems. Spun off with Delphi in 1999. One plant closed in 2006 and the second closed in 2009.
|-
| ||[[w:Delphi Automotive Systems|Packard Electric]]<br /> Mexico||[[w:Ciudad Juárez|Ciudad Juárez]], [[w:Chihuahua (state)|Chihuahua]]||[[w:Mexico|Mexico]]||Automotive wiring||1978||1999||Originally established as Conductores y Componentes Eléctricos by the Packard Electric division of GM. Became part of GM's Delphi Automotive Systems subsidiary in 1995. Spun off with Delphi in 1999. Delphi successor Aptiv still operates the Mexican plants.
|-
| ||[[w:Delphi Automotive Systems|Packard Electric]]<br /> Ireland Ltd.||[[w:Tallaght|Tallaght]]||[[w:Republic of Ireland|Ireland]]||Wire harnesses||1975||1996||Located on Airton Road. Production and export of wiring harnesses from this plant allowed GM to import fully built-up vehicles into Ireland before Ireland fully removed its restrictions on importing fully built-up vehicles. Became part of GM's Delphi Automotive Systems subsidiary in 1995. Closed in 1996.
|-
| ||GM Peninsular SA||[[w:Barcelona|Barcelona]]||[[w:Spain|Spain]]||[[w:Chevrolet|Chevrolet]] trucks||1932||1936|| Production ended due to Spanish Civil War. Liquidated around 1939.
|-
| ||GM del Peru||[[w:Lima|Lima]]||[[w:Peru|Peru]]||[[w:Chevrolet Bel Air|Chevrolet Bel Air]]<br />[[w:Chevrolet Camaro (first generation)|Chevrolet Camaro]]<br />[[w:Chevrolet Caprice|Chevrolet Caprice]]<br />[[w:Chevrolet Chevelle|Chevrolet Chevelle]]/[[w:Chevrolet Malibu|Chevrolet Malibu]]<br />[[w:Chevrolet Impala|Chevrolet Impala]]<br />[[w:Opel Kadett|Opel Kadett]]<br />[[w:Opel Rekord|Opel Rekord]]<br />[[w:Vauxhall Victor|Vauxhall Victor]]||1945||1970||
|-
| ||[[w:Pittsburgh Metal|Pittsburgh Metal]]||[[W:West Mifflin, Pennsylvania|West Mifflin, Pennsylvania]]||United States||Metal stamping||1949||2008||Located at 1451 Lebanon School Road. Originally part of [[w:Fisher Body|Fisher Body]] division. Demolished in 2011.
|-
| ||GM Polsce Sp. Zo.o.||[[w:Warsaw|Warsaw]]||[[w:Poland|Poland]]||[[w:Chevrolet|Chevrolet]] cars and trucks||1928||1930's||Was at 103 Wolska St. Closed during the Depression.
|-
|P (1939-1988)||[[w:Pontiac Assembly|Pontiac Assembly]]/Pontiac Fiero Assembly||[[w:Pontiac, Michigan|Pontiac, Michigan]]||United States||In ex-Fisher Body plant (Pontiac Fiero Assembly):<br /> [[w:Pontiac Fiero|Pontiac Fiero]] (1984-1988)<br /><br />In Main plant (Pontiac Assembly) after reopening:<br /> [[w:GM G platform (RWD)|RWD G-bodies]]:<br /> [[w:Chevrolet Monte Carlo#Fourth generation (1981–1988)|Chevrolet Monte Carlo]] (1987-1988),<br /> [[w:Oldsmobile Cutlass Supreme#Fourth generation (1978–1988)|Oldsmobile Cutlass Supreme]] (1985-1987),<br /> [[w:Oldsmobile 442|Oldsmobile 442]] (1986-1987),<br />[[w:Oldsmobile Cutlass Supreme#Fourth generation (1978–1988)|Oldsmobile Cutlass Supreme Classic]] (1988),<br /> [[w:Buick Regal#Second generation (1978)|Buick Regal]] (1985-1987)<br /><br />Also:<br /> Pontiac engines:<br /> [[w:Pontiac straight-8 engine|Pontiac straight-8 engine]]<br />[[w:Pontiac V8 engine|Pontiac V8 engine]]<br />[[w:Pontiac Trophy 4 engine|Pontiac Trophy 4 engine]]<br />[[w:Iron Duke engine|Pontiac Iron Duke/Tech IV I4 engine]]||1927||1987 (Pontiac Assembly)/1988 (Pontiac Fiero Assembly)||This was Pontiac's home plant. Property runs from Walton Blvd. on the north to E. Montcalm St. on the south with Joslyn Ave. or for certain stretches, Highwood Blvd., on the east side and Price St. or further south, Baldwin Ave. and then N. Saginaw St., on the west side. Also known as Pontiac North to distinguish from GMC's multiple plants in Pontiac, MI. Within 90 days of ground being broken, vehicles were already being produced in Pontiac's new home plant in 1927. Final Assembly was Plant 8 of Pontiac's Assembly complex in Pontiac, Michigan. On March 14, 1962, Pontiac Assembly built the 75 millionth GM vehicle built in the US, a white 1962 Bonneville convertible. Idled in 1982 but reopened in January 1985 with bodies supplied by Flint Body Assembly. Closed in December 1987. Last vehicle built was a Buick Regal Grand National. Demolished in 1997. GM still has the Pontiac Redistribution Center on the northeast portion of this property at 1251 Joslyn Road at the intersection with E. Columbia Ave. The Pontiac Metal Center is another still active part of this property. GM still uses the eastern part of the property bordered by Joslyn Ave. on the east, E. Beverly Ave. on the north, E. Montcalm St. on the south, and N. Glenwood Ave. on the west. This area includes GM Performance and Racing Center at 900 N. Glenwood Ave. and the Propulsion Systems Pontiac Engineering Center at 800 N. Glenwood Ave. Pontiac's divisional HQ moved here in 1970 from the previous location at the former Oakland HQ on 196 Oakland Ave. (now Cesar E Chavez Ave.). Pontiac's divisional HQ at One Pontiac Plaza was about where the Propulsion Systems Engineering Center is now. [[w:Fisher Body|Fisher Body]] operated a plant on the site (Plant 17) from 1935-1982. This plant was connected to the final assembly plant by an enclosed bridge that ran over N. Saginaw St., that was used to transport the bodies from the Fisher Body plant, where bodies up to the firewall were built, to the Pontiac final assembly plant where the body was mated to the chassis and the front end, powertrain, & interior were installed and the car was completed. This plant, located at 900 Baldwin Ave., was converted to build the [[w:Pontiac Fiero|Pontiac Fiero]], which it built from 1983-1988. Last Fiero built August 16, 1988. GM used it as a warehouse until 2009 ("Pontiac Warehouse Operations"). Prototyping work was also done there. Most of the Fiero plant was demolished in 2013 (from Kennett Rd. until just before the plant sign which is just past St. Louis Ave.). There used to be an overpass going over Baldwin Ave. to the parking lot on the other side of Baldwin but this was taken down after Fiero production ended. Pontiac engines were made in Plant 9 and Plant 18. Another engine plant was built in 1981 in the northern part of the property. It was originally called Plant 55, later renamed Plant 33. It was next to Plant 51, later renamed Plant 25, which did chassis parts and machining and later, engine machining. Engine production ended in 1993. Plant 9 was demolished in 1997 & Plant 18 was demolished in 1998. Plants 25 & 33 were demolished sometime between 2008 & 2013. Some parts of the complex have been sold to U-Pull And Save Auto Parts, Dani’s Trucking, GFL Environmental, & Bedrock Express. <br />[[w:Pontiac Six|Pontiac Six]] (1927-1932, 1935-1940), Pontiac Series 302 V8 (1932), Pontiac Economy Eight (1933-1934), Pontiac Improved Eight (1935), Pontiac Deluxe Eight (1936-1940), [[w:Pontiac 2+2|Pontiac 2+2]] (1964-1967), [[w:Pontiac Bonneville|Pontiac Bonneville (B-body)]] (1958-80), [[w:Pontiac Bonneville#Seventh generation (1982–1986)|Pontiac Bonneville (G-body)]] (1982), [[w:Pontiac Can Am|Pontiac Can Am]] (1977) [[w:Pontiac Catalina|Pontiac Catalina]] (1959-1980), [[w:Pontiac Chieftain|Pontiac Chieftain]] (1949-1958), [[w:Pontiac Custom S|Pontiac Custom S]] (1969), [[w:Pontiac Executive|Pontiac Executive]] (1967-70), [[w:Pontiac Grand Am#1973–1975|Pontiac Grand Am (1973-75)]], [[w:Pontiac Grand Am#1978–1980|Pontiac Grand Am (1978-80)]], [[w:Pontiac Grand Prix|Pontiac Grand Prix (B-body)]] (1962-1968), [[w:Pontiac Grand Prix#Third generation (1969–1972)|Pontiac Grand Prix (G-body)]] (1969-1972), [[w:Pontiac Grand Prix|Pontiac Grand Prix (A-/G-body)]] (1973-1982), [[w:Pontiac Grand Safari|Pontiac Grand Safari]] (1971-1978), [[w:Pontiac Grand Ville|Pontiac Grand Ville]] (1971-75), [[w:Pontiac GTO|Pontiac GTO]] (1964-1973), [[w:Pontiac LeMans|Pontiac LeMans]] (1962-1981), [[w:Pontiac Safari|Pontiac Safari]] (1955-1957), [[w:Pontiac Star Chief|Pontiac Star Chief]] (1954-66), [[w:Pontiac Streamliner|Pontiac Streamliner]] (1941-51), [[w:Pontiac Tempest|Pontiac Tempest]] (1961-1970), [[w:Pontiac LeMans#1970|Pontiac T-37]] (1970-1971), [[w:Pontiac Torpedo|Pontiac Torpedo]] (1940-1948), [[w:Pontiac Ventura#1960–1970|Pontiac Ventura]] (1960-1961)
|-
|V (1972-1990)<br /><br /> P (Pre-1972)||Pontiac Central Assembly||[[w:Pontiac, Michigan|Pontiac, Michigan]]||United States|||[[w:Chevrolet AK Series|GMC C-Series/E-Series]]<br />[[w:GMC New Design|GMC New Design]] (1947-1951, 1952-1954)<br />[[w:GMC Blue Chip|GMC Blue Chip]] (1955-1959)<br /> [[w:Chevrolet C/K|GMC C/K]] (1960-1985)<br />[[w:Chevrolet C/K|Chevrolet C/K]] (1967-1985)<br /> [[w:GMC Suburban|GMC Suburban]] (1937-1966)<br />[[w:GMC Motorhome|GMC Motorhome/TransMode]] (1978)<br /> Buses ([[w:GM "old-look" transit bus|Yellow Coach/GM "old-look" transit bus]] (1940-1969), [[w:GM PD-4103|GM PD-4103]], [[w:PD-4501 Scenicruiser|PD-4501 Scenicruiser]], [[w:GM New Look bus|GM New Look bus]] (1960-1977), [[w:GM Buffalo bus|GM Buffalo bus]] (1966-1980), [[w:Rapid Transit Series|Rapid Transit Series (RTS)]] (1978-1987))<br />Medium Duty Trucks & Heavy Duty Trucks including:<br />[[w:Chevrolet C/K (second generation)#Medium-duty trucks|Chevrolet C-Series medium-duty trucks]] (1967-1972)<br />[[w:Chevrolet/GMC B series#GMC (1966–1970)|GMC E-Series medium-duty trucks]] (E4500/E5500/E6500) (1967-1968) [https://web.archive.org/web/20140109015322/https://www.gmheritagecenter.com/docs/gm-heritage-archive/historical-brochures/GMC/100_YR_GMC_HISTORY_MAR09.pdf] (page 30)<br />[[w:Chevrolet C/K (second generation)#Medium-duty trucks|GMC C-Series medium-duty trucks]] (1969-1972)<br />[[w:Chevrolet C/K (third generation)#Medium-duty trucks (1973–1989)|Chevrolet/GMC C-Series medium-duty trucks]] (1985-1990)<br />[[w:Chevrolet Kodiak#First generation (1981–1989)|Chevrolet Kodiak]] (1985-1990)<br />[[w:Chevrolet Kodiak#First generation (1981–1989)|GMC Top Kick]] (1985-1990)<br />[[w:Chevrolet/GMC B series|Chevrolet B-series]] (-1991)<br />[[w:Chevrolet/GMC B series|GMC B-series]] (-1991)<br />[[w:GMC Brigadier#Background|Chevrolet/GMC H/J series]] (1966-1977)<br />[[w:Chevrolet Bruin|Chevrolet Bruin]] (1978-1980)<br />[[w:GMC Brigadier|GMC Brigadier]] (1978-1987)<br />[[w:WhiteGMC Brigadier|WhiteGMC Brigadier]] (1988-1989)<br />[[w:GMC General#Background|Chevrolet/GMC C/M series]] (1966-1976)<br />[[w:Chevrolet Bison|Chevrolet Bison]] (1977-1980)<br />[[w:GMC General|GMC General]] (1977-1987)<br />[[w:GMC Astro#Background|GMC F/D series "Crackerbox"]] (1959-1968)<br />[[w:Chevrolet Titan|Chevrolet Titan]] (1970-1980)<br />[[w:GMC Astro|GMC Astro]] (1969-1987)<br />Engines ([[w:GMC straight-6 engine|GMC straight-6 engine]] 1947-1962,<br /> [[w:GMC V6 engine|GMC V6 (1960-1973)/V12 (1960-1965) engine]],<br> [[w:GMC V8 engine#GMC engines|GMC 60° V8]] (1966-1972))||1928||1990||Located at 660 South Boulevard East. Known as GMC Truck & Coach Division Plant 2 when built. Production of trucks began in January 1928. In 1925, General Motors Truck Corp., the parent of the GMC brand, merged with Yellow Cab Manufacturing Company (including its Yellow Coach Mfg. Co. bus-making subsidiary) to form Yellow Truck & Coach Manufacturing Company, in which GM owned a majority stake of 57%. The Northway Motor Division of Detroit was transferred to General Motors Truck Corp. as part of that merger but was liquidated in 1926. On September 30, 1943, GM acquired the remainder of Yellow Truck & Coach Manufacturing Co. and on October 1, 1943 the GMC Truck & Coach Division of General Motors Corp. was formed and Yellow Truck & Coach Manufacturing Co. was dissolved. When limited production of civilian buses resumed in March 1944, they were badged as GM Coach and the Yellow name was retired. Headquarters of Yellow Truck & Coach Manufacturing Co. and later the GMC Truck & Coach Division. Headquarters building in front of Plant 2 was completed in March 1928. Administration and engineering buildings were part of the complex. Built 409,012 [[w:GMC CCKW 2½-ton 6×6 truck|CCKW 6x6 trucks]], AFKWX 6x6 cab-over trucks, [[w:DUKW|DUKW "Ducks"]], & other types of trucks during WWII. Also produced 2,249 buses & 30 T18E2 Boarhound armored cars during WWII. The small-block, Group 1 GMC inline-6s were moved from Plant 4 of Pontiac West to Building 29 at Pontiac Central in November 1947. In December 1947, engine manufacturing and machine shops moved from Plants 1 and 4 of Pontiac West to Building 29 at Pontiac Central. The medium- and big-block, Group 2 & 3 GMC inline-6s were moved to Building 29 at Pontiac Central in February 1948. In August 1977, the GMC MotorHome was moved from Plant 3 of Pontiac West to Building 29 at Pontiac Central. The GMC MotorHome was discontinued after 1978. [https://www.gmccolonial.com/gmc-motorhome-history] Transit bus production ended in spring 1987 when GM sold the product line to Greyhound Corporation, which continued RTS production at its [[w:Transportation Manufacturing Corporation|TMC]] plant in Roswell, New Mexico. Converted in 1994 into a Truck Product Engineering Center (Pontiac Centerpoint Campus) by GM using only the steel frame of the large main building while everything else was demolished. The Truck Product Engineering Center closed in 2009 and the site is now the Centerpoint Business Campus, which is occupied by many businesses including Fanuc Robotics and i.M. Branded.
|-
|E (1988-2009)<br /><br />V (1972-1985)||[[w:Pontiac East Assembly|Pontiac East Assembly]]||[[w:Pontiac, Michigan|Pontiac, Michigan]]||United States||Medium Duty Trucks:<br /> [[w:Chevrolet C/K (third generation)#Medium-duty trucks (1973–1989)|Chevrolet/GMC C-Series medium-duty trucks]] (1973-85), [[w:Chevrolet Kodiak#First generation (1981–1989)|Chevrolet Kodiak]] (1981-1985), [[w:Chevrolet Kodiak#First generation (1981–1989)|GMC Top Kick]] (1981-85)<br /><br /> [[w:Chevrolet C/K (fourth generation)|Chevrolet C/K (GMT400)]] (1988-1998)<br /> [[w:Chevrolet C/K (fourth generation)|GMC Sierra (GMT400)]] (1988-1998)<br /> [[w:Chevrolet Silverado#First-generation Silverado / second-generation Sierra (GMT800; 1999)|Chevrolet Silverado (GMT800)]] (1999-2006)<br /> [[w:Chevrolet Silverado#First-generation Silverado / second-generation Sierra (GMT800; 1999)|Chevrolet Silverado Classic (GMT800)]] (2007)<br /> [[w:Chevrolet Silverado#First-generation Silverado / second-generation Sierra (GMT800; 1999)|GMC Sierra (GMT800)]] (1999-2006)<br /> [[w:Chevrolet Silverado#First-generation Silverado / second-generation Sierra (GMT800; 1999)|GMC Sierra Classic (GMT800)]] (2007)<br /> [[w:Chevrolet Silverado#Second-generation Silverado / third-generation Sierra (GMT900; 2007)|Chevrolet Silverado (GMT900)]] (2007-2009)<br /> [[w:Chevrolet Silverado#Second-generation Silverado / third-generation Sierra (GMT900; 2007)|GMC Sierra (GMT900)]] (2007-2009) ||1972||2009||Located at 2100 South Opdyke Road. Known as GMC Truck & Coach Division Plant 6 when built, also known as Pontiac Assembly Center. Pontiac East is directly to the east of Pontiac Central. Pontiac East began by building medium-duty trucks, which were moved from Pontiac Central. In 1985, medium-duty trucks were moved back to Pontiac Central, combining with production of heavy-duty trucks and buses. GMT400 full-size pickup production began in December 1986 for the 1988 model year. Closed in September 2009. Demolished in 2011-2012. Portions of the site are now occupied by Challenge Manufacturing Co. and Williams International.
|-
|0 (1978-1994)<br /><br />V (1972-1977)<br /><br /> P (Pre-1972)||[[w:Pontiac West Assembly|Pontiac West Assembly]]||[[w:Pontiac, Michigan|Pontiac, Michigan]]||United States||Trucks, Buses,<br />Engines: ([[w:Buick straight-6 engine|Buick 257/331 straight-6 engine]] (1931-1932), [[w:GMC straight-6 engine|GMC straight-6 engine]] 1933-1948), <br /> [[w:GMC Motorhome|GMC Motorhome/TransMode]] (1973-1977)<br /> [[w:Chevrolet van#First generation (1964–1966)|Chevrolet Van/GMC Handi-Van]] (1964-1966)<br />[[w:Chevrolet van#Second generation (1967–1970)|Chevrolet Van/GMC Handi-Van]] (1967-1970)<br />[[w:Chevrolet van#Third generation (1971–1996)|Chevrolet Van/GMC Vandura]] (1978-1980)<br />[[w:Chevrolet S-10#First generation (1982)|Chevrolet S-10]]<br /> (1982-1984, 1991-1993)<br />[[w:GMC S-15|GMC S-15]] (1982-1984)<br />[[w:GMC Sonoma|GMC Sonoma]] (1991-1993)<br />[[w:Chevrolet S-10 Blazer#First generation (1983–1994)|Chevrolet S-10 Blazer]]<br /> (1983-1994 2-d, 1994 4-d)<br />[[w:GMC S-15 Jimmy|GMC S-15 Jimmy]]<br /> (1983-1994 2-d, 1994 4-d)<br />[[w:GMC Typhoon|GMC Typhoon]] (1992-1993)<br />[[w:Oldsmobile Bravada#First generation (1991–1994)|Oldsmobile Bravada]] (1994) ||1906||1994||Complex includes GMC Truck & Coach Division Plants 1, 3, 4, and 5. Plant 1 was originally the plant of Rapid Motor Vehicle Company, one of the 2 main ancestors of the modern GMC Division (the other being Reliance Motor Car Company). Plant 1 was located at 25 Rapid Street and opened in 1906, before Rapid was taken over by GM in 1908-1909. Plant 1 started making Buick 257 & 331 inline-6's in 1931 after Buick stopped making inline-6s after 1930 and switched its entire lineup to straight-8s. The tooling was moved to Plant 1 from the Buick complex in Flint. Buick had been supplying inline-6s to GMC since 1925. In 1933, GMC started making inline-6s of its own design in Plant 1. The medium- and big-block, Group 2 & 3 GMC inline-6s were moved to Building 29 at Pontiac Central in February 1948. Plant 1 was demolished around 1981. Plant 3 opened in 1940 and was located at South Boulevard West and Franklin Road. Plant 3 was used for sheet metal work and material storage at first. Plant 3 later built the [[w:GMC Motorhome|GMC Motorhome]]. In August 1977, the GMC MotorHome was moved from Plant 3 of Pontiac West to Building 29 at Pontiac Central for its final model year of 1978. Plant 3 was demolished around 2005. Plant 4 was located on South Saginaw Street (now Woodward Ave.) Engine production began in Plant 4 in October 1938. The [[w:GMC straight-6 engine|GMC straight-6 engine]] was built there through 1947/1948. Small-block, Group 1 GMC inline-6 engines were made in Plant 4 from October 1938. The small-block, Group 1 GMC inline-6s were moved to Building 29 at Pontiac Central in November 1947. In December 1947, engine manufacturing and machine shops moved from Plants 1 and 4 to Building 29 at Pontiac Central. Plant 4 was also used for material storage. Plant 4 also built the [[w:Chevrolet van|1964-1970 Chevrolet & GMC full-size vans]]. Plant 4 was demolished around 2008. Plant 5 was located on Franklin Road, to the north of Plant 3. Plant 5 was demolished around 2005. After Pontiac Central opened in 1928, Pontiac West focused on machining and component manufacturing rather than vehicle assembly.[https://www.hagerty.com/media/automotive-history/a-gmc-motor-homecoming-50-years-on/] (Paragraph 4) There would be sporadic vehicle production at Pontiac West in the 1960's and 1970's (vans, motorhomes). In the 1980's, vehicle production increased as Pontiac West became one of GM's plants building compact pickups and SUVs. Production ended in 1994. Entire property sold to M1 Concourse in 2014.
|-
| ||Pontiac Foundry||[[w:Pontiac, Michigan|Pontiac, Michigan]]||United States||[[w:Casting|Iron castings]] of engine parts. ||1927||1987||Was part of GM's Central Foundry Division. Was Plant 6 of Pontiac's Assembly complex in Pontiac, Michigan. Demolished in 1995. A U.S. Postal Service distribution center now occupies the approximate area where the foundry used to be.
|-
| ||[[w:Regina Plant|Regina Plant]]||[[w:Regina, Saskatchewan|Regina, Saskatchewan]]||[[w:Canada|Canada]]
|[[w:Chevrolet|Chevrolet]] cars & trucks, Maple Leaf trucks, [[w:Pontiac (automobile)|Pontiac]], [[w:Oldsmobile|Oldsmobile]], [[w:Buick|Buick]]
|1928||1941||Factory office building is located at 1102 8th Avenue while the factory building is behind the office building stretching down Winnipeg Street down to 6th Ave. Production began on Dec. 11, 1928. Production halted in August 1930, restarted in March 1931, then halted again a few months later in 1931. Production restarted in December 1937. In 1941, taken over by the [[w:Government of Canada|Government of Canada]] to produce munitions for World War II as Regina Industries Limited. Auto production never resumed and the property was used by the Canadian Department of National Defense until the mid-1960s. Sold to the Saskatchewan provincial govt. in 1967 and then the Regina city govt. in 1987. Was used by both public- and private-sector tenants. Damaged by a fire on May 3, 2017. In 2020, the City of Regina decommissioned the building and all the tenants were required to move out. Buildings are still standing and have been used by a variety of businesses and organizations. You can still see "GMC" carved in stone above the front entrance to the office building. Office building is designated a Heritage Inventory Property by city of Regina. A related building is down the block at 1260 8th Avenue at the corner of Toronto Street. After the factory closed in 1941, GM still used this building for its regional administrative and parts distribution operations until it moved in 1967.
|-
| ||[[w:GMC (marque)#History|Reliance Motor Truck Co.]]||[[w:Owosso, Michigan|Owosso]], [[w:Michigan|Michigan]]||United States||Reliance trucks (1909-1912)<br> GMC trucks (heavy duty models) (1912-1913)||1909||1913||Plant was located on Michigan Ave. In late 1908, GM bought Reliance Motor Car Co. and reorganized it as Reliance Motor Truck Co. Reliance truck production moved here from Detroit in 1909. In February 1912, the GMC brand replaced the Reliance brand as well as the Rapid brand. In 1913, production was consolidated at the Rapid Street plant of the former Rapid Motor Vehicle Co. in Pontiac, Michigan and the Owosso plant was sold. Plant was later used by American Malleables and later by Mid-West Abrasive Co., a maker of sandpaper. Plant was later extended to S. Washington St.
|-
| ||Saab [[w:Gothenburg|Gothenburg]] Transmission||[[w:Gothenburg|Gothenburg]]||[[w:Sweden|Sweden]]||Pre-GM era:<br />[[w:Saab two-stroke|Saab two-stroke]]<br />GM era:<br />Saab 99/900 manual transmission<br />[[w:F35 transmission|F35 transmission]]<br />[[w:GM F40 transmission|GM F40 transmission]] ||1989||2009||Saab plant. Opened in 1953. Engine production ended in 1968.
GM bought 50% of [[w:Saab Automobile|Saab Automobile]] in 1989 & the other 50% in 2000. Transmission production ended when the 1st gen. 9-5 ended production. GM sold [[w:Saab Automobile|Saab Automobile]] to [[w:Spyker Cars|Spyker Cars]] in February, 2010.
|-
| ||Saab [[w:Sodertalje|Sodertalje]] Engine||[[w:Sodertalje|Sodertalje]]||[[w:Sweden|Sweden]]||Pre-GM era:<br />[[w:Saab B engine|Saab B engine]]<br />GM era:<br />[[w:Saab H engine|Saab H engine]] ||1989||2007||Saab plant. Opened in 1972.
GM bought 50% of [[w:Saab Automobile|Saab Automobile]] in 1989 & the other 50% in 2000. Engine plant sold to [[w:Scania AB|Scania AB]] in 2007. GM sold [[w:Saab Automobile|Saab Automobile]] to [[w:Spyker Cars|Spyker Cars]] in February, 2010.
|-
|1,2,3,4,8||Saab [[w:Trollhättan Assembly|Trollhättan Assembly]]||[[w:Trollhättan|Trollhättan]]||[[w:Sweden|Sweden]]||Pre-GM era:<br />[[w:Saab 92|Saab 92]]<br />[[w:Saab 93|Saab 93]]<br />[[w:Saab 95|Saab 95]]<br />[[w:Saab 96|Saab 96]]<br />[[w:Saab 99|Saab 99]]<br />GM era:<br />[[w:Saab 900|Saab 900]]<br />[[w:Saab 9000|Saab 9000]]<br />[[w:Saab 9-3|Saab 9-3]]<br />[[w:Saab 9-5|Saab 9-5]]<br />[[w:Cadillac BLS|Cadillac BLS]]||1989||2010||Saab plant. Opened in 1947. Also did engine (Saab two-stroke) & transmission production until 1953 when it was relocated to the Gothenburg plant.
GM bought 50% of [[w:Saab Automobile|Saab Automobile]] in 1989 & the other 50% in 2000. Saab also built the 9-3 based BLS for Cadillac. The BLS was not sold in the US or Canada. GM sold [[w:Saab Automobile|Saab Automobile]] to [[w:Spyker Cars|Spyker Cars]] in February, 2010.
|-
| ||Saginaw Malleable Iron||[[w:Saginaw, Michigan|Saginaw, Michigan]]||United States|| ||1919||2007|| Located at 77 W. Center St. Iron castings. HQ of Central Foundry Division. In 1919, Saginaw Malleable Iron and Central Foundry merged with the Jacox division into GM's Saginaw Products Company. In 1928, became the Saginaw Malleable Iron division of GM. Closed in 2007, demolished in 2010. Converted into a park.
|-
| ||Saginaw Nodular Iron||[[w:Saginaw, Michigan|Saginaw, Michigan]]||United States||Steering knuckles, crankshafts, disc brake caliper housings, exhaust manifolds, flywheels, differential carriers, clutch pressure plates||1967||1988|| Located at 2100 Veterans Memorial Parkway. Straddles the City of Saginaw-Buena Vista Township border. Iron castings. Closed in 1988. Later demolished.
|-
| ||Saginaw Parts||[[w:Saginaw, Michigan|Saginaw, Michigan]]||United States|| ||1909||1983|| Located on corner of 6th & Washington Avenues. Opened in 1907 to build the 1908 Rainier. Bought by GM in 1909 as part of its purchase of [[w:Rainier Motor Car Company|Rainier Motor Car Company]]. Reorganized into the [[w:Marquette (automobile)#Company|Marquette Motor Co.]] which still made Rainier brand cars through 1911 as well as parts for Welch and Welch-Detroit cars. In 1912, the Rainier brand was replaced by the Marquette brand, which was said to be a combination of the previous Rainier and Welch-Detroit brands. In February 1912, the company was renamed Peninsular Motor Co. Some late production cars seem to have been badged as Peninsular. All of those activities ended at the end of 1912. In 1917, during World War I, the plant was reopened and used to manufacture mortar shells for the US Ordnance Corps. In 1919, became part of the Saginaw Products Company with this plant becoming the Saginaw Products Company Motor Plant. From 1919-1922, the plant made [[w:Chevrolet Inline-4 engine#224|OHV I4]] engines for [[w:Chevrolet Series FB|Chevrolet Series FB]] and [[w:Oldsmobile Model 43|Oldsmobile Model 43A]]. It was then used as a warehouse. From 1935, it made all different types of auto parts and service parts as Chevrolet Saginaw Service Parts Plant or from 1969, Chevrolet Saginaw Parts Plant. Closed in 1983, demolished in 1984.
|-
| ||Saginaw Steering Gear - Plant 1||[[w:Saginaw, Michigan|Saginaw, Michigan]]||United States||Steering components||1910||1984||Located on 628 North Hamilton St. Originally founded as the Jackson, Church and Wilcox Company (Jacox) in 1906. Bought by GM in 1910. Became the Jackson-Church-Wilcox or Jacox division of GM. In 1919, the Jacox division merged with Saginaw Malleable Iron and Central Foundry into GM's Saginaw Products Company. Became the Saginaw Steering Gear Division in 1928. Closed in 1984. Sold in 1987 to Thomson Industries. Still operates today as Thomson Aerospace & Defense, a brand of Linear Motion LLC, which is owned by the Umbra Group of Italy.
|-
| ||Saginaw Steering Gear - Plant 2||[[w:Saginaw, Michigan|Saginaw, Michigan]]||United States||Steering Gears, pump hoses||1941||2001||Located at 1400 Holmes Street. Affectionately known as "The Gun Plant", it was built in 1941 when the division was contracted to build M1919 machine guns, and M1-Carbines for World War II. After the war, normal steering gear production continued until its closure in 2001. It was demolished in 2002.
|-
| ||Saginaw Steering Gear complex||[[w:Buena Vista Township, Michigan|Buena Vista Township, Michigan]]||United States|| Complete Hydraulic and Electric Power Steering Systems, Halfshafts, Intermediate Drive Shafts||1953||2010||Located at 3900 E. Holland Road. Former Saginaw Steering Gear Division of GM. Saginaw Steering Gear Division renamed Saginaw Division in 1985. Grouped under Delphi Automotive Systems in 1995. Plant 3 opened in 1953, Plant 4 opened in 1956. The sprawling Five-Plant complex (Plants 3-7), division Headquarters and large engineering center, were spun off with Delphi in 1999. GM repurchased the Delphi Steering division from bankrupt Delphi in 2009, renaming it Nexteer Automotive, and then sold the division to [[w:Pacific Century Motors|Pacific Century Motors]] in 2010. The former GM Division now operates as "[[w:Nexteer Automotive|Nexteer Automotive]]", an independent company headquartered at the Saginaw site. Nexteer moved its headquarters to Auburn Hills in 2015.
|-
| ||Saginaw Steering Gear Overseas Corp.||[[w:Hendon|Hendon]], [[w:England|England]]||United Kingdom|| Steering columns, Steering column components (jacket & bracket assemblies), Vacuum pumps, EGR valves||1970 (auto parts)||?||Located on Capitol Way in The Capitol Industrial Park. Originally opened in 1924 as a vehicle assembly plant making Chevrolets (See listing for "GM Ltd."). When Chevrolet production was moved to Luton in 1930, Hendon was used for parts distribution. Later, Frigidaire made appliances at Hendon. In 1970, Hendon began producing steering columns. In 1971, more automotive components began to be produced in place of Frigidaire appliances. In 1979, Hendon became aligned with Saginaw Steering Gear in the US. In 1980, GM sold the Hendon site for redevelopment but leased back an area for construction of a new plant for Saginaw Steering Gear. The new plant opened in 1981. In 1982, GM Ltd. was dissolved and the Hendon plant became part of Saginaw Steering Gear Overseas Corp., part of GM Overseas Corp.
|-
| ||Saginaw Transmission||[[w:Saginaw, Michigan|Saginaw, Michigan]]||United States||Manual Transmissions, Brakes||1921||1999||Located at 2328 E. Genesee Ave. Built 1919–20 for the Michigan Crankshaft Company (originally founded as National Engineering Company), acquired by GM in 1921 and placed under Saginaw Products Company. In 1928, became the Saginaw Crankshaft Division of GM. Transferred to Chevrolet upon the dissolution of the Crankshaft Division in 1931 when crankshaft manufacturing was turned over to the car divisions. Made the "Saginaw" 3 and 4-Speed manual transmissions. It was spun off as part of Delphi in 1999. The plant was sold to [[w:TRW Automotive|TRW Automotive]] in 2007. TRW used the plant to produces brake and suspension components (known as TRW Braking and Suspension). TRW closed this plant in 2014.
|-
|4||[[w:Scarborough Van Assembly|Scarborough Van Plant]]||[[w:Scarborough, Toronto|Scarborough]], [[w:Ontario|Ontario]]||[[w:Canada|Canada]]||[[w:Chevrolet Van#Third generation (1971–1996)|Chevrolet Van]] (1974-1993)<br />[[w:GMC Vandura#Third generation (1971–1996)|GMC Vandura]] (1974-1993)<br />[[w:Chevrolet Sportvan#Third generation (1971–1996)|Chevrolet Sportvan]] (1974-1993)<br />[[w:GMC Vandura#Third generation (1971–1996)|GMC Rally Van]] (1974-1993)<br />||1952<br><br>1974 (Vehicle production)||1993||Located at 1901 Eglinton Avenue East. Originally a [[w:Frigidaire|Frigidaire]] home appliance plant through 1970. In 1960, production of automotive components was added. Production included radios, instrument clusters, horns, shock absorbers, and propshafts. After Frigidaire production ended in 1970, only auto parts were made and the plant name was changed from Frigidaire Products of Canada to Delco Canada. Auto parts production ended in 1973 and the plant was expanded and converted to build full-size vans and renamed Scarborough Van Plant. First van produced on May 23, 1974 (a 1974 Chevy Van 10). After van production began, plant was expanded 5 times over the years. Cutaway production was added for 1975, halted in 1978, and resumed in 1980. One millionth van produced in January 1986 (a GMC model). Closed on May 6, 1993 and operations moved to [[w:Flint Truck Assembly|Flint Truck Assembly]]. Scarborough produced 1,626,313 vans from 1974-1993. Plant demolished and now site of Eglinton Town Centre and Comstock Bus Garage at the southern end of the property.
|-
| ||[[w:Scripps-Booth|Scripps-Booth]]||[[w:Detroit, Michigan|Detroit]], [[w:Michigan|Michigan]]||United States||Scripps-Booth automobiles||1918||1922||Taken over by Chevrolet by the end of 1917 before Chevrolet was part of GM. When Chevrolet became part of GM, Scripps-Booth became part of GM as well. Scripps-Booth then adopted an Oakland chassis and a Northway six-cylinder engine, using parts from other GM divisions. However, a place could not be found for Scripps-Booth in GM's lineup, so GM closed it down in 1922.
|-
|8||[[w:Shreveport Operations|Shreveport Operations]]||[[w:Shreveport, Louisiana|Shreveport, Louisiana]]||United States||[[w:Chevrolet Colorado#First generation (2004)|Chevrolet Colorado]] (2004-2012)<br />[[w:Chevrolet Colorado#First generation (2004)|GMC Canyon]] (2004-2012)<br />[[w:Hummer H3|Hummer H3]] (2006-2010)<br />[[w:Hummer H3#H3T|Hummer H3T]] (2009-2010)<br />[[w:Chevrolet Colorado#Isuzu i-series|Isuzu i-series]] pickup (2006-2008)||1981||2012||Located at 7600 General Motors Blvd. General Motors Blvd. was renamed Antoine Blvd. in 2013. A portion of the complex is now used by Glovis America, a Hyundai Automotive Group subsidiary, for a vehicle logistics and processing center for Hyundai and Kia vehicles. <br />Past models: <br> [[w:Chevrolet S-10 |Chevrolet S-10]] (1982-03), [[w:Chevrolet S-10 EV|Chevrolet S-10 EV]] (1997-1998),<br /> [[w:Chevrolet S-10 Blazer#First generation (1983–1994)|Chevrolet S-10 Blazer]] (1983-1991 2-d),<br /> [[w:GMC S-15|GMC S-15]] (1982-1990), [[w:GMC Sonoma|GMC Sonoma]] (1991-03), [[w:GMC Syclone|GMC Syclone]] (1991),<br /> [[w:Chevrolet S-10 Blazer#First generation (1983–1994)|GMC S-15 Jimmy]] (1983-1991 2-d),<br /> [[w:Isuzu Hombre|Isuzu Hombre]] (1996-'00)
|-
|A||[[w:General Motors South Africa|General Motors South Africa]] Darling Street & Kempston Road plants||[[w:Port Elizabeth, South Africa|Port Elizabeth]]||[[w:South Africa|South Africa]]||[[w:Acadian (automobile)|Acadian]] (from CKD kits supplied from Oshawa and Willow Run)<br />[[w:Beaumont (automobile)|Acadian Beaumont & Beaumont]] (from CKD kits supplied from Oshawa 1966-69)<br />[[w:Chevrolet Series AA Capitol|Chevrolet Series AA Capitol]]<br />[[w:Chevrolet Series AB National|Chevrolet Series AB National]]<br />[[w:Chevrolet Series AC International|Chevrolet Series AC International]]<br />[[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]]<br />[[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]]<br />[[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]]<br />[[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]]<br />[[w:Chevrolet Master|Chevrolet Master]]<br />[[w:Opel Ascona#Export models|Chevrolet Ascona]]<br />[[w:Chevrolet Caprice|Chevrolet Caprice]]<br />[[w:Statesman (automobile)#HJ|Chevrolet Caprice Classic]]<br />[[w:Chevrolet Constantia|Chevrolet Constantia]]<br />[[w:Chevrolet Corvair|Chevrolet Corvair]] (from CKD kits supplied from Oshawa)<br />[[w:Chevrolet Chevair|Chevrolet Chevair]]<br />[[w:Chevrolet Chevelle|Chevrolet Chevelle]]/[[w:Chevrolet Malibu|Chevrolet Malibu]]<br />[[w:Chevrolet Chevy II/Nova|Chevrolet Chevy II/Nova]]<br /> [[w:Chevrolet Nomad#South Africa production (GMSA)|Chevrolet Nomad]]<br /> [[w:Statesman (automobile)#HQ|Chevrolet De Ville]]<br />[[w:Holden HK#South Africa|Chevrolet El Camino<br />Chevrolet El Toro]]<br />[[w:Chevrolet Impala|Chevrolet Impala]]<br />[[w:Holden HK#South Africa|Chevrolet Kommando]]<br />[[w:Chevrolet LUV|Chevrolet LUV]]<br />[[w:Holden EK|Holden EK]]<br />[[w:Holden EJ|Holden EJ]]<br />[[w:Holden EH|Holden EH]]<br />[[w:Holden HD|Holden HD]]<br />[[w:Holden HR|Holden HR]]<br />[[w:Holden Monaro#Export program|Holden Monaro (HT)/Chevrolet SS (HG)]]<br />[[w:Pontiac Parisienne|Pontiac Parisienne]]<br />[[w:Vauxhall Viva#South Africa|Chevrolet Firenza/1300/1900]]<br />[[w:Opel Rekord Series D#ZA|Chevrolet 2500, 3800, 4100]]<br />[[w:Opel Rekord Series E#Chevrolet Rekord|Chevrolet Rekord]]<br />[[w:Opel Ascona#Ascona C (1981–1988)|Opel Ascona C]]<br />[[w:Opel Kadett A|Opel Kadett A]]<br />[[w:Opel Kadett B|Opel Kadett B]]<br />[[w:Opel Kadett#Kadett D (1979–1984)|Opel Kadett D]]<br />[[w:Opel Kadett#Kadett E (1984–1995)|Opel Kadett E/Monza]]<br />[[w:Opel Astra#F|Opel Kadett F]]<br />[[w:Opel Astra#G|Opel Astra G]]<br />[[w:Opel Corsa#Corsa B (S93; 1993)|Opel Corsa B/Corsa Lite]]<br />[[w:Opel Rekord|Opel Rekord]]<br />[[w:Vauxhall Cresta|Vauxhall Cresta]]<br />[[w:Vauxhall Velox|Vauxhall Velox]]<br />[[w:Vauxhall Victor|Vauxhall Victor]]<br />[[w:Vauxhall Viscount|Vauxhall Viscount]]<br />[[w:Vauxhall Viva#Other markets|Vauxhall Viva]]<br />[[w:Isuzu F-Series|Isuzu F-Series]]<br />[[w:Isuzu N-Series|Isuzu N-Series]]<br /> [[w:Isuzu Faster|Isuzu KB]]<br />[[w:Isuzu D-Max|Isuzu KB (D-Max based)]]<br />||1926 (Darling Street)<br />1928 (Kempston Road)||1929 (Darling Street)<br />2017||Also assembled in the pre-WWII era: <br />[[w:Chevrolet|Chevrolet]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Oakland (automobile)|Oakland]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Buick|Buick]]<br />[[w:LaSalle (automobile)|LaSalle]]<br />[[w:Cadillac|Cadillac]]<br />[[w:GMC (automobile)|GMC]]<br />[[w:Vauxhall Motors|Vauxhall]]<br />[[w:Bedford Vehicles|Bedford]]<br />[[w:Opel|Opel]]<br />[[w:Frigidaire|Frigidaire]] appliances.
Also built the [[w:Ranger (automobile)#South Africa|Ranger]].
GM sold the factory to Isuzu in 2017 and left the South African market. Isuzu consolidated its commercial truck production in the Struandale plant which already built Isuzu pickups and the Kempston Road plant ended production on Nov. 30, 2018.
|-
|4||[[w:General Motors South Africa|General Motors South Africa]] Struandale plant||[[w:Port Elizabeth, South Africa|Port Elizabeth]]||[[w:South Africa|South Africa]]||[[w:Chevrolet Spark#Africa|Chevrolet Spark (M300)]]<br />[[w:Opel Corsa#Corsa C (X01; 2000)|Opel Corsa C]]<br />[[w:Chevrolet Montana#South Africa|Opel Corsa Utility/Chevrolet Utility]]<br />[[w:Hummer H3|Hummer H3]]<br />[[w:Isuzu D-Max#Second generation (RT; 2011)|Isuzu KB]]<br />||1996||2017||Struandale was originally a Ford plant opened in 1973 which GM South Africa bought during the time it was known as Delta Motor Corp. in 1994.
GM sold the factory to Isuzu in 2017 and left the South African market. Struandale absorbed Isuzu pickup production beginning with the 2nd generation D-Max around 2013 & Isuzu commercial truck ([[w:Isuzu F-Series|Isuzu F-Series]] & [[w:Isuzu N-Series|Isuzu N-Series]]) production in Jan. 2019. Isuzu KB was renamed D-Max in South Africa in 2018, aligning with the rest of the world.
|-
| ||[[w:General Motors South Africa|General Motors South Africa]] Engine plant - Aloes||[[w:Port Elizabeth, South Africa|Port Elizabeth]]||[[w:South Africa|South Africa]]||[[w:Chevrolet 153 4-cylinder engine|Chevrolet 153 4-cylinder engine]]<br />[[w:Chevrolet Turbo-Thrift engine|Chevrolet Turbo-Thrift inline-6]]<br />[[w:Vauxhall Viva|Vauxhall Viva]] inline-4||1966||1999?||
|-
|C (1965-1982)<br /><br /> U (1964 [[w:Chevrolet|Chevrolet]])<br /><br />S (1960-1964 [[w:Pontiac (automobile)|Pontiac]])<br /><br />C (1937-1964 [[w:Oldsmobile|Oldsmobile]] and 1936-1959 [[w:Pontiac (automobile)|Pontiac]])<br /><br />2 (1938-1964 <br> [[w:Buick|Buick]]) ||[[w:South Gate Assembly|South Gate Assembly]]||[[w:South Gate, California|South Gate, California]]||United States||[[w:Chevrolet Cavalier|Chevrolet Cavalier]] (1982) <br /> [[w:Cadillac Cimarron|Cadillac Cimarron]] (1982)||1936||1982|| Located at 2700 Tweedy Blvd. South Gate Assembly was the 1st GM multi-brand assembly plant, assembling Buick, Oldsmobile, and Pontiac models. The first finished cars were produced in May 1936. It was operated by GM's Southern California Division through 1943. Automobile production ended in Feb. 1942. During WWII, it produced the M5 and M5A1 Stuart tanks from July 1942-August 1943 in cooperation with Cadillac Division which held the contract to build the tank. It also provided a proof range for Army Ordnance to test various types of machine gun and cannon shells. Space was also provided for Army Ordnance to modify M4 medium tanks. Also built were gun shields and deck houses for the Navy. When M5A1 production ceased in August 1943, the plant was leased to Douglas Aircraft Co. until the end of the war for aircraft parts production. After the war ended, in 1945, Southgate & Linden were both placed in a new division called the [[w:Buick-Oldsmobile-Pontiac Assembly Division|Buick-Oldsmobile-Pontiac Assembly Division]]. South Gate began making Chevrolet full-size cars for 1964. BOP Assembly Division became GM Assembly Division in 1965. South Gate was converted to build H-body small cars like the Vega for 1975 but the plant was switched back to full-size cars for 1977, building Chevy, Oldsmobile, & Buick B-bodies. In 1979, South Gate Assembly became the second plant (the 1st was Linden, NJ in 1971) outside Cadillac's home plant in Detroit to assemble Cadillacs when it began to assemble C-body Cadillacs like the DeVille instead of Oldsmobile & Buick B-bodies. The plant was then idled in March 1980. It was again switched to build small cars for 1982, this time the J-body. Slow sales and efforts to reduce air quality issues resulted in plant closure, with production ending on March 23, 1982. Plant demolished and site used for 3 new schools for L.A. School District and the South Gate Industrial and Business Park at the southern end of the property.<br /> Unibody B-O-P "Y"-body [[w:Buick Special#1961–1963|Buick Special]]/[[w:Buick Skylark#First generation (1961–1963)|Buick Skylark]] (1962-1963), [[w:Oldsmobile F-85#First generation (1961)|Oldsmobile F-85/<br> Cutlass]] (1962-1963), [[w:Pontiac Tempest#First generation (1961–1963)|Pontiac Tempest]]/[[w:Pontiac LeMans#First generation (1961–1963)|Pontiac LeMans]] (1962-1963) added to B-& C-body mix 1961-63; replaced by [[w:General Motors B platform|Chevrolet B-body]] for 1964; [[w:GM H platform (RWD)|GM H platform (RWD)]]: [[w:Chevrolet Vega|Chevrolet Vega]] (1975), [[w:Chevrolet Monza|Chevrolet Monza]] (1975-1976), [[w:Pontiac Astre|Pontiac Astre]] (1975), [[w:Pontiac Sunbird#First generation (1976–1980)|Pontiac Sunbird]] (1976), [[w:Oldsmobile Starfire#Second generation (1975–1980)|Oldsmobile Starfire]] (H-body) (1976), [[w:Buick Skyhawk#First generation (1975–1980)|Buick Skyhawk]] (1976); [[w:Buick Centurion|Buick Centurion]] (1971-1973); [[w:Buick Century|Buick Century]] (1936-1942, 1954-1958); [[w:Buick Electra|Buick Electra]] (1959-1963); [[w:Buick Estate#1970|Buick Estate]] (1970-1973); [[w:Buick Invicta|Buick Invicta]] (1959-1962); [[w:Buick LeSabre|Buick LeSabre]] (1959-1974, 1977-1978); [[w:Buick Roadmaster|Buick Roadmaster]] (1947-1949, 1953-1958); [[w:Buick Special|Buick Special]] (1936-1958); [[w:Buick Super|Buick Super]] (1940-1958); [[w:Buick Wildcat|Buick Wildcat]] (1963-1970); [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1964-1974); [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-1974, 1977-80); [[w:Chevrolet Impala|Chevrolet Impala]] (1964-1974, 1977-1980); [[w:Oldsmobile 88|Oldsmobile 88]] (1949-1970, 1977-1978); [[w:Oldsmobile 98|Oldsmobile 98]] (1941-63); [[w:Oldsmobile Jetstar I|Oldsmobile Jetstar I]] (1964-1965); [[w:Oldsmobile Starfire#First generation (1961–1966)|Oldsmobile Starfire]] (1961-1966); [[w:Pontiac 2+2|Pontiac 2+2]] (1964-1967); [[w:Pontiac Bonneville|Pontiac Bonneville]] (1958-1970, 1972-1973); [[w:Pontiac Catalina|Pontiac Catalina]] (1959-1973); [[w:Pontiac Chieftain|Pontiac Chieftain]] (1949-1953, 1955-1958); [[w:Pontiac Executive|Pontiac Executive]] (1967-1968); [[w:Pontiac Grand Prix|Pontiac Grand Prix]] (1962-68); [[w:Pontiac Star Chief|Pontiac Star Chief]] (1955-1958, 1960, 1962, 1966); [[w:Pontiac Ventura#1960–1970|Pontiac Ventura]] (1960-1961); [[w:Cadillac Deville#Fifth generation (1977–1984)|Cadillac Deville]] (1979-1980).
|-
| ||[[w:St. Catharines Components Plant|St. Catharines Components Plant]]||[[w:St. Catharines, Ontario|St. Catharines, Ontario]]||[[w:Canada|Canada]]||Engine components<br />Transmissions<br />Transmission components<br />Starter motors<br />Alternators<br /> Final drive assemblies<br /> Axles<br />Steering wheels<br />Steering gear<br />Shock absorbers<br />Brakes<br />Bearings<br />Horns<br />Vehicle Radios<br />Fractional horsepower motors for appliances||1929||2010||Was located at 285 Ontario Street. Originally McKinnon Dash and Metal Work Ltd., which opened this site in 1900. In 1917, the company was renamed McKinnon Industries, Ltd. Taken over by GM on March 29, 1929. In 1963, fractional horsepower motors for appliances were moved to the GM Diesel plant in London, Ontario. In 1964, vehicle radios, horns, and shocks were moved to the Scarborough plant followed by propshafts in 1966. In 1969, McKinnon Industries Ltd. was integrated into GM Canada rather than being a separate subsidiary. In 1990, the Axle Plant is officially renamed Components Plant. Permanently closed in 2010 as part of GM's restructuring plans. All operations were transferred to [[w:St. Catharines Engine Plant|St. Catharines Engine Plant]]. Some of the Components Plant was demolished in 2016 and the site will be re-developed for mixed-use residential and commercial development.
|-
| ||St. Catharines Foundry||[[w:St. Catharines, Ontario|St. Catharines, Ontario]]||[[w:Canada|Canada]]||[[w:Casting|Iron casting]] of engine parts||1952||1995|| Was located at 285 Ontario Street. Operated as part of GM subsidiary McKinnon Industries, Ltd. until 1969 when it became "General Motors of Canada Limited, St. Catharines". Aligned with GM's Central Foundry Division in 1989.
|-
|S <br />(1952 [[w:GMC (automobile)|GMC]] and 1953-1987)<br /><br />3 <br />(1928-1952 [[w:Chevrolet|Chevrolet]])||[[w:St. Louis Truck Assembly|St. Louis Truck Assembly]]||[[w:St. Louis, Missouri|St. Louis, Missouri]]||United States ||[[w:Chevrolet C/K|Chevrolet C/K]] (1960-1986)<br />[[w:Chevrolet C/K (third generation)|GMC C/K (Rounded Line)]] (1973-1986)<br />[[w:Chevrolet C/K (third generation)#R/V-Series (1987–1991)|Chevrolet R/V]] (1987 only)<br />[[w:Chevrolet C/K (third generation)#R/V-Series (1987–1991)|GMC R/V]] (1987 only)||1920<ref>{{cite web|url=https://www.autonews.com/article/20111031/CHEVY100/310319998/built-across-the-nation|author=James B. Treece|title=Built across the nation|publisher=Autonews.com|date=October 31, 2011}}</ref>||1987||Located at 3809 N. Union Blvd. Chevrolet had previously licensed [[w:Gardner (automobile)|Gardner Buggy Co.]] to assemble its cars in St. Louis in 1915. That was replaced by Chevrolet's own St. Louis plant on Union Blvd. Built 149,135 [[w:GMC CCKW 2½-ton 6×6 truck|GMC CCKW 6x6 trucks]] & 6,748 [[w:DUKW|DUKW]] amphibious vehicles during WWII. Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. St. Louis Assembly joined the GM Assembly Division in 1971. Operated 3 assembly lines: car line, truck line, and the Corvette line. 695,214 Corvettes were built from 1954-1981 in the old Fisher Body Mill Building that had been used to assemble wooden bodies in earlier years and was converted to Corvette production. First 1954 Corvette was built in St. Louis on December 28, 1953. Last Corvette built in St. Louis was built July 31, 1981. Chevy Caprice & Impala production ended on August 1, 1980 and the main car line closed down. Was a Truck and Bus Group plant from 1982, only making full-size pickups. Closed August 7, 1987. The second-to-last vehicle produced was a GMC R1500 regular cab, long bed pickup while the last vehicle produced was a Chevy pickup. The old Fisher Body Mill Building where Corvettes were built was demolished in 1992. Some of the main assembly facility was demolished and the remainder was renovated to become the Union Seventy Center. The remainder of the site, roughly 118 acres, was demolished and replaced with trees, grass, a pond, & new access roads. Property is now the Union Seventy Center, an industrial warehouse and distribution campus used by several different tenants. <br />[[w:Chevrolet Series 490|Chevrolet Series 490]]<br /> [[w:Chevrolet Superior|Chevrolet Superior]]<br />[[w:Chevrolet Series AA Capitol|Chevrolet Series AA Capitol]]<br />[[w:Chevrolet Series AB National|Chevrolet Series AB National]]<br />[[w:Chevrolet Series AC International|Chevrolet Series AC International]]<br />[[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]]<br />[[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]]<br />[[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]]<br />[[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]]<br />[[w:Chevrolet Master|Chevrolet Master]], [[w:Chevrolet Deluxe|Chevrolet Deluxe]]<br />[[w:Chevrolet Stylemaster|Chevrolet Stylemaster]], [[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]], <br />[[w:Chevrolet 150|Chevrolet 150]] (1953-1957), [[w:Chevrolet 210|Chevrolet 210]] (1953-1957), [[w:Chevrolet AK Series|Chevrolet AK Series]], [[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1947-1955), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1970), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-1970), [[w:Chevrolet K5 Blazer#1969–1972|Chevrolet K5 Blazer]] (1969-1972), [[w:Chevrolet Corvair|Chevrolet Corvair Forward Control]] (1961-1965), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-1980), [[w:Chevrolet Corvette|Chevrolet Corvette]] (1954-1981), [[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958), [[w:Chevrolet El Camino#First generation (1959–1960)|Chevrolet El Camino]] (1959-1960), [[w:Chevrolet Impala|Chevrolet Impala]] (1958-1980), [[w:Chevrolet Nomad|Chevrolet Nomad]] (1955-1957), [[w:Chevrolet Suburban|Chevrolet Suburban]] (1956, 1959, 1963-1967), [[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959), [[w:Chevrolet C/K (second generation)|GMC C/K (Action Line)]] (1967-1972), [[w:Chevrolet K5 Blazer#1969–1972|GMC Jimmy]] (1970-1972), [[w:GMC New Design|GMC New Design]] (1953-1954), [[w:GMC Suburban|GMC Suburban]] (1947-1955, 1967-1972)
|-
|2||[[w:Sainte-Thérèse Assembly|Ste. Thérèse Assembly]]||[[w:Boisbriand, Quebec|Boisbriand, Quebec]]||[[w:Canada|Canada]]||[[w:Chevrolet Camaro (fourth generation)|Chevrolet Camaro]] (1993-2002)<br />[[w:Pontiac Firebird#Fourth generation (1993–2002)|Pontiac Firebird]] (1993-2002)||1966||2002||Located at 2500 Boulevard De la Grande-Allée. <br />Past models:<br> [[w:Chevrolet Celebrity|Chevrolet Celebrity]] (1987-90)<br />[[w:Oldsmobile Cutlass Ciera|Oldsmobile Cutlass Ciera]] (1988-1991)<br />[[w:Oldsmobile Cutlass#Fifth-generation (intermediate) 1978–1988|Oldsmobile Cutlass/Cutlass Supreme]] (1978-1987)<br />[[w:Oldsmobile 442|Oldsmobile Cutlass 442]] (1979)<br />[[w:Pontiac Bonneville#Seventh generation (1982–1986)|Pontiac Bonneville]] (1983-86)<br />[[w:Pontiac Grand Prix#Fifth generation (1978–1987)|Pontiac Grand Prix]] (1978-1981, 1983-1987)<br />[[w:Pontiac Grand Prix#1986|Pontiac Grand Prix 2+2]] (1986)<br />[[w:Chevrolet Vega|Chevrolet Vega]] (1973-1974)<br />[[w:Pontiac Astre|Pontiac Astre]] (1973-1974)<br />[[w:Chevrolet Monza|Chevrolet Monza]] (1975-1977)<br />[[w:Pontiac Sunbird#First generation (1976–1980)|Pontiac Sunbird]] (1977)<br />[[w:Oldsmobile Starfire#Second generation (1975–1980)|Oldsmobile Starfire]] (1975-77)<br />[[w:Buick Skyhawk#First generation (1975–1980)|Buick Skyhawk]] (1975-1977)<br />[[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1967-1970)<br />[[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1967-70)<br />[[w:Chevrolet Impala|Chevrolet Impala]] (1967-1970)<br />[[w:Chevrolet Caprice|Chevrolet Caprice]] (1967-1970)<br />[[w:Pontiac Catalina|Pontiac Catalina]] (1970-1972)<br /> [[w:Pontiac Grand Ville|Pontiac Grand Ville]] (1971).
Plant demolished and site re-developed as a commercial and residential site known as Faubourg Boisbriand and the Centre for Sports Excellence.
|-
| ||Strasbourg Transmission||[[w:Strasbourg|Strasbourg]]||[[w:France|France]]||[[w:GM 6L50 transmission|6L45/6L50]] 6-speed RWD automatic transmissions||1968||2013||Past products: [[w:GM 5L40-E transmission|5L40]], [[w:GM 4L30-E transmission|4L30]], [[w:Turbo-Hydramatic 180|TH180/3L30]] RWD automatic transmissions
Also supplied 4-, 5-, & 6-speed RWD auto. transmissions to [[w:BMW|BMW]].<br /> Also supplied 3-speed RWD auto. transmissions to Fiat, Peugeot ([[w:Peugeot 604|604]]), & Rover ([[w:Rover SD1|SD1]]).
Sold to Punch Metals International in 2013, which renamed the unit as Punch Powerglide Strasbourg.<ref>{{Cite web|url=https://gmauthority.com/blog/2012/12/general-motors-sells-strasbourg-plant-to-punch-metals-international/|title = General Motors Sells Strasbourg Plant to Punch Metals International|author=Alex Luft|publisher=GMAuthority.com|date = 22 December 2012}}</ref> In 2014, Punch Powerglide Strasbourg began producing [[w:ZF 8HP transmission|8HP 8-speed automatic transmissions]] for [[w:ZF Friedrichshafen|ZF Friedrichshafen]] in addition to the GM 6L50 6-speed automatic transmission. In 2023, Punch Powerglide Strasbourg was renamed Dumarey Powerglide Strasbourg.
|-
| ||General Motors Suisse AG||[[w:Biel|Biel]]||[[w:Switzerland|Switzerland]]||[[w:Chevrolet|Chevrolet]] 1936-1941, 1946-1968<ref>{{cite web|title=What's Wrong With This Picture? And What's Very Right With the Other Ones? They Do Things a Bit Differently In Switzerland|date=15 August 2020 |at=see 20th comment down from 8-15-20 5:59 pm|url=https://www.curbsideclassic.com/blog/qotd/whats-wrong-with-this-picture-and-whats-very-right-with-the-other-ones-they-do-things-a-bit-differently-in-switzerland/}}</ref><br />[[w:Pontiac (automobile)|Pontiac]] 1937-1939, 1946-1959 (None produced in 1955-1956)<br />[[w:Oldsmobile|Oldsmobile]] 1936-1940, 1947-1958<br />[[w:Buick|Buick]] 1936-1940, 1946-1958<br />[[w:LaSalle (automobile)|LaSalle]] 1936 <br />[[w:Cadillac|Cadillac]] 1938-1940<br />[[w:Opel|Opel]] 1936-1941, 1950-1975<br />[[w:Vauxhall Motors|Vauxhall]] 1936-1940, 1946-1971<br />[[w:Ranger (automobile)#Europe|Ranger]] 1970-1975 ||1936||1975|| First car off the line was a [[w:Buick Series 40|Buick Model 41]] on February 5, 1936. Other prewar cars built include the [[w:Buick Series 90|Buick Series 90]] & [[w:Opel P4|Opel P4]]. GM rented the factory from the city council until they bought it on Feb. 20, 1947. Closed August 14, 1975. Last car was an [[w:Opel Rekord D|Opel Rekord D]]. A total of 329,864 cars were assembled. Regular as well as customized vehicles in small series were made like drawing vehicles for the [[w:Swiss Armed Forces|Swiss Armed Forces]]: An open 6-seater [[w:Chevrolet|Chevrolet]] Platform combined with an Opel 2.5L I-6 cylinder; after World War II those "Swiss" cars were also offered to the public as limousines. As well, GM produced luxury upgraded vehicles for the European market like the [[w:Opel Kapitän|Opel Kapitän]], [[w:Opel Rekord P1#Swiss assembly|Rekord]] "Ascona Edition", and the Kadett-based [[w:Opel Kadett B#Opel Ascona (modified Kadett B assembled in Biel, Switzerland)|Opel Ascona 1700]] up to the early 1970s. The [[w:Ranger (automobile)#Europe|Ranger]] was invented by using [[w:Vauxhall Motors|Vauxhall]] structures on an [[w:Opel Rekord C|Opel Rekord C]] body. Also built the first generation [[w:Chevrolet Camaro (first generation)|Chevrolet Camaro]], [[w:Chevrolet Chevelle|Chevrolet Chevelle]], [[w:Chevrolet Chevy II / Nova|Chevrolet Chevy II / Nova]], & the [[w:Chevrolet Corvair|Chevrolet Corvair]] (from CKD kits supplied from Oshawa). Also built the [[w:Vauxhall Victor|Vauxhall Victor]] and the special Victor Riviera as well as the [[w:Vauxhall Cresta|Vauxhall Cresta]] and [[w:Vauxhall Viscount|Vauxhall Viscount]]. Afterwards the plant was used as GM's European central spare parts warehouse until 1992. Most buildings still exist, they now house a [[w:Coop (Switzerland)|Coop]] mall.
|-
| ||SynergyCells||[[w:New Carlisle, Indiana|New Carlisle, Indiana]]||United States||Was supposed to make NCA (Nickel Cobalt Aluminum Oxide) type lithium-ion battery cells for EV's||Was scheduled to open in 2027|| || Originally owned and constructed by SynergyCells, a 49.99/50.01 joint venture between General Motors and [[w:Samsung SDI|Samsung SDI]] established in 2024. GM sold its stake in the plant to partner Samsung SDI in 2026 before the plant opened. Located at 56115 Larrison Road (also referred to as 31949 SR 2)
|-
|T||[[w:General Motors India|Talegaon]]||[[w:Talegaon|Talegaon]], [[w:Pune district|Pune district]], [[w:Maharashtra|Maharashtra]]||[[w:India|India]]||[[w:Chevrolet Spark|Chevrolet Spark]]<br />[[w:Chevrolet Beat|Chevrolet Beat]]<br />[[w:Chevrolet Sail#Second generation (2010)|Chevrolet Sail U-VA]] (hatchback)<br />[[w:Chevrolet Sail|Chevrolet Sail]]||2008||2020||Part of [[w:General Motors India|GM India]]. Production began in September 2008. Closed December 24, 2020. [[w:Hyundai Motor India|Hyundai Motor India]] signed a deal to buy the Talegaon plant from GM in August 2023 and completed the deal to buy the plant in January 2024. After extensive renovations and upgrades, Hyundai reopened the plant in October 2026. The Hyundai plant now includes an engine plant in addition to the vehicle assembly plant.
|-
|T (1953-1996)<br /><br />2 (1928-1952 [[w:Chevrolet|Chevrolet]])||[[w:North Tarrytown Assembly|North Tarrytown Assembly]]||[[w:Sleepy Hollow, New York|North Tarrytown, New York]]||United States||Past models:<br />[[w:Chevrolet 490|Chevrolet 490]]<br />[[w:Chevrolet Superior|Chevrolet Superior]]<br />[[w:Chevrolet Series AA Capitol|Chevrolet Series AA Capitol]]<br />[[w:Chevrolet Series AB National|Chevrolet Series AB National]]<br />[[w:Chevrolet Series AC International|Chevrolet Series AC International]]<br />[[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]]<br />[[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]]<br />[[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]]<br />[[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]]<br />[[w:Chevrolet Master|Chevrolet Master]]<br />[[w:Chevrolet Deluxe|Chevrolet Deluxe]]<br />[[w:Chevrolet Stylemaster|Chevrolet Stylemaster]]<br /> [[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]]<br />[[w:Chevrolet AK Series|Chevrolet AK Series]]<br />[[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1947-1955)<br />[[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959) <br />[[w:Chevrolet C/K (first generation)|Chevrolet C/K (Gen.1)]] (1960-1966)<br />[[w:Chevrolet C/K (second generation)|Chevrolet C/K (Action Line)]] (1967-1972)<br />[[w:Chevrolet 150|Chevrolet 150]] (1953-1957)<br />[[w:Chevrolet 210|Chevrolet 210]] (1953-1957)<br /> [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1974)<br />[[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-1970)<br />[[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-1974)<br />[[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958)<br />[[w:Chevrolet Impala|Chevrolet Impala]] (1958-1974)<br />[[w:Chevrolet Nomad|Chevrolet Nomad]] (1955-1957)<br />[[w:Chevrolet Suburban|Chevrolet Suburban]] (1950, 1952, 1963-1964, 1966)<br />[[w:Chevrolet C/K (second generation)|GMC C/K (Action Line)]] (1967-1972)<br />[[w:Chevrolet Nova|Chevrolet Nova]] (1975-1979)<br />[[w:Chevrolet Citation|Chevrolet Citation]] (1980-1985)<br />[[w:Pontiac Ventura#1971–1977|Pontiac Ventura]] (1975-1977)<br />[[w:Pontiac Phoenix#First generation (1977–1979)|Pontiac Phoenix (rwd X-body)]] (1978-1979)<br />[[w:Pontiac Phoenix#Second generation (1980–1984)|Pontiac Phoenix (fwd X-body)]] (1980-1984)<br />[[w:Pontiac 6000|Pontiac 6000]] (1985-1989)<br />[[w:Buick Skylark#Fourth generation (1975–1979)|Buick Skylark (rwd X-body)]] (1976-1979)<br />[[w:Buick Skylark#Fifth generation (1980–1985)|Buick Skylark (fwd X-body)]] (1980-1983)<br />[[w:Buick Century#Fifth generation (1982–1996)|Buick Century]] (1985-1989)<br />[[w:Chevrolet Lumina APV|Chevrolet Lumina APV]] (1990-1993)<br />[[w:Chevrolet Lumina Minivan|Chevrolet Lumina Minivan]] (1994-1996)<br />[[w:Pontiac Trans Sport#First generation (1990-1996)|Pontiac Trans Sport]] (1990-1996)<br />[[w:Oldsmobile Silhouette#First generation (1990–1996)|Oldsmobile Silhouette]] (1990-1996) ||1918 (as part of GM)||1996|| Located at 199 Beekman Avenue. Originally built by [[w:Mobile Company of America|Mobile Company of America]]. In 1904, plant was sold to Maxwell-Briscoe, which later became [[w:Maxwell Motor Company|Maxwell Motor Company]]. Chevrolet bought the complex in 1914, before Chevrolet was part of GM. The first Chevrolet produced in Tarrytown was the [[w:Chevrolet 490|Chevrolet 490]]. The plant became part of GM when Chevrolet became part of GM in 1918. The Fisher Body side of the plant became part of GM's Eastern Aircraft Division during World War II and assembled the wings, center section, trailing edges, motor mount, cabin, windshield, & upholstery for Avenger bombers & Wildcat fighters. Built the 50 millionth Chevrolet, a white 1963 Impala SS on June 10, 1963. Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. Tarrytown Assembly joined the GM Assembly Division in 1968. Passenger car production ended on Feb. 3, 1989. Plant joined Truck and Bus Group for 1990 when it was converted to build GM's new trio of fwd minivans. Plant closed in June 1996. Minivan production moved to [[w:Doraville Assembly|Doraville Assembly]] for 1997. North Tarrytown changed its name to Sleepy Hollow in December 1996. Plant was demolished. Site being redeveloped as Edge-on-Hudson, a mixed use residential/retail/office/park space.
|-
|H||[[w:General Motors Thailand|General Motors Thailand]] Ltd.||Pluak Daeng, [[w:Rayong province|Rayong province]]||[[w:Thailand|Thailand]]||[[w:Chevrolet Colorado|Chevrolet/Holden Colorado]] (RC/RG) <br /> [[w:Chevrolet Trailblazer (SUV)#RG|Chevrolet/Holden Trailblazer & Holden Colorado 7]] (RG)<br />[[w:Chevrolet Cruze|Chevrolet Cruze]]<br />[[w:Daewoo Lacetti|Chevrolet Optra]]<br /> [[w:Daewoo Kalos|Chevrolet Aveo]]<br /> [[w:Daewoo Winstorm|Chevrolet/Holden Captiva]]||2000||2020||Past Models:<br /> [[w:Opel Zafira#Zafira A (1999)|Opel/Vauxhall/Chevrolet Zafira]]<br /> [[w:Opel Zafira#Zafira A (1999)|Holden Zafira (TT)]]<br /> [[w:Subaru Traviq|Subaru Traviq]], [[w:Isuzu D-Max#First generation (RA, RC; 2002)|Isuzu D-Max]],<br> [[w:Alfa Romeo 156|Alfa Romeo 156]] [https://www.just-auto.com/news/thailand-gm-to-make-alfa-156-in-thailand/]<br /> Sold to [[w:Great Wall Motors|Great Wall Motors]] in 2020.<ref>{{Cite web|url=https://gmauthority.com/blog/2020/09/sale-of-gm-rayong-plant-to-great-wall-motors-confirmed/|title=Sale of GM Rayong Plant to Great Wall Motors Confirmed|author=Sam McEachern|publisher=GMAuthority.com|date=30 September 2020}}</ref>
|-
| ||[[w:General Motors Thailand|General Motors Powertrain (Thailand) Ltd.]]||Pluak Daeng, [[w:Rayong province|Rayong province]]||[[w:Thailand|Thailand]]||2.5L ([[w:List of VM Motori engines#R 425 DOHC|R 425 DOHC]]) & 2.8L ([[w:List of VM Motori engines#R 428 DOHC|R 428 DOHC]] & [[w:List of VM Motori engines#A 428 DOHC|A 428 DOHC]]) turbodiesel I4 engines||2011||2020|| Sold to [[w:Great Wall Motors|Great Wall Motors]] in 2020.<ref>{{Cite web|url=https://gmauthority.com/blog/2020/09/sale-of-gm-rayong-plant-to-great-wall-motors-confirmed/|title=Sale of GM Rayong Plant to Great Wall Motors Confirmed|author=Sam McEachern|publisher=GMAuthority.com|date=30 September 2020}}</ref>
|-
| ||Three Rivers||[[w:Three Rivers, Michigan|Three Rivers]], [[w:Michigan|Michigan]]||United States||Rwd Automatic transmissions, propshafts||1979||1994||Located at 1 Manufacturing Way (formerly 1 Hydramatic Drive) off W. Hoffman St. GM bought the closed plant from Continental Can Co. Part of GM St. Joseph County Operations & GM Hydramatic Division. The Hydramatic Division merged with the GM Engine Division to form GM Powertrain in 1991-1992. Sold to [[w:American Axle|American Axle & Manufacturing Inc.]] in 1994.
|-
| ||[[w:Toledo Transmission|Toledo Transmission]]||[[w:Toledo, Ohio|Toledo, Ohio]]||United States||Transmissions, Gears||1916||1957||Located at 900 W. Central Ave. Acquired from Warner Gear Co. by Chevrolet in 1916 before Chevrolet was part of GM. The plant became part of GM when Chevrolet became part of GM in 1918. During WWII, produced truck transfer cases and transmissions for four- and six-wheel-drive military trucks. Replaced by the current Toledo Transmission plant on Alexis Road in 1956. A brick smokestack that says "CHEVROLET" on it is a remnant of this plant and can still be seen today at the intersection of Maplewood Ave. and Arcadia Ave. It is similar to the more famous smokestack that says "OVERLAND", a remnant of the old Willys-Overland Jeep plant, which is only a short distance away from the Chevrolet smokestack.
|-
|M||Toluca Assembly||[[w:Toluca|Toluca]]||[[w:Mexico|Mexico]]||[[w:Chevrolet Kodiak|Chevrolet Kodiak]]||1995<ref>{{cite news|author=Thomas H. Klier, James Rubenstein|title=Mexico’s Growing Role in the Auto Industry Under NAFTA: Who Makes What and What Goes Where|url=https://www.chicagofed.org/publications/economic-perspectives/2017/6.|publisher=Federal Reserve Bank of Chicago, Economic Perspectives, Vol. 41, No. 6|at=see table 11 and footnotes right under table 11|date=September 2017}}</ref>||2008||[[w:Chevrolet C/K|Chevrolet C/K]], [[w:Chevrolet C/K (fourth generation)#C3500HD (1991–2002)|Chevrolet/GMC C3500HD]] (US: 2001-2002), [[w:Chevrolet Silverado#First-generation Silverado / second-generation Sierra (GMT800; 1999)|Chevrolet Silverado]]
|-
| ||Tonawanda Forge||[[w:Tonawanda (town), New York|Tonawanda]], [[w:New York (state)|New York]]||United States||Forged metal components||c.1950||1994||Located at 2390-2392 Kenmore Ave. Sold to [[w:American Axle|American Axle & Manufacturing Inc.]] in 1994. Closed in 2008, subsequently demolished.
|-
| ||Tonawanda Foundry||[[w:Tonawanda (town), New York|Tonawanda]], [[w:New York (state)|New York]]||United States||[[w:Casting|Iron castings]] of engine parts, brake drums. ||1954||1984||Was located on River Road. Was a Chevrolet Foundry. Was part of GM's Central Foundry Division.
|-
|Z||General Motors Turkiye Ltd.||[[w:Torbali|Torbali]], [[w:Izmir Province|Izmir Province]]||[[w:Turkey|Turkey]]||[[w:Opel Vectra|Opel Vectra]] A & B||1990||2000||[[w:Adam Opel AG|Opel plant]]. Converted into a spare parts warehouse.
|-
| ||[[w:Ultium#Production|Ultium Cells LLC - Lansing]]||[[w:Delta Township, Michigan|Delta Township, Michigan]]||United States||Was supposed to make Ultium lithium-ion battery cells for EV's||Was scheduled to open in late 2024 or in 2025|| || Originally owned and constructed by Ultium Cells LLC, a 50/50 joint venture between General Motors and [[w:LG Energy Solution|LG Energy Solution]]. This was supposed to be Ultium Cells' third plant but GM sold its stake in the plant to partner LG Energy Solution in 2025 before the plant opened. Located at 7111 Davis Hwy. It is adjacent to GM's Lansing Delta Township Assembly plant.
|-
| ||General Motors Uruguaya SA||[[w:Sayago|Sayago]], [[w:Montevideo|Montevideo]]||[[w:Uruguay|Uruguay]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Opel Kadett|Opel Kadett]]<br />[[w:Opel Rekord|Opel Rekord]]<br />[[w:Bedford Vehicles|Bedford trucks]]||1962||1986||
|-
|L (1953-1992)<br /><br />20 (1947-1952 [[w:Chevrolet|Chevrolet]])||[[w:Van Nuys Assembly|Van Nuys Assembly]]||[[w:Van Nuys, California|Van Nuys, California]]||United States||[[w:Chevrolet Camaro|Chevrolet Camaro]] (1967-1971, 1978-1992)<br />[[w:Pontiac Firebird|Pontiac Firebird]] (1968-1971, 1978-1992) ||1947||1992||Located at 8000 Van Nuys Blvd. Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. Van Nuys Assembly joined the GM Assembly Division in 1968. Demolished in 1993. Redeveloped into "The Plant", a retail and industrial complex that also includes LAPD and LAFD stations.<br />Past models: [[w:Buick Apollo|Buick Apollo]] (1973-1975), [[w:Buick Skylark#Fourth generation (1975–1979)|Buick Skylark]] (1975-1977), [[w:Chevrolet 150|Chevrolet 150]] (1953-1957), [[w:Chevrolet 210|Chevrolet 210]] (1953-1957), [[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1948-1955), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1969), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-1969), [[w:Chevrolet C/K (first generation)|Chevrolet C/K]] (1960-1966), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-1969), [[w:Chevrolet Chevelle|Chevrolet Chevelle]] (1964, 1970-1972), [[w:Chevrolet Corvair|Chevrolet Corvair]] (1963, 1965-1966), [[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958), [[w:Chevrolet El Camino|Chevrolet El Camino]] (1959-1960, 1964, 1970-1972), [[w:Chevrolet Impala|Chevrolet Impala]] (1958-1969), [[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1970-1972), [[w:Chevrolet Nomad|Chevrolet Nomad]] (1955-1957), [[w:Chevrolet Nova|Chevrolet Nova]] (1972-1977), [[w:Chevrolet Suburban|Chevrolet Suburban]] (1952, 1955, 1959), [[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959), [[w:GMC Sprint|GMC Sprint]] (1971-1972), [[w:Oldsmobile Omega|Oldsmobile Omega]] (1973-1977), [[w:Pontiac GTO#Fourth generation|Pontiac GTO]] (1974), [[w:Pontiac Ventura#1971–1977 X-body compact|Pontiac Ventura]] (1972-1976)
|-
| ||Vauxhall - Bedford Die Plant||[[w:Bedford|Bedford]], [[w:Bedfordshire|Bedfordshire]]||[[w:United Kingdom|United Kingdom]]||Tools & Die Manufacturing||1969||1980's||Opened May 1969. Supplemented die-making at the Luton plant.
|-
|8 (since 1993)<br />E (before 1993)||[[w:Vauxhall Ellesmere Port|Vauxhall Ellesmere Port]]||[[w:Ellesmere Port|Ellesmere Port]], [[w:Cheshire|Cheshire]]||[[w:United Kingdom|United Kingdom]]||[[w:Opel Astra#K|Opel]]/[[w:Vauxhall Astra|Vauxhall Astra]] K (5-door, Sports Tourer)<br />[[w:Opel Astra#J|Opel]]/[[w:Vauxhall Astra|Vauxhall Astra]] J (5-door, Sports Tourer)<br />[[w:Opel Astra#H|Opel]]/[[w:Vauxhall Astra|Vauxhall Astra]] H<br />[[w:Opel Astra#G|Opel]]/[[w:Vauxhall Astra|Vauxhall Astra]] G<br />[[w:Opel Astra#F|Opel]]/[[w:Vauxhall Astra|Vauxhall Astra]] F<br />[[w:Opel Kadett E|Opel Kadett E]]/[[w:Vauxhall Astra#Second generation (1984–1991)|Vauxhall Astra Mk II]]<br />[[w:Vauxhall Belmont|Vauxhall Belmont]]<br />[[w:Opel Combo#Kadett Combo (Combo A; 1986)|Opel Kadett Combo/Bedford Astravan & Astramax]]<br />[[w:Vauxhall Astra#First generation (1980–1984)|Vauxhall Astra Mk I]]<br />[[w:Vauxhall Chevette|Vauxhall Chevette]]<br />[[w:Bedford Chevanne|Bedford Chevanne]]<br />[[w:Vauxhall Firenza|Vauxhall Firenza]]<br />[[w:Vauxhall Magnum|Vauxhall Magnum]]<br />[[w:Opel Vectra#Vectra C (2002–2010)|Opel/Vauxhall Vectra C]]<br />[[w:Vauxhall Viva|Vauxhall Viva]]<br />[[w:Holden Astra#Third generation (TR; 1995)|Holden Astra (TR)]]<br />[[w:Holden Astra#Seventh generation (BK, BL; 2016)|Holden Astra (BK)]] (wagon)<br />Vauxhall Viva OHV Inline-4<br />[[w:General Motors 54° V6 engine|General Motors 54° V6 engine]]||1962||2017|| [[w:Vauxhall Motors|Vauxhall plant]]. <br />Also made engines, transmissions, axles, & other components. Component production began in November 1962. Vehicle production began with the Viva on June 1, 1964. Engine production ended in 2004. Sold to [[w:PSA Group|PSA Group]] in 2017. Part of [[w:Stellantis|Stellantis]] since 2021. Absorbing production of electric midsize vans from Luton van plant following Luton's closure on March 28, 2025.
|-
|7 (since 1993)<br />V (before 1993)||Vauxhall Luton (car plant)||[[w:Luton|Luton]], [[w:Bedfordshire|Bedfordshire]]||[[w:United Kingdom|United Kingdom]]||[[w:Vauxhall Carlton|Vauxhall Carlton]]<br />[[w:Vauxhall Cavalier|Vauxhall Cavalier]]<br />[[w:Vauxhall Cresta|Vauxhall Cresta]]<br />[[w:Opel Vectra#Vectra A (1988–1995)|Opel Vectra A]]<br />[[w:Opel Vectra#Vectra B (1995–2002)|Opel/Vauxhall Vectra B]]<br />[[w:Vauxhall Velox|Vauxhall Velox]]<br />[[w:Vauxhall Ventora|Vauxhall Ventora]]<br />[[w:Vauxhall Victor|Vauxhall Victor]]<br />[[w:Vauxhall Viscount|Vauxhall Viscount]]<br />[[w:Vauxhall Viva|Vauxhall Viva]]<br />[[w:Vauxhall VX4/90|Vauxhall VX4/90]]<br />[[w:Vauxhall VX Series|Vauxhall VX Series]]<br />[[w:Vauxhall Wyvern|Vauxhall Wyvern]]<br />[[w:Envoy (automobile)#Vauxhall Victor based models|Envoy F/FB/FC/FD]]<br />Chevrolet Bedford AC/LQ<br />Bedford WHG/WLG/WS/VYC/AS/WT/BYC/K/[[w:Bedford M series|MS/ML]]/OS/OL/[[w:Bedford OB|OB]]<br />[[w:Bedford S type|Bedford S series]]<br />[[w:Bedford SB|Bedford SB]]<br />[[w:Bedford TA|Bedford TA]]<br />[[w:Bedford HC|Bedford HC/JC/PC]]<br />[[w:Bedford CA|Bedford CA/Envoy EA]]<br />[[w:Bedford CF|Bedford CF/CF1/Opel Bedford Blitz]]<br />[[w:Bedford HA|Bedford HA]]<br />[[w:Vauxhall Slant-4 engine|Vauxhall Slant-4 engine]]<br />Vauxhall OHV Inline-6<br />[[w:Churchill tank|Churchill tank]] ||1905 (operations began)<br><br>1925 (part of GM)||2002|| Vauxhall moved from London to Luton in 1905. GM bought Vauxhall in 1925. Chevrolet truck production was moved to Luton in 1930 from the Hendon plant and became known as Chevrolet Bedford. Chevrolet Bedford trucks were replaced by Vauxhall-developed Bedford trucks during 1931 though Chevrolet Bedford production continued through 1932. Bedford trucks and buses were built at Luton until production was moved to Dunstable in 1955. Subsequently, only Bedford vans and car-based light commercial vehicles were still made in Luton. Produced Churchill tanks during World War II. Production ended in 2002 with the [[w:Vauxhall Vectra|Vauxhall Vectra]]. Over 7.4 million vehicles had been produced. The Luton passenger car plant was next to the at the time still active van plant previously used by the IBC Vehicles joint venture. The plant has now been demolished and the site is now being redeveloped for housing.<ref>{{cite news|url=http://www.lutontoday.co.uk/news/politics/redevelopment-of-former-vauxhall-site-given-the-go-ahead-1-5795094|work=Luton Today|title=Redevelopment of former Vauxhall site given the go-ahead|date=8 Jan 2014|access-date=29 September 2014}}</ref> It is being redeveloped into a new Luton suburb called [[w:Napier Park|Napier Park]]. The van plant was closed in 2025 by Stellantis.
|-
| ||GM de Venezuela<br />Caracas||[[w:Antimano|Antimano]], [[w:Caracas|Caracas]]||[[w:Venezuela|Venezuela]]||[[w:Chevrolet Bel Air|Chevrolet Bel Air]]<br />[[w:Chevrolet C/K|Chevrolet C/K]] <br />[[w:Chevrolet Camaro|Chevrolet Camaro]]<br /> [[w:Chevrolet Caprice|Chevrolet Caprice]]<br />[[w:Chevrolet Chevelle|Chevrolet Chevelle]]<br />[[w:Chevrolet Corvair|Chevrolet Corvair]]<br />[[w:Chevrolet Deluxe|Chevrolet Deluxe]]<br />[[w:Chevrolet Impala|Chevrolet Impala]]<br />[[w:Chevrolet Malibu|Chevrolet Malibu]]<br /> [[w:Chevrolet Nova|Chevrolet Nova]]<br /> [[w:Chevrolet Advance Design|Chevrolet Thriftmaster/Loadmaster]]<br />[[w:Opel Kadett|Opel Kadett]]<br />[[w:Opel Rekord|Opel Rekord]] ||1948||1983||Plant closed in 1983 & GM moved to the newer Valencia plant that it bought from Chrysler in 1979.
|-
| ||GM Venezolana<br />Mariara||[[w:Mariara|Mariara]], [[w:Carabobo|Carabobo]]||[[w:Venezuela|Venezuela]]||[[w:Chevrolet Silverado#Second-generation Silverado / third-generation Sierra (GMT900; 2007)|Chevrolet C3500]]<br /> [[w:Isuzu Forward|Chevrolet F-Series]]<br />[[w:Isuzu Giga|Chevrolet E-Series]]<br />[[w:Chevrolet Kodiak|Chevrolet Kodiak]]<br />[[w:Isuzu Elf|Chevrolet N-Series]]<br />||2008||2015||Plant closed in 2015 & N-Series moved to Valencia plant.
|-
| ||GM Venezolana<br />Valencia||[[w:Valencia, Carabobo|Valencia]], [[w:Carabobo|Carabobo]]||[[w:Venezuela|Venezuela]]||[[w:Chevrolet Astra|Chevrolet Astra]]<br />[[w:Chevrolet Aveo (T200)|Chevrolet Aveo]]<br /> [[w:Chevrolet C/K|Chevrolet C/K]] <br />[[w:Chevrolet Celebrity|Chevrolet Celebrity]]<br />[[w:Buick Century#Fifth generation (1982–1996)|Chevrolet Century]]<br />[[w:Chevrolet Chevette#Latin America|Chevrolet Chevette]]<br />[[w:Chevrolet Corsa|Chevrolet Corsa]]<br /> [[w:Chevrolet Cruze#First generation (J300; 2008)|Chevrolet Cruze]]<br />[[w:Chevrolet Tahoe#First generation (1992)|Chevrolet Grand Blazer]]<br />[[w:Chevrolet Kodiak|Chevrolet Kodiak]]<br /> [[w:Chevrolet Malibu#Fourth generation (1978)|Chevrolet Malibu]]<br />[[w:Opel Ascona#Chevrolet Monza|Chevrolet Monza]]<br />[[w:Isuzu Elf|Chevrolet N-Series]]<br />[[w:Daewoo Lacetti|Chevrolet Optra]]<br />[[w:Chevrolet Orlando#First generation (J309; 2011)|Chevrolet Orlando]]<br />[[w:Chevrolet S-10 Blazer|Chevrolet S-10 Blazer]]<br />[[w:Chevrolet Silverado|Chevrolet Silverado]]<br /> [[w:Chevrolet Spark|Chevrolet Spark]]<br />[[w:Chevrolet Tahoe|Chevrolet Tahoe]]<br />[[w:Chevrolet TrailBlazer#First generation (KC; 2001)|Chevrolet TrailBlazer]] ||1979||2017||Originally built by Chrysler de Venezuela SA. GM bought the plant from Chrysler in 1979 and moved their entire operations there from the Caracas plant by 1983. <br />
There had already been production pauses because of part shortages between 2014 and 2016. On May 2, 2017 GM announced the total closure of the plant and deconsolidation of the Venezuelan unit from its accounts due to the illegal seizure of its factory by the Venezuelan government. The plant halted all of its operations of manufacturing vehicles and now only retains the GM brands representation.<ref>{{cite web|url=https://www.semana.com/internacional/articulo/general-motors-cierra-operaciones-en-venezuela/244829|title=General Motors concreta el cierre de sus operaciones en Venezuela|website=Semana.com|date=May 2, 2017}}</ref><ref>{{cite news|url=https://elpais.com/internacional/2017/04/20/actualidad/1492679446_631610.html|title=General Motors suspende operaciones en Venezuela tras el embargo de una planta|newspaper=El País|date=April 20, 2017|via=elpais.com}}</ref><ref>{{cite web|url=http://www.elcomercio.com/actualidad/generalmotors-cierre-operaciones-venezuela-negocios.html|title=General Motors inicia cierre de operaciones en Venezuela|website=El Comercio|date=May 2, 2017}}</ref>
|-
| ||[[w:GM Vietnam|GM Vietnam]]||[[w:Hanoi, Vietnam|Hanoi]]||[[w:Vietnam|Vietnam]]||[[w:Chevrolet Aveo|Chevrolet Aveo]]<br />[[w:Chevrolet Captiva#First generation (C100, C140; 2006)|Chevrolet Captiva]]<br />[[w:Chevrolet Cruze#First generation (J300; 2008)|Chevrolet Cruze]]<br />[[w:Chevrolet Lacetti|Chevrolet Lacetti]]<br />[[w:Chevrolet Spark#Second generation (M200, M250; 2005)|Chevrolet Spark Lite]]<br />[[w:Chevrolet Spark#Third generation (M300; 2009)|Chevrolet Spark]]<br />[[w:Chevrolet Orlando#First generation (J309; 2011)|Chevrolet Orlando]]<br />[[w:Chevrolet Vivant|Chevrolet Vivant]]<br>[[w:Daewoo Cielo|Daewoo Cielo]]<br>[[w:Daewoo Lacetti|Daewoo Lacetti]]<br />[[w:Daewoo Lanos|Daewoo Lanos]]<br>[[w:Daewoo Leganza|Daewoo Leganza]]<br>[[w:Daewoo Magnus|Daewoo Magnus]]<br>[[w:Daewoo Matiz|Daewoo Matiz]]<br>[[w:Daewoo Nubira|Daewoo Nubira]]<br>[[w:Daewoo Damas|Daewoo Damas]]||1995||2018||Originally established as VIDAMCO (a joint venture with a state owned co.) in 1993 by Daewoo Motor Co. Daewoo bought out its Vietnamese partner in April 2000, making VIDAMCO 100% owned by Daewoo Motor Co. Bought by GM in 2002 as part of the creation of [[w:GM Daewoo|GM Daewoo Auto & Technology Co.]] In July 2011, the name of the company was changed from VIDAMCO to GM Vietnam. Sold to [[w:VinFast|VinFast]] in 2018. [[w:VinFast Fadil|VinFast Fadil]] produced under license from GM; is a rebadged [[w:Chevrolet Spark#Fourth generation (M400; 2015)|Chevrolet Spark (M400)]]/[[w:Opel Karl|Opel Karl]].
|-
| ||[[w:Warren Transmission|Warren Transmission]]||[[w:Warren, Michigan|Warren, Michigan]]||United States||[[w:GM-Ford 6-speed automatic transmission|6T70, 6T75, 6T80]] ||1958||2020||Located at 23500 Mound Road. Past transmissions: [[w:GM 4T60-E transmission|4T65-E]], [[w:List of GM transmissions#Hybrid and PHEV|5ET50 EVT]]
Plant originally built in 1941 as a US Navy Ordnance facility operated by the Hudson Motor Car Co. building 20mm Oerlikon anti-aircraft guns. In 1943, the Navy moved the contract from Hudson to Westinghouse, which now operated the Warren plant for the Navy. Ford bought the plant in 1946 and used it to produce axles and ball joints. GM bought the plant in 1958.<ref>{{Cite web|url=https://gmauthority.com/blog/2022/01/old-gm-warren-transmission-plant-set-to-be-demolished/|title = Old GM Warren Transmission Plant Set To Be Demolished|author=Sam McEachern|publisher=GMAuthority.com|date=January 25, 2022}}</ref> The plant became a Chevrolet facility making auto parts. It also made artillery shells in the 1960's and 1970's. The factory was transferred to the Hydramatic Division in 1980, later becoming part of GM Powertrain. [https://nadc1.com/?portfolio=gm-paint-shop-strip-out] Ended production on August 1, 2019. Reopened for production of face masks during the COVID-19 pandemic beginning in March 2020<ref>{{Cite web|url=https://www.freep.com/story/money/cars/general-motors/2020/06/08/gm-warren-transmission-plant-coronavirus/3135789001/|title = GM revived Warren plant for face mask production. What happens when demand slows?|author=Jamie LaReau|publisher=Detroit Free Press|date=June 8, 2020}}</ref>. First face mask produced March 27, 2020. Sold to a developer in 2021.
|-
| ||[[w:Welch Motor Car Company|Welch]]||[[w:Pontiac, Michigan|Pontiac]], [[w:Michigan|Michigan]]||United States||Welch automobiles||1909||1911||Welch Motor Car Company became affiliated with GM in 1909 and GM officially took it over in 1910. Welch ended production in 1911. Welch was noted for having engines with a single overhead cam and hemispherical combustion chambers, unusual technology for its time.
|-
| ||[[w:Welch Motor Car Company|Welch-Detroit]]||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||Welch-Detroit automobiles||1910||1911||The Welch Company of Detroit was a separate company from the Welch Motor Car Company of Pontiac, Michigan and was set up in June 1909 to build a smaller, cheaper car than the Welch made in Pontiac, Michigan. Both Welch companies became affiliated with GM in 1909 and GM officially took over both companies in 1910. Both Welch and Welch-Detroit ended production in 1911. Equipment from the factory was moved to the also GM-owned, former Rainier Motor Car Company factory in Saginaw to make the 1912 Marquette, which was said to be a combination of the previous Rainier and Welch-Detroit brands.
|-
|W||[[w:Willow Run Assembly|Willow Run Assembly]]||[[w:Ypsilanti Township, Michigan|Ypsilanti Twp, Michigan]]||United States||[[w:Chevrolet Caprice#Fourth generation (1991–1996)|Chevrolet Caprice]] sedan & wagon (1991-1993) <br />[[w:Oldsmobile Custom Cruiser#Third generation (1991–1992)|Oldsmobile Custom Cruiser]] wagon (1991-1992)<br />[[w:Buick Roadmaster#1991–1996|Buick Roadmaster Estate wagon]] (1991-1993)||1956||1993||Located at 2625 Tyler Road, to the south of the former Willow Run Transmission plant. Initially opened in 1956 to exclusively build Chevrolet trucks in a 500,000 sq. ft. building that had been used as a warehouse by GM and was previously used by Kaiser-Frazer's engineering dept. [https://aadl.org/aa_news_19561208-chevrolet_willow_run_truck_plant_gains_momentum] In 1958-59, plant was expanded into a 2-part Chevrolet & Fisher Body passenger car assembly plant to make the Chevrolet Corvair. First completed 1960 Corvair rolls off the line on July 7, 1959 [https://www.facebook.com/photo/?fbid=792700342891740&set=a.453129043515540]. Added the Chevy II (Nova) for 1962. Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. Willow Run Assembly joined the GM Assembly Division in 1971. Idled in Nov. 1978. Converted in 1978-79 to build the fwd X-body compacts for 1980. Began building fwd X-cars on January 17, 1979. In 1984, joined the new BOC group in preparation for its conversion to build the new fwd H-body full-size cars for 1986. Final H-car built on May 19, 1989 and in September, moved to the CPC group. Converted to build the body-on-frame, rwd B-body for 1991. Chevy Caprice sedan production began in January 1990 followed by station wagons in July. Closed July 1993. B-body production consolidated in Arlington, TX. Assembly plant was 2.5 million sq. ft. when it closed. The Willow Run Assembly Plant is now the Willow Run Business Center, a multi-tenant warehouse and distribution facility, part of which is leased by GM to distribute automotive service parts, which is known as Ypsilanti #87 Processing Center, part of GM Customer Care and Aftersales. The nearby Willow Run Company Vehicle Operations site at 2901 Tyler Road was sold to International Turbine Industries in April 2013.<ref name=WR-Assembly-sold>{{cite news|author=Katrease Stafford|title=GM Willow Run plant redevelopment: Aircraft maintenance firm buys 1 building|url=https://www.annarbor.com/news/ypsilanti/gm-willow-run-plant-redevelopment-aircraft-maintenance-firm-purchases-facility-25-new-jobs-expected/|access-date=24 April 2013|newspaper=AnnArbor.com|date=April 2, 2013}}</ref>
Past models: [[w:Chevrolet Task Force|Chevrolet Task Force]] (1957-1958), [[w:Chevrolet Suburban#Fourth generation (1955)|Chevrolet Suburban]] (1958), [[w:Chevrolet Corvair|Chevrolet Corvair]] (1960-1969), [[w:Chevrolet Nova|Chevrolet Chevy II/Nova]] (1962-79), [[w:Acadian (automobile)|Acadian]] (Canada only: 1968-71), [[w:Pontiac Ventura#1971–1977 X-body compact|Pontiac <br> Ventura]] (1971-1977), [[w:Pontiac GTO#Fourth generation|Pontiac GTO]] (1974), [[w:Pontiac Phoenix#First generation (1977–1979)|Pontiac Phoenix (rwd <br> X-body)]] (1977-1979), [[w:Oldsmobile Omega|Oldsmobile Omega (rwd X-body)]] (1973-1979), [[w:Buick Skylark#Fourth generation (1975–1979)|Buick Skylark (rwd <br> X-body)]] (1977-1978), [[w:Chevrolet Citation|Chevrolet Citation]] (1980-1981, 1984-1985), [[w:Oldsmobile Omega#Third generation (1980–1984)|Oldsmobile Omega (fwd X-body)]] (1980-1984), [[w:Buick Skylark#Fifth generation (1980–1985)|Buick Skylark (fwd <br> X-body)]] (1980-1985), [[w:Oldsmobile 88#Ninth generation (1986–1991)|Oldsmobile 88]] (1986-89), [[w:Pontiac Bonneville#Eighth generation (1987–1991)|Pontiac Bonneville]] (1987-1989).
|-
| ||[[w:Willow Run Transmission|Willow Run Transmission]]||[[w:Ypsilanti, Michigan|Ypsilanti, Michigan]]||United States|| [[w:Hydramatic|Hydramatic]] automatic transmissions <br /> [[w:GM 4L80-E transmission|4L80-E transmission]]<br />[[w:GM 4L80-E transmission|4L85-E transmission]]<br />[[w:GM 4T60-E transmission|4T60-E transmission]]<br />[[w:GM 4T60-E transmission|4T65-E transmission]]<br />[[w:GM 4T80-E transmission|4T80-E transmission]]<br />[[w:GM 6L50 transmission|6L50-E transmission]]<br />[[w:GM 6L80 transmission|6L80-E transmission]]<br />[[w:GM 6L90 transmission|6L90-E transmission]]<br />||1953||2010||Began as the Ford [[w:B-24 Liberator|B-24 Liberator]] bomber plant in World War II which opened in 1941, grew from 3.5 million square feet to nearly 5 million square feet under GM. Ford built the factory and sold it to the US government, which leased it back to Ford for the duration of WWII. Ford Motor had first option on the plant after war production ended, an option it ultimately chose not to exercise. The factory was instead leased and then sold to [[w:Kaiser-Frazer|Kaiser-Frazer]] and was their main production site from 1946-1953, when they moved production to Toledo, OH following Kaiser-Frazer's acquisition of Toledo-based [[w:Willys-Overland|Willys-Overland]]. In addition to automobiles, [[w:Kaiser-Frazer|Kaiser-Frazer]] also built [[w:C-119 Flying Boxcar|C-119 Flying Boxcar]] cargo planes at Willow Run under license from [[w:Fairchild Aircraft|Fairchild Aircraft]], producing an estimated 88 C-119s between 1951 and 1953. In 1953, GM first leased then bought the plant to replace the Detroit Transmission Division factory in Livonia, Michigan that had burned down earlier in 1953. Whatever equipment could be salvaged was brought from the destroyed Detroit Transmission Division plant in Livonia to Willow Run in 1953. Also supplied Hydramatics to Lincoln, Nash, Hudson, Rambler, Kaiser, and Willys. It was also initially supplied to Rolls-Royce before Rolls-Royce set up their own Hydramatic production line in the UK building Hydramatics under license from GM. Rolls-Royce also supplied Armstrong-Siddeley and [[w: British Motor Corporation|BMC]], which in turn supplied other British automakers like Jensen that used BMC’s biggest engines. The Detroit Transmission Division became the Hydramatic Division in October 1963. The Hydramatic Division merged with the GM Engine Division to form GM Powertrain in 1991-1992. Over the years, GM expanded the plant to almost 5 million sq. ft. In addition to automatic transmissions, GM also produced the M16A1 rifle and the M39A1 20mm autocannon for the US military during the Vietnam War at Willow Run Transmission. GM Powertrain also had an on-site engineering center. The plant closed in December 2010. A small portion of the plant was saved by the [[w:Yankee Air Museum|Yankee Air Museum]] to be turned into the National Museum of Aviation and Technology at Historic Willow Run but more than 95% of the plant was demolished from 2013-2014. The rest of the site has been redeveloped into the [[w:American Center for Mobility|American Center for Mobility]], an autonomous- and connected-driving testing center which opened in December 2017.
|-
|Y (1964 [[w:Chevrolet|Chevrolet]] and 1965-2010) <br /><br /> W <br /> (Pre-1965 [[w:Oldsmobile|Oldsmobile]] & [[w:Pontiac (automobile)|Pontiac]])<br /><br /> 5 (Pre-1965 [[w:Buick|Buick]]) || [[w:Wilmington Assembly|Wilmington Assembly]] || [[w:Wilmington, Delaware|Wilmington, Delaware]]||United States||[[w:Pontiac Solstice|Pontiac Solstice]] (2006-2010)<br />[[w:Saturn Sky|Saturn Sky]] (2007-2010) <br />[[w:Opel GT#GT (roadster) (2007–2010)|Opel GT]] (Europe: 2007-2010) <br />[[w:Daewoo G2X#Daewoo G2X|Daewoo G2X]] (S. Korea: 2007-2009) ||1947||2009||Located at 801 Boxwood Road. Was originally part of the [[w:Buick-Oldsmobile-Pontiac Assembly Division|Buick-Oldsmobile-Pontiac Assembly Division]]. Wilmington began making Chevrolet passenger cars for 1964. BOP Assembly Division became GM Assembly Division in 1965. Converted to make the Chevette small car for 1976. Switched back to making B-body full-size cars for 1985. Converted to make the fwd Chevy Corsica & Beretta for 1987. Then built Corsica's replacement, Malibu, for 1997. Converted to build Saturn's 2nd model range, the Opel Vectra-based, plastic body paneled Saturn L-Series for 2000. Converted to build the rwd, Kappa platform small sports cars for 2006 beginning with the Pontiac Solstice. Final car produced was a Solstice roadster on July 28, 2009. The plant was sold to [[w:Fisker Automotive|Fisker Automotive]] in 2010, which had planned to build its [[w:Fisker Atlantic|2nd model line]] there. However, Fisker Automotive went bankrupt in Nov. 2013 before ever building any cars in Wilmington. Fisker Automotive's assets, including the Wilmington plant, were purchased out of bankruptcy by Wanxiang Group in February 2014. Wanxiang did not use the plant and sold it in 2017. Plant was demolished in 2019. A large part of the site is now an Amazon fulfillment center.<br />Past models: [[w:Chevrolet Corsica|Chevrolet Corsica]] (1987-1996), [[w:Chevrolet Beretta|Chevrolet Beretta]] (1987-1996), [[w:Pontiac Tempest#Fourth generation (1987–1991)|Pontiac Tempest (Canada only)]] (1988-91), [[w:Chevrolet Malibu#Fifth generation (1997)|Chevrolet Malibu]] (1997-1999), [[w:Saturn L-Series|Saturn L-Series]] (2000-2005), [[w:Chevrolet Chevette|Chevrolet Chevette]] (1976-1984), [[w:Pontiac 1000|Pontiac 1000]] (1981-1984), [[w:Pontiac Acadian|Pontiac Acadian]] (Canada only: 1976-1984), [[w:Buick Centurion|Buick Centurion]] (1971-1973), [[w:Buick Electra|Buick Electra]] (1959-1962, 1971-1974), [[w:Buick Estate#1971-1976|Buick Estate]] (1972-1973, 1975), [[w:Buick GS|Buick GS]] (1968-1969), [[w:Buick Invicta|Buick Invicta]] (1959-1962), [[w:Buick LeSabre|Buick LeSabre]] (1959-1975), [[w:Buick Limited#1958 Limited|Buick Limited]] (1958), [[w:Buick Roadmaster|Buick Roadmaster]] (1948-1950, 1955-1957), [[w:Buick Skylark#Third generation (1968–1972)|Buick Skylark]] (1968-1969), [[w:Buick Special|Buick Special]] (1950, 1953-1958), [[w:Buick Super|Buick Super]] (1954-1958), [[w:Buick Wildcat|Buick Wildcat]] (1963-1970), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1964), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1964-1968), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-1975, 1985-1986), [[w:Chevrolet Impala|Chevrolet Impala]] (1964-1975, 1985), [[w:Oldsmobile 88|Oldsmobile 88]] (1949-1963, 1985), [[w:Oldsmobile 98|Oldsmobile 98]] (1948-1963), [[w:Oldsmobile Starfire#First generation (1961–1966)|Oldsmobile Starfire]] (1961-1963), [[w:Pontiac Bonneville|Pontiac Bonneville]] (1958-1963), [[w:Pontiac Catalina|Pontiac Catalina]] (1959-1960, 1962-1963), [[w:Pontiac Chieftain|Pontiac Chieftain]] (1950-1951, 1954-1957), [[w:Pontiac Grand Prix#First generation (1962–1964)|Pontiac Grand Prix]] (1962-1963), [[w:Pontiac Star Chief|Pontiac Star Chief]] (1955-1958, 1960), [[w:Pontiac Ventura#1960–1970|Pontiac Ventura]] (1960-1961)
|-
| ||[[w:Windsor Transmission|Windsor Transmission]]||[[w:Windsor, Ontario|Windsor, Ontario]]||[[w:Canada|Canada]]||[[w:GM 4T40 transmission|4T40E/4T45E transmission]]<br />Transmission components||1920||2010||Plant was originally in [[w:Walkerville, Ontario|Walkerville]] until Walkerville was annexed by Windsor in 1935. Was located at 1550 Kildare Road. Walker Road is at the back of the property. Previous: 1920 - 1928 axles and parts, 1928 - 1963 engines (including the [[w:Chevrolet Stovebolt engine|Chevrolet Stovebolt OHV inline-6 engine]] and Buick engines from 1935-1942). The Windsor plant was taken over by McKinnon Industries Ltd., a GM subsidiary based in St. Catharines, Ontario, Canada in 1963. As a result, engine production in Windsor was moved to St. Catharines and transmission production in St. Catharines was moved to Windsor. At this point, the Windsor plant was renamed the Windsor Transmission Plant. In 1969, McKinnon Industries Ltd. was integrated into GM Canada rather than being a separate subsidiary. Windsor Transmission was closed on July 28, 2010. The 4-spd. automatics made in Windsor were discontinued and replaced by 6-spd. automatics made in St. Catharines. Sold in 2014 and completely demolished by 2017. Site now occupied by MotiPark Ltd.
|-
| ||Windsor Trim||[[w:Windsor, Ontario|Windsor, Ontario]]||[[w:Canada|Canada]]||Seat assemblies and door trim panels||1965||1996|| Located at 1600 Lauzon Rd. Sold to Peregrine, Inc. in 1996 and then sold to [[w:Lear Corp.|Lear Corp.]] in 1999. Closed by Lear in 2005. Demolished in 2009. Part of the property is now the [[w:WFCU Centre|WFCU Centre]] and part will be residential homes.
|-
| ||[[w:Wixom Performance Build Center|Wixom Performance Build Center]]||[[w:Wixom, Michigan|Wixom, Michigan]]||United States||[[w:GM LS engine|6.2L LS3 V8]] [[w:Chevrolet Corvette (C6)#Grand Sport|(C6 Corvette Grand Sport coupe w/manual transmission only)]]<br />[[w:GM LS engine|7.0L LS7 V8]]<br />[[w:GM LS engine|6.2L supercharged LS9 V8]]<br />[[w:Northstar engine series#LC3|4.4L supercharged LC3 Northstar V8]] ||2004||2013<ref>{{Cite web|url=https://www.torquenews.com/106/gm-closing-wixom-performance-engine-facility-build-your-own-engine-program-ends|title=GM Closing Wixom Performance Engine Facility, Build-Your-Own-Engine Program Ends|author=Patrick Rall|date=September 20, 2013|publisher=Torquenews.com}}</ref>||Located at 30240 Oak Creek Dr.<br> Performance Build Center relocated to <br> Bowling Green Assembly in 2014.
|-
| ||[[w:Detroit Assembly#LaSalle Factory/DeSoto Factory|Wyoming Assembly (LaSalle Wyoming Ave. plant)]]||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||[[w:LaSalle (automobile)|LaSalle]] 1927-1933||1926||1934||Located at 6000 Wyoming Avenue. Originally built to produce Liberty aircraft engines in World War I, opening in 1917. In 1919, was taken over by Saxon Motor Co., owned by Hugh Chalmers of Chalmers Motor Co. GM bought the plant in 1926 and built the LaSalle there from 1927. GM sold Wyoming Assembly to Chrysler in 1934, which then used it to build its DeSoto brand. After the DeSoto brand was discontinued in late 1960, became Wyoming Export plant which was used to prepare vehicles for export. Plant closed in 1980. Plant was demolished in 1992.
|-
| ||[[w:GMC (marque)#History|Yellow Truck & Coach Manufacturing Company]]||[[w:Chicago|Chicago]], [[w:Illinois|Illinois]]||United States||Yellow Cab taxis<br>Yellow Coach buses<br>Yellocab trucks (T-1, T-2, and T-3)||1925||1928||Located on West Dickens Ave. In 1925, General Motors Truck Corp., the parent of the GMC brand, merged with Yellow Cab Manufacturing Company (including its Yellow Coach Mfg. Co. bus-making subsidiary) to form Yellow Truck & Coach Manufacturing Company, in which GM owned a majority stake of 57%. Yellocab trucks were discontinued during 1927 and were replaced with new light-duty GMC trucks (T-10 & T-20). During 1928, bus and taxi production was consolidated at the GMC Pontiac Central plant in Pontiac, Michigan. The Chicago plant was closed and sold.
|-
| ||Yellow Sleeve-Valve Engine Works||[[w:East Moline|East Moline]], [[w:Illinois|Illinois]]||United States||Yellow-Knight engines||1925||1929||Production began in 1923. In 1925, General Motors Truck Corp., the parent of the GMC brand, merged with Yellow Cab Manufacturing Company (including its Yellow Coach Mfg. Co. bus-making subsidiary) to form Yellow Truck & Coach Manufacturing Company, in which GM owned a majority stake of 57%. The Northway Motor Division of Detroit was transferred to General Motors Truck Corp. as part of that merger but was liquidated in 1926. During 1929 and 1930, Yellow Sleeve Valve Engine production equipment was transferred from East Moline, Illinois to Pontiac West Plant 1 in Pontiac, Michigan. The East Moline plant was closed at the end of 1929 and was sold.
|-
| ||[[w:Yulon GM|Yulon GM]]||[[w:Miaoli|Miaoli]]||[[w:Taiwan|Taiwan]]||[[w:Buick Excelle#Taiwan|Buick Excelle]]<br />[[w:Buick LaCrosse#China|Buick LaCrosse]] ||2006||2012||A joint venture owned 49% by GM & 51% by [[w:Yulon|Yulon Motor Co]]. Yulon bought GM's stake in the venture in Dec. 2008. Production continued after the sale through licensing but cooperation between GM & Yulon ended in 2012.
|-
| ||General Motors Zaire||[[w:Kinshasa|Kinshasa]]||[[w:Zaire|Zaire]] (now [[w:Democratic Republic of the Congo|D.R. Congo]])||[[w:Chevrolet|Chevrolet]] trucks<br />[[w:Opel Kadett|Opel Kadett]]<br />[[w:Opel Rekord|Opel Rekord]]<br />[[w:Opel Commodore|Opel Commodore]]<br />[[w:Opel Ascona|Opel Ascona]]<br />[[w:Bedford Vehicles|Bedford Trucks]]||1975||1987||GM sold the plant in 1987 to local businessmen. Plant was looted bare in 1991.
|}
== Former partner factories ==
{| class="wikitable sortable" style="font-size:90%"
!VIN !! Name !! City/State !! Country !! class="unsortable" | Products !! Opened !! Idled !! class="unsortable" | Comments
|-
|H||[[w:AM General#Hummer brand|AM General]] Commercial plant||[[w:Mishawaka, Indiana|Mishawaka, Indiana]]||United States||[[w:Hummer H2|Hummer H2]] (2003-2009)||2002||2009||Located at 12900 McKinley Highway. Built under contract for GM by AM General. Plant later built the [[w:Mercedes-Benz R-Class|Mercedes-Benz R-Class]] under contract for Mercedes for export to China from 2015-2017 as well as the [[w:VPG MV-1|VPG MV-1]] under contract for VPG (later Mobility Ventures MV-1; Mobility Ventures being an AM General subsidiary that took over VPG's assets after VPG went bankrupt). MV-1 was made from 2011-2016.
|-
|E||[[w:AM General#Hummer brand|AM General]] Military plant||[[w:Mishawaka, Indiana|Mishawaka, Indiana]]||United States||[[w:Hummer H1|Hummer H1]] (2000-2006)||1992 (civilian production)||2006 (civilian production)||Located at 13200 McKinley Highway. This plant built the military [[w:Humvee|Humvee]] from fall 1984 and civilian Hummers from 1992. In Dec. 1999, GM bought the rights to the Hummer brand from AM General. AM General still handled manufacturing but GM handled marketing and distribution. At this point, the AM General Hummer was renamed Hummer H1. H1 built under contract for GM by AM General. Humvee production for military use continued after 2006.
|-
| ||Asoke Engineering (Asoke Motors)||Bangkok?||[[w:Thailand|Thailand]]||[[w:Bedford HA#The BTV|Plai Noi]]<br />[[w:Opel Rekord|Opel Rekord]]||Mid-1970s||Early-1980s||A version of GM's [[w:Bedford HA#The BTV|BTV]] called the Plai Noi was assembled in Thailand in 1974.
|-
| ||Associated Industries Ltd.||[[w:Georgetown, Guyana|Georgetown]]||[[w:Guyana|Guyana]]||[[w:Bedford HA#The BTV|Tapir]]||Mid-1970's||Late-1970's||A version of GM's [[w:Bedford HA#The BTV|BTV]] called the Tapir was assembled in Guyana.
|-
| ||Associated Motor Industries Ltd.||[[w:Jurong|Jurong]] (Jurong Industrial Estate)||[[w:Singapore|Singapore]]||[[w:Chevrolet Impala|Chevrolet Impala]]<br />[[w:Statesman (automobile)#HQ|Chevrolet 350]]<br />[[w:Vauxhall Motors|Vauxhall]] including: <br />[[w:Vauxhall Victor|Victor]]<br />[[w:Vauxhall Viva|Viva]]<br />[[w:Vauxhall VX4/90|VX4/90]]||1968||1975||Jointly owned by Wearne Brothers Limited & Motor Investments Bhd. Associated Motor Industries Ltd. assembled vehicles under license from GM beginning in 1968 as well as brands from other automakers (Austin, Morris, & Renault).
|-
| ||Associated Motor Industries Malaysia Sdn. Bhd.||[[w:Batu Tiga|Batu Tiga]], [[w:Selangor|Selangor]]||[[w:Malaysia|Malaysia]]||[[w:Holden|Holden]]<br />||1968||1971 (?)||Associated Motor Industries Malaysia assembled Holden vehicles under license from GM beginning in 1968 as well as brands from other automakers.
|-
|C||[[w:Automobilwerk Eisenach|Automobilwerk Eisenach]] (AWE)||[[w:Eisenach|Eisenach]]||[[w:Germany|Germany]]||[[w:Opel Vectra#Vectra A (1988–1995)|Opel Vectra]] A<br />||1990||1991|| The old [[w:Wartburg (marque)|Wartburg]] plant built vehicles for Opel for a short time before closing permanently.
|-
| ||[[w:Avtotor|Avtotor]]||[[w:Kaliningrad|Kaliningrad]]||[[w:Russia|Russia]]||[[w:Chevrolet Aveo (T200)|Chevrolet Aveo]], [[w:Chevrolet Captiva#First generation (C100, C140; 2006)|Chevrolet Captiva]], [[w:Chevrolet Epica|Chevrolet Epica]], [[w:Chevrolet Lacetti|Chevrolet Lacetti]], [[w:Chevrolet Malibu#Eighth generation (2013)|Chevrolet Malibu]], [[w:Chevrolet Orlando#First generation (J309; 2010)|Chevrolet Orlando]], [[w:Chevrolet Rezzo|Chevrolet Rezzo]], [[w:Chevrolet Tahoe#Second generation (2000) |Chevrolet Tahoe (GMT800)]], [[w:Chevrolet Tahoe#Third generation (2007)|Chevrolet Tahoe (GMT900)]], [[w:Chevrolet Trailblazer (SUV)#First generation (KC; 2001)|Chevrolet Trailblazer]], [[w:Cadillac BLS|Cadillac BLS]], [[w:Cadillac CTS|Cadillac CTS]], [[w:Cadillac Escalade#Second generation (2001)|Cadillac Escalade (GMT800)]], [[w:Cadillac Escalade#Third generation (2007)|Cadillac Escalade (GMT900)]], [[w:Cadillac SRX|Cadillac SRX]], [[w:Cadillac STS|Cadillac STS]], [[w:Hummer H2|Hummer H2]], [[w:Hummer H3|Hummer H3]], [[w:Opel Antara|Opel Antara]], [[w:Opel Astra|Opel Astra]], [[w:Opel Insignia|Opel Insignia]], [[w:Opel Mokka#First generation (J13; 2012)|Opel Mokka]], [[w:Opel Meriva|Opel Meriva]], [[w:Opel Zafira|Opel Zafira]]||2004||2015||Built under contract by [[w:Avtotor|Avtotor]] for GM. GM ended the contract in 2015.
|-
| ||Azia Avto||[[w:Ust-Kamenogorsk|Ust-Kamenogorsk]]||[[w:Kazakhstan|Kazakhstan]]||[[w:Chevrolet Aveo (T200)|Chevrolet Aveo]], [[w:Chevrolet Captiva#First generation (C100, C140; 2006)|Chevrolet Captiva]], [[w:Chevrolet Cruze|Chevrolet Cruze]], [[w:Chevrolet Epica|Chevrolet Epica]], [[w:Chevrolet Lacetti|Chevrolet Lacetti]], [[w:Chevrolet Malibu#Eighth generation (2013)|Chevrolet Malibu]], [[w:Chevrolet Orlando#First generation (J309; 2010)|Chevrolet Orlando]], [[w:Chevrolet Trax|Chevrolet Tracker]]||2007||2018||Built under contract by Azia Avto for GM.
|-
| ||[[w:Bangchan General Assembly|Bangchan General Assembly]] Co., Ltd.||[[w:Khan Na Yao district|Khan Na Yao district]], [[w:Bangkok|Bangkok]]||[[w:Thailand|Thailand]]||[[w:Opel Kadett|Opel Kadett]] <br />[[w:Opel Rekord|Opel Rekord]] <br />[[w:Holden Kingswood|Holden Monaro LS]]<br />[[w:Statesman (automobile)|Chevrolet De Ville]]||1970||1987 (?)||[[w:Isuzu|Isuzu]] invested in Bangchan in 1979 but then sold its stake to [[w:Honda|Honda]] in 1987. Phra Nakorn Automobile Group became sole owner of Bangchan in 2005.
|-
|B||[[w:Gruppo Bertone|Gruppo Bertone]]||[[w:Grugliasco|Grugliasco]]||[[w:Italy|Italy]]||[[w:Opel Kadett#Kadett E (1984–1995)|Opel Kadett E convertible]]<br />[[w:Vauxhall Astra#Second generation (1984–1993)|Vauxhall Astra Mark 2 convertible]]<br />[[w:Opel Astra#F|Opel/Vauxhall Astra F convertible]]<br />[[w:Opel Astra#G|Opel/Vauxhall Astra G coupe & convertible]]<br />[[w:Holden Astra#Fourth generation (TS; 1998)|Holden Astra convertible (TS)]] ||1987||2006||Built under contract by [[w:Gruppo Bertone|Gruppo Bertone]] for Opel/Vauxhall.
|-
| ||Central African Transport Company (CATCO)||?||[[w:Malawi|Malawi]]||[[w:Bedford HA#The BTV|Zonse]]||Mid-1970's||?||A version of GM's [[w:Bedford HA#The BTV|BTV]] called the Zonse was assembled in Malawi.
|-
| ||Centroamericana de Ensamblaje y Fabricación||(?)||[[w:Honduras|Honduras]]||[[w:El Compadre (car)|Compadre]]||1970s||(?)||A version of GM's [[w:Bedford HA#The BTV|BTV]] called the Compadre was assembled in Honduras.
|-
| ||Champion Motors||[[w:Shah Alam|Shah Alam]], [[w:Selangor|Selangor]]||[[w:Malaysia|Malaysia]]||[[w:Chevrolet Impala|Chevrolet Impala]]<br />[[w:Vauxhall Victor|Vauxhall Victor]]<br />[[w:Vauxhall Viva|Vauxhall Viva]]<br />[[w:Bedford Vehicles|Bedford trucks]] including [[w:Bedford TJ|Bedford TJ]]||1968||1982 (?)||Champion Motors assembled vehicles under license from GM beginning in 1968. Champion Motors was renamed Assembly Services Sdn. Bhd. (ASSB) in 1975. The last products still being built for GM were Bedford trucks. A joint venture of Toyota & [[w:UMW Holdings|UMW Holdings Bhd.]] called Sejati Motor took over ASSB in 1982. Sejati Motor was renamed UMW Toyota Motor in 1987. ASSB is a subsidiary of UMW Toyota Motor.
|-
| ||Chinese Automobile Co., Ltd.||[[w:Xinzhuang District|Xinzhuang District]], [[w:New Taipei City|New Taipei City]]||[[w:Taiwan|Taiwan]]||[[w:Opel Astra|Opel Astra]] F & G<br />[[w:Opel Vectra#Vectra B (1995–2002)|Opel Vectra]] B ||1993||2000||GM ended the assembly contract in 2001.
|-
| ||Fabrica Superior de Centro America S.A.||?||[[w:El Salvador|El Salvador]]||[[w:Bedford HA#The BTV|Cherito]]||1973||1975||A version of GM's [[w:Bedford HA#The BTV|BTV]] called the Cherito was assembled in El Salvador. It was distributed by Auto Palace.
|-
| ||Fernandes Autohandel||?||[[w:Suriname|Suriname]]||[[w:Bedford HA#The BTV|Moetete]]||1973||1975||A version of GM's [[w:Bedford HA#The BTV|BTV]] called the Moetete was assembled in Suriname.
|-
| ||[[w:GAZ|GAZ]]||[[w:Nizhny Novgorod|Nizhny Novgorod]]||[[w:Russia|Russia]]||[[w:Chevrolet Aveo#Second generation (T300; 2012)|Chevrolet Aveo]]||2013||2015||Built under contract by [[w:GAZ|GAZ]] for GM. GM ended the contract in 2015.
|-
| ||Genoto (General Otomotiv Sanayi ve Ticaret AS)||[[w:Kozyatağı|Kozyatağı]], [[w:Istanbul|Istanbul]]||[[w:Turkey|Turkey]]||[[w:Bedford Vehicles|Bedford trucks]] including [[w:Bedford TK|Bedford TK]] (KG EJR & KBC 10 & 570)||1965||1986||Built Bedford trucks under license from GM, sometimes rebadged as Genoto.
|-
|E||[[w:Heuliez|Heuliez]]||[[w:Cerizay|Cerizay]]||[[w:France|France]]||[[w:Opel Tigra#Tigra TwinTop B (2004–2009)|Opel/Vauxhall Tigra TwinTop B]]<br />[[w:Opel Tigra#Tigra TwinTop B (2004–2009)|Holden Tigra (XC)]]||2004||2009||Built under contract by [[w:Heuliez|Heuliez]] for Opel/Vauxhall.
|-
| ||[[w:Hindustan Motors|Hindustan Motors]]||[[w:Uttarpara|Uttarpara]], [[w:West Bengal|West Bengal]]||[[w:India|India]]||[[w:Vauxhall Motors|Vauxhall]] models under Hindustan name including [[w:Hindustan Contessa|Hindustan Contessa]] (based on [[w:Vauxhall Victor|Vauxhall Victor]])<br />[[w:Bedford Vehicles|Bedford]] models including [[w:Bedford TJ|Bedford TJ]]<br />[[w:Allison Transmission|Allison Transmission]]<br />[[w:Terex|Terex]]||1957 (?)||2004||Built under license by [[w:Hindustan Motors|Hindustan Motors]].
|-
| ||INDEVESA, S.A. (Industrias Nicaraguenses De Vehiculos SA)||(?)||[[w:Nicaragua|Nicaragua]]||[[w:Bedford HA#The BTV|Pinolero]]||1974||(?)||The Nicaraguan state-owned company produced a version of GM's BTV called the Pinolero.
|-
| ||Industrias Superior||[[w:Guatemala City|Guatemala City]]||[[w:Guatemala|Guatemala]]||[[w:Bedford HA#The BTV|Chato]]||1977||1970's||A version of GM's [[w:Bedford HA#The BTV|BTV]] called the Chato was assembled in Guatemala. It was distributed by CIDEA.
|-
|3||[[w:Isuzu|Isuzu]] Kawasaki plant||[[w:Kawasaki, Kanagawa|Kawasaki, Kanagawa]]||[[w:Japan|Japan]]||[[w:Chevrolet W-Series|Chevrolet W-Series]] (1984-1998)<br />[[w:GMC W-Series|GMC W-Series]] (1984-1998)<br />[[w:Isuzu N-Series|Isuzu N-Series]] (1987-1994)<br />[[w:Isuzu F-Series|Isuzu F-Series]] (1995-98 FRR, 1989-96 FSR, 1992-96 FTR/FVR)||1938||2005||[[w:Isuzu|Isuzu]] plant. Closed 2005.
|-
|H<br />(WMI: MPA)||[[w:Isuzu Motors (Thailand)|Isuzu Motors Co., (Thailand) Ltd.]] (IMCT)||Samrong Tai, [[w:Phra Pradaeng district|Phra Pradaeng district]], [[w:Samut Prakan province|Samut Prakan province]]||[[w:Thailand|Thailand]]||[[w:Holden Rodeo|Holden Rodeo (RA)]]||2003||2008||Rebadged Isuzu D-Max produced by Isuzu Thailand for GM Holden in Australia and New Zealand. Replaced by the updated and renamed Holden Colorado, which was made by GM Thailand rather than Isuzu Thailand. The model name was changed because after GM sold the last of its shares in Isuzu in 2006, GM Holden lost the right to use the Rodeo name, which was owned by Isuzu, during 2008.
|-
|9||[[w:KUKA|KUKA]]||[[w:Livonia, Michigan|Livonia]], [[w:Michigan|Michigan]]||United States||[[w:BrightDrop Zevo 600|BrightDrop Zevo 600]] (2022)||2021||2022||Produced under contract for GM in a limited run of less than 500 units. A temporary measure until GM's CAMI plant is ready to start building BrightDrop electric vans.
|-
| ||[[w:Lilpop, Rau i Loewenstein|Lilpop, Rau and Loewenstein (LRL)]]||[[w:Warsaw|Warsaw]]||[[w:Poland|Poland]]||[[w:Chevrolet|Chevrolet]] cars, trucks, and buses<br />[[w:Buick|Buick]]<br />[[w:Opel|Opel]]||1937||1939||Was located at Bema Street. Lilpop, Rau and Loewenstein was a GM distributor who also assembled vehicles from CKD kits under license from GM until the German invasion that began World War II interrupted production. The Germans took over the factory during the war and the company was nationalized by the Communist Polish govt. after the war.
|-
|N (Opel Speedster &<br />Vauxhall VX220)<br /><br />H (Lotus models)||[[w:Lotus Cars|Lotus Cars]]||[[w:RAF Hethel|RAF Hethel]], [[w: Hethel|Hethel]], [[w:Norfolk|Norfolk]], [[w:England|England]]||[[w:United Kingdom|United Kingdom]]||
[[w:Opel Speedster|Opel Speedster]]/[[w:Vauxhall VX220|Vauxhall VX220]] (2001-2006) 7,207 units
[[w:Lotus Elise|Lotus Elise]]<br />[[w:Lotus Exige|Lotus Exige]]
||2000||2005||GM owned Lotus from 1986-1993. GM sold Lotus in 1993 to A.C.B.N. Holdings S.A. of Luxembourg, a company controlled by Italian businessman Romano Artioli, who also owned Bugatti Automobili SpA. Artioli sold Lotus to Malaysian automaker [[w:Proton Holdings|Proton]] in 1996. The Opel Speedster & Vauxhall VX220 were built under contract for GM by Lotus after GM had sold Lotus. The Opel Speedster & Vauxhall VX220 were based on the Lotus Elise.
|-
|6||[[w:Magna Steyr|Magna Steyr]]||[[w:Graz|Graz]]||[[w:Austria|Austria]]||[[w:Saab 9-3#Second generation (2003–2014)|Saab 9-3 Convertible]] (2004-2010)||2003||2009||Built under contract by [[w:Magna Steyr|Magna Steyr]] for GM-owned Saab Automobile AB. 9-3 Convertible production was moved to Saab's own plant in Trollhattan, Sweden in January 2010.
|-
| ||[[w:de:McCairns Motors|McCairns Motors Ltd.]]||[[w:Dublin Docklands|Dublin Docklands]], [[w:Dublin|Dublin]] and [[w:Santry|Santry]]||[[w:Republic of Ireland|Republic of Ireland]]||[[w:Vauxhall Cresta|Vauxhall Cresta]]<br />[[w:Vauxhall Victor|Vauxhall Victor]]<br />[[w:Vauxhall Viva|Vauxhall Viva]]<br />[[w:Bedford Vehicles|Bedford trucks]]<br />[[w:Chevrolet Bel Air|Chevrolet Bel Air]]||1935||1975||McCairns Motors was the local assembler and distributor for Vauxhall and Bedford in Ireland. Assembly began at Dublin Port on Alexandra Road in November 1935. In 1951, car assembly moved to a larger plant in Santry. McCairns also assembled and sold other brands like Simca, Alfa Romeo, and Mitsubishi Fuso. Production ended due to Ireland joining the European Economic Community in 1973 and the end of tariffs on imports of completely built-up vehicles. This removed the need for local assembly in Ireland. McCairns Motors used the site in Santry until 1987. The Omni Park shopping center now stands where the assembly plant in Santry used to be.
|-
| ||[[w:Mercury Marine|Mercury Marine]]||[[w:Stillwater, Oklahoma|Stillwater, Oklahoma]]||United States||[[w:Chevrolet small-block engine (first and second generation)#LT5|5.7L LT5 DOHC V8 engine]] (For 1990-1995 C4 Chevrolet Corvette ZR-1)||1989||1993||Engine was built for GM by Mercury Marine at their existing MerCruiser marine engine plant in Stillwater. 21,000 square feet of the 650,000 square foot plant was partitioned from the rest of the plant for assembly of this engine. LT5 engine production actually ended in 1993. Extra engines were built to be sufficient for Corvette ZR-1 production through 1995. The extra engines were sealed and crated for long-term storage and were shipped to the Corvette plant in Bowling Green, Kentucky and stored there until they were needed for installation in a '94 or '95 Corvette ZR-1. <br> Plant was located at 3003 N Perkins Rd. Closed in December 2011. Sold in 2012 to Belgium-based aerospace supplier Asco Industries.
|-
|H||[[w:Navistar|Navistar]] - Springfield Assembly Plant (Main Line)||[[w:Springfield, Ohio|Springfield, Ohio]]||[[w:United States|United States]]||[[w:Chevrolet Silverado#Medium duty version (4500HD, 5500HD, 6500HD, and International CV)|Chevrolet Silverado Medium Duty (2019-2026)<br />International CV]] (2019-2026)||2019||2026||Located at 6125 Urbana Road. Jointly developed by GM & Navistar. Built under contract by [[w:Navistar|Navistar/International Motors]] for GM. Contract with GM ended Sept. 30, 2026. Both the Silverado Medium Duty & the International CV are discontinued. Plant sold to [[w:Roshel|Roshel]].
|-
|N||[[w:Navistar|Navistar]] - Springfield Assembly Plant (Secondary Line)||[[w:Springfield, Ohio|Springfield, Ohio]]||[[w:United States|United States]]||[[w:Chevrolet Express|Chevrolet Express]] cutaway (2017-2026),<br /> [[w:GMC Savana|GMC Savana]] cutaway (2017-2026) ||2017||2026||Located at 6125 Urbana Road. Built under contract by [[w:Navistar|Navistar/International Motors]] for GM. Contract with GM ended Sept. 30, 2026. For 2027, all Express and Savana production is at GM's own Wentzville Assembly Plant. Express/Savana 3500 series cutaway w/177-inch wheelbase and all Express/Savana 4500 series cutaways (159 & 177 inch wheelbases) are discontinued. Plant sold to [[w:Roshel|Roshel]].
|-
| ||Neal and Massy Industries Ltd.||[[w:Morvant|Morvant]]<br /> later moved to <br />[[w:Arima|Arima]]||[[w:Trinidad and Tobago|Trinidad and Tobago]]||[[w:Holden Commodore#First generation (1978–1988)|Holden Commodore]]<br />[[w:Holden Kingswood|Holden Kingswood]]<br />[[w:Statesman (automobile)|Chevrolet Caprice (rebadged Statesman DeVille)]]<br />[[w:Opel Rekord Series C|Opel Rekord]]<br />[[w:Vauxhall Cresta|Vauxhall Cresta]]<br />[[w:Vauxhall Victor|Vauxhall Victor]]<br />[[w:Vauxhall Viva|Vauxhall Viva]]<br />[[w:Bedford Vehicles|Bedford trucks]]||1966||1994 (Production for GM may have ended earlier)||Built under license by Neal and Massy for GM. Neal and Massy also assembled vehicles for Datsun (Nissan) and Mazda. Assembly operation closed in 1994. Neal and Massy (now called Massy Motors) still operates as an importer/distributor for several non-GM automotive brands.
|-
| ||[[w:Nexus Automotive|Nexus Automotive (Pvt.) Ltd.]]||[[w:Port Qasim|Port Qasim]], [[w:Karachi|Karachi]], [[w:Sindh|Sindh province]]||[[w:Pakistan|Pakistan]]||[[w:Chevrolet Spark#Asia|Chevrolet Joy]]||2005||2006||Nexus Automotive was a GM licensed assembler and distributor. Built under contract for [[w:Nexus Automotive|Nexus Automotive]] by [[w:Ghandhara Nissan|Ghandhara Nissan]] at a plant with spare capacity.
|-
|K||[[w:Nissan USA#Manufacturing|Nissan Mexicana]]||[[w:Cuernavaca|Cuernavaca]]||[[w:Mexico|Mexico]]||[[w:Chevrolet City Express|Chevrolet City Express]] (2015-2018)<br />[[w:Nissan NV200|Nissan NV200]] (2013-2021)||2014||2018||Nissan plant.
Chevrolet City Express is a rebadged Nissan NV200 made for GM by Nissan. Chevrolet <br> City Express discontinued after 2018. NV200 discontinued in North America after 2021.
|-
| ||[[w:Nissan Motor Australia|Nissan Motor Australia]] Clayton plant||[[w:Clayton South, Victoria|Clayton South]], [[w:Victoria (state)|Victoria]]||[[w:Australia|Australia]]||[[w:Holden Astra#First generation (LB, LC; 1984–1987)|Holden Astra (LB/LC)]]<br />[[w:Nissan Pulsar#N12 (1982)|Nissan Pulsar (N12)]]<br />[[w:Holden Astra#Second generation (LD; 1987–1989)|Holden Astra (LD)]]<br />[[w:Nissan Pulsar#N13 (1986)|Nissan Pulsar (N13)]]||1984 (GM prod.)||1989 (GM prod.)|| Production for GM Holden at Nissan's Australian plant was done as part of the Australian government's [[w:Button car plan|Button car plan]] for rationalization of local automotive production. The relationship ended in 1989 and GM Holden established a joint venture with Toyota called [[w:United Australian Automobile Industries|United Australian Automobile Industries]] to replace the Nissan relationship. The Nissan Pulsar-based Holden Astra was replaced by the Toyota Corolla-based Holden Nova. Nissan closed its Australian vehicle assembly plant in 1992. The Clayton plant was later taken over by HSV and the Walkinshaw Group.
|-
|Y||[[w:Nissan Motor Ibérica|Nissan Motor Ibérica]]||[[w:Barcelona|Barcelona]]||[[w:Spain|Spain]]||[[w:Opel Vivaro A|Opel/Vauxhall Vivaro A]] (high roof versions only)<br />[[w:Renault Trafic#Second generation (X83; 2001)|Renault Trafic]] (high roof versions only)<br />[[w:Renault Trafic#Second generation (X83; 2001)|Nissan Primastar]] (high roof versions only)||2001||2015||This is a Nissan plant that built high roof versions of Renault-designed midsize vans for Opel/Vauxhall as part of a supply deal between GM Europe & Renault as well as for Renault and Nissan. The low roof versions were made by Vauxhall at the IBC Vehicles/GMM Luton plant however that UK plant could not fit the high roof versions so they were built by Nissan in Spain. Van production in Barcelona ended in 2015 and high roof Opel/Vauxhall Vivaro production was moved to Renault's plant in Sandouville, France, which also handled all Renault Trafic and Nissan NV300 (Primastar replacement) production. Nissan closed this plant in Dec. 2021.
|-
| ||[[w:de:O’Shea’s Limited (Opel)|O’Shea’s Limited]]||[[w:Cork (city)|Cork]], [[w:Munster|Munster]]||[[w:Republic of Ireland|Republic of Ireland]]||[[w:Opel|Opel]] cars including [[w:Opel Rekord|Rekord]]||1937||1965|| Before 1962, O’Shea’s was the sole Opel assembler and distributor in Ireland. From 1962-1965, assembly and distribution of Opels in Ireland was split between Reg Armstrong Motors and O’Shea’s Limited. After 1965, Reg Armstrong Motors was the sole Opel assembler and distributor in Ireland.
|-
| ||PT. Pantja Motor||[[w:Sunter, Jakarta|Sunter]], [[w:North Jakarta|North Jakarta]], [[w:Jakarta|Jakarta]]||[[w:Indonesia|Indonesia]]||[[w:Chevrolet Tavera|Chevrolet Tavera]]||2001||2005||Isuzu's Indonesian assembler, now known as [[w:Isuzu Astra Motor Indonesia|Isuzu Astra Motor Indonesia]]. Built the Isuzu Panther-based Tavera for GM Indonesia.
|-
| ||[[w:Pininfarina|Pininfarina]]||[[w:Grugliasco|Grugliasco]]||[[w:Italy|Italy]]||[[w:Cadillac Eldorado#1959–60 Eldorado Brougham|Cadillac Eldorado Brougham (Series 6900)]] (1959-1960) painted bodies||1959||1960||Bodies were built by [[w:Pininfarina|Pininfarina]] and mated with chassis shipped to Italy by Cadillac and then shipped back to the US.
|-
| ||[[w:Pininfarina|Pininfarina]]||[[w:San Giorgio Canavese|San Giorgio Canavese]]||[[w:Italy|Italy]]||[[w:Cadillac Allanté|Cadillac Allanté]] (1987-1993) painted bodies||1986||1993||Bodies were designed and manufactured under contract by [[w:Pininfarina|Pininfarina]] for Cadillac. Plant was built specially for the Allanté. Bodies were then flown from Turin, Italy to Detroit on specially equipped Boeing 747s and then trucked to GM's Detroit/Hamtramck Assembly Plant for final assembly. The assembly process was known as the "Allanté Air Bridge". It was also referred to as "the world's longest assembly line."
|-
| ||[[w:Pragoti|Pragoti Industries Ltd.]]||[[w:Sitakunda|Sitakunda]], [[w:Chittagong Division|Chittagong Division]]||[[w:Bangladesh|Bangladesh]]||[[w:Vauxhall Viva|Vauxhall Viva]]<br />[[w:Bedford Vehicles|Bedford trucks and buses]]<br />[[w:Bedford HA#The BTV|BTV]]||1966||1970's||Began as part of [[w:Ghandhara Industries|Ghandhara Industries]] Ltd. in 1966 when Bangladesh was still [[w:East Pakistan|East Pakistan]] and assembled GM vehicles like the Ghandhara plant in Karachi did. After Bangladesh became independent in 1971, the operation was nationalized by the new government and became Pragoti Industries Ltd.
|-
| ||[[w:de:Reg. Armstrong Motors|Reg Armstrong Motors Ltd.]]||[[w:Ringsend|Ringsend]], [[w:Dublin|Dublin]]||[[w:Republic of Ireland|Republic of Ireland]]||[[w:Opel|Opel]] cars including [[w:Opel Kadett|Kadett]], [[w:Opel Rekord|Rekord]], and [[w:Opel Commodore|Commodore]]||1962||1974||From 1962-1965, assembly and distribution of Opels in Ireland was split between Reg Armstrong Motors and O’Shea’s Limited. After 1965, Reg Armstrong Motors was the sole Opel assembler and distributor in Ireland. Reg Armstrong Motors also assembled the [[w:NSU Prinz|NSU Prinz]], [[w:Honda motorcycles|Honda motorcycles]], and from 1976-1978, the original [[w:Mini|Mini]] at the Ringsend plant. Production ended due to Ireland joining the European Economic Community in 1973 and the end of tariffs on imports of completely built-up vehicles. This removed the need for local assembly in Ireland.
|-
|B (GM)||[[w:Société de Véhicules Automobiles de Batilly|Renault Batilly]]||[[w:Batilly, Meurthe-et-Moselle|Batilly]]||[[w:France|France]]||[[w:Renault Trafic#First generation (1980)|Opel/Vauxhall Arena]]<br />[[w:Renault Trafic#First generation (1980)|Renault Trafic]]<br />[[w:Renault Master#Second generation (1997)|Opel/Vauxhall Movano A]]<br />[[w:Renault Master#Third generation (2010)|Opel/Vauxhall Movano B]]<br />[[w:Renault Master|Renault Master]]<br />[[w:Renault Master#Renault Mascott|Renault Trucks Mascott]]<br />[[w:Nissan Interstar|Nissan Interstar]]<br />[[w:Nissan NV400|Nissan NV400]]||1997||2017||Renault-[[w:Société de Véhicules Automobiles de Batilly|SOVAB]] plant. Opel/Vauxhall was sold to [[w:PSA Group|PSA Group]] in 2017. As part of PSA Group, Opel/Vauxhall became part of [[w:Stellantis|Stellantis]] in 2021. Movano switched to being PSA/Fiat-based instead of Renault-based in 2021.
|-
|S (GM)||[[w:Sandouville Renault Factory|Renault Sandouville]]||[[w:Sandouville|Sandouville]]||[[w:France|France]]||[[w:Renault Trafic#Third generation (X82; 2014)|Opel/Vauxhall Vivaro]] B (high roof versions only) <br />[[w:Renault Trafic#Third generation (X82; 2014)|Renault Trafic]]<br />[[w:Nissan NV300|Nissan NV300]]<br />[[w:Renault Trafic#Third generation (X82; 2014)|Nissan Primastar]]<br />[[w:Renault Trafic#Third generation (X82; 2014)|Fiat Talento]]||2014||2017||Renault plant. Opel/Vauxhall was sold to [[w:PSA Group|PSA Group]] in 2017. Vivaro switched to being PSA-based instead of Renault-based in 2018. As part of PSA Group, Opel/Vauxhall became part of [[w:Stellantis|Stellantis]] in 2021.
|-
| ||[[w:Renault Argentina|Renault Santa Isabel]]||[[w:Santa Isabel, Córdoba|Santa Isabel]], [[w:Córdoba Province, Argentina|Cordoba]]||[[w:Argentina|Argentina]]||[[w:Chevrolet D-20|Chevrolet C-20 & D-20]]<br />[[w:Chevrolet Tahoe#First generation (1992)|Chevrolet Grand Blazer]] (GMT400)<br />[[w:Chevrolet C/K#1997–2001|Chevrolet Silverado]] (GMT400)<br />[[w:Renault Trafic#South America|Chevrolet Trafic/SpaceVan]] ||1991||2002||[[w:Renault Argentina|Renault Argentina]]-CIADEA plant. Built Chevrolets under license for GM.
|-
| ||[[w:Sevel Argentina|Sevel Argentina]]||[[w:Córdoba, Argentina|Estación Ferreyra, Córdoba]], [[w:Córdoba Province, Argentina|Cordoba]]||[[w:Argentina|Argentina]]||[[w:Chevrolet D-20|Chevrolet C-20/D-20]]||1985||1991||Fiat - PSA jointly owned plant. Built Chevrolets under license for GM.
|-
|For Saab<br> 9-2X:<br> G (w/man. trans.),<br> H (w/auto. trans.)||[[w:Subaru#Manufacturing facilities|Subaru Main Plant]]||[[w:Ōta, Gunma|Ōta, Gunma]]||[[w:Japan|Japan]]||[[w:Saab 9-2X|Saab 9-2X]] (2005-2006)<br />[[w:Subaru Forester#Second generation (SG; 2002)|Chevrolet Forester (India)]] (2003-2007)||2003 (GM prod.)||2007 (GM prod.)||[[w:Subaru|Subaru]] plant
|-
|4||[[w:Subaru-Isuzu Automotive|Subaru-Isuzu Automotive]] (S.I.A.)||[[w:Lafayette, Indiana|Lafayette, Indiana]]||United States||[[w:Holden Frontera#Second generation (1998)|Holden Frontera]] (UE/MX)||1999 (GM prod.)||2003 (GM prod.)||Subaru & Isuzu joint venture plant. Isuzu built a rebadged, rhd version of the 2nd generation US market Isuzu Rodeo & Amigo SUVs for export to GM Holden in Australia and New Zealand.
|-
|W (GM),<br />4 (Suzuki)||Suzuki Iwata Assembly||[[w:Iwata, Shizuoka|Iwata, Shizuoka]]||[[w:Japan|Japan]]||[[w:Chevrolet Tracker (Americas)#First generation|Geo Tracker]] (US: 1989-1990)<br />[[w:Suzuki Sidekick|Suzuki Sidekick]] (US: 1989-1995, 1997-98)<br />[[w:Suzuki Sidekick|Suzuki Sidekick Sport]] (US: 1996-1998)<br />[[w:Suzuki Grand Vitara|Suzuki Grand Vitara]] (1999-2013)<br />[[w:Suzuki XL-7#First generation (XL-7; 1998)|Suzuki XL-7]] (2001-2006)<br />[[w:Holden Drover#Second generation (1981)|Holden Drover (QB)]]<br />[[w:Holden Scurry#Eighth generation (DA71/DB71/DA81/DA41/DB41/DA51/DB51; 1985)|Holden Scurry (NB)]]||1985 (GM prod.)||1990 (GM prod.)||[[w:Suzuki|Suzuki]] plant
|-
|K (GM),<br />5 (Suzuki)||Suzuki Kosai Assembly||[[w:Kosai, Shizuoka|Kosai, Shizuoka]]||[[w:Japan|Japan]]||[[w:Chevrolet Sprint|Chevrolet Sprint]] (US: 1985-1988)<br />[[w:Geo Metro|Geo Metro]] (US: 1989-1993)<br />[[w:Pontiac Firefly|Pontiac Firefly]] (Canada)<br />[[w:Holden Barina#First generation (MB, ML; 1985–1988)|Holden Barina (MB/ML)]]<br />[[w:Holden Barina#Second generation (MF, MH; 1989–1994|Holden Barina (MF/MH)]]<br />[[w:Suzuki Cultus|Suzuki Swift]] (US: 1989-1994)<br />[[w:Suzuki Ignis#Chevrolet Cruze|Chevrolet/Holden Cruze (YGM1)]] (YG) ||1984 (GM prod.)||2008 (GM prod.)||[[w:Suzuki|Suzuki]] plant
|-
|M (GM),<br />0 (Suzuki/Fiat/Subaru)||[[w:Magyar Suzuki Corporation|Magyar Suzuki Corporation]]||[[w:Esztergom|Esztergom]]||[[w:Hungary|Hungary]]||[[w:Opel Agila#Second generation (H08; 2007)|Opel/Vauxhall Agila B]]<br />[[w:Suzuki Splash|Suzuki Splash]]<br />[[w:Suzuki Swift|Suzuki Swift]]<br />[[w:Suzuki Cultus#Second generation (1988)|Subaru Justy]]<br />[[w:Suzuki SX4|Suzuki SX4]]<br />[[w:Fiat Sedici|Fiat Sedici]]<br />[[w:Suzuki Ignis#Suzuki Ignis (2003 facelift)|Suzuki Ignis]]<br />[[w:Suzuki Ignis#Suzuki Ignis (2003 facelift)|Subaru G3X Justy]]||1992<br /><br />2007 (GM prod.)||2014 (GM prod.)||[[w:Suzuki|Suzuki]] plant
|-
| ||Suzuki Sagara Assembly & Engine||[[w:Makinohara|Makinohara]], [[w:Shizuoka Prefecture|Shizuoka Prefecture]]||[[w:Japan|Japan]]||[[w:Chevrolet MW|Chevrolet MW]] (sold in Japan)<br />||2000||2010||[[w:Suzuki|Suzuki]] plant.<br /> Also built the 3.6-liter GM High Feature V6 engine ([[w:GM High Feature engine#LY7|Suzuki N36A]]) to power the [[w:Suzuki XL-7#Second generation (XL7; 2006)|2nd generation Suzuki XL7]] under license from GM. (Note: Dates reflect beginning & end dates of production for GM.)
|-
| ||Tecna SA||[[w:Arica, Chile|Arica]]||[[w:Chile|Chile]]||[[w:Acadian (automobile)|Acadian]] (1962-71 from CKD kits supplied by GM Oshawa and Willow Run)<br />[[w:Beaumont (automobile)|Acadian Beaumont]] (1964-71 from CKD kits supplied by GM Oshawa)<br />[[w:Vauxhall Victor|Vauxhall Victor]]||1962||1971||
|-
| ||Tecno S.A.||[[w:Uruca|La Uruca]], [[w:San José, Costa Rica|San José]]||[[w:Costa Rica|Costa Rica]]||[[w:Bedford HA#The BTV|GM Amigo]]||1970s||(?)||A version of GM's [[w:Bedford HA#The BTV|BTV]] called the Amigo was assembled in Costa Rica.
|-
| ||Tecnomotor S.A.||(?)||[[w:Paraguay|Paraguay]]||[[w:Bedford HA#The BTV|GM Mitai]]||1970s||(?)||A version of GM's [[w:Bedford HA#The BTV|BTV]] called the Mitai was assembled in Paraguay.
|-
|9 (GM),<br />6 (Fiat & Ram)||[[w:Tofaş|Tofaş]]||[[w:Bursa|Bursa]]||[[w:Turkey|Turkey]]||[[w:Opel Combo#Combo D (2012-2018)|Opel/Vauxhall Combo D]]<br />[[w:Fiat Doblo|Fiat Doblo]]<br />[[w:Ram ProMaster City|Ram ProMaster City]]||2011||2017||[[w:Fiat|Fiat]] plant (joint venture with Koç Holding of Turkey). Opel/Vauxhall was sold to PSA Group in 2017. Combo switched to being PSA-based instead of Fiat-based in 2019. As part of PSA Group, Opel/Vauxhall became part of Stellantis in 2021. Fiat and Tofaş also became part of Stellantis in 2021.
|-
| ||[[w:Toyota Australia|Toyota Australia]] [[w:Toyota Australia Altona Plant|Altona plant]]||[[w:Altona North|Altona North]], [[w:Victoria (state)|Victoria]]||[[w:Australia|Australia]]||[[w:Holden Nova#Second generation (LG; 1994–1996)|Holden Nova (LG)]]<br />[[w:Toyota Corolla (E100)|Toyota Corolla (E100)]]<br />[[w:Holden Apollo|Holden Apollo (JM/JP)]]<br />[[w:Toyota Camry (XV10)|Toyota Camry (XV10)]]||1994||1996 (GM prod.)|| Production for GM Holden at Toyota's Australian plant was done as part of [[w:United Australian Automobile Industries|United Australian Automobile Industries]], a model sharing joint venture in Australia between Holden and Toyota from 1987-1996. This was created as part of the Australian government's [[w:Button car plan|Button car plan]] for rationalization of local automotive production. Toyota consolidated its Australian production at the new Altona plant in 1994-1995. The joint venture dissolved in 1996 and Holden's rebadged Toyotas were replaced with rebadged Opel models (Astra and Vectra) from GM Europe. Corolla production in Australia ended in 1999. Toyota closed the Altona plant in 2017.
|-
| ||[[w:Toyota Australia|Toyota Australia]] Port Melbourne plant||[[w:Port Melbourne|Port Melbourne]], [[w:Victoria (state)|Victoria]]||[[w:Australia|Australia]]||[[w:Holden Apollo|Holden Apollo (JK/JL)]]<br />[[w:Toyota Camry#V20 (1986–1992)|Toyota Camry (V20)]]<br />[[w:Holden Apollo|Holden Apollo (JM)]]<br />[[w:Toyota Camry (XV10)|Toyota Camry (XV10)]]||1989 (GM prod.)||1994 (GM prod.)|| Production for GM Holden at Toyota's Australian plant was done as part of [[w:United Australian Automobile Industries|United Australian Automobile Industries]], a model sharing joint venture in Australia between Holden and Toyota from 1987-1996. This was created as part of the Australian government's [[w:Button car plan|Button car plan]] for rationalization of local automotive production. Toyota consolidated its Australian production at the new Altona plant in 1994-1995 and production ended at the older Port Melbourne plant in late 1994. The joint venture would later dissolve in 1996 and Holden's rebadged Toyota Camry was replaced with a rebadged Opel Vectra from GM Europe.
|-
| ||PT. Udatin (Usaha Dagang Teknik Indonesia)||[[w:Surabaya|Surabaya]], [[w:East Java|East Java]]||[[w:Indonesia|Indonesia]]||[[w:Holden FC|Holden FC]]<br />[[w:Holden FB|Holden FB]]<br />[[w:Holden EK|Holden EK]]<br />[[w:Holden EJ|Holden EJ]]<br />[[w:Holden EH|Holden EH]]<br />[[w:Holden HQ|Holden HQ]]<br />[[w:Holden HJ|Holden HJ]]<br />[[w:Holden HX|Holden HX]]<br />[[w:Holden HZ|Holden HZ]]<br />[[w:Statesman (automobile)|Statesman brand HQ-HZ]]<br />[[w:Holden Monaro|Holden Monaro]] HQ<br />[[w:Holden Torana|Holden Torana]] LJ, LH, LX<br /> [[w:Holden Gemini#First generation|Holden Gemini TX, TC, TD, TE, TF, TG]]<br />[[w:Holden Camira|Holden Camira]] JB<br />[[w:Isuzu Aska#South-East Asia and New Zealand|Holden Aska]]<br />[[w:Holden Gemini#Second generation|Holden Gemini (RB)]]<br />[[w:Holden Commodore (VB)|Holden Commodore (VB)]]<br />[[w:Holden Commodore (VC)|Holden Commodore (VC)]]<br />[[w:Holden Commodore (VH)|Holden Commodore (VH)]]<br />[[w:Holden Commodore (VK)|Holden Commodore (VK)]]<br />[[w:Holden Commodore (VL)|Holden Calais (VL)]]<br />[[w:Isuzu Faster#Second generation (1980–1988)|Holden Lincah/Raider]]<br />[[w:GMC (automobile)|GMC trucks]]||1959||1988||Built vehicles under contract for GM. During the 1960's, production was off and on due to Indonesian government policies and the economic situation. Production ended in 1988.
|-
| ||Unison||[[w:Minsk|Minsk]]||[[w:Belarus|Belarus]]||[[w:Chevrolet Tahoe#Fourth generation (2015)|Chevrolet Tahoe]] K2XX, [[w:Chevrolet Trax|Chevrolet Tracker]], [[w:Cadillac Escalade#Fourth generation (2015)|Cadillac Escalade]] K2XX, [[w:Opel Mokka#First generation (J13; 2012)|Opel Mokka]]||2015||2018||Built under contract by Unison for GM. Production ended in 2018.
|-
|6,7 (Saab)<br />9 (Opel/Vauxhall)||[[w:Valmet Automotive|Valmet Automotive]]||[[w:Uusikaupunki|Uusikaupunki]]||[[w:Finland|Finland]]||[[w:Saab 9-3#First generation (1998–2003)|Saab 9-3 Convertible & 9-3 Viggen]]<br />[[w:Saab 900|Saab 900]] (including 900 Convertible)<br />[[w:Opel Calibra|Opel/Vauxhall Calibra]]||1969||2003||Built under contract by [[w:Valmet Automotive|Valmet Automotive]] for Saab & for Opel/Vauxhall. Saab-Valmet was established in 1968 as a joint venture between Valmet and Saab-Scania. In 1992, Valmet became the sole owner, and the company was renamed Valmet Automotive in 1995.
|-
|X||[[w:ZAZ|ZAZ]]||[[w:Zaporizhia|Zaporizhia]] & [[w:Illichivsk|Illichivsk]]||[[w:Ukraine|Ukraine]]||[[w:Chevrolet Aveo (T200)|Chevrolet Aveo]], [[w:Chevrolet Lacetti|Chevrolet Lacetti]], [[w:Chevrolet Lanos|Chevrolet Lanos]], [[w:Opel Astra#G|Opel Astra Classic]], [[w:Opel Astra#H|Opel Astra]], [[w:Opel Corsa|Opel Corsa]], [[w:Opel Combo|Opel Combo]], [[w:Opel Meriva|Opel Meriva]], [[w:Opel Vectra|Opel Vectra]], [[w:Opel Zafira|Opel Zafira]]||2003||2012||Built under contract by [[w:ZAZ|ZAZ]] for GM.
|-
|}
swxqgc6wql5080yl52vfbcr4m2z7vsi
4676284
4676283
2026-10-15T17:34:07Z
JustTheFacts33
3434282
/* Former factories */
4676284
wikitext
text/x-wiki
This is a '''history of [[w:General Motors|General Motors]] factories''' that are being or have been used to produce cars, vans, SUVs, trucks, buses, and automobile components.<ref name=GMfacilities>[https://web.archive.org/web/20080614231130/http://www.gm.com/corporate/responsibility/environment/plants/index.jsp GM facilities map]. Retrieved on July 8, 2009.</ref> The factories are sometimes idled for re-tooling.
Originally, GM's different divisions each had their own serial number formats and plant codes. Chevrolet cars, Pontiac, Oldsmobile, and Buick unified their serial number formats and plant codes in 1965. Cadillac adopted the same unified format in 1971. Chevrolet trucks and GMC trucks unified their serial number formats in 1972. Chevrolet trucks and GMC trucks were already using the same plant codes from 1964 and those were unified with the car divisions (other than Cadillac) in 1965. Cadillac did not use plant codes before 1971 as all Cadillacs were made at Cadillac's home plant in Detroit until 1971. In 1971, Cadillacs began to be made in more than one plant so they started using plant codes, using the same codes that the other GM car divisions were using since 1965. GM Canada used the same format as GM USA from 1967.
For US-built models:
For '''Chevrolet cars including El Camino''': Plant code was the 1st or 1st 2 digits of the serial number from 1928-1952. Plant code was the 4th position of the serial number from 1953-1957 6-cylinder models. Plant code was the 5th position of the serial number from 1955-1957 V8 models. Plant code was the 4th position of the serial number from 1958-1959. Plant code was the 6th position of the serial number from 1960-1964. Plant code was the letter or number in the 7th position of the serial number from 1965-1980.
For '''Chevrolet trucks''': Plant code was the 1st or 1st 2 digits of the serial number from 1947-1952. Plant code was the 4th position of the serial number from 1953-1954 & for the 1955 1st Series models. Plant code was the 5th position of the serial number for 1955 2nd Series models and 1956-1959 models with 6-cylinder engines. Plant code was the 6th position of the serial number for 1955 2nd Series models and 1956-1959 models with V8 engines. Plant code was the 6th position of the serial number from 1960-1971. Plant code was the letter or number in the 7th position of the serial number from 1972-1980 (including Chevy LUV).
For '''Pontiac''': Plant code was the 1st letter in the serial number from 1936-1938 for plants other than Pontiac, MI (Pontiac, MI omitted the 1st letter so the 1st position was a number rather than a letter for Pontiac, MI as Pontiac, MI didn't use a specific plant code). Plant code was the 1st position of the serial number from 1939-1958. Plant code was the 4th position of the serial number from 1959-1964. Plant code was the letter or number in the 7th position of the serial number from 1965-1980.
For '''Oldsmobile''': Plant code was the 1st of 2 letters in the serial number from 1937-1940 for plants other than Lansing (Lansing omitted the 1st letter so there was only 1 letter before the numbers rather than 2 letters for Linden & Southgate as Lansing didn't have a specific plant code). Plant code was the letter in the 3rd position of the serial number from 1941-1948 for plants other than Lansing (Lansing omitted the letter and didn't have a specific plant code). Plant code was the 4th position of the serial number from 1949-1964. Plant code was the letter or number in the 7th position of the serial number from 1965-1980.
For '''Buick''': Plant code was the number in the 1st position of the serial number from 1938-1953. Plant code was the number in the 3rd position of the serial number from 1954-1964. Plant code was the letter or number in the 7th position of the serial number from 1965-1980 (including '76-'79 Buick Opel by Isuzu).
For '''Cadillac''': Plant code was the letter or number in the 7th position of the serial number from 1971-1980. (Cadillac did not use plant codes before 1971 as all Cadillacs were made at Cadillac's home plant in Detroit until 1971.)
For '''GMC Sprint & Caballero''': Plant code was the letter or number in the 7th position of the serial number from 1971-1980.
For '''GMC trucks''': Plant code was the 6th position of the serial number from 1952-1954 & for 1955 1st Series models with manual transmission. Plant code was the 7th position of the serial number from 1952-1954 & for 1955 1st Series models with automatic transmission. Plant code was the 4th position of the serial number for 1955 2nd Series models and 1956-1959 models with 6-cylinder engines. Plant code was the 5th position of the serial number for 1955 2nd Series models and 1956-1959 models with V8 engines. Plant code was the 5th position of the serial number for 1960-1966 models with 2wd and V6 or V8 engines. Plant code was the 6th position of the serial number for 1960-1966 models with inline-6 engines or with 4wd. Plant code was the 7th position of the serial number from 1967-1971 (most models had a dash in the 6th position except for some models that had a special designation indicated in the 6th position). Plant code was the letter or number in the 7th position of the serial number from 1972-1980.
All models from 1981 on have the plant code in the 11th position as per standardized VIN regulations.
The above applies to Canadian-built models from 1967 on.
==Current factories==
{| class="wikitable sortable" style="font-size:90%"
!VIN !! Name !! City/State !! Country !! class="unsortable" | Products !! Opened !! Idled !! class="unsortable" | Comments
|-
|R (1963-1964 [[w:Chevrolet|Chevrolet]] and 1965-present)<br /><br />T (Pre-1965 [[w:Oldsmobile|Oldsmobile]] and Pre-1960 [[w:Pontiac (automobile)|Pontiac]])<br /><br />A (1960-1964 [[w:Pontiac (automobile)|Pontiac]])<br /><br />8 (Pre-1964 [[w:Buick|Buick]])||[[w:Arlington Assembly|Arlington Assembly]]||[[w:Arlington, Texas|Arlington, Texas]]||[[w:United States|United States]]||[[w:GMT T1XX|T1XX]] SUVs (2021-):<br />
[[w:Chevrolet Tahoe#Fifth generation (2021)|Chevrolet Tahoe]]<br />[[w:Chevrolet Suburban#Twelfth generation (2021)|Chevrolet Suburban]]<br />[[w:Chevrolet Tahoe#Yukon|GMC Yukon]]<br />[[w:Chevrolet Suburban#Yukon XL|GMC Yukon XL]]<br />[[w:Cadillac Escalade#Fifth generation (2021)|Cadillac Escalade]]<br />[[w:Cadillac Escalade#Fifth generation (2021)|Cadillac Escalade ESV]]
||1954|| ||Located at 2525 E Abram St.<br />Was originally part of the [[w:Buick-Oldsmobile-Pontiac Assembly Division|Buick-Oldsmobile-Pontiac Assembly Division]]. Production began on January 6, 1954. The first vehicle produced was a 1954 Pontiac Chieftain 4-door. Arlington began making Chevrolet passenger cars for 1963. BOP Assembly Division became GM Assembly Division in 1965. Arlington began making midsize cars for 1968 but focused exclusively on midsize cars from 1971-1987. Arlington resumed making full-size cars for 1988 for the first time since 1970. Arlington focused exclusively on rwd, full-size cars from 1988-1996. When Willow Run Assembly closed in 1993, Arlington became GM's only factory still building traditional body-on-frame, rwd, full-size cars. Passenger car production ended in 1996. It's interesting to note that Arlington has never built any fwd vehicles or any unibody vehicles. Arlington was then converted to build full-size SUVs. SUV production began for 1998. Full-size pickups were also built for 1998-2000. Arlington Assembly has produced models for all of GM's primary American brands: Chevrolet, Pontiac, Oldsmobile, Buick, Cadillac, and GMC. Arlington Assembly has produced over 13 million vehicles. A new 129,250-square-foot body shop on the plant's west side was announced in 2011 as part of retooling for the K2XX generation SUVs launched in 2014. A new stamping plant was announced in 2012 and opened in 2013 at Arlington Assembly, replacing stampings previously sourced from GM stamping plants elsewhere in the US.<br /> A $1.4 billion plant upgrade was completed to build the <br /> T1XX generation SUVs beginning in 2020. It included a new <br /> 1 million sq. ft. body shop & a 600,000-sq. ft. extension to the paint shop. The general assembly area was also upgraded. <br /> Past models:<br /> [[w:GM A platform (RWD)|GM A platform (RWD)]] (intermediate): [[w:Chevrolet Chevelle|Chevrolet Chevelle]] (1970-1977), [[w:Chevrolet El Camino|Chevrolet El Camino]] (1974-1981), [[w:Chevrolet Malibu|Chevrolet Malibu]] (1978-1981), [[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1970-1981), [[w:GMC Sprint|GMC Sprint]] (1974-1977), [[w:GMC Caballero|GMC Caballero]] (1978-1981), [[w:Oldsmobile Cutlass|Oldsmobile Cutlass]] (1971-1981), [[w:Oldsmobile Cutlass Supreme|Oldsmobile Cutlass Supreme]] (1971-1981), [[w:Oldsmobile 442|Oldsmobile 442]] (1971-1977), [[w:Pontiac GTO|Pontiac GTO]] (1968-1970), [[w:Pontiac LeMans|Pontiac LeMans]] (1968-1970), [[w:Pontiac Tempest|Pontiac Tempest]] (1968-1970)<br /> [[w:General Motors G platform (1969)|GM G platform (RWD) 1982-1988]]: [[w:Buick Regal|Buick Regal]] (1982-1983), [[w:Chevrolet El Camino|Chevrolet El Camino]] (1982-1984), [[w:Chevrolet Malibu|Chevrolet Malibu]] (1982-1983), [[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1982-1987), [[w:GMC Caballero|GMC Caballero]] (1982-1984), [[w:Oldsmobile Cutlass Supreme|Oldsmobile Cutlass Supreme]] (1982-1987), [[w:Oldsmobile 442|Oldsmobile 442]] (1985).<br /> [[w:General Motors A platform (1925)|GM full-size A platform]]: [[w:Pontiac Chieftain|Pontiac Chieftain]] (1954-1957), [[w:Pontiac Star Chief|Pontiac Star Chief]] (1954-1957)<br /> [[w:GM B platform|GM B platform]]: [[w:Buick Century#Second generation (1954–1958)|Buick Century]] (1954-1958), [[w:Buick Invicta|Buick Invicta]] (1959-1963), [[w:Buick LeSabre|Buick LeSabre]] (1959-1960), [[w:Buick Roadmaster#1991–1996|Buick Roadmaster sedan]] (1992-1996), [[w:Buick Estate#1991–1996|Buick Roadmaster Estate wagon]] (1994-1996), [[w:Buick Special#1949–1958|Buick Special]] (1954-1958), [[w:Buick Wildcat|Buick Wildcat]] (1963), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1963-1970), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1963-1970), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-1970, 1988-1996), [[w:Chevrolet Impala|Chevrolet Impala]] (1963-1970), [[w:Chevrolet Impala#Seventh generation (Impala SS, 1994–1996)|Chevrolet Impala SS]] (1994-1996), [[w:Oldsmobile 88|Oldsmobile 88]] (1955-1964), [[w:Oldsmobile Custom Cruiser#Second generation (1977–1990)|Oldsmobile Custom Cruiser]] (1988-1990), [[w:Oldsmobile Starfire#First generation (1961–1966)|Oldsmobile Starfire]] (1961-1966), [[w:Pontiac 2+2|Pontiac 2+2]] (1964-1967), [[w:Pontiac Bonneville|Pontiac Bonneville]] (1959-1968), [[w:Pontiac Catalina|Pontiac Catalina]] (1959-1970), [[w:Pontiac Grand Prix|Pontiac Grand Prix]] (1962-65, 1967-68), [[w:Pontiac Star Chief|Pontiac Star Chief]] (1963, 1966), [[w:Pontiac Ventura#1960–1970|Pontiac Ventura]] (1960-1961).<br />[[w:General Motors C platform (RWD)|GM C platform (RWD)]]: [[w:Buick Electra|Buick Electra]] (1959-1963), [[w:Buick Limited#1958 Limited|Buick Limited]] (1958), [[w:Buick Roadmaster|Buick Roadmaster]] (1955-1958), [[w:Buick Super|Buick Super]] (1955-1958), [[w:Oldsmobile 98|Oldsmobile 98]] (1954-1964) <br /> [[w:GM D platform|GM D platform]]: [[w:Cadillac Brougham|Cadillac Brougham]] (1988-1992), [[w:Cadillac Fleetwood#Rear-wheel drive 1993–1996|Cadillac Fleetwood]] (1993-1996) <br />[[w:GMT400|GMT400]] pickups: [[w:Chevrolet C/K (fourth generation)|Chevrolet C/K]] (1998-2000), [[w:Chevrolet C/K (fourth generation)|GMC Sierra]] (1998-2000).<br /> [[w:GMT400|GMT400]] SUVs: [[w:Chevrolet Tahoe#First generation (1992)|Chevrolet Tahoe]] (1998-1999), [[w:Chevrolet Tahoe#Tahoe Limited and Tahoe Z71|Chevrolet Tahoe Limited and Z71]] (2000), [[w:Chevrolet Tahoe#First generation (1992)|GMC Yukon]] (1998-1999), [[w:Chevrolet Tahoe#GMC Yukon Denali|GMC Yukon Denali]] (1999-2000), [[w:Cadillac Escalade#First generation (1999)|Cadillac Escalade]] (1999-2000)<br /> [[w:GMT800|GMT800]] SUVs: [[w:Chevrolet Tahoe#Second generation (2000)|Chevrolet Tahoe]] (2001-2006), [[w:Chevrolet Tahoe#Second generation (2000)|GMC Yukon]] (2001-2006), [[w:Cadillac Escalade#Second generation (2002)|Cadillac Escalade]] (2002-2006), [[w:Chevrolet Suburban#Ninth generation (2000)|Chevrolet Suburban]] (2001-2005), [[w:Chevrolet Suburban#Ninth generation (2000)|GMC Yukon XL]] (2001-2005).<br /> [[w:GMT900|GMT900]] SUVs: [[w:Chevrolet Tahoe#Third generation (2007)|Chevrolet Tahoe]] (2007-2014), [[w:Chevrolet Tahoe#Third generation (2007)|GMC Yukon]] (2007-2014), [[w:Chevrolet Tahoe#Third generation (2007)|GMC Yukon Denali]] (2009-2014), [[w:Cadillac Escalade#Third generation (2007)|Cadillac Escalade]] (2007-2014), [[w:Chevrolet Suburban#Tenth generation (2007)|Chevrolet Suburban]] (2007-2014), [[w:Chevrolet Suburban#Tenth generation (2007)|GMC Yukon XL]] (2007-2014), [[w:Chevrolet Suburban#Tenth generation (2007)|GMC Yukon XL Denali]] (2009-2014), [[w:Cadillac Escalade#Third generation (2007)|Cadillac Escalade ESV]] (2007-2014)<br /> [[w:GMT K2XX|K2XX]] SUVs (2015-2020): [[w:Chevrolet Tahoe#Fourth generation (2015)|Chevrolet Tahoe]], [[w:Chevrolet Tahoe#Fourth generation (2015)|GMC Yukon]], [[w:Cadillac Escalade#Fourth generation (2015)|Cadillac Escalade]], [[w:Chevrolet Suburban#Eleventh generation (2015)|Chevrolet Suburban]], [[w:Chevrolet Suburban#Eleventh generation (2015)|GMC Yukon XL]], [[w:Cadillac Escalade#Fourth generation (2015)|Cadillac Escalade ESV]]
|-
|U (Celestiq),<br> A ("Curated" models),<br> 0 (CT5-V Blackwing 20th Anniv. Ed.)||[[Artisan Center]]||[[w:Warren, Michigan|Warren, Michigan]]||United States||[[w:Cadillac Celestiq|Cadillac Celestiq]] (2025-),<br> [[w:Cadillac Escalade IQ|Cadillac Escalade IQ]] "Curated by Cadillac" program only (2027-)||2024|| ||Located at the [[w:General Motors Technical Center|GM Global Technical Center]] in Warren, Michigan. The Celestiq will be the first production vehicle sold to the public to be built at the GM Tech Center. The Celestiq will be built by hand on a special, low-volume production line and will be highly customizable. The Celestiq will be built to order and each one will be unique.<br/>
Past models: <br /> 2024 [[w:Cadillac CT5#CT5-V Blackwing|Cadillac CT5-V Blackwing 20th Anniversary Edition]] where the final 8 digits of the VIN are R0912004 through R0912024 or R0962004 through R0962024,<br> [[w:Cadillac CT5#CT5-V Blackwing|Cadillac CT5-V Blackwing]] "Curated by Cadillac" program only (2026)
|-
| ||[[Bay City Powertrain]]||[[w:Bay City, Michigan|Bay City, Michigan]]||United States||Engine components including connecting rods & camshafts||1916|| ||Located at 1001 Woodside Ave. Originally opened as National Cycle Manufacturing Co. in 1892 to make bicycles. Bought by Chevrolet in 1916 and joined GM along with Chevrolet in 1918.
|-
| ||[[Bedford Casting]]||[[w:Bedford, Indiana|Bedford, Indiana]]||United States||Cylinder heads, cylinder blocks, transmission cases, EV drive unit housings, structural components, Aluminum die casting||1942|| ||Located at 105 GM Drive.
|-
|5||[[w:Bowling Green Assembly Plant|Bowling Green Assembly Plant]]||[[w:Bowling Green, Kentucky|Bowling Green, Kentucky]]||United States||[[w:Chevrolet Corvette (C8)|Chevrolet Corvette (C8)]] (2020-)<br />
[[w:General Motors LS-based small-block engine#LT4|LT4 supercharged V8 engine]] for:<br> Cadillac Escalade-V '23-<br />
[[w:Chevrolet Gemini small-block engine|LT6 V8 engine]] ('23- Corvette Z06)
[[w:Chevrolet Gemini small-block engine#LT7|LT7 twin-turbo V8 engine]] ('25- Corvette ZR1, '26- Corvette ZR1X)
||1981|| ||Located at 600 Corvette Drive. Originally built by Chrysler's Airtemp division in 1969-1970 and used to build non-automotive A/C units, the plant closed in 1976 following Chrysler's sale of Airtemp to Fedders and was sold to GM in 1980. GM converted the facility into an automotive assembly plant and began building Corvettes in Bowling Green during June 1981, taking over production from the St. Louis plant.<br/>
Past models: <br />
[[w:Chevrolet Corvette (C3)|Chevrolet Corvette (C3)]] (1981-1982)<br />[[w:Chevrolet Corvette (C4)|Chevrolet Corvette (C4)]] (1984-1996)<br />[[w:Chevrolet Corvette (C5)|Chevrolet Corvette (C5)]] (1997-2004)<br />[[w:Chevrolet Corvette (C6)|Chevrolet Corvette (C6)]] (2005-2013)<br />[[w:Chevrolet Corvette (C7)|Chevrolet Corvette (C7)]] (2014-2019)
[[w:Cadillac XLR|Cadillac XLR]] (2004-2009)<br />
Performance Build Center relocated from Wixom, MI to Bowling Green Assembly in 2014.<br/> Past engines: [[w:Cadillac twin-turbo V8|Cadillac Blackwing 4.2L LTA twin-turbo V8]],<br />[[w:General Motors LS-based small-block engine#LT4|LT4 supercharged V8 engine]] for: Chevrolet Corvette Z06 (C7) (2015-2016 models with Z07 package or build your own engine option, 2017-2019 all Z06 models) &<br /> Chevrolet Camaro ZL1 (Gen 6) (phased in during 2020, all '21-'24), Cadillac CT5-V Blackwing '22-'26,<br />[[w:General Motors LS-based small-block engine#LT5|LT5 supercharged 6.2L Gen V Small Block V8]] ('19 Corvette ZR1)
|-
| ||[[Brownstown Battery Assembly Plant]]||[[w:Brownstown Charter Township, Michigan|Brownstown Charter Township, Michigan]]||United States||Battery packs for [[w:Chevrolet Corvette (C8)|Chevrolet Corvette <br> E-Ray]] & [[w:Cadillac Celestiq|Cadillac Celestiq]]<br />Electric drive units for Chevrolet Corvette <br> E-Ray<br />Assembles prototype battery packs||2009|| ||Located at 20001 Brownstown Center Dr.<br /> Battery packs for [[w:Chevrolet Volt|Chevrolet Volt]], [[w:Holden Volt|Holden Volt]], [[w:Opel Ampera|Opel/Vauxhall Ampera]], [[w:Cadillac ELR|Cadillac ELR]], [[w:Chevrolet Spark#Spark EV|Chevrolet Spark EV (2015-2016 only - LG Chem cells)]], [[w:GMC Hummer EV|GMC Hummer EV]], & [[w:Cadillac Lyriq|Cadillac Lyriq]] <br /> Roof module for [[w:Cruise AV|Cruise AV]]
|-
|6<br />9 (BrightDrop)||[[w:CAMI Automotive|CAMI Automotive]]||[[w:Ingersoll, Ontario|Ingersoll, Ontario]]||[[w:Canada|Canada]]|| ||1989||2025||Located at 300 Ingersoll St. S. Originally, a 50/50 joint venture with [[w:Suzuki|Suzuki]] called Canadian Automotive Manufacturing Inc. or CAMI until December 2009 when GM bought Suzuki's share. Production for Suzuki ended in June 2009. Chevy Equinox production ended April 29, 2022. After being retooled, CAMI reopened December 5, 2022 building the BrightDrop Zevo 600. In July 2023, GM announced a 400,000 square-foot expansion to assemble battery modules and packs. Plant idled in October 2023 and restarted in April 2024. Production was suspended in May 2025. Battery pack assembly also ended in May 2025. On October 21, 2025, GM announced that the BrightDrop van was discontinued and would not resume production anywhere.
Past models: [[w:BrightDrop Zevo 600|BrightDrop Zevo 600]] (2023-2024)<ref>{{Cite news |author=Tom Venetis |date=4 April 2022 |title=GM Canada Electric Vehicle Production in Ontario by the End of 2022 |work=Metroland Media Group |url=http://www.canadianautoworld.ca/industry-news/gm-canada-electric-vehicle-production-in-ontario-by-the-end-of-2022 |access-date=24 April 2022}}</ref>,<br> [[w:BrightDrop Zevo 400|BrightDrop Zevo 400]] (2024),<br>[[w:Chevrolet BrightDrop|Chevrolet BrightDrop 400]] (2025-2026),<br />[[w:Chevrolet BrightDrop|Chevrolet BrightDrop 600]] (2025-2026),<br /> [[w:Chevrolet Equinox|Chevrolet Equinox]] (2005-2022)<ref>{{Cite news |author=Bryan Bicknell |date=3 March 2022 |title=The finish line draws closer for gas powered vehicles at Ontario CAMI plant |work=CTV News |url=https://london.ctvnews.ca/the-finish-line-draws-closer-for-gas-powered-vehicles-at-ontario-cami-plant-1.5804523 |access-date=17 May 2022}}</ref>, [[w:Pontiac Torrent|Pontiac Torrent]] (2006-09), [[w:GMC Terrain#First generation (2010)|GMC Terrain]] (2010-2017), [[w:Suzuki XL-7#Second generation (XL7; 2006)|Suzuki XL7]] (2007-2009), [[w:Geo Tracker|Geo/Chevrolet Tracker]] (1990-2004),<br> [[w:Chevrolet Tracker (Americas)#Canada|Asuna/Pontiac Sunrunner]] (Canada only) (1992-1998),<br> [[w:Suzuki Vitara#First generation (ET/TA; 1988)|Suzuki Sidekick]] (1990-1998), [[w:Suzuki Grand Vitara|Suzuki Vitara]] (1999-2004), [[w:Geo Metro|Geo/Chevrolet Metro]] (1990-2001), [[w:Geo Metro|Suzuki Swift]] (1991-2001), [[w:Geo Metro|Pontiac Firefly]] (Canada only) (1991, 1994-2001).<br> Also assembled Ultium battery cells into modules and packs for BrightDrop Zevo & other vehicles made elsewhere from 2024-2025.
|-
|B||[[w:GM Defense|GM Defense]] Manufacturing Customer Innovation Center (MCIC)||[[w:Concord, North Carolina|Concord, North Carolina]]||United States|| [[w:M1301 Infantry Squad Vehicle|M1301 Infantry Squad Vehicle]] (ISV),<br />[[w:Chevrolet Suburban#HD SUV|Chevrolet Suburban Shield]] (a.k.a. HD SUV) (2024-) ||2021|| ||Located at 4280 Defender Way. Located next to Hendrick Motorsports, a partner in the ISV program. The ISV program for the US Army is based on the Chevrolet Colorado ZR2. The HD SUV program for the US State Dept. Diplomatic Security Service is based on the T1XX-generation Chevrolet Suburban but with a different chassis and frame to support higher vehicle weight, payload, and GVWR than civilian Suburbans. The Suburban Shield has also been supplied to Qatar for diplomatic security and VIP transport.
|-
| ||[[Defiance Foundry]]||[[w:Defiance, Ohio|Defiance, Ohio]]||United States||Aluminum engine blocks & heads||1948|| ||Located at 26427 State Route 281. Was part of GM's Central Foundry Division. Iron pouring ended in 2017. The plant now pours only aluminum blocks and heads. Defiance made the aluminum blocks and heads for the Buick 215 V8. Defiance has also supplied [[w:Toyota|Toyota]] with 4-cylinder engine blocks and [[w:Nissan|Nissan]] with V6 engine blocks.
|-
|U||[[w:Detroit/Hamtramck Assembly|Detroit/Hamtramck Assembly]]<br /> "Factory ZERO"||[[w:Hamtramck, Michigan|Hamtramck, Michigan]] & [[w:Detroit, Michigan|Detroit, Michigan]]||United States||[[w:GMC Hummer EV|GMC Hummer EV]] pickup (2022-)<br />[[w:GMC Hummer EV|GMC Hummer EV]] SUV (2024-)<br />[[w:Chevrolet Silverado EV|Chevrolet Silverado EV]] (2024-)<br />[[w:GMC Sierra EV|GMC Sierra EV]] (2024-)<br />[[w:Cadillac Escalade IQ|Cadillac Escalade IQ]] (2025-)<br />[[w:Cadillac Escalade IQ|Cadillac Escalade IQL]] (2026-)<br />Assembles Ultium battery cells into modules and packs for a variety of vehicles||1985|| ||Located at 2500 East Grand Blvd. Sometimes called the "Poletown" plant after the Detroit neighborhood where the plant is located. Part of the site was previously the "Dodge Main" plant which opened in 1911 before Dodge was part of the Chrysler Corp. and closed on January 4, 1980. GM bought the closed plant in 1981. Additional land including residential neighborhoods was acquired through the use of eminent domain. The plant straddles the line between 2 cities: Detroit & Hamtramck. The body shop is in Hamtramck while the general assembly area is in Detroit.<ref>{{Cite web|url=https://www.freep.com/story/money/cars/general-motors/2020/10/16/gm-detroit-hamtramck-assembly-plant-renamed-factory-zero/3665925001/|title = GM's Detroit-Hamtramck Assembly plant renamed 'Factory ZERO' amid shift to all-electric|author=Jamie LaReau|publisher=Detroit Free Press|date=October 16, 2020}}</ref> The current site includes a 16.5-acre wildlife habitat. Originally built E/K models. First vehicle produced was a 1986 Cadillac Eldorado on February 4, 1985. Also did final assembly on the Cadillac Allante, whose bodies were made in Italy by Pininfarina and were flown to Detroit and then trucked to Detroit/Hamtramck Assembly for final assembly. Started building fwd G-bodies for 1998. The last <br> E-body, the Cadillac Eldorado, was moved to the Lansing Craft Center during 2000. Started building EREVs based on Delta II for 2011. This was followed by the 2nd gen. Volt based on D2XX for 2016. Started building Epsilon-based cars for 2013. Also built the Omega-based Cadillac CT6 flagship, starting with 2016. The last gas-powered vehicles made at this plant were the Cadillac CT6 on January 24, 2020 & the Chevrolet Impala on February 27, 2020. Renamed "Factory ZERO" on October 16, 2020 to reflect its conversion into an electric vehicle assembly plant (zero for zero emissions). First vehicle produced following the conversion was a 2022 GMC Hummer EV pickup on December 17, 2021. Over 4 million vehicles have been built so far since opening in 1985. <br /> Past models:<br> [[w:Oldsmobile Toronado#Fourth generation (1986–1992)|Oldsmobile Toronado]] (1986-1992), [[w:Buick Riviera#Seventh generation (1986–1993)|Buick Riviera]] (1986-1993), [[w:Cadillac Eldorado|Cadillac Eldorado]] (1986-2000), [[w:Cadillac Seville|Cadillac Seville]] (1986-2004), [[w:Cadillac Allanté|Cadillac Allanté]] (1987-1993) (final assembly),<br> [[w:Cadillac Deville|Cadillac Deville]] (1994-2005), [[w:Cadillac DTS|Cadillac DTS]] (2006-2011),<br> [[w:Buick Park Avenue#Second generation (1997–2005)|Buick Park Avenue]] (1998-2000), [[w:Buick LeSabre#Eighth generation (2000–2005)|Buick LeSabre]] (2000-2005), [[w:Buick Lucerne|Buick Lucerne]] (2006-2011), [[w:Pontiac Bonneville#Tenth generation (2000–2005)|Pontiac Bonneville]] (2004-2005), [[w:Chevrolet Volt|Chevrolet Volt]] (2011-2019), [[w:Chevrolet Volt#Other markets|Holden Volt (RE)]] (2012-2015), [[w:Chevrolet Volt#Opel Ampera (Europe)|Opel/Vauxhall Ampera]] (2012-15), [[w:Cadillac ELR|Cadillac ELR]] (2014, 2016), [[w:Chevrolet Malibu#Eighth generation (2013)|Chevrolet Malibu (2013-2015)/Malibu Limited (2016)]], [[w:Chevrolet Impala#Tenth generation (2014-2020)|Chevrolet Impala]] (2014-2020), [[w:Buick LaCrosse#Third generation (2017)|Buick Lacrosse]] (2017-2019), [[w:Cadillac CT6|Cadillac CT6]] (2016-2020)
|-
| ||[[w:DMAX (engines)|DMAX Ltd.]]<br> Moraine Plant||[[w:Moraine, Ohio|Moraine, Ohio]]||United States||[[w:Duramax V8 engine|Duramax 6.6L V8 engine]]||2000|| ||Located on 3100 Dryden Rd. Was a joint venture with [[w:Isuzu|Isuzu]]. Originally, was 40% owned by GM & 60% owned by Isuzu. From 2002, 60% owned by GM & 40% owned by Isuzu. GM bought Isuzu's remaining stake in DMAX Ltd. at the end of March 2022 and DMAX Ltd. became a wholly owned subsidiary of GM in May 2022.
|-
| ||[[w:DMAX (engines)|DMAX Ltd.]] Brookville Plant||[[w:Brookville, Ohio|Brookville, Ohio]]||United States||[[w:Duramax V8 engine#8.3L Mongoose|8.3L Mongoose Duramax V8]] ||2021|| || Located at 101 W. Campus Blvd. In June 2023, GM announced a $920 million investment to build a 1.1 million square foot building next to the current 251,000 square foot facility in Brookville to take over Duramax V8 engine production from the original plant in Moraine in 2025.<br> Previously:<br> Machined engine components for [[w:Duramax V8 engine|Duramax 6.6L V8 engine]]
|-
| ||[[w:GM Egypt|GM Egypt]]||[[w:6th of October City|6th of October City]]|| [[w:Egypt|Egypt]]||[[w:Isuzu N-Series|Chevrolet N-Series]]<br/>[[w:Isuzu D-Max#Second generation (RT; 2011)|Chevrolet T-Series]]<br/>[[w:Chevrolet Move#Chevrolet N300/Move|Chevrolet Move]]<br/>[[w:Chevrolet Aveo#Third generation (310C; 2023)|Chevrolet Optra]] (2025-)||1985|| ||Partially owned by GM (46.5%). Produced its 1 millionth vehicle, a Chevrolet T-Series pickup truck, on September 22, 2024. GM Egypt is the first automaker in Egypt to produce <br> 1 million vehicles. <br /> Past models: [[w:Chevrolet Aveo (T200)|Chevrolet Aveo]], [[w:Chevrolet Captiva#First generation (C100, C140; 2006)|Chevrolet Captiva]], [[w:Chevrolet Frontera|Chevrolet Frontera]], [[w:Chevrolet Lanos|Chevrolet Lanos]], [[w:Baojun 630|Chevrolet Optra]] (2016-2023), [[w:Isuzu D-Max#First generation (RA, RC; 2002)|Chevrolet T-Series]], [[w:Isuzu MU#First generation (UCS55/UCS69GW; 1989–1998)|Isuzu Rodeo]], [[w:Isuzu TF|Isuzu TF-Series]], [[w:Opel Astra|Opel Astra]], [[w:Opel Corsa|Opel Corsa]], [[w:Opel Vectra|Opel Vectra]]
|-
|F||[[w:Fairfax II|Fairfax II]]||[[w:Kansas City, Kansas|Kansas City, Kansas]]||United States||[[w:Chevrolet Bolt#Second generation (2026)|Chevrolet Bolt]] (2027)
<br /> [[w:Chevrolet Equinox#Fourth generation (2025)|Chevrolet Equinox]] (Starting Mid-2027)
||1987|| ||Located at 3201 Fairfax Trafficway. Replaced original Fairfax Assembly Plant (Fairfax I) for 1988 model year production. Built on the site of the old Fairfax Municipal Airport. Originally built W-body cars. Switched to Epsilon-based cars for 2004. Chevy Malibu ended production in November 2024. Cadillac XT4 ended production in January 2025. Fairfax was then idled for retooling. Production of the updated Bolt electric car began in late 2025. The 2027 Bolt is an updated version of the old Bolt EUV. <br />Past models: [[w:Pontiac Grand Prix|Pontiac Grand Prix]] (1988-2003), [[w:Oldsmobile Cutlass Supreme#Fifth generation (1988–1997)|Oldsmobile Cutlass Supreme]] (1995-1997), [[w:Oldsmobile Intrigue|Oldsmobile Intrigue]] (1998-'02), [[w:Chevrolet Malibu#Sixth generation (2004)|Chevrolet Malibu (2004-2007)/Malibu Classic (2008)]], [[w:Chevrolet Malibu#Seventh generation (2008)|Chevrolet Malibu (2008-2012)]],<br> [[w:Chevrolet Malibu#Eighth generation (2013)|Chevrolet Malibu (2013-2015)/Malibu Limited (2016)]], [[w:Chevrolet Malibu#Ninth generation (2016)|Chevrolet Malibu (2016-2025)]], <br /> [[w:Saturn Aura|Saturn Aura]] (2007-2009), [[w:Buick LaCrosse#Second generation (2010)|Buick Lacrosse/Allure]] (2010-2016), [[w:Cadillac XT4|Cadillac XT4]] (2019-2025)
|-
| ||[[w:Flint Engine South|Flint Engine South/Flint Engine Operations]]||[[w:Flint, Michigan|Flint, Michigan]]||United States|| 3.0 [[w:Duramax I6 engine|Duramax I6 engine]], [[w:Generation VI (2027–present)|Gen VI Small-Block V8]]: [[w:#LS6_3|LS6 6.7L V8]], [[w:L76_3|L76 5.7L V8]], [[w:L78|L78 6.6L V8]] ||2000|| ||Located at 2100 Bristol Road. Located just to the south of Flint Truck Assembly and on the east side of Flint Metal Center. <br />Past engines: [[w:GM Atlas engine|4.2 Atlas I6]], 3.6 [[w:GM High Feature engine|High Feature V6 engine]],<br /> 1.4 [[w:GM Family 0 engine#Generation III|Family 0 I4]] (Cruze, Sonic, Volt/Ampera/ELR generator), [[w:GM small gasoline engine#LFV|GM Small Gasoline Engine]] (LFV 1.5 Turbo I4 - Malibu)
|-
| ||[[Flint Metal Center]]||[[w:Flint, Michigan|Flint, Michigan]]||United States|| Sheetmetal stampings for various GM models||1954|| ||Located at G-2238 Bristol Road. Located just to the south of Flint Truck Assembly and on the west side of Flint Engine South. Metal fabricating plant.
|-
| ||[[Flint Tool & Die]] (North American Engineering and Tooling Center)||[[w:Flint, Michigan|Flint, Michigan]]||United States||Tools & Dies for fabrication & assembly of sheetmetal body parts||1967|| ||Located at 425 Stevenson St. Was Plant 38 of the "Chevy in the Hole" complex. Last remaining manufacturing plant of the old "Chevy in the Hole" complex.
|-
|F <br/>(1953-present)<br/><br/> 1 (1947-1952)||[[w:Flint Truck Assembly|Flint Truck Assembly]]||[[w:Flint, Michigan|Flint, Michigan]]||United States||[[w:Chevrolet Silverado|Chevrolet Silverado]] (2001-)<br /> [[w:Chevrolet Silverado|GMC Sierra]] (2001-)||1947|| ||Located at G 3100 Van Slyke Road. This plant replaced vehicle production at the older "Chevy in the Hole" complex elsewhere in Flint, Michigan and became Chevrolet's new home plant. Began production in June 1947. This is GM's oldest, still active assembly plant in North America. Built all 300 1953 Corvettes on a small makeshift line (1 line for body & 1 for frame/chassis) from June 30 through December 24 in 1953. Built the 50 millionth car built by GM in the US on November 23, 1954. The car was a special gold painted '55 Chevy Bel Air 2-door Sport Coupe with a gold-painted chassis and 716 interior and exterior trim parts plated with 24-carat gold. Last built Chevy full-size cars in 1969. Last built passenger cars in 1970 (the midsize Chevelle & Monte Carlo). The last passenger car built at Flint Assembly was a Monte Carlo on June 24, 1970. At that point, the separate onsite Fisher Body operation (Flint #2) was merged into the Chevrolet operation (the rest of the plant) and the entire plant joined the GM Assembly Division. Since 1971, has only built full-size pickups, full-size SUV's, full-size vans, and medium duty commercial trucks. A new paint shop (Flint Assembly Paint Operations) was announced in December 2013 and opened in 2016, replacing the previous paint shop located inside the assembly plant. The new paint shop is further down Van Slyke Road from the assembly plant at 3848 Van Slyke Road, on the site of the former V8 engine plant that closed in 1999 and was subsequently demolished. Flint Truck Assembly has produced over 15 million vehicles. <br />Past models: [[w:Chevrolet Deluxe|Chevrolet Deluxe]], [[w:Chevrolet Stylemaster|Chevrolet Stylemaster]], [[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]], [[w:Chevrolet 150|Chevrolet 150]] (1953-1957),<br> [[w:Chevrolet 210|Chevrolet 210]] (1953-1957), [[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1969), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-69), [[w:Chevrolet Impala|Chevrolet Impala]] (1958-1969), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-69), [[w:Chevrolet Nomad|Chevrolet Nomad]] (1955-1957), [[w:Chevrolet Corvette (C1)|Chevrolet Corvette (1953 only)]]<br> [[w:Chevrolet El Camino#First generation (1959–1960)|Chevrolet El Camino]] (1959-1960),<br> [[w:Chevrolet Chevelle|Chevrolet Chevelle]] (1966, 1970),<br> [[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1970 only),<br> [[w:Chevrolet K5 Blazer|Chevrolet K5 Blazer]] (1969-1991), [[w:Chevrolet K5 Blazer|GMC K15 Jimmy]] (1970-91), [[w:Chevrolet Suburban|Chevrolet Suburban]] (1960-1991), [[w:GMC Suburban|GMC Suburban]] (1967-91),<br> [[w:Chevrolet Corvair|Chevrolet Corvair Forward Control]] (1961-1964), <br> [[w:Chevrolet van#Third generation (1971-1996)|Chevrolet Van/Sportvan]] (1993-1995),<br> [[w:Chevrolet van#1992-1996|Chevrolet Van/Sportvan G-Classic]] (1996),<br> [[w:Chevrolet van#Third generation (1971-1996)|GMC Vandura/Rally Van]] (1993-1995),<br> [[w:Chevrolet van#1992-1996|GMC Vandura/Rally Van G-Classic]] (1996),<br> [[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1947-1955), [[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959), [[w:Chevrolet C/K|Chevrolet C/K]] (1960-1986), [[w:Chevrolet C/K (second generation)|GMC C/K (Action Line)]] (1967-1972), [[w:Chevrolet C/K (third generation)|GMC C/K (Rounded Line)]] (1973-1986), [[w:Chevrolet C/K (third generation)#R/V-Series (1987–1991)|Chevrolet R/V]] (1987-1991), [[w:Chevrolet C/K (third generation)#R/V-Series (1987–1991)|GMC R/V]] (1987-1991), [[w:Chevrolet C/K (fourth generation)|Chevrolet C/K (GMT400)]] (1995-2000), [[w:Chevrolet C/K (fourth generation)|GMC Sierra (GMT400)]] (1995-98), [[w:Chevrolet C/K (fourth generation)|GMC Sierra Classic (GMT400)]] (1999-2000), [[w:Chevrolet C/K (fourth generation)#C3500HD (1991–2002)|Chevrolet/GMC C3500HD]] (1998-00), [[w:Chevrolet Kodiak#Third generation (2003–2009)|Chevrolet Kodiak/GMC Topkick]] ('03-'09), [[w:Chevrolet Kodiak#Isuzu H-Series|Isuzu H-Series]] (2005-2007), [[w:Isuzu Forward|Chevrolet T-Series]] (2004-2009), [[w:GMC T-Series|GMC T-Series]] (2004-2009), [[w:Isuzu F-Series|Isuzu F-Series]] (2004-2009) <br />
|-
|Z||[[w:Fort Wayne Assembly|Fort Wayne Assembly]]||[[w:Roanoke, Indiana|Roanoke, Indiana]]||United States||[[w:Chevrolet Silverado|Chevrolet Silverado]] (1999-)<br />[[w:Chevrolet Silverado|GMC Sierra]] (1988-)||1986|| ||Located at 12200 Lafayette Center Rd.<br /> Past models: [[w:Chevrolet C/K (fourth generation)|Chevrolet C/K]] (1988-1998)
|-
| ||[[Fuel Cell System Manufacturing LLC]]||[[w:Brownstown Charter Township, Michigan|Brownstown Charter Township, Michigan]]||United States||Fuel Cell Systems for [[w:Honda CR-V#CR-V e:FCEV|Honda CR-V e:FCEV]] & various other applications by GM & Honda & to outside companies||2024|| ||Located at 20001 Brownstown Center Dr. Located next to GM's Brownstown Battery Assembly Plant.<br /> A 50/50 joint venture with [[w:Honda|Honda]]. GM & Honda have been co-developing fuel cells since 2013. The manufacturing joint venture was established in January 2017. Production began in January 2024. Production is scheduled to end by the end of 2026.
|-
| ||Grand Rapids Operations||[[w:Wyoming, Michigan|Wyoming, Michigan]]||United States||Valvetrain products <br /> Axles for full-size trucks ||1943|| ||Located at 2100 Burlingame Avenue SW. Originally established as Diesel Equipment Division of GM. Spun off with Delphi Automotive Systems in 1999 (Delphi Powertrain Systems Grand Rapids); taken back under [[w:Delphi Corporation|Delphi Corporation]] bankruptcy and made part of [[w:General Motors Components Holdings|General Motors Components Holdings]] in 1999.
|-
|G||[[w:General Motors do Brasil|Gravatai Automotive Industrial Complex]]||[[w:Gravatai|Gravatai]], [[w:Rio Grande do Sul|Rio Grande do Sul]]||[[w:Brazil|Brazil]]||[[w:Chevrolet Onix|Chevrolet Onix]]<br /> ||2000|| ||Past models: [[w:Chevrolet Celta|Chevrolet Celta]]<br />[[w:Chevrolet Prisma (disambiguation)|Chevrolet Prisma]]<ref>{{cite web|url=http://www.autointell.com/nao_companies/general_motors/gm-manufacturing/blue-macaw-01.htm|title=General Motors: Gravatai Automotive Complex|access-date=2021-09-14 }}</ref><ref>[https://www.reuters.com/article/idUSN1533675720090715 UPDATE 2-GM to spend $1 bln in Brazil on new family of cars] Retrieved 14 September 2021</ref><br /> [[w:Suzuki Fun|Suzuki Fun]]
|-
| ||[[Joinville]]||[[w:Joinville|Joinville]], [[w:Santa Catarina (state)|Santa Catarina]]||[[w:Brazil|Brazil]]||[[w:GM E-Turbo engine|1.0 & 1.0 Turbo 3-cylinder engine]]<br />[[w:GM E-Turbo engine|1.2 & 1.2 Turbo 3-cylinder engine]] ||2013|| ||Past engines: [[w:GM Family 1 engine#SPE / 4|1.0L & 1.4L SPE / 4<br /> 4-cylinder engines]]
|-
| ||Kokomo Operations<ref>{{Cite web|url=https://plants.gm.com/media/us/en/gm/company_info/facilities/component-fac/kokomo.html|title=GM Corporate Newsroom - United States - Company}}</ref>||[[w:Kokomo, Indiana|Kokomo, Indiana]]||United States||Automotive Electronic Components including Engine Control Modules, Transmission Control Modules, Body Control Modules, & Airbag Sensing Diagnostic Modules||1936|| ||Located at 2603 South Goyer Rd. The site was first used in the 1890's to make cars by [[w:Haynes-Apperson|Haynes-Apperson]] and later by [[w:Haynes Automobile Company|Haynes]] until the company went out of business in 1925. Purchased by GM in 1936 from Crosley Radio Corp., which used the site to make radios for Chevrolet briefly during 1936. Initially run by Delco Remy, the site became a separate GM division called Delco Radio Division in June 1936. Delco Radio made radios for all GM cars as well as other electronic equipment. During WWII, Delco Radio made electronic equipment for the war effort. In 1970, Delco Radio merged with AC Electronics Division of Milwaukee to form [[w:Delco Electronics|Delco Electronics Division]]. On December 31, 1985, General Motors merged Hughes Aircraft, which it had acquired on December 20, 1985, with its Delco Electronics unit to form Hughes Electronics Corporation, an independent subsidiary. The group then consisted of Delco Electronics Corporation and Hughes Aircraft Company. In 1997, GM transferred Delco Electronics to its Delphi Automotive Systems business. Spun off with Delphi Automotive Systems in 1999 (Delco Electronics and Safety); taken back under [[w:Delphi Corporation|Delphi Corporation]] bankruptcy and made part of [[w:General Motors Components Holdings|General Motors Components Holdings]] in 2009.
|-
| ||[[w:GM Korea|GM Korea]]||[[w:Boryeong|Boryeong]], [[w:South Chungcheong Province|South Chungcheong Province]]||[[w:South Korea|South Korea]]||Automatic Transmissions||2008|| ||[[w:GM 6T40 transmission|GM 6T40 transmission]] (GF6)
|-
|B<br /><br />0 ('07-'08 Antara)||[[w:GM Korea|GM Korea]]||[[w:Bupyeong-gu|Bupyeong District]], [[w:Incheon|Incheon]]||[[w:South Korea|South Korea]]||[[w:Chevrolet Trailblazer (crossover)|Chevrolet Trailblazer]]<br/>[[w:Buick Encore GX|Buick Encore GX]]<br/>[[w:Buick Envista|Buick Envista]]
Engines: [[w:GM Family 0 engine|GM Family 0 engine]]<br />[[w:GM E-Turbo engine|1.3L Turbo 3-cylinder engine]]
|1962<br /><br/>1971 (engine plant)|| ||Bupyeong has 2 vehicle assembly plants and a powertrain plant. The Bupyeong 2 Assembly Plant ended production on November 26, 2022. Bupyeong 2 was last producing the Chevrolet Malibu and Trax and Buick Encore.<br />Past models : [[w:Chevrolet Aveo|Chevrolet Aveo]], [[w:Chevrolet Sonic|Chevrolet Sonic]], [[w:Chevrolet Captiva|Chevrolet Captiva]], [[w:Chevrolet Epica|Chevrolet Epica]], [[w:Chevrolet Evanda|Chevrolet Evanda]], [[w:Chevrolet Malibu|Chevrolet Malibu]], [[w:Chevrolet Trax#First generation (U200; 2013)|Chevrolet Trax]]<br />
[[w:Buick Encore#First generation (2013)|Buick Encore]]<br />
[[w:Buick LaCrosse#Korean market: Alpheon|Alpheon]]
[[w:Daewoo LeMans|Daewoo LeMans]], [[w:Daewoo Cielo|Daewoo Cielo]], [[w:Daewoo Espero|Daewoo Espero]], [[w:Daewoo Lanos|Daewoo Lanos]], [[w:Daewoo Leganza|Daewoo Leganza]], [[w:Daewoo Magnus|Daewoo Magnus]], [[w:Daewoo Tosca|Daewoo Tosca]], [[w:Daewoo Kalos|Daewoo Kalos]], [[w:Chevrolet Aveo (T200)#T250|Daewoo Gentra]], [[w:Daewoo Winstorm|Daewoo Winstorm]]
[[w:Holden Barina#Fifth generation (TK; 2005–2011)|Holden Barina (TK)]], [[w:Holden Barina#Sixth generation (TM; 2011–2018)|Holden Barina (TM)]], [[w:Opel Antara|Holden Captiva MaXX/Captiva 5]], [[w:Chevrolet Captiva#First generation (C100, C140; 2006)|Holden Captiva/Captiva 7]], [[w:Holden Epica|Holden Epica (EP)]], [[w:Chevrolet Malibu#Eighth generation (2013)|Holden Malibu (EM)]], [[w:Chevrolet Trax#First generation (U200; 2013)|Holden Trax (TJ)]] <br />
[[w:Opel Antara|GMC Terrain (Middle East only)]] <br />
[[w:Opel Mokka#First generation (J13; 2012)|Opel/Vauxhall Mokka]], [[w:Opel Antara|Opel/Vauxhall Antara]]<br />
[[w:Pontiac LeMans#Sixth generation (1988–1993)|Pontiac LeMans]], [[w:Pontiac Wave|Pontiac Wave]], [[w:Pontiac G3|Pontiac G3]] <br />
[[w:Suzuki Swift+|Suzuki Swift+]] (Canada only), [[w:Suzuki Verona|Suzuki Verona]]
Past engines: [[w:GM Family 1 engine|GM Family 1 engine]]
|-
|C||[[w:GM Korea|GM Korea]]||[[w:Changwon|Changwon]], [[w:Gyeongsang Province|Gyeongsang Province]]||[[w:South Korea|South Korea]]||[[w:Chevrolet Trax#Second generation (2023)|Chevrolet Trax]]<br/>[[w:GM small gasoline engine|GM small gasoline engine]] LV7, LE2<br/>Manual transmissions
|1991|| ||Past models: [[w:Daewoo Damas|Damas]], [[w:Daewoo Labo|Labo]]<br />[[w:Daewoo Matiz|Daewoo Matiz]], [[w:Daewoo Tico|Daewoo Tico]]<br />[[w:Opel Karl|Opel Karl]]/[[w:Vauxhall Viva#Name revival|Vauxhall Viva]]<br />[[w:Pontiac G2#Second generation (M200, M250; 2005)|Pontiac G2]], [[w:Pontiac Matiz#M150 (2000–2005)|Pontiac Matiz]],<br /> [[w:Chevrolet Spark|Chevrolet Spark]], [[w:Chevrolet Spark#Spark EV|Chevrolet Spark EV]]<br />[[w:Holden Spark#Australasia|Holden Barina Spark (MJ)]]<br>[[w:Holden Spark|Holden Spark (MP)]]
Past engines: [[w:Daewoo S-TEC engine#S-TEC II|Daewoo S-TEC II]]
|-
|J||[[w:Lansing Delta Township Assembly|Lansing Delta Township Assembly]]||[[w:Delta Township, Michigan|Delta Township, Michigan]]||United States||[[w:Chevrolet Traverse|Chevrolet Traverse]] (2010-)<br />[[w:Buick Enclave|Buick Enclave]] (2008-)<br />[[w:GMC Acadia#Third generation (2024)|GMC Acadia]] (2024-)||2006|| ||Located at 8175 Millett Hwy. Originally opened to build Lambda-based crossovers. Switched to C1XX-based models for 2018. <br /> Past models: [[w:Saturn Outlook|Saturn Outlook]] (2007-2010),<br>[[w:GMC Acadia#First generation (2007)|GMC Acadia]] (2007-2016), [[w:GMC Acadia#Acadia Limited|GMC Acadia Limited]] (2017), <br>[[w:Chevrolet Traverse#Second generation (2018)|Chevrolet Traverse Limited]] (2024)
|-
|0||[[w:Lansing Grand River Assembly|Lansing Grand River Assembly]]/Stamping||[[w:Lansing, Michigan|Lansing, Michigan]]||United States||[[w:Cadillac CT4|Cadillac CT4]] (2020-)<br />[[w:Cadillac CT5|Cadillac CT5]] (2020-)||2001|| ||Located at 920 Townsend Street. Stamping plant added in 2016. This newly constructed plant was built on the grounds of the former Oldsmobile home plant complex in Lansing. The former Oldsmobile HQ building ("Building 70") is still standing and still has "Oldsmobile Administration Center" carved into the marble barrier in front of the flagpole between the 2 stairways. Building 70 was Oldsmobile HQ from 1966-1996, when Oldsmobile HQ moved to Detroit. Building 70 is now vacant but the exterior is often used by GM for large ads that are wrapped around the side of the building on the corner of Townsend St. and William St. Originally opened to build vehicles on the Sigma platform. Started building vehicles on the Alpha platform for 2013.<br /> Past models: [[w:Cadillac CTS|Cadillac CTS]] (2003-2019), [[w:Cadillac SRX#First generation (2004)|Cadillac SRX]] (2004-2009), [[w:Cadillac STS|Cadillac STS]] (2005-2011), [[w:Cadillac ATS|Cadillac ATS]] (2013-2019), [[w:Chevrolet Camaro (sixth generation)|Chevrolet Camaro]] (2016-2024)
|-
| ||[[Lansing Regional Stamping]] (LRS)||[[w:Delta Township, Michigan|Delta Township, Michigan]]||United States|| ||2004|| ||Located within the Lansing Delta Assembly complex.
|-
|||[[w:Lansing Service Parts Operation|Lansing Redistribution Center]] (SPO)||[[w:Delta Township, Michigan|Delta Township, Michigan]]||United States|| ||1960|| ||Located at 4400 West Mount Hope Road. Previously Lansing Plant 4. Now called Lansing Redistribution Center, part of GM Customer Care and Aftersales.
|-
| ||[[Lockport Operations]]||[[w:Lockport, NY|Lockport, NY]]||United States||Thermal products (climate control systems, powertrain cooling systems) and stators for EV motors.||1914|| ||Located at 200 Upper Mountain Road. Founded in 1910 as the Harrison Radiator Company. Acquired by United Motors in 1916 which was then acquired by GM in 1918. Spun off with Delphi Automotive Systems in 1999 (Harrison Thermal Systems); taken back under [[w:Delphi Corporation|Delphi Corporation]] bankruptcy and made part of [[w:General Motors Components Holdings|General Motors Components Holdings]] in 2009.
|-
| ||[[Marion Metal Center]]||[[w:Marion, Indiana|Marion, Indiana]]||United States||Sheetmetal stamped parts & blanks for various GM models||1956|| ||Located at 2400 West Second St. Metal fabricating. Originally a Fisher Body division plant.
|-
| ||[[Mogi das Cruzes]]||[[w:Mogi das Cruzes|Mogi das Cruzes]], [[w:São Paulo (state)|São Paulo state]]||[[w:Brazil|Brazil]]||Stampings for new & replacement parts||1999|| ||Stamping plant
|-
|4||[[w:Orion Assembly|Orion Assembly]]||[[w:Orion Township, Michigan|Orion Township, Michigan]]||United States||Assembly of Battery packs for EVs:<br> Silverado EV, Sierra EV, Hummer EV, and Escalade IQ<br><br>Scheduled for Early 2027:
[[w:Chevrolet Silverado#Fifth-generation Silverado / sixth-generation Sierra (2026)|Chevrolet Silverado]] 1500 (2027-)<br />[[w:GMC Sierra#Fifth-generation Silverado / sixth-generation Sierra (2026)|GMC Sierra]] 1500 (2027-)
||1983||idled 2009; reopened 2011; idled 2023||Located at 4555 Giddings Road. Originally opened to build the 1985 Fwd C-bodies. Began building Fwd H-bodies for 1994. Began building Fwd G-bodies for 1995. On June 18, 2004, production of the Buick LeSabre & Park Ave., the last 2 models built at Orion Assembly, ended. Plant was then converted from building full-size cars to midsize cars for 2005, beginning with the Pontiac G6. Idled during 2009 as part of GM's bankruptcy. Reopened in 2011 with the help of govt. incentives & special agreement with the UAW to build the Chevy Sonic subcompact. Later added the Buick Verano compact car. In 2016, began building the Chevy Bolt EV, which was joined in 2021 by the slightly larger Bolt EUV. Idled in 2023 when both Bolts were discontinued. In late summer 2024, Orion Assembly began assembling battery cells supplied by Ultium Cells LLC in Warren, OH into packs which are then supplied to the Factory Zero plant for installation into the electric trucks & SUVs made there. Orion was going to be converted to building electric trucks, supplementing Factory Zero's production of Silverado EV & Sierra EV but that plan was postponed and later cancelled. In 2025, a new plan was announced for Orion to build fuel-powered Silverado & Sierra 1500 pickups & Escalade SUVs beginning in 2027.<br> Past models: [[w:Chevrolet Bolt EV|Chevrolet Bolt EV]] (2017-2023), [[w:Chevrolet Bolt EUV|Chevrolet <br> Bolt EUV]] (2022-2023), [[w:Cruise AV|Cruise AV]], [[w:Chevrolet Bolt#European countries|Opel Ampera-e]] (2017-19),<br> [[w:Chevrolet Sonic|Chevrolet Sonic]] (2012-2020), [[w:Buick Verano#First generation (2011)|Buick Verano]] (2012-2017), [[w:Chevrolet Malibu#Seventh generation (2008)|Chevrolet Malibu]] (2008-2010), [[w:Pontiac G6|Pontiac G6]] (2005-2010),<br> [[w:Buick Riviera#Eighth generation (1995–1999)|Buick Riviera]] (1995-1999), [[w:Oldsmobile Aurora|Oldsmobile Aurora]] (1995-2003),<br> [[w:Buick Park Avenue#Second generation (1997-2005)|Buick Park Avenue]] (1997-2005), [[w:Buick LeSabre#Eighth generation (2000–2005)|Buick LeSabre]] (2000-2005), [[w:Cadillac de Ville series#Sixth generation (1985–1993)|Cadillac DeVille]] (1985-1993), [[w:Cadillac Fleetwood#Front-wheel drive: 1985–1993|Cadillac Fleetwood]] (1985-1992), [[w:Cadillac Sixty Special#1987–1993|Cadillac Sixty Special]] (1989-1993), [[w:Oldsmobile 88#Tenth generation (1992–1999)|Oldsmobile 88]] (1994-99), [[w:Oldsmobile LSS|Oldsmobile LSS]] (1996-1999), [[w:Oldsmobile Regency|Oldsmobile Regency]] (1997-98), [[w:Oldsmobile 98#Eleventh generation (1985–1990)|Oldsmobile 98]] (1985-1990), [[w:Oldsmobile 98#Twelfth generation (1991–1996)|Oldsmobile 98]] (1991-1996), [[w:Oldsmobile Touring Sedan|Oldsmobile Touring Sedan]] (1988-1990),<br> [[w:Pontiac Bonneville#Ninth generation (1992–1999)|Pontiac Bonneville]] (1994-1998), [[w:Pontiac Bonneville#Tenth generation (2000–2005)|Pontiac Bonneville]] (2000-03)
|-
|1 (2022-)<br /><br />1 (Line 2 a.k.a. Consolidated Line)<br> (1984-2019)<br>/<br />9 (Line 1 a.k.a. Flex Line)<br> (1984-2020)<br /><br />1 (1967-1983)||[[w:Oshawa Car Assembly|Oshawa Car Assembly]]||[[w:Oshawa, Ontario|Oshawa, Ontario]]||[[w:Canada|Canada]]||[[w:Chevrolet Silverado#Fourth-generation Silverado / fifth-generation Sierra (T1XX; 2019)|Chevrolet Silverado 1500]] (2022-)<br />[[w:Chevrolet Silverado#Fourth-generation Silverado / fifth-generation Sierra (T1XX; 2019)|Chevrolet Silverado HD]] (2022-)||1953|| ||Located at 900 Park Rd South.<br />
Past models: [[w:Cadillac XTS|Cadillac XTS]] (2013-2019), [[w:Chevrolet Impala|Chevrolet Impala]] (1958-1985, 2000-2020), [[w:Chevrolet Impala#Impala Limited (2014–2016)|Chevrolet Impala Limited]] (2014-2016), [[w:Chevrolet Lumina|Chevrolet Lumina]] (1990-2001), [[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1995-2007), [[w:Buick Century#Sixth generation (1997–2005)|Buick Century]] (1997-2005), [[w:Buick Regal|Buick Regal]] (1988-2004, 2011-2017), [[w:Buick LaCrosse#First generation (2005)|Buick LaCrosse/Allure]] (2005-2009), [[w:Buick Special#1949–1958|Buick Special]] (1954-1958), [[w:Buick LeSabre|Buick LeSabre]] (1959-1966), [[w:Buick Century#Second generation (1954–1958)|Buick Century]] (1954-1958), [[w:Buick Invicta|Buick Invicta]] (1959-1962), [[w:Buick Wildcat|Buick Wildcat]] (1963-1966), [[w:Oldsmobile 88|Oldsmobile 88]] (1954-1966), [[w:Chevrolet 150|Chevrolet 150]] (1954-1957), [[w:Chevrolet 210|Chevrolet 210]] (1954-1957), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1955-1981), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-1975), [[w:Chevrolet Camaro (fifth generation)|Chevrolet Camaro]] (2010-2015), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-1985), [[w:Chevrolet Corvair|Chevrolet Corvair]] (1960-1966), [[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958), [[w:Chevrolet Equinox#Second generation (2010)|Chevrolet Equinox]] (2011-2017), [[w:Chevrolet Nova|Chevrolet Nova]] (1962-1967),<br> [[w:General Motors A platform (1925)#1964|A-body (rwd) cars]]: [[w:Chevrolet Chevelle|Chevrolet Chevelle]] (1964-1977)/[[w:Chevrolet Malibu|Chevrolet Malibu]] (1978-1983)/[[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1971-1981)/ [[w:Oldsmobile Cutlass|Oldsmobile Cutlass]]/[[w:Oldsmobile 442|Oldsmobile 442]]/[[w:Pontiac LeMans|Pontiac LeMans]] (1971, 1973-1981)/[[w:Pontiac GTO|Pontiac GTO]] (1970)/[[w:Buick Special|Buick Special]]/[[w:Buick Skylark|Buick Skylark]],<br> [[w:General Motors A platform (1982)|A-body (fwd) cars]]: [[w:Chevrolet Celebrity|Chevrolet Celebrity]] (1982-1987)/[[w:Pontiac 6000|Pontiac 6000]] (1982-1988)/[[w:Oldsmobile Cutlass Ciera|Oldsmobile Cutlass Ciera]] (1985-1988),<br> [[w:Pontiac Bonneville#Sixth generation (1977–1981)|Pontiac Bonneville]] (1977-1981), [[w:Pontiac Catalina#1977–1981|Pontiac Catalina]] (1977-1981), [[w:Pontiac Grand Prix#Eighth generation (2004–2008)|Pontiac Grand Prix]] (2004-2008), [[w:Pontiac Catalina#Canada and Canadian exports|Pontiac Laurentian]] (1954-1981), [[w:Pontiac Parisienne|Pontiac Parisienne]] (1958-1984, US: 1983-1984), [[w:Pontiac Pathfinder|Pontiac Pathfinder]] (1954-1958), [[w:Pontiac Catalina#Canada and Canadian exports|Pontiac Strato Chief]] (1958-1970), [[w:Acadian (automobile)|Acadian]] (1962-1967), [[w:Beaumont (automobile)|Beaumont]] (1966-1969), [[w:Chevrolet Silverado#Third-generation Silverado / fourth-generation Sierra (K2XX; 2014)|Chevrolet Silverado 1500 LD/2500HD]] (2019), [[w:Chevrolet Silverado#Third-generation Silverado / fourth-generation Sierra (K2XX; 2014)|GMC Sierra 1500 Limited/2500HD]] (2019). <br />
VIN code 1 (1984-2019): Chevrolet Celebrity (1984-1987), Pontiac 6000 (1984-1985), Buick Regal (1988-2004), Chevrolet Lumina 4-d (1990-2001), Buick Century (1997-05), Pontiac Grand Prix (2004-2008), Buick LaCrosse/Allure (2005-2009), Chevrolet Impala (2008-2013), Chevrolet<br /> Impala Limited (2014-2016), Chevrolet Equinox (2011-2017), Chevrolet Silverado 1500 LD/2500HD (2019),<br /> GMC Sierra 1500 Limited/2500HD (2019)
VIN code 9: Chevrolet Impala (1984-1985), Chevrolet Caprice (1984-1985), Pontiac Parisienne (1984), Pontiac 6000 (1985-1988), Oldsmobile Cutlass Ciera (1985-1988), Chevrolet Lumina 4-d (1990-1999), Chevrolet Lumina 2-d (1990-1994), Chevrolet Monte Carlo (1995-07), Chevrolet Impala (2000-08), Chevrolet Camaro (2010-2015), Buick Regal (2011-2017), Cadillac XTS (2013-2019), Chevrolet Impala (2014-2020)
The current Oshawa complex (South plant; also known as Autoplex beginning in the 1980's) opened on November 7, 1953. The passenger car assembly plant had 2 assembly lines. Operations were gradually moved from the older North plant to the newer South plant. Originally built Chevrolet, Pontiac, Oldsmobile, and Buick models. However, Oldsmobile production ended in 1969 and Buick production ended in 1971. Oldsmobile production resumed with the '85 Cutlass Ciera while Buick production resumed with the '88 Regal. Oldsmobile production again ended in 1988 while Buick production continued through 2017 with a temporary hiatus in 2009-2010 calendar years. Pontiac production at Oshawa ended after 1988; only resuming in 2003 for the '04 Grand Prix. Pontiac production at Oshawa ended for good in 2008. Cadillac production began at the Oshawa South plant for the first time in 2012 with the 2013 XTS. Full-size pickups were built on Line 2 for 2019. This was the first time that pickups were built on one of Oshawa's passenger car assembly lines and the first time that pickups were made in Oshawa since Oshawa Truck closed in 2009. The last XTS was built on Sept. 10, 2019, the last Oshawa-built Impala on Oct. 25, 2019, & the last pickups on Dec. 18, 2019. Vehicle production at the South plant ended in 2019; plant will be transformed for stamping and production of body panels and subassemblies. Restart of vehicle production announced in Nov. 2020 - Truck production started in late 2021 with Silverado HD followed by the Silverado 1500 in 2022. Oshawa is now the only plant producing both Silverado 1500 & Silverado HD.
Oshawa also produced face masks during the COVID-19 pandemic starting in 2020.
|-
| ||[[w:Oshawa Metal|Oshawa Metal]]||[[w:Oshawa, Ontario|Oshawa, Ontario]]||[[w:Canada|Canada]]||Stamped metal parts for new production and for service parts||1986|| ||Part of the overall Oshawa Assembly complex (Autoplex) on Park Road South. Located at 1000 Park Road South.
|-
| ||[[w:Parma Metal Center|Parma Metal Center]]||[[w:Parma, Ohio|Parma, Ohio]]||United States||Sheetmetal stampings & assemblies for various GM models||1948|| ||Located at 5400 Chevrolet Blvd.<br /> Metal fabricating
|-
| ||[[Pontiac Metal Center]]||[[w:Pontiac, Michigan|Pontiac, Michigan]]||United States||Sheetmetal stampings & assemblies for various GM models||1926|| ||Located at 260 E. Beverly Ave.<br />Metal fabricating<br />Originally, an [[w:Oakland Motor Car Company|Oakland Motor Car]] plant. Last remaining manufacturing plant of the original Pontiac Assembly complex, which was Pontiac's home plant.
|-
|S||[[w:Ramos Arizpe Assembly|Ramos Arizpe Assembly]]||[[w:Ramos Arizpe|Ramos Arizpe]]||[[w:Mexico|Mexico]]||[[w:Chevrolet Blazer EV|Chevrolet Blazer EV]] (2024-) <br /> [[w:Chevrolet Equinox EV|Chevrolet Equinox EV]] (2024-) <br />[[w:Cadillac Optiq|Cadillac Optiq EV]] (2025-) ||1981|| ||Ramos Arizpe opened building 4 Chevrolet models for the Mexican market: Citation, Celebrity, Malibu, and Monte Carlo. The 1985 El Camino & Caballero were the first Mexican-built GM models to be sold in the US. GM began exporting the Celebrity to the US for 1987 followed by the Buick Century for 1989. GM began exporting the Chevy Cavalier to the US for 1991 followed by the Pontiac Sunbird for 1993, which was replaced by the Sunfire for 1995. Stamping plant added in 1995 and a paint shop added in 1997. The plant was expanded to add a 2nd assembly line to build the Pontiac Aztek for 2001, followed by the Buick Rendezvous for 2002. The 2nd line was also used to build the Chevy HHR, Saturn Vue, Chevy Captiva Sport, Cadillac SRX, & Saab 9-4X. Some 2nd gen. Chevy Cruze sedans made at Ramos Arizpe were sold in the US for the '16-'17 model years. All 2nd gen. Chevy Cruze 5-d hatchbacks ('17-'19) were made in Ramos Arizpe. All Chevy Cruze production at Ramos Arizpe ended in <br> Dec. 2018. The Cruze was the last passenger car made at Ramos Arizpe. A new paint shop was added in 2021, replacing the original from 1997. EV production began in 2023.<br />Past Models: <br> Mexico or Latin America only: [[w:Chevrolet Citation|Chevrolet Citation]] (1982-1986), [[w:Chevrolet Celebrity|Chevrolet Celebrity]] (1982-1986), [[w:Chevrolet Malibu#Fourth generation (1978)|Chevrolet Malibu]] (1981), [[w:Chevrolet Monte Carlo#Fourth generation (1981–1988)|Chevrolet Monte Carlo]] (1981-1984), [[w:Oldsmobile Cutlass Ciera|Chevrolet Cutlass (Mexico only)]], [[w:Buick Century#Fifth generation (1982–1996)|Chevrolet Century (Mexico only)]], [[w:Chevrolet Chevy|Chevrolet Chevy]] (Mexico: 1995-2012), [[w:Chevrolet Captiva Sport|Chevrolet Captiva Sport]] (2008-2017), [[w:Chevrolet Sonic|Chevrolet Sonic]] (Mexico: 2012-2017).<br> Export to US: [[w:Chevrolet El Camino|Chevrolet El Camino]] (1985-1987), [[w:GMC Caballero|GMC Caballero]] (1985-1987), [[w:Chevrolet Celebrity|Chevrolet Celebrity]] (US: 1987-1989), [[w:Buick Century#Fifth generation (1982–1996)|Buick Century]] (1989-1994), [[w:Chevrolet Cavalier|Chevrolet Cavalier]] (1991-2004), [[w:Pontiac Sunbird#Second generation (1982–1988)|Pontiac Sunbird]] (1993-1994), [[w:Pontiac Sunfire|Pontiac Sunfire]] (1995-2005), [[w:Pontiac Aztek|Pontiac Aztek]] (2001-2005), [[w:Buick Rendezvous|Buick Rendezvous]] (2002-2007), [[w:Chevrolet HHR|Chevrolet HHR]] (2006-2011), [[w:Saturn Vue#Second generation (2008)|Saturn Vue]] (2008-2010), [[w:Chevrolet Captiva Sport|Chevrolet Captiva Sport]] (US: 2012-2015),<br> [[w:Cadillac SRX#Second generation (2010)|Cadillac SRX]] (2010-2016), [[w:Saab 9-4X|Saab 9-4X]] (2011),<br> [[w:Chevrolet Cruze#Second generation (J400)|Chevrolet Cruze]] (2016-2019), [[w:Chevrolet Equinox#Third generation (2018)|Chevrolet Equinox]] (2018-2024), [[w:Chevrolet Blazer (crossover)|Chevrolet Blazer]] (2019-2026), [[w:Honda Prologue|Honda Prologue EV]] (2024-26).<br> Export to Australia/New Zealand:<br> [[w:Holden Equinox|Holden Equinox (EQ)]] (2018-2020)
|-
| ||Ramos Arizpe Engine||[[w:Ramos Arizpe|Ramos Arizpe]]||[[w:Mexico|Mexico]]||[[w:GM E-Turbo engine|1.2L Turbo 3-cylinder engine]]<br />[[w:General Motors LS-based small-block engine#Generation V (2013–present)|Gen V Small Block V8 & V6]]||1982|| ||Past engines: [[w:General Motors 60° V6 engine|Chevrolet 60° V6 engine]]<br />[[w:GM High Value engine|GM High Value V6]]<br />[[w:GM High Feature engine|GM High Feature V6]]
|-
| ||Ramos Arizpe Transmission||[[w:Ramos Arizpe|Ramos Arizpe]]||[[w:Mexico|Mexico]]||VT40 (CVT250) [[w:Continuously variable transmission|CVT]] transmission ||1999|| ||Past transmissions: [[w:GM 4L60-E transmission|4L60-E/4L65-E 4-speed automatic]]<br />[[w:GM-Ford 6-speed automatic transmission|6T70/6T75 6-speed automatic (GF6)]]<br />4ET50 EVT (for [[w:Chevrolet Volt|Chevrolet Volt]])<br />4ET55 EVT (for [[w:Cadillac ELR|Cadillac ELR]])
|-
| ||[[w:Rochester Products Division|Rochester Operations]]||[[w:Rochester, NY|Rochester, NY]]||United States||Chevrolet, GMC, Cadillac, and Buick Components - Engine management systems, fuel injection systems, and related products. ||1939|| ||Located at 1000 Lexington Avenue. Founded in 1908 as the Rochester Coil Company. Renamed North East Electric Company in 1909. Acquired by GM in 1929. In 1930, merged with Delco-Light Co. to become Delco Appliance. A planned, second Delco Appliance plant on Lexington Ave. in Rochester instead became the Rochester Products Division of GM in 1939. This division made carburetors, fuel injection systems, & other fuel system equipment. During WWII, it made warplane and tank electrical accessories. In 1981, Rochester Products Division merged with GM's Diesel Equipment Division of Grand Rapids, Michigan retaining the Rochester Products Division name. On August 30, 1988, Rochester Products Division merged with GM's AC Spark Plug Division to form the AC Rochester Division. The Grand Rapids-based diesel fuel-injection business of the former Diesel Equipment Division was sold on August 26 to a joint venture of G.M. and the Penske Corporation called Diesel Technology Corporation (80% Penske, 20% Detroit Diesel, itself a joint venture between Penske & GM). Robert Bosch invested in Diesel Technology Corporation in 1992, eventually taking over the whole company by 2002. AC Rochester merged with parts of Delco Remy (the parts not spun off into Remy International) in 1994 to form AC Delco Systems. AC Delco Systems became part of GM's Delphi Automotive Systems subsidiary in 1995. Spun off with Delphi Automotive Systems in 1999 (Rochester Powertrain); taken back under [[w:Delphi Corporation|Delphi Corporation]] bankruptcy and made part of [[w:General Motors Components Holdings|General Motors Components Holdings]] in 2009.
|-
| ||[[w:Romulus Engine|Romulus Engine]]||[[w:Romulus, Michigan|Romulus, Michigan]]||United States||[[w:GM High Feature engine#Fourth generation|Gen4 High Feature V6]]
||1976|| ||Located at 36880 Ecorse Road. Originally part of GM's Detroit Diesel Allison Division where it built diesel engines and components. Switched to gasoline engines in the 1980's.<br /> Past engines: [[w:Chevrolet 90° V6 engine|Chevrolet 90° V6 engine]]<br />[[w:General Motors LS-based small-block engine#Generation III (1997–2007)|Gen III Small Block V8]]<br />[[w:GM LS engine#Generation IV (2005–2020)|Gen IV Small Block V8]]
|-
| ||[[w:Romulus Engine|Romulus Transmission]]||[[w:Romulus, Michigan|Romulus, Michigan]]||United States||[[w:"Ford-GM 10-speed automatic transmission#General Motors|10L80/90 Transmission]]||1995|| ||Located at 36880 Ecorse Road.<br />Past transmissions: [[w:GM 4L60-E transmission|GM 4L60-E transmission]]
|-
|R||Rosario||[[w:Alvear, Santa Fe|Alvear]], [[w:Rosario Department|Rosario Department]], [[w:Santa Fe Province|Santa Fe Province]]||[[w:Argentina|Argentina]]||<br/>[[w:Chevrolet Tracker (2019)|Chevrolet Tracker]]
Engines: [[w:GM small gasoline engine#LE2|1.4L Turbo I4 LE2]]
||1997|| ||Engine plant added in 2016.
Past Models:
[[w:Chevrolet Cruze#Second generation (J400)|Chevrolet Cruze]], [[w:Opel Corsa#Corsa C (X01; 2000)|Chevrolet Corsa C]], [[w:Opel Corsa#Corsa B|Chevrolet Corsa B/Corsa Classic/Classic]], [[w:Chevrolet Agile|Chevrolet Agile]]<br /> and [[w:Chevrolet Tracker (Americas)#Second generation|Suzuki Grand Vitara/Chevrolet Tracker]]
|-
| ||[[w:Saginaw Metal Casting Operations|Saginaw Metal Casting Operations]]||[[w:Saginaw, Michigan|Saginaw, Michigan]]||United States||Metal casting for powertrains (High Feature V6 engine): engine blocks, heads, and crankshafts<br/>Front 4WD axle assembly castings||1919|| ||Located at 1629 N. Washington Avenue. Originally the Grey Iron Foundry, a part of General Motors Saginaw Products Co. and renamed as Chevrolet Saginaw Grey Iron Foundry when transferred to Chevrolet Motor Division in 1927. Moved to Central Foundry Division in 1983. Joins GM Powertrain Division in 1991. Renamed Saginaw Metal Casting Operations in 1994 to reflect that it now pours aluminum. First production aluminum heads produced in 1995. Over the years, it has produced both cast iron and cast aluminum engine blocks for the Chevy Small-Block V8.
|-
|L||[[w:San Luis Potosí Assembly|San Luis Potosí Assembly]]||[[w:San Luis Potosí, San Luis Potosí|San Luis Potosí]]||[[w:Mexico|Mexico]]||[[w:Chevrolet Equinox#Fourth generation (2025)|Chevrolet Equinox]] (2025-)<br />[[w:GMC Terrain#Third generation (2025)|GMC Terrain]] (2025-)||2008|| ||Note: Aveo & G3 made in San Luis Potosi were not sold in the US but they were sold in Canada. Onix was not sold in the US or Canada. 2013-2014 Trax was sold in Canada & Mexico but not in the US.<br> Past models: [[w:Chevrolet Aveo (T200)|Chevrolet Aveo (T250)]] (2009-2018)<br />[[w:Pontiac G3|Pontiac G3/G3 Wave]] (2009-2010)<br />[[w:Chevrolet Onix#Second generation (2019)|Chevrolet Onix]] (2020-2022)<br />[[w:Chevrolet Trax#First generation (U200; 2013)|Chevrolet Trax]] (2013-2020)<br />[[w:Chevrolet Equinox#Third generation (2018)|Chevrolet Equinox]] (2018-2024)<ref>{{Cite web|url=https://vpic.nhtsa.dot.gov/mid/home/displayfile/7c659360-416a-4e96-ae38-0b69d916c106|title=GM Vehicle Identification Numbering Standard - 2021 - United States and Canada|date=August 14, 2020}}</ref><br />[[w:GMC Terrain#Second generation (2018)|GMC Terrain]] (2018-2024)
|-
| ||San Luis Potosí Transmission||[[w:San Luis Potosí, San Luis Potosí|San Luis Potosí]]||[[w:Mexico|Mexico]]||FWD GF9 9 Speed Transmissions||2009|| ||[[w:GM-Ford 6-speed automatic transmission|GM-Ford 6-speed automatic transmission]] 6T40/45 (GF6)
|-
|B||[[w:General Motors do Brasil|São Caetano do Sul Assembly]]||[[w:São Caetano do Sul|São Caetano do Sul]], [[w:São Paulo (state)|São Paulo]]||[[w:Brazil|Brazil]]|| [[w:Chevrolet Montana#Third generation (2022)|Chevrolet Montana]] <br /> [[w:Chevrolet Spin|Chevrolet Spin]]<br />[[w:Chevrolet Tracker (2019)|Chevrolet Tracker]]<br /> ||1930|| ||Past Models: [[w:Opel Astra#G|Chevrolet Astra]], [[w:Opel Astra#H |Chevrolet Vectra/Vectra GT]] (both until 2011), [[w:Chevrolet C/K#1985–1996|Chevrolet Bonanza]], [[w:Chevrolet C/K#1964–1984|Chevrolet C-10/C-14/C-15/Chevy 4/D-10/A-10]], [[w:Chevrolet D-20|Chevrolet A-10/C-10/A-20/C-20/D-20]], Chevrolet A40/D40, [[w:Chevrolet Cobalt#Second generation (2011)|Chevrolet Cobalt]], [[w:Chevrolet Comodoro|Chevrolet Comodoro]], [[w:Opel Corsa#Corsa B (S93; 1993)|Chevrolet Corsa B]], [[w:Chevrolet Corsa|Chevrolet Corsa Classic]], [[w:Chevrolet Cruze#First generation (J300; 2008)|Chevrolet Cruze]], [[w:Chevrolet Diplomata|Chevrolet Diplomata]], [[w:Chevrolet Onix|Chevrolet Joy]], [[w:Chevrolet Kadett|Chevrolet Kadett]] 1996-1998, [[w:Chevrolet Montana#Second generation (2011–2021)|Chevrolet Montana]], [[w:Opel Ascona#Chevrolet Monza|Chevrolet Monza]], [[w:Chevrolet Omega#Omega A|Chevrolet Omega A]], [[w:Chevrolet Opala|Chevrolet Opala]], [[w:Opel Vectra#Vectra A (1988–1995)|Chevrolet Vectra A]], [[w:Opel Vectra#Vectra B (1995–2002)|Chevrolet Vectra B]], [[w:Chevrolet Veraneio|Chevrolet C-1416/Veraneio]], Chevrolet 3100/Brasil/Amazona/Alvorada/Corisco, Chevrolet 6500, Chevrolet C64/C65/C68/D64/D65/D68/D74/D75/D78,<br> Bus bodies, Frigidaire appliances
|-
|C||[[w:General Motors do Brasil|São José dos Campos Assembly]]||[[w:São José dos Campos|São José dos Campos]], [[w:São Paulo (state)|São Paulo]]||[[w:Brazil|Brazil]]||
[[w:Chevrolet S-10#Third generation (2012)|Chevrolet S-10]]<br/>[[w:Chevrolet Trailblazer (SUV)#Second generation (RG; 2011)|Chevrolet Trailblazer]]
Engines:<br/> 2.8L turbodiesel <br> 4-cylinder engines<br />
Transmissions
|1959|| ||Supplied 1.8L & 2.0L SOHC Family II I4 engines to the US from 1982-1994. <br />Past Models: [[w:Chevrolet Montana#First generation (2003–2010)|Chevrolet Montana]]<br /> [[w:Chevrolet S-10 Blazer#Second generation (1995)|Chevrolet Blazer]], [[w:Opel Corsa#Corsa C (X01; 2000)|Chevrolet Corsa C]], [[w:Opel Corsa#Corsa C (X01; 2000)|Chevrolet Corsa Sedan C]], [[w:Opel Meriva#First generation (2003)|Chevrolet Meriva]], [[w:Opel Zafira#Zafira A (1999–2006)|Chevrolet Zafira]] (all until 2012)<br />[[w:Chevrolet Chevette|Chevrolet Chevette]], [[w:Chevrolet Chevette#Chevy 500|Chevrolet Chevy 500]], [[w:Chevrolet Kadett|Chevrolet Kadett]] 1989-1996, [[w:Chevrolet S-10#Second generation (1994)|Chevrolet S-10]], [[w:Chevrolet C/K#1997–2002|Chevrolet Silverado D20]], Chevrolet 11000/12000/14000/22000, [[w:GMC Chevette|GMC Chevette]], [[w:GMC Chevette|GMC 500]], [[w:Chevrolet C/K#1997–2002|GMC 6-100/6-150/3500HD]], [[w:Chevrolet Kodiak#Second generation (1990–2002)|GMC 12-170/14-190/16-220]], [[w:Isuzu Forward|GMC 15-190]]
Engines including: [[w:Chevrolet Stovebolt engine#261|Chevrolet Jobmaster 261 I6]], [[w:Chevrolet 153 4-cylinder engine#Brazil|Chevrolet 153 4-cylinder]], [[w:Chevrolet Turbo-Thrift engine|Chevrolet Turbo-Thrift engine]], [[w:GM Family 1 engine|GM Family 1 engine]], [[w:GM Family II engine|GM Family II engine]]<br />Detroit Diesel Series 53<br />Transmissions
|-
|G||[[Silao Assembly]]||[[w:Silao, Mexico|Silao]]||[[w:Mexico|Mexico]]||[[w:Chevrolet Silverado|Chevrolet Silverado]] (2006-)<br />[[w:Chevrolet Silverado|GMC Sierra]] (2006-), Chevrolet Cheyenne (Mexico)||1995|| || Stamping plant added in 1997. Began by building full-size SUVs for 1995. Was the sole assembler of GM's full-size SUTs. Began building full-size pickups for 2006. Full-size SUV production moved entirely to Arlington Assembly after the 2009 model year.<br> Past production models: [[w:Chevrolet Suburban|Chevrolet Suburban]] (1995-2009), [[w:Chevrolet Suburban#Eighth generation (1992)|GMC Suburban]] (1995-1999), [[w:GMC Yukon XL|GMC Yukon XL]] (2000-2006), [[w:Cadillac Escalade#Second generation (2002)|Cadillac Escalade ESV]] (2003-2006),<br> [[w:Chevrolet Suburban (eighth generation)#Holden Suburban|Holden Suburban (K8)]] (1998-2001),<br> [[w:Chevrolet Avalanche|Chevrolet Avalanche]] (2002-2013),<br> [[w:Cadillac Escalade EXT|Cadillac Escalade EXT]] (2002-2013)
|-
| ||Silao Engine||[[w:Silao, Mexico|Silao]]||[[w:Mexico|Mexico]]||[[w:General Motors LS-based small-block engine#Generation V (2013–present)|Gen V Small Block V8]]||2001|| ||[[w:General Motors LS-based small-block engine#Generation IV (2005–2020)|Gen IV Small Block V8]]
|-
| ||Silao Transmission||[[w:Silao, Mexico|Silao]]||[[w:Mexico|Mexico]]||[[w:GM 8L45 transmission|8L45]], [[w:GM 8L90 transmission|8L90]], [[w:Ford-GM 10-speed automatic transmission|10L80]]||2008|| ||[[w:GM 6L50 transmission|6L50]], [[w:GM 6L80 transmission|6L80/90]]
|-
|Z,<br />S (Traverse & Vue)||[[w:Spring Hill Manufacturing|Spring Hill Manufacturing]]||[[w:Spring Hill, Tennessee|Spring Hill, Tennessee]]||United States||<br /> [[w:Cadillac XT5|Cadillac XT5]]<br> (2017-2026)<br />[[w:Cadillac Lyriq|Cadillac Lyriq]] (2023-) <br />[[w:Cadillac Vistiq|Cadillac Vistiq]] (2026-) <br /><br /> [[w:Chevrolet Blazer (crossover)|Chevrolet Blazer]] (Starting 2027) <br /> <br />[[w:GM small gasoline engine#1.5|1.5L Turbo I4]]<br />[[w:GM Ecotec engine#Generation III|Ecotec Gen III 2.0L Turbo I4]]<br />[[w:GM L3B engine|2.7L L3B turbo I4]]<br />5.3 & 6.2 [[w:LS based GM small-block engine#Generation V (2013–present)|Gen V <br />Small-Block V8 Engine]]<br /><br />Stamping<br />Components||1990||2009-2012||Located at 100 Saturn Parkway. The original home of the [[w:Saturn Corporation|Saturn]] brand. Originally, Saturn built everything here - all its vehicles, engines, transmissions, stampings, and components. But, gradually, Saturn production was broadened to other plants and by 2007, Saturn production in Spring Hill had ended. Spring Hill made products for other GM brands and has continued to do so since Saturn was closed down during GM's bankruptcy. <br />
Past models: [[w:Saturn S-Series|Saturn S-Series]] (1991-2002), [[w:Saturn Ion|Saturn Ion]] (2003-2007), [[w:Saturn Vue#First generation (2002)|Saturn Vue]] (2002-2007), [[w:Chevrolet Traverse#First generation (2009)|Chevrolet Traverse]] (2009-2010), [[w:Chevrolet Equinox#Second generation (2010)|Chevrolet Equinox]] (2013-2016), [[w:GMC Acadia#Second generation (2017)|GMC Acadia]] (2017-2023), [[w:Holden Acadia|Holden Acadia (AC)]], [[w:Cadillac XT6|Cadillac XT6]] (2020-2025),<br /> [[w:Acura ZDX#Second generation (2024)|Acura ZDX EV]] (2024).<br />
Past Engines: [[w:Saturn I4 engine|Saturn I4 engine]], [[w:GM Ecotec engine#2.4|Ecotec Gen II 2.4L I4]],<br> [[w:GM Ecotec engine#LHU (A20NFT Opel)|Ecotec Gen II LHU 2.0L Turbo I4]], [[w:GM Ecotec engine#Generation III|Ecotec Gen III 2.5L I4]] <br />
[[w:Saturn MP transmission|Saturn MP series manual and automatic transmissions]] Transmission production in Spring Hill ended in 2002.
Ion production ended March 28, 2007 and was replaced by the Belgian-built Astra for the 2008 model year. Vue production ended March 30, 2007 and moved to Mexico for the 2008 model year. Assembly was idled for more than a year beginning April 1, 2007 for conversion to Chevy Traverse production. Traverse production began September 2, 2008. Assembly idled in November 2009 when Chevy Traverse production was moved to Lansing Delta Township Assembly. Assembly reopened in September 2012<ref>{{cite news| url=https://www.nytimes.com/2011/09/18/business/general-motors-said-to-offer-bonuses-in-new-deal-with-workers.html | work=The New York Times | author1=Bill Vlasic | author2=Nick Bunkley | title=G.M. Will Offer Bonuses in New Deal With Workers | date=September 17, 2011}}</ref> to produce the [[w:Chevrolet Equinox#Second generation (2010)|Chevrolet Equinox]].
Spring Hill also includes a plastic injection molding operation that produce various plastic components. Plastic components have also been produced for models not built in Spring Hill such as [[w:Chevrolet Traverse|Chevrolet Traverse]] and the [[w:Chevrolet Corvette (C7)|Chevrolet Corvette (C7)]].
|-
| ||[[w:St. Catharines Engine Plant|St. Catharines Propulsion Plant]]||[[w:St. Catharines, Ontario|St. Catharines, Ontario]]||[[w:Canada|Canada]]||[[w:General Motors LS-based small-block engine#Generation V (2013–present)|Gen V Small Block V8]]<br />[[w:Tremec|Tremec]] TR-9080 8-speed dual clutch transmission<br />Engine components||1954|| ||Located at 570 Glendale Avenue. Operated as part of GM subsidiary McKinnon Industries, Ltd. until 1969 when it became "General Motors of Canada Limited, St. Catharines".<br />Previously:<br />[[w:Chevrolet Turbo-Thrift engine|Chevrolet Turbo-Thrift I6 engine]] (1963-1967)<br />[[w:Oldsmobile V8 engine|Oldsmobile Rocket V8 engine]] (through 1966)<br />[[w:Buick V6 engine#225|Buick 225 V6 engine]] (through 1966)<br />[[w:Buick V8 engine|Buick V8 engine]] (300, 340, 401) (through 1966)<br /> [[w:General Motors 60° V6 engine|Chevrolet 60° OHV V6 engine]] (2.8, 3.1)<br />[[w:General Motors 60° V6 engine#LQ1|Chevrolet 3.4L DOHC LQ1 V6 engine]]<br />[[w:GM High Feature engine|High Feature V6 engine]] (2.8, 3.6)<br />[[w:Chevrolet small-block engine (first and second generation)|Chevrolet Small-Block V8]] (265/267/283/305/307/327/350)<br />[[w:General Motors LS-based small-block engine#Generation III (1997–2007)|Gen III Small Block V8]]<br />[[w:GM LS engine#Generation IV (2005–2020)|Gen IV Small Block V8]]<br />[[w:GM 6T40 transmission|(GF6) 6T45 6-speed automatic]]
|-
| ||[[w:Toledo Transmission|Toledo Transmission]]||[[w:Toledo, Ohio|Toledo, Ohio]]||United States||Transmissions:<br /> RWD GM-Allison 10-speed (10L1000) (AB1V) / 8-speed ([[w:GM 8L45 transmission|8L45]] & [[w:GM 8L90 transmission|8L90]]) <br /> FWD GF9 9 Speed Transmissions||1956|| ||Located at 1455 West Alexis Road. Acquired from the former Martin-Parry Corporation in 1955. Replaced the older Toledo plant on Central Ave. <br />Previously:<br /> [[w:Turbo-Hydramatic#THM350|THM350 3-speed automatic]]<br />[[w:Turbo-Hydramatic#THM700R4 / 4L60 / 4L60E / 4L65E / 4L70E|THM700R4/4L60 4-speed automatic]]<br />[[w:GM 4L60-E transmission|4L60-E/4L65-E/4L70-E 4-speed automatic]]<br />[[w:GM 6T40 transmission|(GF6) 6T30/35/40/45/50 6-speed automatic]] <br /> ([[w:GM 6L50 transmission|6L45/6L50]] & [[w:GM 6L80 transmission|6L80/6L90]]) 6-speed automatics
|-
|| ||Toluca Engine||[[w:Toluca|Toluca]], [[w:State of Mexico|State of Mexico]]
|[[w:Mexico|Mexico]]
|[[w:GM small gasoline engine|GM Small Gasoline Engine 1.4L/1.5L I4]] (including 1.5 turbo LSD I4 for Equinox/Terrain)
[[w:Chevrolet 153 4-cylinder engine#Vortec 3000|Vortec 3000 Marine & Industrial 4-cyl. engine]]<br />
5.0 & 5.7 Marine & Industrial V8 engines<br />
Small-Block V8 engines for the aftermarket<br />
Aluminum Foundry<br />
|1965
|
|Past engines:
[[w:GM Family 1 engine|GM Family 1 I4 engine]] <br />[[w:Chevrolet Turbo-Thrift engine#292|Chevrolet 292 (4.8L) Inline-6]]
|-
| ||[[w:Tonawanda Engine|Tonawanda Engine]]||[[w:Buffalo, New York|Buffalo, New York]]||United States||[[w:LS based GM small-block engine#LV1|LV1]] 4.3L V6
[[w:LS based GM small-block engine#L84|L84]] 5.3L V8
[[w:LS based GM small-block engine#L86/L87|L87]] 6.2L V8
[[w:General Motors LS-based small-block engine#LT2|LT2]] 6.2L V8
[[w:LS based GM small-block engine#L8T|L8T]] 6.6L V8
[[w:GM Ecotec engine#LSY|LSY]] 2.0T I4
|1938
| ||Located at 2995 River Rd. Includes 3 plants. Plant #1 opened in 1938. Plant #4 opened in 1941. Plant #5 opened in 2001.
Past engines:
Built the [[w:Pratt & Whitney R-1830 Twin Wasp|Pratt & Whitney R-1830 Twin Wasp]] radial engine used in the [[w:B-24 Liberator|B-24 Liberator]] bomber during WW-2
Built the [[w:Pratt & Whitney R-2800 Double Wasp|Pratt & Whitney R-2800 Double Wasp]] radial engine used in the [[w:P-61 Black Widow|P-61 Black Widow]] & [[w:P-47 Thunderbolt|P-47 Thunderbolt]] fighters during WW-2
[[w:Chevrolet 2300 engine|Chevrolet 2300 engine]] (Vega I4)
[[w:General Motors 122 engine|Chevrolet 122 engine]] (1.8/2.0/2.2L OHV I4)
[[w:GM Ecotec engine#2.2|Ecotec 2.2L Gen I]] (L850)
[[w:GM Ecotec engine#2.2_2|Ecotec 2.2L Gen II]], [[w:GM Ecotec engine#2.4|Ecotec 2.4L Gen II]]
[[w:GM Ecotec engine#LTG|Ecotec Gen III LTG 2.0T I-4]], [[w:GM Ecotec engine#2.5|Ecotec 2.5L Gen III]]
[[w:General Motors Atlas engine#LK5 (Vortec 2800)|Atlas 2.8/2.9 I4]]<br />[[w:General Motors Atlas engine#L52 (Vortec 3500)|Atlas 3.5/3.7 I5]]
[[w:Chevrolet Turbo-Air 6 engine|Corvair Flat-6 (all)]]
[[w:Chevrolet Stovebolt engine#Second generation: 1937–1962|Chevrolet Stovebolt / Blue Flame I6]]
[[w:Chevrolet 90° V6 engine|Chevrolet 3.3L/3.8L/4.3L 90° V6]]
[[w:General Motors 60° V6 engine|Chevrolet 60° V6 engine]], [[w:GM High Value engine|High Value 3.9L V6]]
[[w:Chevrolet small-block engine (first and second generation)|Chevrolet Small-Block V8]]
[[w:Chevrolet Big-Block engine|Chevrolet Big-Block V8]]
Gen V Small-Block 90° V6/V8: [[w:LS based GM small-block engine#LV3|LV3]] 4.3L V6, [[w:LS based GM small-block engine#L82|L82]] 5.3L V8, [[w:LS based GM small-block engine#L83|L83]] 5.3L V8, [[w:LS based GM small-block engine#L86|L86]] 6.2L V8, [[w:LS based GM small-block engine#LT1|LT1]] 6.2L V8, [[w:LS based GM small-block engine#LT4|LT4 6.2L Supercharged V8]]
|-
| ||[[w:Ultium#Production|Ultium Cells LLC - Spring Hill]]||[[w:Spring Hill, Tennessee|Spring Hill, Tennessee]]||United States||Ultium lithium-ion battery cells for EV's,<br> LFP batteries for energy storage systems||2024|| || Owned by Ultium Cells LLC, a 50/50 joint venture between General Motors and [[w:LG Energy Solution|LG Energy Solution]]. This is Ultium Cells' second plant. Located at 301 Donald F Ephlin Pkwy.
|-
| ||[[w:Ultium#Production|Ultium Cells LLC - Warren]]||[[w:Warren, Ohio|Warren, Ohio]]||United States||Ultium lithium-ion battery cells for EV's||2022|| || Owned by Ultium Cells LLC, a 50/50 joint venture between General Motors and [[w:LG Energy Solution|LG Energy Solution]]. This is Ultium Cells' first plant. Located at 7400 Tod Ave SW.
|-
|1||[[w:Wentzville Assembly|Wentzville Assembly]]||[[w:Wentzville, Missouri|Wentzville, Missouri]]||United States||[[w:Chevrolet Express|Chevrolet Express]] (1996-)<br />[[w:GMC Savana|GMC Savana]] (1996-)<br />[[w:Chevrolet Colorado|Chevrolet Colorado]] (2015-)<br />[[w:GMC Canyon|GMC Canyon]] (2015-)||1983|| ||Located at 1500 E. Rte. A. Originally opened to build the 1985 Fwd C-bodies. Began building Fwd H-bodies for 1986. On Oct. 29, 1991, Wentzville built the 30 millionth Pontiac, a white 1992 Bonneville SSEi. Ended passenger car production in 1994. Converted to truck production. Began building full-size vans in 1996. Added midsize pickups in 2014. <br />Past models: [[w:Buick Electra#Sixth generation (1985–1990)|Buick Electra]] (1985-1990), [[w:Buick Park Avenue#First generation (1991–1996)|Buick Park Avenue]] (1991-1994), [[w:Oldsmobile 88#Ninth generation (1986–1991)|Oldsmobile Delta 88/88]] (1986-1991),<br> [[w:Oldsmobile 88#Tenth generation (1992–1999)|Oldsmobile 88]] (1992-1993), [[w:Oldsmobile 98#Eleventh generation (1985–1990)|Oldsmobile 98]] (1985-1989), [[w:Oldsmobile Touring Sedan|Oldsmobile Touring Sedan]] (1989),<br> [[w:Pontiac Bonneville#Eighth generation (1987–1991)|Pontiac Bonneville]] (1989-1991), [[w:Pontiac Bonneville#Ninth generation (1992–1999)|Pontiac Bonneville]] (1992-93)
|-
|A||[[w:SAIC-GM|SAIC-GM]] Shanghai plant||[[w:Jinqiao|Jinqiao]], [[w:Pudong|Pudong]] district, [[w:Shanghai|Shanghai]]||[[w:China|China]]||[[w:Cadillac CT4|Cadillac CT4]]<br />[[w:Cadillac CT5|Cadillac CT5]]<br />[[w:Cadillac CT6|Cadillac CT6]]<br />[[w:Cadillac Lyriq|Cadillac Lyriq]]<br />[[w:Cadillac Vistiq|Cadillac Vistiq]]<br>[[w:Cadillac XT4|Cadillac XT4]]<br />[[w:Cadillac XT5|Cadillac XT5]]<br />[[w:Cadillac XT6|Cadillac XT6]]<br />[[w:Buick Enclave#China (2020)|Buick Enclave]]<br />[[w:Buick GL8#Third generation (2017–present)|Buick GL8 ES/Avenir/PHEV (Mk III)]]<br />[[w:Buick GL8#Fourth generation (2022)|Buick GL8 Century (Mk IV)]]<br />[[w:Buick GL8#Electra Encasa (2025)|Buick Electra Encasa (Mk V)]]<br />[[w:Buick LaCrosse|Buick LaCrosse]]<br />[[w:Buick Regal#Sixth generation (2018)|Buick Regal]] (E2XX)<br />Engines<br />Engine components<br />Transmissions<br />Ultium batteries||1998|| ||Operated by [[w:SAIC-GM|SAIC-GM]]. There are 3 vehicle production plants (North, South, & East). North was the original plant. South began production in 2005. The East or "Cadillac" plant began production in 2016. On October 28, 2025, the Shanghai plant produced its 4 millionth vehicle, a 2026 Cadillac XT5.
Past models: [[w:Buick Century#Sixth generation (1997–2005)|Buick New Century]] (W-body)<br />[[w:Buick Excelle#First generation (J200; 2003)|Buick Excelle]]<br />[[w:Buick GL8#First generation (2000–2016)|Buick GL8 Mk I (1999-2004)]]<br />[[w:Buick Park Avenue#Third generation (2007–2012)|Buick Park Avenue (WM)]] (CKD)<br />[[w:Buick Regal#China|Buick Regal]] (W-body)<br />[[w:Buick Regal#Fifth generation (2008)|Buick Regal]] (Epsilon II)<br />[[w:Buick Sail|Buick Sail]]<br />[[w:Buick Velite 5|Buick Velite 5]]<br />[[w:Buick Velite 7|Buick Velite 7]]<br />[[w:Chevrolet Malibu#Eighth generation (2013)|Chevrolet Malibu]]<br />[[w:Chevrolet Malibu#Ninth generation (2016)|Chevrolet Malibu XL]]<br />[[w:Chevrolet Blazer (crossover)#Chinese version|Chevrolet Blazer]]<br />[[w:Cadillac ATS#ATS-L|Cadillac ATS-L]]<br />[[w:Cadillac CTS#First generation (2003)|Cadillac CTS]]<br />[[w:Cadillac STS#Chinese Cadillac SLS|Cadillac SLS]]<br />[[w:Cadillac XTS|Cadillac XTS]]<br />
Past Engines: [[w:General Motors 60° V6 engine#Production in China by SAIC-GM|Chevrolet 60° OHV V6]]
|-
|D||[[w:SAIC-GM|SAIC-GM]] Dongyue Motors||[[w:Yantai|Yantai]], [[w:Shandong|Shandong]]||[[w:China|China]]||[[w:Buick Envision|Buick Envision]]<br />[[w:Cadillac GT4|Cadillac GT4]]||2001|| ||Operated by [[w:SAIC-GM|SAIC-GM]]. Originally founded in 2001 as Yantai Bodyshop Corp. which built Daewoo vehicles ([[w:Daewoo Lanos|Daewoo Lanos]]) under license from Daewoo Motor Co. SAIC-GM took over the plant in 2002. There are 2 vehicle production plants (North & South). SAIC-GM Dongyue Motors joint venture is owned 50% by SAIC-GM, 25% by GM China, & 25% by SAIC. <br />
Past models: [[w:Buick Encore#First generation (2013)|Buick Encore]]<br />[[w:Buick Encore GX|Buick Encore GX]]<br />[[w:Buick Encore GX|Buick Encore Plus]]<br />[[w:Buick Excelle#Second generation (2018)|Buick Excelle]]<br />[[w:Buick Excelle GT#First generation (2009)|Buick Excelle GT/XT]]<br />[[w:Chevrolet Sail#Buick Sail|Buick Sail]]<br />[[w:Chevrolet Aveo#Second generation (T300; 2012)|Chevrolet Aveo (T300)]]<br />[[w:Chevrolet Sail#Third generation (2014)|Chevrolet Aveo (Mex.)]]<br />[[w:Chevrolet Sail#Chevrolet Sail|Chevrolet Corsa Plus (Chile)]]<br />[[w:Daewoo Magnus|Chevrolet Epica (V200)]]<br />[[w:Daewoo Tosca|Chevrolet Epica]] (V250)<br />[[w:Chevrolet Aveo (T200)|Chevrolet Lova]]<br />[[w:Chevrolet Lova RV|Chevrolet Lova RV]]<br />[[w:Chevrolet Onix#Second generation (2019)|Chevrolet Onix]]<br />[[w:Chevrolet Orlando#Second generation (2018)|Chevrolet Orlando]]<br />[[w:Chevrolet Sail|Chevrolet Sail]]<br />[[w:Chevrolet Trailblazer (crossover)|Chevrolet Trailblazer]]<br />[[w:Chevrolet Trax|Chevrolet Trax]]
|-
| ||[[w:SAIC-GM|SAIC-GM]] Dongyue Powertrain||[[w:Yantai|Yantai]], [[w:Shandong|Shandong]]||[[w:China|China]]||Engines<br />Transmissions including: [[w:GM 6T40 transmission|6T30/6T40/6T45/6T50]], [[w:Continuously variable transmission|CVT]]||1999|| ||Operated by [[w:SAIC-GM|SAIC-GM]]. Originally founded in 1999 as Shandong Daewoo Automotive Engine Co., Ltd., a 50/50 joint venture between Daewoo Motor Co. & Chinese partners owned by the Shandong provincial govt. SAIC-GM took over the plant in 2005. SAIC-GM Dongyue Powertrain joint venture is owned 50% by SAIC-GM, 25% by GM China, & 25% by SAIC. <br />
Past Engines: [[w:GM Family 1 engine#Generation III|Family I, Gen 3 engine]]
|-
| ||[[w:SAIC-GM|SAIC-GM]] Norsom Motors||[[w:Shenyang|Shenyang]], [[w:Liaoning|Liaoning]]||[[w:China|China]]|| ||1992||2025||Operated by [[w:SAIC-GM|SAIC-GM]]. Originally founded in 1992 as Jinbei GM Automotive Co. Ltd., a 30/70 joint venture between GM & Shenyang Jinbei Automotive. Restructured into a 50/50 joint venture between GM & Jinbei in 1998. SAIC-GM took over the joint venture in 2004, buying out Jinbei. The new SAIC-GM Norsom Motors joint venture is owned 50% by SAIC-GM, 25% by GM China, & 25% by SAIC. Plant closed in February 2025 due to declining sales in China by SAIC-GM.
Past models:<br /> Jinbei GM:<br />[[w:Chevrolet S-10 Blazer#Second generation (1995–2005)|Chevrolet Blazer]]<br />[[w:Chevrolet S-10#Second generation (1994)|Chevrolet S-10 Crew Cab]]<br />SAIC-GM:<br />[[w:Chevrolet Cruze|Chevrolet Cruze]]<br />[[w:Chevrolet Captiva#First generation (C100, C140; 2006)|Chevrolet Captiva]]<br />[[w:Chevrolet Tracker (2019)|Chevrolet Tracker]] <br />[[w:Chevrolet Seeker|Chevrolet Seeker]]<br/> [[w:Buick Encore#Second generation (2020)|Buick Encore]]<br />[[w:Buick Envista|Buick Envista]]<br />[[w:Buick GL8#First generation (2000–2016)|Buick GL8 Mk I (2004-2016)]]<br />[[w:Buick GL8#Second generation (2010-present)|Buick GL8 Land Business Class (Mk II) (2010-2025)]]<br />[[w:Buick Verano#Second generation (2016)|Buick Verano]] <br/> Engines
|-
|V||[[w:SAIC-GM|SAIC-GM]] Wuhan Branch||[[w:Wuhan|Wuhan]], [[w:Hubei|Hubei]]||[[w:China|China]]||[[w:Buick Verano#Third generation (Pro, 2021)|Buick Verano Pro]]<br />[[w:Buick Velite 6|Buick Velite 6]]<br />[[w:Buick Electra E5|Buick Electra E5]]<br />[[w:Buick Electra L7|Buick Electra L7]]<br />[[w:Buick Electra E7|Buick Electra E7]]<br />[[w:Cadillac Optiq|Cadillac Optiq]]<br /> Engines||2015<ref>{{Cite news |author=Joseph Szczesny |date=30 January 2015 |title=Ford, GM Implement Expansion Plans in China |work=The Detroit Bureau |url=https://www.thedetroitbureau.com/2015/01/ford-gm-implement-expansion-plans-in-china/ |access-date=19 June 2022}}</ref>|| ||Operated by [[w:SAIC-GM|SAIC-GM]].<ref>{{Cite news |author=Jamie L. LaReau |date=27 February 2020 |title=Restart of GM's plant in China stalls due to coronavirus crisis |work=Detroit Free Press |url=https://www.freep.com/story/money/cars/general-motors/2020/02/27/gm-delays-start-production-china-plant-due-coronavirus-crisis/4884203002/ |access-date=19 June 2022}}</ref>
Past models: [[w:Chevrolet Cavalier#China|Chevrolet Cavalier]] <br />[[w:Chevrolet Monza (China)|Chevrolet Monza]]<br />[[w:Chevrolet Menlo|Chevrolet Menlo]]<br />[[w:Chevrolet Equinox#Third generation (2018)|Chevrolet Equinox]]<br />[[w:Chevrolet Equinox#Fourth generation (2025)|Chevrolet Equinox Plus]]<br />[[w:Buick Electra E4|Buick Electra E4]]<br />[[w:Buick Excelle GT#Second generation (2015)|Buick Excelle GT/GX]]<ref>{{Cite news |author=Sam McEachern|date=28 February 2020 |title=GM Delays Production Restart At Wuhan Plant As Coronavirus Crisis Continues |work=GM Authority |url=https://gmauthority.com/blog/2020/02/gm-delays-production-restart-at-wuhan-plant-as-coronavirus-crisis-continues/ |access-date=19 June 2022}}</ref><br />[[w:Buick GL6|Buick GL6]]
|-
| ||[[w:SAIC-GM-Wuling|SAIC-GM-Wuling]] (HQ plant)||[[w:Liuzhou|Liuzhou]], [[w:Guangxi Zhuang Autonomous Region|Guangxi Zhuang Autonomous Region]]||[[w:China|China]]|| [[w:SAIC-GM-Wuling|Wuling]] models<br />Engines||1982|| ||Operated by [[w:SAIC-GM-Wuling|SAIC-GM-Wuling]]. There are 2 vehicle production plants (East & West). SAIC & GM jointly created the joint venture with Wuling in 2002. The SAIC-GM-Wuling joint venture was originally owned 50.1% by SAIC, 34% by GM China, & 15.9% by Liuzhou Wuling Automobile Industry Co., Ltd. Since 2011, SAIC-GM-Wuling is now owned 50.1% by SAIC, 44% by GM China, & 5.9% by Liuzhou Wuling Motors Co., Ltd. Engine plant added in 2007.
Past models: [[w:Chevrolet Spark#Lechi (China)|Chevrolet Lechi (Spark)]], [[w:Baojun 630|Baojun 630]]
|-
| ||[[w:SAIC-GM-Wuling|SAIC-GM-Wuling]] [[w:Baojun|Baojun]] Base||Liudong New District, [[w:Liuzhou|Liuzhou]], [[w:Guangxi Zhuang Autonomous Region|Guangxi Zhuang Autonomous Region]]||[[w:China|China]]|| [[w:Baojun|Baojun]] models<br />Engines||2012|| ||Operated by [[w:SAIC-GM-Wuling|SAIC-GM-Wuling]]. SAIC & GM jointly created the joint venture with Wuling in 2002. The SAIC-GM-Wuling joint venture was originally owned 50.1% by SAIC, 34% by GM China, & 15.9% by Liuzhou Wuling Automobile Industry Co., Ltd. Since 2011, SAIC-GM-Wuling is now owned 50.1% by SAIC, 44% by GM China, & 5.9% by Liuzhou Wuling Motors Co., Ltd. Engine plant added in 2015.
Past models: [[w:Chevrolet Spark#Lechi (China)|Baojun Lechi]], [[w:Baojun 610|Baojun 610]], [[w:Baojun 630|Baojun 630]]
|-
| ||[[w:SAIC-GM-Wuling|SAIC-GM-Wuling]] Chongqing Branch||[[w:Chongqing|Chongqing]]||[[w:China|China]]|| [[w:SAIC-GM-Wuling|Wuling]] models<br />Engines||2014|| ||Operated by [[w:SAIC-GM-Wuling|SAIC-GM-Wuling]]. Since 2011, SAIC-GM-Wuling is owned 50.1% by SAIC, 44% by GM China, & 5.9% by Liuzhou Wuling Motors Co., Ltd.
|-
| ||[[w:SAIC-GM-Wuling|SAIC-GM-Wuling]] Qingdao Branch||[[w:Qingdao|Qingdao]], [[w:Shandong|Shandong]]||[[w:China|China]]|| [[w:SAIC-GM-Wuling|Wuling]] models<br />Engines||2000|| ||Operated by [[w:SAIC-GM-Wuling|SAIC-GM-Wuling]]. Originally founded in 1997 as [[w:Etsong Vehicle Manufacturing|Etsong Vehicle Manufacturing]]. SAIC-GM-Wuling took over the plant in 2005. Since 2011, SAIC-GM-Wuling is owned 50.1% by SAIC, 44% by GM China, & 5.9% by Liuzhou Wuling Motors Co., Ltd. Engine plant added in 2009.
|-
|J||[[w:SGMW Motor Indonesia|SGMW Motor Indonesia]]||[[w:Cikarang|Cikarang]], [[w:West Java|West Java]]||[[w:Indonesia|Indonesia]]|| [[w:Wuling Air EV|Wuling Air EV]]<br />[[w:Wuling Aira EV|Wuling Aira EV]]<br>[[w:Wuling Binguo|Wuling Binguo EV]]<br />[[w:Wuling Cloud EV|Wuling Cloud EV ]]<br />[[w:Wuling Almaz|Wuling Almaz]]<br />[[w:Wuling Alvez|Wuling Alvez]]<br />[[w:Wuling Eksion|Wuling Eksion]]<br>[[w:Wuling Confero|Wuling Confero]]<br />[[w:Wuling Cortez|Wuling Cortez]]<br />[[w:Wuling Darion|Wuling Darion]]<br>[[w:Wuling Formo|Wuling Formo]]<br />[[w:Wuling Mitra EV|Wuling Mitra EV]]<br>[[w:MG4 EV|MG4 EV]], [[w:MG ZS (crossover)|MG ZS EV]], [[w:MGS5 EV|MGS5 EV]]<br>Battery packs||2017|| ||100% owned and operated by [[w:SAIC-GM-Wuling|SAIC-GM-Wuling]]. Since 2011, SAIC-GM-Wuling is owned 50.1% by SAIC, 44% by GM China, & 5.9% by Liuzhou Wuling Motors Co., Ltd. In 2024, SGMW Motor Indonesia began producing MG models on behalf of PT SAIC Motor Indonesia. MG is owned by SAIC, a shareholder of SGMW.
Past models: [[w:Chevrolet Captiva#Second generation (CN202S; 2019)|Chevrolet Captiva]]
|}
== Current partner factories ==
{| class="wikitable sortable" style="font-size:90%"
!VIN !! Name !! City/State !! Country !! class="unsortable" | Products !! Opened !! Idled !! class="unsortable" | Comments
|-
| ||[[Azermash CP LLC]]||[[w:Hajiqabul|Hajiqabul]]||[[w:Azerbaijan|Azerbaijan]]||[[w:Chevrolet Cobalt#Second generation (2011)|Chevrolet Cobalt]], [[w:Chevrolet Lacetti|Chevrolet Lacetti]], [[w:Chevrolet Malibu#Ninth generation (2016)|Chevrolet Malibu]], [[w:Chevrolet Onix#Second generation (2019)|Chevrolet Onix]], [[w:Chevrolet Aveo (T200)|Chevrolet Nexia (T250)]], [[w:Chevrolet Tracker (2019)|Chevrolet Tracker]], [[w:Suzuki Carry#Daewoo Damas|Chevrolet Damas/Labo]] ||2017|| ||Built under contract by Azermash CP LLC for GM & UzAuto Motors.
|-
|A||[[w:GM Uzbekistan|GM Uzbekistan]]/[[w:UzAuto Motors|UzAuto Motors]]||[[w:Asaka, Uzbekistan|Asaka]], [[w:Andijan Region|Andijan Region]]||[[w:Uzbekistan|Uzbekistan]]||[[w:Chevrolet Cobalt#Second generation (2011)|Chevrolet Cobalt]], [[w:Chevrolet Lacetti|Chevrolet Lacetti]], [[w:Chevrolet Onix#Second generation (2019)|Chevrolet Onix]], [[w:Chevrolet Tracker (2019)|Chevrolet Tracker (2022-)]]||1996|| ||Originally established as Uz-DaewooAuto, a 50/50 joint venture between Daewoo Motor & the Uzbek government. Became GM Uzbekistan, a 25/75 joint venture between GM & state owned UzAvtosanoat in 2008. GM was bought out by the Uzbek govt. in 2019 & the company was renamed UzAuto Motors. Vehicles now built under license from GM by UzAuto Motors.
Previous models: [[w:Daewoo Tico|Daewoo Tico]], [[w:Chevrolet Spark#First generation (M100, M150; 1998)|Daewoo Matiz (M150)]], [[w:Daewoo Nexia|Daewoo Nexia]], [[w:Daewoo Nexia|Chevrolet Nexia]], [[w:Daewoo Gentra#Uzbekistan (2013–2015)|Daewoo Gentra]], [[w:Daewoo Damas|Daewoo Damas]], [[w:Daewoo Labo|Daewoo Labo]], [[w:Chevrolet Captiva#First generation (C100, C140; 2006)|Chevrolet Captiva]], [[w:Chevrolet Epica|Chevrolet Epica]], [[w:Chevrolet Aveo (T200)|Chevrolet Nexia 3]], [[w:Chevrolet Spark#Third generation (M300; 2009)|Chevrolet Spark (M300)]], [[w:Chevrolet Tacuma|Chevrolet Tacuma]], [[w:Chevrolet Trax|Chevrolet Tracker]], [[w:Chevrolet Spark#First generation (M100, M150; 1998)|Ravon Matiz]], [[w:Chevrolet Spark#Third generation (M300; 2009)|Ravon R2]], [[w:Chevrolet Aveo#Ravon Nexia R3|Ravon Nexia R3]], [[w:Chevrolet Cobalt#Second generation (2011)|Ravon R4]], [[w:Daewoo Gentra|Ravon Gentra R5]]
|-
| ||[[w:GM Uzbekistan|GM Uzbekistan]]/[[w:UzAuto Motors|UzAuto Motors]]||[[w:Pitnak|Pitnak]], [[w:Khorezm Region|Khorezm Region]]||[[w:Uzbekistan|Uzbekistan]]||[[w:Chevrolet Damas|Chevrolet Damas]]<br> [[w:Chevrolet Labo|Chevrolet Labo]] ||2014|| ||Was part of GM Uzbekistan, a 25/75 joint venture between GM & state owned UzAvtosanoat formed in 2008. GM was bought out by the Uzbek govt. in 2019 & the company was renamed UzAuto Motors. Vehicles now built under license from GM by UzAuto Motors. In 2021, a new press shop opened at the Pitnak plant.
Previous models: [[w:Chevrolet Orlando#First generation (J309; 2010)|Chevrolet Orlando]], [[w:Daewoo Damas|Daewoo Damas]], [[w:Daewoo Labo|Daewoo Labo]]
|-
| ||[[w:GM Uzbekistan|GM Uzbekistan]]/[[w:UzAuto Motors|UzAuto Motors]]||[[w:Tashkent|Tashkent]]||[[w:Uzbekistan|Uzbekistan]]||Repair of used cars ||2009||2019||Was part of GM Uzbekistan, a 25/75 joint venture between GM & state owned UzAvtosanoat formed in 2008. GM was bought out by the Uzbek govt. in 2019 & the company was renamed UzAuto Motors. Vehicles now built under license from GM by UzAuto Motors. Plant assembled SKD vehicles. SKD production ended in 2019. Plant is now used to repair & overhaul used cars acquired as trade-ins for new cars, which are then resold by UzAuto.
Previous models: [[w:Chevrolet Captiva#First generation (C100, C140; 2006)|Chevrolet Captiva]], [[w:Chevrolet Malibu#Eighth generation (2013)|Chevrolet Malibu]], [[w:Chevrolet Malibu#Ninth generation (2016)|Chevrolet Malibu]], [[w:Chevrolet Trax|Chevrolet Tracker (initial production from SKD)]]
|-
| ||[[w:GM Uzbekistan|GM Powertrain Uzbekistan]]/[[w:GM Uzbekistan|UzAuto Motors Powertrain]]||[[w:Tashkent|Tashkent]]||[[w:Uzbekistan|Uzbekistan]]||[[w:Daewoo S-TEC engine|1.2L & 1.5L DOHC I4 engines]]<br />[[w:GM E-Turbo engine|1.2L GM E-Turbo I3 engine]]<br />Engine components (crankshaft, block, heads)<br />Aluminum Foundry ||2011|| ||GM Powertrain Uzbekistan is a 52/48 joint venture between GM & state owned UzAvtosanoat. In 2019, the company was renamed UzAuto Motors Powertrain after UzAvtosanoat bought out GM's share of the joint venture. It now builds engines & components under license from GM.
|-
|0,4,7,8,9||[[w:Isuzu|Isuzu]] Fujisawa plant||[[w:Fujisawa, Kanagawa|Fujisawa, Kanagawa]]||[[w:Japan|Japan]]||[[w:Isuzu Elf|Chevrolet Low Cab Forward 4500 & 5500 diesel]] (2016-)<br />[[w:Isuzu N-Series|Isuzu N-Series]]<br />[[w:Isuzu F-Series|Isuzu F-Series]]||1961|| ||[[w:Isuzu|Isuzu]] plant. <br /> Previous models:<br /> [[w:Isuzu Gemini#In other markets|Buick Opel]] (1976-1979) [Plant Code: 8]<br />[[w:Chevrolet LUV|Chevrolet LUV]] (1972-1982) [Plant Code: 8]<br />[[w:Chevrolet Spectrum|Chevrolet Spectrum]] (1985-1988)<br> [Plant Code: 8 ('85-'87), 7 ('88)]<br />[[w:Chevrolet W-Series|Chevrolet W-Series]] (1986-2009)<br> [Plant Code: 8 ('86-'87), 7 ('88-'09)]<br />[[w:Geo Spectrum|Geo Spectrum]] (1989) [Plant Code: 7]<br />[[w:Geo Storm|Geo Storm]] (1990-1993) [Plant Code: 7]<br />[[w:GMC W-Series|GMC W-Series]] (1986-2009)<br> [Plant Code: 8 ('86-'87), 7 ('88-'09)]<br />[[w:Isuzu Faster#First generation (1972–1980)|Bedford KB25]]<br />[[w:Isuzu Faster#Second generation (1980–1988)|Bedford KB26/41]]<br />[[w:Opel Campo#Third generation (TF; 1988–2002)|Opel Campo/Bedford Brava/Vauxhall Brava]]<br />[[w:Holden Jackaroo#First generation (1981)|Holden Jackaroo (Gen 1)]]<br />[[w:Opel Monterey#Second generation (1991)|Opel/Vauxhall Monterey/Holden Jackaroo (Gen 2)/Monterey]]<br />[[w:Holden Rodeo|Holden Rodeo]] (1981-2002) (KB/TF)<br />[[w:Holden Piazza#First generation (JR120/130; 1980)|Holden Piazza]]<br />[[w:Holden Shuttle|Holden Shuttle]]<br />[[w:Isuzu I-Mark|Isuzu I-Mark]], [[w:Isuzu Impulse|Isuzu Impulse]], [[w:Isuzu Stylus|Isuzu Stylus]]
|-
| ||PACE (Planta Automotiva do Ceará=Ceará Automotive Plant)||[[w:Horizonte, Ceará|Horizonte, Ceará]]||[[w:Brazil|Brazil]]||[[w:Chevrolet Spark EUV|Chevrolet Spark EUV]] (2026-),<br /> [[w:Wuling Starlight S|Chevrolet Captiva EV]]||2025|| ||Assembled from semi-knockdown kits imported from China under contract for GM. Production for GM began on December 3, 2025 with the Spark EUV. Production for non-GM brands is also expected. The plant is the former [[w:Troller|Troller]] plant that was bought by Ford in 2007 and closed in 2021. The plant is now operated by Comexport.
|-
| ||[[SaryarkaAvtoProm]]/<br>Allur Automobile Plant||[[w:Kostanay|Kostanay]]||[[w:Kazakhstan|Kazakhstan]]||[[w:Chevrolet Cobalt#Second generation (2011)|Chevrolet Cobalt]], [[w:Chevrolet Onix#Second generation (2019)|Chevrolet Onix]], [[w:Chevrolet Tracker (2019)|Chevrolet Tracker]]||2017|| ||Built under contract by SaryarkaAvtoProm for GM & UzAuto Motors.
Past models: [[w:Chevrolet Malibu#Ninth generation (2016)|Chevrolet Malibu]], [[w:Chevrolet Aveo (T200)|Chevrolet Nexia]], [[w:Chevrolet Niva|Chevrolet Niva]], [[w:Suzuki Carry#Daewoo Damas|Chevrolet Damas/Labo]], [[w:Chevrolet Aveo (T200)|Ravon Nexia R3]]
|-
|S||[[w:Shyft Group|Shyft Group]] - Charlotte plant||[[w:Charlotte, Michigan|Charlotte, Michigan]]||[[w:United States|United States]]||[[w:Isuzu Elf|Chevrolet Low Cab Forward 3500/4500/5500 gas]] (2016-)<br />[[w:Isuzu F-Series|Chevrolet Low Cab Forward 6500XD & 7500XD]] (2018- & 2023-)<br />[[w:Isuzu N-Series|Isuzu N-Series gas]] (2012-)<br />[[w:Isuzu F-Series|Isuzu FTR/FVR]] (2018- & 2023-)||1961|| ||[[w:Shyft Group|Shyft Group]] plant. Built under contract for Isuzu and GM.
|}
== Former factories ==
{| class="wikitable sortable" style="font-size:90%"
! style="width:20px;"|VIN
! style="width:60px;"| Name
! style="width:20px;"| City/State
! style="width:20px;"| Country
! style="width:90px;" class="unsortable" | Products
! style="width:10px;"| Opened
! style="width:10px;"| Idled
! style="width:190px;" class="unsortable" |Comments
|-
| ||AC Electronics||[[w:Oak Creek, Wisconsin|Oak Creek, Wisconsin]]||[[w:United States|United States]]||Automotive Electronics; Avionics, precision guidance systems, & electro-mechanical devices for military use and space exploration (Apollo program) ||1948||1999||Located at 7929 S. Howell Ave. First known as GM's Electronics Division. In 1965, the Milwaukee Operations became known as AC Electronics Division of GM. In 1970, the division merged with Delco Radio and became known as Delco Electronics Division. Spun off with Delphi Automotive Systems (Delphi Electronics & Safety) in 1999. Closed by Delphi in 2008. Is now Drexel Town Square, a retail, commercial, residential and civic development.
|-
| ||[[w:ACDelco#AC Spark Plug Division|AC Spark Plug Division]]||[[w:Flint, Michigan|Flint, Michigan]]||United States||AC Spark Plugs||1929||1975||Located on Industrial Ave at Harriet St. Built in 1909. Champion Ignition Co. moved here from their original location on the 3rd floor of a Buick building on Hamilton Ave. that they used from 1908. This complex was expanded multiple times and was on both sides of Industrial Ave. with 2 overhead walkways connecting the 2 sides. Champion Ignition Co. changed its name to AC Spark Plug in 1922. After founder Albert Champion died in 1927, GM took over AC Spark Plug in 1929. It became a GM division in 1933. Production gradually moved to the Flint East complex until the Industrial Ave. complex closed in 1975. Demolished in 1975-76. Site later used by Buick for parking as it was next to the Buick City complex.
|-
| ||[[w:Flint East|AC Spark Plug Flint East]]||[[w:Flint, Michigan|Flint, Michigan]]||United States||Components (spark plugs, dashboard components such as instrument clusters, fuel system components, air/oil/fuel filters, and fuel pumps)||1929||1999||Located at 1300 North Dort Highway. (Now referred to as 2926 Davison Road, which is the north side instead of the west side of the property.) Purchased by AC Spark Plug in 1925. Plant previously belonged to [[w:Dort Motor Car Company|Dort Motor Car Company]], which went out of business in 1924. Initially produced all products other than spark plugs that were made by AC Spark Plug Co. After founder Albert Champion died in 1927, GM took over AC Spark Plug in 1929. It became a GM division in 1933. Production gradually moved from the old Industrial Ave. complex to the Flint East complex until the Industrial Ave. complex closed in 1975. Became known as Flint East in 1987, when AC took over the "Chevy in the Hole" complex from Chevrolet on Flint's west side, which became known as Flint West. Became AC Rochester in 1988 when AC Spark Plug Division merged with Rochester Products Division. AC Rochester initially had its world headquarters here, just as AC Spark Plug had before the merger. Subsequently, AC Rochester headquarters moved to the Great Lakes Technology Center in the old Flint Fisher Body plant. In 1994, AC Rochester merged with Delco Remy and became AC Delco Systems. Grouped under GM's Delphi Automotive Systems subsidiary in 1995. Spun off with [[w:Delphi Corporation|Delphi Corporation]] in 1999. GM supplied the UAW workers from 2007 under agreement with Delphi and the UAW. Closed by Delphi in 2013.
|-
| ||[[w:ACDelco#AC Spark Plug Division|AC Spark Plug]]||[[w:Sioux City, Iowa|Sioux City, Iowa]]||[[w:United States|United States]]||[[w:Throttle#Throttle body|Throttle Body Fuel Injection Systems]]||1981||1993||Located at 1805 Zenith Drive. Formerly a Zenith Radio Factory. Now the headquarters of Bomgaars Supply, Inc.
|-
| ||[[w:ACDelco#AC Spark Plug Division|AC Spark Plug]]||[[w:Wichita Falls, Texas|Wichita Falls, Texas]]||United States||AC Air Filters||1972||1999||Located at 8600 Interstate 44 Service Rd. Spun off with Delphi Automotive Systems in 1999. Closed by Delphi in 2008. Now owned by Panda Biotech.
|-
| ||[[w:ACDelco#AC Spark Plug Division|AC Spark Plug Overseas Corp. - Kirkby plant]]||[[w:Kirkby|Kirkby]], [[w:Merseyside|Merseyside]], [[w:England|England]]||[[w:United Kingdom|United Kingdom]]||Instrument panels, Gauges, Fuel pumps, Fuel/temperature senders, Oil pressure switches, Radiator caps, Thermostats||1958||?||Plant is near Liverpool. Located on Moorgate Road. Kirkby was originally part of the AC-Delco division of GM Ltd. When the Kirkby plant opened in 1958, production of fuel pumps, thermostats, and instruments was moved there from the Dunstable components plant. In 1979, Kirkby became aligned with AC Spark Plug in the US. In 1982, GM Ltd. was dissolved and the Kirkby plant became part of AC Spark Plug Overseas Corp., part of GM Overseas Corp.
|-
| ||[[w:ACDelco#AC Spark Plug Division|AC Spark Plug Overseas Corp. - Southampton plant]]||[[w:Southampton|Southampton]], [[w:Hampshire|Hampshire]], [[w:England|England]]||[[w:United Kingdom|United Kingdom]]||Air filter elements, Oil filters, Fuel filters, Catalytic converters||1952||?|| Located on West Bay Road in the New Dock area of Southampton. Originally opened in 1938 as a vehicle assembly plant making Chevrolets (See listing for "GM Ltd."). Plant acquired by GM Ltd. in 1951. Southampton was originally part of AC-Sphinx Plug Co., a division of GM Ltd. In 1952, AC-Sphinx Plug Co. was renamed AC-Delco division of GM Ltd. When the Southampton plant opened in 1952, production of automotive filters (air filters, fuel filters) was moved there from the Dunstable components plant. In 1979, Southampton became aligned with AC Spark Plug in the US. In 1982, GM Ltd. was dissolved and the Southampton plant became part of AC Spark Plug Overseas Corp., part of GM Overseas Corp.
|-
| ||Allison,<br> [[w:Allison Transmission|Allison Transmission]], Allison Gas Turbine||[[w:Indianapolis|Indianapolis]], Indiana||United States||Allison Transmissions,<br> Engines for airplanes & helicopters,<br> Bearings and Gears||1929||2007||Located at 4700 W. 10th St. Founded in 1915 as Speedway Team Co. In 1920, it was renamed Allison Engineering Co. Acquired by GM in 1929, it became the Allison Division of GM. GM began designing the CD-850 transmission for tracked military vehicles in 1941; the design was completed in 1944 and Allison was awarded the contract to manufacture the prototypes. In February 1945, General Motors formed the Allison Transmission Engineering Section. In 1946, GM divided the division into 2 sections: Aircraft Operations and Transmission Operations. In 1970, Allison Division merged with the Detroit Diesel Engine Division to become the Detroit Diesel-Allison Division. In 1983, the aviation turbine engine operations were separated out to form a separate division called the Allison Gas Turbine Division. In 1987, the transmission operations are separated out to form the Allison Transmission Division. Allison Gas Turbine was sold in a management buyout in 1993 becoming the Allison Engine Company. [[w:Allison Engine Company|Allison Engine Company]] was then sold in 1995 to [[w:Rolls-Royce Holdings|Rolls-Royce PLC]]. GM sold Allison Transmission in 2007 to private equity groups Carlyle Group & Onex Corp., becoming Allison Transmission Inc. Allison went public as Allison Transmission Holdings Inc. in 2012, trading on the New York Stock Exchange.
|-
| ||Cadillac Amsterdam Street plant||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||[[w:Cadillac|Cadillac]]s||1903||1920||Cadillac's first volume production plant. Located at 450 Amsterdam Street, at the intersection with Cass Avenue. Rebuilt in 1904 after a fire destroyed the original plant. This plant predated Cadillac being part of GM. Replaced by the Clark Street plant in 1921.
|-
|5 (Plant 2)<br /><br /> 6 (Plant 1)<br /><br />9 (Pre-1976)||Antwerp||[[w:Antwerp|Antwerp]]||[[w:Belgium|Belgium]]||[[w:Opel Astra|Opel Astra]]/[[w:Vauxhall Astra|Vauxhall Astra]]<br />[[w:Opel Astra#Astra H (A04; 2004)|Opel/Vauxhall Astra GTC & OPC/VXR (H)]]<br />[[w:Opel Astra#TwinTop|Opel/Vauxhall Astra TwinTop]]<br />[[w:Opel Astra#Saturn Astra|Saturn Astra]] (2008 & in Canada '09)<br />[[w:Holden Astra#Fourth generation (TS; 1998)|Holden Astra (TS)]]<br />[[w:Holden Astra#Fifth generation (AH; 2004)|Holden Astra (AH)]] ||1925||2010||Originally known as GM Continental SA, then as Opel Antwerp from 1994-2004, & finally as GM Belgium from 2004 on. The original plant was an ex-abbey on Fortuinstraat. In 1926, production moved to an old velodrome on the corner of St. Laureystraat & Haantjeslei. In 1929, production moved to a site in the port of Antwerp near the Albert dock. The site at the port was destroyed by bombing raids in World War II. Production temporarily moved back to the velodrome from 1946-1953. In 1953, a new plant opened on the Noorderlaan which would later come to be known as Plant 1. In 1967, a second plant opened about 6.2 miles (10 km) north of the Noorderlaan plant near the Churchill dock. This was called Plant 2. In August 1988, production was consolidated in Plant 2 and Plant 1 was used as a parts warehouse until 1992 and the property was then sold. Plant 2 ended production in December 2010. First vehicle off the line was a Chevrolet. Assembled Opel & Vauxhall cars, Bedford trucks and American GM brands (Chevrolet, Pontiac, Oldsmobile, Buick, & Cadillac) from CKD kits. Also built the [[w:Ranger (automobile)#Europe|Ranger]]. The plant finally closed its doors on December 17, 2010, about two days after last Opel car rolled off the assembly line. <br />Past models: [[w:Chevrolet Camaro (first generation)|Chevrolet Camaro]] (first generation from CKD kits)<br />[[w:Chevrolet Corvair|Chevrolet Corvair]] (from CKD kits supplied from Oshawa)<br />[[w:Opel Ascona|Opel Ascona]]<br />[[w:Opel Kadett|Opel Kadett]]<br />[[w:Opel Manta|Opel Manta]]<br />[[w:Opel Olympia|Opel Olympia]]<br />[[w:Opel Rekord|Opel Rekord]]<br />[[w:Opel Vectra|Opel Vectra]]<br />[[w:Vauxhall Cresta|Vauxhall Cresta]]<br />[[w:Vauxhall Velox|Vauxhall Velox]]<br />[[w:Vauxhall Victor|Vauxhall Victor]]
|-
| ||[[w:General Motors de Argentina|General Motors de Argentina]]||[[w:San Telmo, Buenos Aires|San Telmo]] and [[w:Barracas, Buenos Aires|Barracas]] in [[w:Buenos Aires|Buenos Aires]] & [[w:San Martín, Buenos Aires|San Martin]]||[[w:Argentina|Argentina]]||Chevrolet (cars and trucks) including [[w:Chevrolet 400|Chevrolet 400]], [[w:Chevrolet Chevy Malibu|Chevrolet Chevy]], & [[w:Chevrolet C/K|Chevrolet C/K]] <br />[[w:Chevrolet C/K (second generation)#Medium-duty trucks|Chevrolet C-50/C-60/C-70]]<br />[[w:Chevrolet/GMC B series|Chevrolet B-60 bus chassis]]<br /> Oldsmobile <br />[[w:Opel K 180|Opel K 180]]<br />[[w:Bedford TJ|Bedford TJ]]<br />[[w:Chevrolet 153 4-cylinder engine#Argentina|Chevrolet 153 4-cylinder]]<br />[[w:Chevrolet Turbo-Thrift engine|Chevrolet Turbo-Thrift engine]]<br />Bedford diesel engines||1925 (San Telmo)<br />1928 (Barracas)<br />1940 (San Martin plant)||1978 (San Martin plant)||Other GM brands manufactured included GMC, Opel, and Bedford trucks along with Pontiac, Oakland, Marquette, Buick, LaSalle, Cadillac, Opel, and Vauxhall passenger cars.<ref>{{cite web|url=https://history.gmheritagecenter.com/wiki/index.php/GM_Argentina|title=GM Argentina}}</ref> Also Frigidaire refrigerators.
|-
| ||[[w:Aymesa|Aymesa]]||[[w:Quito, Ecuador|Quito]]||[[w:Ecuador|Ecuador]]|| ||1973||1999 (Last GM production)|| First automotive assembler in Ecuador. GM bought 36.95% of AYMESA in 1982 & increased its stake to 45.9% in 1984. GM sold off its stake in 1999 and switched to using OBB as its Ecuadorian partner. Aymesa now assembles vehicles for Kia and Hyundai.
Past models: [[w:Opel Corsa#Corsa B (S93; 1993)|Chevrolet Corsa]]<br />[[w:Suzuki Cultus#First generation (1983)|Suzuki Forsa]]<br />[[w:Suzuki Cultus#Second generation (1988)|Suzuki Forsa II/Chevrolet Swift]]<br />[[w:General Motors T platform (1973)|Chevrolet San Remo]]<br />Aymesa Gacela<br />Aymesa Condor<br />[[w:Bedford HA#The BTV|Aymesa Andino]]<br />Aymesa Amigo
|-
|3 (since 1993)<br />A (before 1993)||Azambuja||[[w:Azambuja|Azambuja]]||[[w:Portugal|Portugal]]||[[w:Opel Combo#Kadett Combo (Combo A; 1986)|Opel Kadett Combo A/Bedford & Vauxhall Astravan & Astramax]]<br />[[w:Opel Combo#Combo B (1993-2001)|Opel/Vauxhall/Holden Combo]] B<br />[[w:Opel Combo#Combo C (2001-2012)|Opel/Vauxhall/Holden Combo]] C||1963||2006||Past models:<br />[[w:Opel Corsa#Corsa Van|Opel Corsavan]]<br /> [[w:Opel Kadett|Opel Kadett]]<br />[[w:Opel Rekord|Opel Rekord]]<br />[[w:Vauxhall Victor|Vauxhall Victor]]<br />[[w:Vauxhall Viva|Vauxhall Viva]]<br />[[w:Bedford HA#The BTV|Amigo]]<br />[[w:Bedford CF|Bedford CF]]<br />[[w:Bedford TJ|Bedford TJ]]<br />[[w:Bedford TK|Bedford TK]]<br />Various Opel, Vauxhall, & Bedford models.
|-
|B <br />(1953-1964 [[w:Chevrolet|Chevrolet]]<br />and 1964 [[w:Pontiac (automobile)|Pontiac]]<br /> and 1965-2005)<br /><br />14 (1935-1952 [[w:Chevrolet|Chevrolet]]) <br /><br /> 7 (1964 [[w:Buick|Buick]])||[[w:Baltimore Assembly|Baltimore Assembly]]||[[w:Baltimore|Baltimore]], [[w:Maryland|Maryland]]||United States||[[w:Chevrolet Astro|Chevrolet Astro]] (1985-2005)<br />[[w:Chevrolet Astro|GMC Safari]] (1985-2005) ||1935||2005||Located at 2122 Broening Highway. Production began in March 1935 (March 11 for trucks and March 26 for cars). Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Baltimore Assembly began making Pontiac and Buick passenger cars for 1964. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. Baltimore Assembly joined the GM Assembly Division in 1968. During WWII, the Chevrolet side of the plant operated as a military parts depot where parts were received, processed, and packaged for shipment around the world. It also built 2,650 [[w:GMC CCKW 2½-ton 6×6 truck|GMC CCKW 6x6 trucks]]. The Fisher Body side of the plant became part of GM's Eastern Aircraft Division and assembled the rear fuselage, tail assembly, & all control surfaces for Grumman carrier-based aircraft. Car production ended on March 31, 1984. Converted to a Truck and Bus Group assembly plant for 1985. Production restarted in August 1984. Closed on May 13, 2005. Baltimore Assembly produced over 12 million vehicles. Demolished. Now the Chesapeake Commerce Center and an Amazon distribution center.<br />
Past models:<br /> [[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Master|Chevrolet Master]]<br />[[w:Chevrolet Deluxe|Chevrolet Deluxe]]<br />[[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]]<br />[[w:Buick Gran Sport|Buick GS]] (1965-1968),<br /> [[w:Buick Skylark|Buick Skylark]] (1964-68),<br /> [[w:Buick Special|Buick Special]] (1964-67), [[w:Chevrolet 150|Chevrolet 150]] (1953-57), [[w:Chevrolet 210|Chevrolet 210]] (1953-57), [[w:Chevrolet AK Series|Chevrolet AK Series]], [[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1947-1955), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1963), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-1963), [[w:Chevrolet C/K|Chevrolet C/K]] (1960-1980), [[w:Chevrolet Chevelle|Chevrolet Chevelle]] (1964-1977), [[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958), [[w:Chevrolet El Camino|Chevrolet El Camino]] (1959-1960, 1964-1977), [[w:Chevrolet Impala|Chevrolet Impala]] (1958-1963), [[w:Chevrolet Malibu#Fourth generation (1978)|Chevrolet Malibu]] (1978-1983), [[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1970-1984), [[w:Chevrolet Nomad|Chevrolet Nomad]] (1955-1957), [[w:Chevrolet Suburban|Chevrolet Suburban]] (1957, 1962, 1964-1966), [[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959), [[w:Chevrolet C/K (second generation)|GMC C/K (Action Line)]] (1967-1972), [[w:Chevrolet C/K (third generation)|GMC C/K (Rounded Line)]] (1973-1980), [[w:GMC Sprint|GMC Sprint]] (1971-1977), [[w:Pontiac Bonneville#Seventh generation (1982–1986)|Pontiac Bonneville]] (1983-1984), [[w:Pontiac Grand Prix#Fifth generation (1978–1987)|Pontiac Grand Prix]] (1983-1984), [[w:Pontiac GTO|Pontiac GTO]] (1964-1970), [[w:Pontiac LeMans|Pontiac LeMans]] (1964-1970, 1978-1981), [[w:Pontiac Tempest|Pontiac Tempest]] (1964-1970)
|-
| ||[[w:Baltimore Transmission|Baltimore Transmission]]||[[w:White Marsh, Maryland|White Marsh]], [[w:Maryland|Maryland]]||United States||Allison 1000 Series transmissions: [[w:Chevrolet Silverado|Silverado HD]], [[w:GMC Sierra|Sierra HD]]<br />Hybrid 2-mode transmissions ([[w:Global Hybrid Cooperation|2ML70]]): [[w:Chevrolet Tahoe#Third generation (2007)|Chevrolet Tahoe Hybrid]], [[w:Chevrolet Tahoe#Third generation (2007)|GMC Yukon Hybrid]], [[w:Cadillac Escalade#Hybrid|Cadillac Escalade Hybrid]], [[w:Chevrolet Silverado#Second-generation Silverado / third-generation Sierra (GMT900; 2007)|Chevrolet Silverado Hybrid]], [[w:Chevrolet Silverado#Second-generation Silverado / third-generation Sierra (GMT900; 2007)|GMC Sierra Hybrid]]<br />Electric motor (MME) & final-drive unit (1ET35) for [[w:Chevrolet Spark#Spark EV|Chevy Spark EV]]<br />Torque converters for 6-speed rwd automatic transmissions||2000||2019||Located at 10301 Philadelphia Road. Originally part of Allison Transmission. Became a GM Powertrain facility in 2004. Name changed to Baltimore Operations in 2012 with the addition of the Electric Motor Plant built next to the existing Transmission Plant. Closed in 2019.<ref>{{Cite web|url=https://gmauthority.com/blog/2019/04/gm-baltimore-employees-irate-over-plant-closure/|title = GM Baltimore Employees Irate over Plant Closure|author=Anthony Alaniz|publisher=GMAuthority.com|date = 19 April 2019}}</ref> Now called White Marsh Interchange Park, a complex of 9 new one-story buildings of office and warehouse space that replaces the previous GM plant which has been demolished.
|-
|T||[[w:Bedford Dunstable plant|Bedford Dunstable plant]]||[[w:Dunstable|Dunstable]], [[w:Bedfordshire|Bedfordshire]], [[w:England|England]]||[[w:United Kingdom|United Kingdom]]||[[w:Bedford Vehicles|Bedford trucks and buses]] including:<br> [[w:Bedford S type|Bedford S series]]<br />[[w:Bedford TA|Bedford TA/TD]]<br />[[w:Bedford TJ|Bedford TJ]]<br />[[w:Bedford TK|Bedford TK/KM]]<br />[[w:Bedford TL|Bedford TL]]<br />[[w:Bedford TM|Bedford TM]]<br />[[w:Bedford SB|Bedford SB]]<br />[[w:Bedford VAL|Bedford VAL]]<br />[[w:Bedford VAM|Bedford VAM]]<br />[[w:Bedford VAS|Bedford VAS]]<br />[[w:Bedford Y series|Bedford Y series]]<br />Bedford gas & diesel engines||1942 (for wartime production)<br><br> 1955 (for civilian production)||1987||Was located on Boscombe Road. Bedford truck and bus production was moved to Dunstable from Luton in 1955. GM sold the Bedford heavy truck business to AWD Trucks in 1987. AWD Trucks went bankrupt in 1992. Parts of the site were demolished in 1993. More was demolished in 1997. The remainder was demolished in 2005. The [[w:Commer|Commer]] plant was located across Boscombe Road in Dunstable from the 1960's.
|-
| ||Bombay||[[w:Bombay|Bombay]], [[w:Maharashtra|Maharashtra]]||[[w:India|India]]||[[w:Chevrolet|Chevrolet]] cars, trucks, & buses||1928||1954||The first automobile assembly plant in India. The original GM India Ltd. was closed in 1954.
|-
|12 (Buffalo Assembly from 1928)||[[w:Buffalo Assembly|Buffalo Assembly]]/<br />Buffalo Gear & Axle||[[w:Buffalo, New York|Buffalo, New York]]||United States||[[w:Chevrolet Superior|Chevrolet Superior]]<br />[[w:Chevrolet Series AA Capitol|Chevrolet Series AA Capitol]]<br />[[w:Chevrolet Series AB National|Chevrolet Series AB National]]<br />[[w:Chevrolet Series AC International|Chevrolet Series AC International]]<br />[[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]]<br />[[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]]<br />[[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]]<br />[[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]]<br />[[w:Chevrolet Master|Chevrolet Master]]<br />[[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Suburban|Chevrolet Suburban]]<br /> Axles, drivetrain components||1923||1994||Located at 1001 E. Delavan Ave. Built cars until World War II & was then converted to make axles. Operation was renamed Saginaw Gear and Axle in 1984. Sold to [[w:American Axle|American Axle]] in 1994. All operations ended in 2007 & the factory closed. Called the Historic American Axle Building. Purchased by Viridi in 2018.
|-
|H (1965-1999)<br /><br /> 1 (1938-1964 [[w:Buick|Buick]])||[[w:Buick City|Buick City]]||[[w:Flint, Michigan|Flint, Michigan]]||United States||[[w:Buick LeSabre|Buick LeSabre]] (1959-1999)<br />[[w:Buick Park Avenue|Buick Park Avenue]] (1994-1996)<br />[[w:Oldsmobile 88|Oldsmobile 88]] (1987, 1989-1995)<br />[[w:Pontiac Bonneville#Ninth generation (1992–1999)|Pontiac Bonneville]] (1996-1999)||1904||1999||This was Buick's home plant. It predated the founding of GM in 1908. This is the part of the Buick factory complex south of Leith St. stretching south to E. Hamilton Ave. The complete complex, including both North and South portions totals 412,947 acres. The original factory was at one time the largest in the world and was completely vertically integrated, making nearly every component within the complex. During WWII, Buick built [[w:M18 Hellcat|M18 Hellcat]] tanks & [[w:M39 armored utility vehicle|M39 armored utility vehicles]] here. The plant was converted to build unibody, fwd cars for 1986 instead of the previous body-on-frame, rwd cars. The modernized plant was renamed Buick City. The factory closed in June 1999. Last car built was a 1999 Buick LeSabre. Demolished by 2002. The site of Buick's administration building, 902 E. Hamilton Ave., is now a seating plant owned by Lear Corp., which opened in 2018. It supplies seats to GM's nearby Flint Truck Assembly Plant as well as GM's Fort Wayne Assembly Plant in Indiana. A large piece of the property is now being redeveloped as Flint Commerce Center.<br> Past models: [[w:Buick Centurion|Buick Centurion]] (1971–1973),<br> [[w:Buick Century|Buick Century]] (1936-42, 1954-1958, 1973-1981), [[w:Buick Electra|Buick Electra]] (1959-1984), [[w:Buick Estate|Buick Estate]] (1940-64, 1970-76), [[w:Buick GS|Buick GS]] (1965-1972), [[w:Buick Invicta|Buick Invicta]] (1959-1963), [[w:Buick Limited|Buick Limited]] (1936-42, 1958), [[w:Buick Regal|Buick Regal]] (1973-1985), [[w:Buick Riviera|Buick Riviera]] (1963-1978), [[w:Buick Roadmaster|Buick Roadmaster]] (1936-58), [[w:Buick Skylark#1953–1954|Buick Skylark]] (1953-1954), [[w:Buick Skylark|Buick Skylark]] (1961-72), [[w:Buick Special|Buick Special]] (1936-58, 1961-69), [[w:Buick Sport Wagon|Buick Sport Wagon]] (1964-1971), [[w:Buick Super|Buick Super]] (1940-1958), [[w:Buick Wildcat|Buick Wildcat]] (1963-1970) [[w:Marquette (automobile)#Buick brand|Marquette]] (1930), [[w:Chevrolet Caprice#Third generation (1977–1990)|Chevrolet Caprice]] (1984-1985), [[w:Chevrolet Impala#Sixth generation (1977–1985)|Chevrolet Impala]] (1984-1985),<br> [[w:Oldsmobile Cutlass Supreme#Fourth generation (1978–1988)|Oldsmobile Cutlass Supreme]] (1985).
|-
| ||Cadillac Stamping||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||Stamped body parts for Cadillac||1956||1987||Located at 9501 Conner St. Originally built by Clayton & Lambert Manufacturing Company for their Knodell Division. Sold to Hudson Motor Car Company in 1925. Made bodies for Hudson. Bought by GM in 1956. Demolished in 2021. Site used by [[w:Lear Corp.|Lear Corp.]] to make seats to supply GM's Factory Zero plant.
|-
| ||[[w:Cartercar|Cartercar]]||[[w:Pontiac, Michigan|Pontiac]], [[w:Michigan|Michigan]]||United States||Cartercar automobiles||1909||1915||Located on Franklin Rd. where Franklin turns into Linfere St. which then intersects with Brush St. This factory previously belonged to Pontiac Spring & Wagon Works. Cartercar moved into this factory in 1908. Cartercar was purchased by GM on October 26, 1909. Cartercar was known for its [[w:Friction drive|friction drive transmission]]. GM closed Cartercar in 1915. There was then talk that GM would build a 6-cylinder Oakland model at this factory but it doesn't seem to have ever happened. GM sold the factory to Olympian Motors Company in 1917, which built Olympian cars there from 1917-1919. In 1920, the factory was sold to Friend Motors Corporation. Initially, Friend Motors Corporation continued production of Olympian cars and then switched to production of new Friend cars in 1921 but production ended with less than 50 cars built and Friend Motors went out of business. In 1922, Friend Motors owner Otis Friend filed for bankruptcy and factory ownership was transferred to Gotham National Bank in a foreclosure sale. The next occupant of the plant was the Wolverine Manufacturing Company which built furniture. Later, it was used as an agricultural supply warehouse. Most of the complex is gone but one building remains at 20 Franklin Rd. It was last occupied by House of Bedrooms, a furniture store. One side of the building still says "The Wolverine" at the top. The other side that faces Brush St. still says "Pontiac Spring & Wagon Works" right under what were the highest row of windows.
|-
| ||Chevrolet Gear & Axle||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||Axles, gears, other components||1919||1994||Located at 1840 Holbrook Ave. Absorbed the former Northway engine plant on Holbrook Ave. in 1926 when Northway was liquidated by GM. Straddles the border of [[w:Detroit|Detroit]] and [[w:Hamtramck, Michigan|Hamtramck, Michigan]]. Sold to [[w:American Axle|American Axle]] & Manufacturing Inc. in 1994. Closed in 2012, demolished in 2013.
|-
| ||Fisher Body - Chicago Metal Fabrication||[[w:Willow Springs, Illinois|Willow Springs, Illinois]]||United States||Stampings (such as floorpans) for GM vehicles||1953||1989||Located at 79th Street and Willow Springs Road. Buick produced J65-B-3 jet engines here for the [[w:Republic F-84F Thunderstreak|Republic F-84F Thunderstreak]]/RF84-F Thunderflash for use in the Korean War. Plant was associated with Buick-Oldsmobile-Cadillac Group but made body parts for all 5 of GM's passenger car divisions. Sold to [[w:United Parcel Service|UPS]].
|-
| ||[[w:General Motors de Chile|General Motors de Chile]]||[[w:Arica|Arica]]||[[w:Chile|Chile]]||[[w:Isuzu Faster#Second generation (1980–1988)|Chevrolet LUV]]<br />[[w:Isuzu Faster#Third generation (TF; 1988–2002)|Chevrolet LUV (TF)]]<br />[[w:Isuzu Faster#South America 2|Chevrolet Grand LUV (TF)]]<br />[[w:Isuzu D-Max#First generation (RA, RC; 2002)|Chevrolet D-Max]]||1968<br>1974||1971<br>2008||Originally belonged to Alberto Avayú y Cía. S.A.I.C. (part of Empresas Indumotora) which built vehicles under license for GM beginning in 1960. Avayú built the [[w:Chevrolet Chevy II / Nova|Chevrolet Chevy II / Nova]], [[w:Chevrolet C/K (first generation)|Chevrolet C-1434]], [[w:Opel Rekord|Opel Rekord]], [[w:Opel Rekord|Opel Furgón (van)]]. GM bought the plant in 1968. Built [[w:Chevrolet Chevy II / Nova|Chevrolet Chevy II / Nova]] & [[w:Chevrolet C/K (second generation)|Chevrolet C10]]. GM left Chile at the end of 1971 but returned in 1974. Past models: [[w:Chevrolet C/K (third generation)|Chevrolet C-10 and C-30]], [[w:Chevrolet C/K|Chevrolet C/K]] medium duty truck, [[w:Chevrolet Chevette#Latin America|Brazilian Chevrolet Chevette]], and Japanese [[w:Isuzu Aska#South America (Chile, Ecuador)|Chevrolet Aska]]
|-
| ||Fisher Body - Cleveland Division||[[w:Cleveland|Cleveland]], [[w:Ohio|Ohio]]||United States||Bodies for GM vehicles||1921||1983||Located at Coit Road and E. 140th Street. Founded as Fisher Body Ohio Co. GM bought 60% of Fisher Body in 1919 and the remaining 40% in 1926. Began by building bodies for Chandler, Cleveland (a subsidiary of Chandler), Chrysler, and the Oakland & Chevrolet divisions of GM. After 1926, it only made bodies for GM. In 1936, the plant switched from making whole bodies to doing metal trim and fabrication due to a decrease in demand for cars due to the Depression. Production of auto bodies resumed after World War II. Built bodies for low-volume models like the 55-57 Chevy Nomad and convertible models. In the 1970's, it built large stamping dies and upholstery & trim sets. Closed in August 1983 as a metal fabrication plant.
|-
| ||[[w:Cleveland Diesel Engine Division|Cleveland Diesel Engine Division]]||[[w:Cleveland|Cleveland]], [[w:Ohio|Ohio]]||United States||Heavy-duty diesel engines for locomotives, marine use (ships and submarines), and stationary use||1930||1962||Founded by Alexander Winton, company began operation in Nov. 1912 as the Winton Gas Engine & Mfg. Co. at 2116 W. 106th St. Renamed the Winton Engine Works in 1916 and later as the Winton Engine Company. GM bought Winton Engine Co. on June 20, 1930 and renamed it Winton Engine Corp. on June 30, 1930. In 1938, it was renamed Cleveland Diesel Engine Division. In January 1941, locomotive engine development and production was transferred to GM's Electro-Motive Division. Marine and stationary diesel engines were still handled by Cleveland Diesel Engine Division. In the 1950s, Cleveland Diesel Engine expanded with the acquisition of plants at 2160 W. 106th St. and 8200 Clinton Rd. The advent of nuclear-powered submarines in the 1950's reduced the US Navy's need for the large diesel engines produced by Cleveland Diesel and in 1962, GM closed down the division and transferred any remaining engine production to Electro-Motive Division's La Grange plant in McCook, Illinois.
|-
| ||[[w:GM Colmotores|GM Colmotores]]||[[w:Bogotá|Bogotá]]||[[w:Colombia|Colombia]]||Products from [[w:GM do Brasil|GM do Brasil]]: [[w:Chevrolet Onix#First generation (2013)|Chevrolet Joy]]
<br />Products from [[w:Isuzu|Isuzu]]: [[w:Isuzu Forward|Chevrolet F-Series Bus]], [[w:Isuzu Forward|Chevrolet F-Series truck]], [[w:Isuzu Elf|Chevrolet N-Series Bus]], [[w:Isuzu Elf|Chevrolet N-Series truck]], Chevrolet LV-series Bus
||1979||2024||Founded in 1956 as Colmotores, production began in 1962 with the [[w:Austin Motor Company|Austin]] brand, then switched to the [[w:Dodge|Dodge]] brand in 1965 when Chrysler took a 60% stake in what was now Colmotores-Chrysler. GM took over Colmotores in 1979 (Chrysler was dropped from the company name at this point). Chevrolet truck production began in 1980. Chevrolet car production began in 1982. Colmotores became GM Colmotores in 1991. Closed in April 2024.<ref>{{Cite web|url=https://gmauthority.com/blog/2024/04/gm-shutting-down-manufacturing-operations-in-colombia-and-ecuador/|title = GM Shutting Down Manufacturing Operations In Colombia And Ecuador|author=Deivis Centeno|publisher=GMAuthority.com|date = April 29, 2024}}</ref><ref>{{Cite web|url=https://www.americaeconomia.com/en/business-industries/general-motors-announces-end-car-manufacturing-operations-colombia-and-ecuador/|title = General Motors announces the end of car manufacturing operations in Colombia and Ecuador|publisher=AmericaEconomia.com|date = April 26, 2024}}</ref>
Past products from [[w:Chevrolet|Chevrolet]]: [[w:Chevrolet C/K#Third generation (1973–1991)|Chevrolet C-10]], [[w:Chevrolet C/K#Third generation (1973–1991)|Chevrolet C-30]], [[w:Chevrolet Celebrity|Chevrolet Celebrity]], [[w:Chevrolet Cruze#First generation (J300; 2008)|Chevrolet Cruze]], [[w:Chevrolet Kodiak|Chevrolet Kodiak]], [[w:GMC Brigadier|Chevrolet Brigadier/Super Brigadier]]<br />Past products from [[w:GM do Brasil|GM do Brasil]]: [[w:Chevrolet Chevette#Latin America|Chevrolet Chevette]], [[w:Chevrolet Cobalt#Second generation (2011)|Chevrolet Cobalt]], [[w:Opel Ascona#Chevrolet Monza|Chevrolet Monza]]<br />Past products from [[w:Isuzu|Isuzu]]: [[w:Isuzu Faster|Chevrolet LUV]], [[w:Isuzu Trooper#First generation (1981–1991)|Chevrolet Trooper]]<br />Past products from [[w:Suzuki|Suzuki]]: [[w:Suzuki Cultus#First generation (1983)|Chevrolet Sprint]] (note: this is the same name as the one that was sold in the U.S. and Canada in the 80's), [[w:Suzuki Cultus#Second generation (1988)|Chevrolet Swift]], [[w:Suzuki Alto#Fifth generation (1998)|Chevrolet Alto]], [[w:Suzuki Cultus Crescent|Chevrolet Esteem]], [[w:Suzuki Jimny#Third generation (1998)|Chevrolet Jimny]], [[w:Suzuki Jimny#Second generation (1981)|Chevrolet Samurai]], [[w:Suzuki Solio#Predecessor: Wagon R-Wide (MA61S/MB61S; 1997)|Chevrolet Wagon R+]]<br />Past products from [[w:Opel|Opel]]: [[w:Opel Corsa|Chevrolet Corsa]]<br />Past products from [[w:GM Korea|Daewoo/GM Korea]]: [[w:Daewoo Matiz#Second generation (M200, M250; 2005)|Chevrolet Spark]], [[w:Daewoo Matiz#Third generation (M300; 2009)|Chevrolet Spark GT]], [[w:Daewoo Lacetti|Chevrolet Optra]], [[w:Daewoo Kalos|Chevrolet Aveo]]<br />Products from [[w:SAIC-GM|SAIC-GM]]: [[w:Chevrolet Sail#Second generation (2010)|Chevrolet Sail]]
|-
| ||Constantine Transmission||[[w:Constantine, Michigan|Constantine, Michigan]]||United States||Automatic Transmissions||Between 1977 and 1980||Between 1987 and 1994|| Part of GM St. Joseph County Operations & GM Hydramatic Division.
|-
| ||Danville Foundry||[[w:Danville, Illinois|Danville, Illinois]]||United States||[[w:Casting|Iron castings]]||1943||1995|| Was part of GM's Central Foundry Division. Leased by [[w:Defense Plant Corporation|Defense Plant Corporation]] to pour castings for military equipment during [[w:World War II|World War II]]. Also supplied castings to Ford, Chrysler, and AMC.
|-
| ||Delco Chassis||[[w:Livonia, Michigan|Livonia, Michigan]]||United States||Bumpers||1953||1998||Site bought by GM in 1953. Located at 12950 and 13000 Eckles Road. Buildings demolished in 2001. Redeveloped into multi-tenant commercial use. One of the tenants is Amazon.
|-
| ||[[Delco Moraine NDH]] Dayton North (NDH=New Departure Hyatt)||[[w:Dayton, Ohio|Dayton, Ohio]] (Needmore Rd.)||United States||Master Cylinders/Brake Pads/Brake Calipers/ABS Assemblies||1965||1999||Located at 3100 Needmore Road. Spun off with [[w:Delphi Automotive|Delphi]] in 1999. Closed by Delphi in 2008. Demolished.
|-
| ||[[Delco Moraine NDH]] Dayton South (NDH=New Departure Hyatt)||[[w:Dayton, Ohio|Dayton, Ohio]] (Wisconsin Blvd.)||United States||Engine Bearings/Master Cylinders/Brake Pads/Brake Calipers/ABS Assemblies||1936||1999||Located at 1420 Wisconsin Boulevard. Delphi Chassis Systems. Spun off with [[w:Delphi Automotive|Delphi]] in 1999. Demolished in 2003.
|-
| ||[[Delco Moraine NDH]] (NDH=New Departure Hyatt)||[[w:Sandusky, Ohio|Sandusky, Ohio]]||United States||Wheel Bearings & Wheel Bearing Assemblies||1946||1999||Located at 2509 Hayes Ave. Transferred to Delphi in 1995 which was then spun off in 1999, later sold to Hephaestus Holdings Inc. (HHI, Inc.), through its subsidiary Kyklos Bearing International (KBI) in 2008. HHI's parent, KPS Capital Partners, sold HHI to American Securities LLC in 2012. American Securities combined HHI with Metaldyne, which it also acquired in 2012, to form Metaldyne Performance Group (MPG) in 2014. Metaldyne closed the plant in 2017 when it exited the wheel bearing business.
|-
| ||[[Delco Products]]||[[w:Kettering, Ohio|Kettering, Ohio]]||United States||Shock Absorbers, Struts, Impact Absorbers, Electric Motors, Windshield Wiper Assemblies||1957||1999||Located at 2555 Woodman Dr. (Administrative offices were at 2000 Forrer Blvd.) Spun off with Delphi Automotive Systems in 1999. A large portion of the site has been used by [[w:Tenneco|Tenneco Inc.]] since 2008.
|-
| ||[[Delco Products Overseas Corp.]]||[[w:Dunstable|Dunstable]], [[w:Bedfordshire|Bedfordshire]], [[w:England|England]]||[[w:United Kingdom|United Kingdom]]||Windshield wiper motors, Wiper/washer units, Heater blower motors, Cooling fan motors, Ignition coils, Distributors, etc.||1934|| ?||Located on High Street North. In 1923, AC Sphinx Sparking Plug Co., Ltd. was created by a 50/50 merger of the British branch of AC Spark Plug Co. and the Sphinx Manufacturing Co., a British spark plug manufacturer based in Birmingham. When AC Spark Plug founder Albert Champion died in 1927, AC Sphinx became wholly owned by AC Spark Plug Co. of Flint, MI. GM was already the major shareholder in AC Spark Plug and took it over completely in 1933, including AC Sphinx in the UK. AC Sphinx Sparking Plug Co., Ltd. moved to Dunstable from their original site in Birmingham beginning in 1934. The transfer to Dunstable was completed in 1936 and the Birmingham plant was relinquished. Dunstable made spark plugs as well as many other automotive components. In 1946, GM Ltd. acquired AC Sphinx as well as Delco-Remy and Hyatt Ltd. from parent GM in the US. In 1947, AC Sphinx was renamed AC-Sphinx Plug Co., a division of GM Ltd. In 1952, AC-Sphinx Plug Co. was renamed AC-Delco division of GM Ltd. When the Southampton plant was added in 1952, production of automotive filters (air filters, fuel filters) was moved there from Dunstable. When the Kirkby plant was added in 1958, production of fuel pumps, thermostats, and instruments was moved there from Dunstable. In 1979, Dunstable became aligned with Delco Products in the US. In 1982, GM Ltd. was dissolved and Dunstable became Delco Products Overseas Corp., part of GM Overseas Corp.
|-
| ||[[w:Delco Remy|Delco Remy]]||[[w:Anaheim, California|Anaheim, California]]||United States||Batteries||1954||1999||Known as Plant 13. Located at 1201 N. Magnolia St. Supplied batteries to GM's California assembly plants like Fremont, Southgate and Van Nuys and to the West Coast aftermarket. Spun off with Delphi Automotive Systems in 1999. Closed by Delphi in 2005. Demolished. Is now Northgate Gonzalez Market.
|-
| ||[[w:Delco Remy|Delco Remy]]||[[w:Anderson, Indiana|Anderson, Indiana]]||United States||Starters, Generators, HEI Ignition, DIS Ignition, Switches, Magnets||1906||1994/1999|| The Heavy Duty Systems unit and a portion of the Automotive Systems unit (passenger car cranking motors) were spun off as [[w:Remy International|Delco Remy International]] in 1994, which was renamed [[w:Remy International|Remy International]] in 2004. Delco Remy International closed all manufacturing in Anderson in 2003. These parts of Delco Remy (the parts not spun off into Remy International) - Ignition (Plant 20) and Generator (Plant 11) products along with the Engineering Center (Plant 18) and Tooling (Plant 16) - merged with AC Rochester in 1994 to form AC Delco Systems. AC Delco Systems became part of GM's Delphi Automotive Systems subsidiary in 1995. Spun off with Delphi Automotive Systems in 1999. Delphi has since closed all 4 facilities in Anderson. Plant 11 closed in 2005 & was demolished in 2006. Plant 16 (2316 Jefferson St.) was sold in 2011 ERTL Enterprises & is now used by multiple businesses. Plant 18 (2900 South Scatterfield Road) closed in 2003 & was turned over to the city Of Anderson in 2006. Plant 20 (2812 E 38th St.) closed in 2007 & is now a distribution center for Sutong Tire Resources, a Chinese tire importer. Plant 45, at 6435 South Scatterfield Road, was the Magnequench plant that produced rare earth neodymium magnets. That business is now owned by NEO Material Technologies of Toronto, Ontario, Canada but the plant itself is now owned by Home Design Products, which makes plastic chairs and other products.
|-
| ||[[w:Delco Remy|Delco Remy]]||[[w:Bloomfield, New Jersey|Bloomfield, New Jersey]]||United States||Batteries||1936||1945||Located on 55 La France Ave. During WWII, became part of GM's Eastern Aircraft Division from 1942 making wiring harnesses, hydraulic tubing and assemblies, and ammunition boxes for the Avenger bombers & Wildcat fighters made by Eastern Aircraft. After WWII, it was replaced by the New Brunswick Battery Plant as it wasn't considered economically practical to convert back to battery production. Bloomfield produced 8 million batteries for Delco Remy. In 1950, the plant was sold to General Plastics for doing fluoropolymer coating. General Plastics and the building still exist today.
|-
| ||[[w:Delco Remy|Delco Remy]]||[[w:Fitzgerald, Georgia|Fitzgerald, Georgia]]||United States||Batteries||1973||1999||Known as Plant 22. Located at 342 Perry House Road. Supplied batteries to GM's Georgia assembly plants like Lakewood and Doraville and to the regional aftermarket. Spun off with Delphi Automotive Systems in 1999. Delphi sold its battery business to Johnson Controls in in July 2005 but the Fitzgerald plant continued supplying batteries to Johnson Controls through 2007. Closed by Delphi in 2007. Demolished.
|-
| ||[[w:Delco Remy|Delco Remy]]||[[w:Meridian, Mississippi|Meridian, Mississippi]]||United States||Starting motors, permanent magnet gear reduction cranking motors, powdered metal forge||1976||1994||Plant was originally built for National Homes Corp. Known as Plant 25. Spun off with [[w:Remy International|Delco Remy International]] in 1994. Closed by Delco Remy International in 1998. Production consolidated in Anderson, Indiana.
|-
| ||[[w:Delco Remy|Delco Remy]]/<br>[[w:Sheridan (automobile)|Sheridan]]||[[w:Muncie, Indiana|Muncie, Indiana]]||United States||Sheridan automobiles <br>Batteries||1919<br>1928||1921<br>1978||Located on West Willard Street. Originally built in 1908 by [[w:Inter-State Automobile Company|Inter-State Automobile Company]] which went bankrupt in 1913 and was renamed Inter-State Motor Company, resuming production in 1914. Built tractors for the military in WWI but did not resume civilian production in 1918 and the factory was idled. GM owned the plant from 1919-1921 to build the [[w:Sheridan (automobile)|Sheridan]] brand. Sold to [[w:Durant Motors|Durant Motors]] in 1921. Bought by Delco Remy division of GM in 1928. Known as Plant 9. Replaced by more modern Plant 26 in 1978. Plant 9 was demolished in 1978-79.
|-
| ||[[w:Delco Remy|Delco Remy]]||[[w:Muncie, Indiana|Muncie, Indiana]]||United States||Batteries||1977||1994|| Located at 4500 S. Delaware Dr. Known as Plant 26. Replaced Plant 9 in 1978. Plant 26 closed and was demolished in 1998.
|-
| ||[[w:Delco Remy|Delco Remy]]||[[w:New Brunswick, New Jersey|New Brunswick, New Jersey]]||United States||Batteries||1946||1999||Known as Plant 12. Located at 167 Jersey Ave. Replaced the pre-war Bloomfield plant. Supplied batteries to GM's East Coast assembly plants like Tarrytown, Wilmington, and Baltimore and to the East Coast aftermarket. Started making Freedom batteries in 1973 for Chevy Vega. Spun off with Delphi Automotive Systems in 1999. Delphi sold to Johnson Controls in August 2006. Closed by Johnson Controls in 2007. Partly demolished in 2014 (the south half of the building along with the guard shack in front of the plant). The remaining facility at the north end of the property is now the Cal-Chlor Corp. East Packaging and Distribution Facility. The former south end of the plant is now used for storage by Cal-Chlor.
|-
| ||[[w:Delco Remy|Delco Remy]]||[[w:Olathe, Kansas|Olathe, Kansas]]||United States||Batteries||1956||1999||Known as Plant 14. Located at 400 W. Dennis Ave. Supplied batteries to GM's Midwest assembly plants like Fairfax, Oklahoma City and Wentzville. Olathe was the first plant to produce the maintenance-free battery in 1970-1971 employing what was described as wire wound grid technology. The product was sold exclusively to JC Penny. Spun off with Delphi Automotive Systems in 1999. Last product produced was a heavy duty battery for Caterpillar. Closed by Delphi in 2005. Demolished. Site being redeveloped as Olathe Commerce Park. Some of the site is now a Jett Trucking terminal.
|-
|9 (1979-1988)<br /><br /> Q (1971-1978)||[[w:Detroit Assembly|Detroit Assembly]] (Cadillac Clark Street plant)||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||[[w:Cadillac|Cadillac]]s including <br> [[w:Cadillac Series 62|Cadillac Series 62]] (1940-1942, 1946-1964),<br> [[w:Cadillac Calais|Cadillac Calais]] (1965-1976), <br> [[w:Cadillac DeVille|Cadillac DeVille]] (1949-1984),<br> [[w:Cadillac Sixty Special|Cadillac Sixty Special]] (1938-1942, 1946-1976),<br> [[w:Cadillac Fleetwood Brougham|Cadillac Fleetwood Brougham]] (1977-1986),<br> [[w:Cadillac Brougham|Cadillac Brougham]] (1987-1988),<br> [[w:Cadillac Eldorado|Cadillac Eldorado]] (1953-1978),<br> [[w:Cadillac Eldorado#1957–1958 Eldorado Brougham|Cadillac Eldorado Brougham (Series 70)]] (1957-1958),<br> [[w:Cadillac Eldorado#1959–60 Eldorado Brougham|Cadillac Eldorado Brougham (Series 6900)]] (1959-1960) (chassis & final finishing),<br> [[w:Cadillac Seville#First generation (1976–1979)|Cadillac Seville]] (1976-1979), <br />[[w:LaSalle (automobile)|LaSalle]] (1934-1940)<br />[[w:Chevrolet Caprice#Third generation (1977–1990)|Chevrolet Caprice]] (1986-1987)<br />[[w:Oldsmobile Custom Cruiser#Second generation (1977–1990)|Oldsmobile Custom Cruiser]] (1985-1987)<br />[[w:Oldsmobile 88#Eighth generation (1977–1985)|Oldsmobile Delta 88]] (1984-1985) <br />Cadillac engines (V8, V12, V16) <br /> LaSalle straight-8 (1934-1936) (based on Oldsmobile straight-8 but assembled by Cadillac from Oldsmobile supplied components)||1921||1987||Located at 2860 Clark St. This was Cadillac's home plant and built all Cadillacs until 1971. During WWII, it built M5 & M5A1 Stuart tanks and M24 Chaffee tanks. Cadillac also built the V8 engines that powered these tanks & it also supplied engines to power these tank models made by other GM divisions and other companies as well as to power other types of armored vehicles. Cadillac also made components for aircraft engines made by GM's Allison Division. Cadillac also made M8 75mm howitzer motor carriages & M19 Twin 40mm anti-aircraft carriages. Factory closed December 1987. Chrome plating operation closed in March 1993. Engineering building (including tool room) closed in March 1994. Demolished entirely. Redeveloped into Clark Street Technology Park in 1997.
|-
| ||[[w:Fleetwood Metal Body#Purchase by Fisher|Fleetwood - Detroit Body Assembly]] (Fisher Body No. 18)||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||Bodies for [[w:Cadillac|Cadillac]] & [[w:LaSalle (automobile)|LaSalle]]||1917||1987||Originally built to build aircraft for World War I. Taken over by Fisher Body in 1919 & given to Fleetwood Metal Body after Fisher Body took over Fleetwood in 1925. Fleetwood Metal Body plant. Also known as Fisher Body Plant #18. Supplied bodies to Cadillac's Clark St. plant in Detroit. Located at 261 West End Ave in the [[w:Delray, Detroit|Delray]] neighborhood of Detroit. Redeveloped into Container Port Group's Detroit facility.
|-
| ||[[w:Detroit Diesel|Detroit Diesel]]||[[w:Redford, Michigan|Redford, Michigan]]||United States||Diesel engines for commercial vehicles||1938||1994||Located at 13400 W. Outer Drive. Was the Detroit Diesel-Allison Division from 1970 through 1987 when it again became the the Detroit Diesel Division. Spun off in 1988 as the Detroit Diesel Corp., a joint venture with Penske Corp., which had a majority stake of 60%. Penske increased its stake to 80% later in 1988 and then to 100% in 1994. Penske sold Detroit Diesel to DaimlerChrysler in 2000. DaimlerChrysler became Daimler AG in 2007. In 2019, Daimler AG spun off its truck and bus operations including Detroit Diesel into a separate company called Daimler Truck Holding AG.
|-
| ||Detroit Forge||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||Forged metal components||c.1919||1994||Located at 8435 St Aubin St. Straddles the border of [[w:Detroit|Detroit]] and [[w:Hamtramck|Hamtramck]]. Sold to [[w:American Axle|American Axle]] & Manufacturing Inc. in 1994. Closed in 2008, subsequently demolished around 2014.
|-
|3||Chevrolet-Detroit Truck & Bus Plant||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||[[w:Chevrolet Step-Van|Chevrolet Step-Van]]<br />[[w:Chevrolet Step-Van|GMC Value-Van]]<br />Chevrolet & GMC P-Series motorhome & commercial chassis<br />[[w:Chevrolet van#1992–1996|Chevrolet Van G30 HD/ GMC Vandura G3500 HD cutaway]] (Based on P-series P30 chassis with extended front end & forward-tilting hood) 1993-1996||1974||1999||Located at 601 Piquette Ave. in Detroit (Formerly Fisher Body No. 23). P-Series motorhome & stepvan chassis business (Commercial and Motorhome Chassis Division) was sold to investors (not including the Detroit plant) and became Workhorse Custom Chassis in 1999. Workhorse was later acquired by Navistar International in 2005, which later closed the Workhorse business in 2012 and sold the assets to AMP Electric Vehicles in 2013.
|-
| ||Detroit Transmission Division - Detroit||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||[[w:Hydramatic|Hydramatic]] automatic transmissions||1939||1949||Was located at 5140 Riopelle St. (between Farnsworth St. & Theodore St.) in what had been Fisher Body Plant #10. Original assembly site for the world's first production, fully automatic transmission and the headquarters of the new GM division created to produce it - the Detroit Transmission Division. First production Hydramatic shipped to Oldsmobile in October 1939. Debuted on the 1940 Oldsmobile. A heavier-duty version then launched on the 1941 Cadillac. Hydramatics continued to be produced during World War II for use in M5/M5A1 Stuart and M24 Chafee tanks (mated to Cadillac V8s), T17E1 Staghound and T18E2 Boarhound armored cars (mated to GMC inline-6's), M8 75mm howitzer motor carriages (mated to Cadillac V8s), LVT-3 Bushmaster amphibious landing vehicles (mated to Cadillac V8s), & Mark 1 Armored Snowmobiles made by Bombardier of Canada (mated to a Cadillac V8). Hydramatic became optional on Pontiacs in 1948. Hydramatic also became optional on Lincolns in 1949. The 1 millionth Hydramatic was built in January 1949. Needing more production capacity than the original factory in Detroit could handle, the Detroit Transmission Division relocated to a newer and much bigger plant in Livonia, Michigan in September 1949. Was later used by Cadillac as a parts warehouse supplying its Clark St. plant in Detroit. Closed by GM in the early 1980's and sold. Was subsequently used by Total Foods. Last occupied by Palmer Promotional Products. Heavily damaged by a fire in February 2014. The remains of the building were then demolished by summer 2014.
|-
| ||Detroit Transmission Division - Livonia||[[w:Livonia, Michigan|Livonia]], [[w:Michigan|Michigan]]||United States||[[w:Hydramatic|Hydramatic]] automatic transmissions||1949||1953||The Detroit Transmission Division moved from Detroit to a newer and larger factory in Livonia in 1949. In addition to Pontiac, Oldsmobile, & Cadillac, Livonia also supplied Hydramatics to Lincoln, Nash, Hudson, Kaiser, and Fraser. However, the factory burned down in August 1953 causing 6 deaths and more than $80 million in damage. GM quickly arranged to lease Kaiser’s Willow Run factory to replace the destroyed Livonia plant and GM then bought the plant outright in November 1953 for $26 million. Salvaged equipment from Livonia was taken to [[w:Willow Run#General Motors operations|Willow Run]]; see [[w:Willow Run Transmission|Willow Run Transmission]].
|-
|5<br /><br />C (1962-1978)||[[w:General Motors Diesel|General Motors Diesel]]||[[w:London, Ontario|London, Ontario]]||[[w:Canada|Canada]]||[[w:List of GM-EMD locomotives|EMD Locomotives]]<br />[[w:GM New Look (Fishbowl) Bus|GM New Look bus]] (1961-1978)<br />Terex earthmovers (1965-1980)<br />Military vehicles including:<br />[[w:AVGP|Grizzly/Cougar/Husky LAV I]]<br />[[w:LAV II|LAV II (LAV-25/Bison/Coyote)]]<br />[[w:LAV III|LAV III]]<br />[[w:Stryker|Stryker]]||1950 (GM Electro-Motive Division)<br /><br />1961 (Transit bus)||1979 (Transit bus)<br /><br />2003 (GM Defense)<br /><br />2005 (GM Electro-Motive Division)||Transit bus production began in London, Ontario in late 1961. Transit bus production moved to Saint-Eustache factory in 1979. The part of the property making military vehicles (armored fighting vehicles like the [[w:Stryker|Stryker]]) as GM Defense was sold in 2003 to [[w:General Dynamics Land Systems|General Dynamics Land Systems]], becoming [[w:General Dynamics Land Systems#General Dynamics Land Systems Canada|General Dynamics Land Systems – Canada (GDLS-C)]]. Located at 1991 Oxford St E. Interestingly, General Dynamics Land Systems was originally formed in 1982 when General Dynamics bought Chrysler Defense, Chrysler's tank division in the US, which was then renamed General Dynamics Land Systems. The locomotive operations were sold in 2005 and renamed [[w:Electro-Motive Diesel|Electro-Motive Diesel]], Inc. Electro-Motive was then sold to [[w:Caterpillar Inc.|Caterpillar's]] [[w:Progress Rail|Progress Rail]] subsidiary in 2010. The London, ON plant was then shuttered in 2012 & operations moved to a new plant in Muncie, Indiana. This part of the plant is now used by HCL Logistics, which provides logistics services to next door General Dynamics Land Systems – Canada. Located at 2021 Oxford St. E.
|-
|3 (1981-1987)<br /><br />M (1979-1980)||[[w:General Motors Diesel|General Motors Diesel]] Saint-Eustache Bus Plant||[[w:Saint-Eustache, Quebec|Saint-Eustache, Quebec]]||[[w:Canada|Canada]]||[[w:GM New Look (Fishbowl) Bus|GM New Look bus]] (1979-1986)<br />[[w:Classic (transit bus)|GM Classic bus]] (1983-1987)||1979||1987||Located at 1000 Industriel Blvd. Manufactures [[w:transit bus|transit bus]]es. GM consolidated Canadian transit bus production here from the London, Ontario and St. Laurent, Quebec plants in 1979. New Look transit bus production ended in 1986. Sold to [[w:Motor Coach Industries|Motor Coach Industries]], along with the designs for the [[w:Classic (transit bus)|Classic]] bus models this factory still produced in 1987. Later sold to [[w:Nova Bus|Nova Bus]] in 1993. Production of the Classic model bus ended in 1997. Still owned by [[w:Nova Bus|Nova Bus]], which is owned by [[w:Volvo AB|Volvo AB]] through [[w:Prevost (bus manufacturer)|Prevost Car]]. Prevost bought 51% of Nova Bus in 1998 and bought the remaining 49% from Henlys Group in 2004.
|-
|M|| [[w:General Motors Diesel|General Motors Diesel]] Saint Laurent Bus Plant || [[w:Saint Laurent, Quebec|Saint Laurent, Quebec]] || Canada || [[w:GM New Look bus|GM New Look bus]] (1975-1979)
|| 1974 || 1979 || Bus operations moved to [[w:Saint-Eustache, Quebec|Saint-Eustache, Quebec]].
|-
|D <br />(1960-1964 [[w:Pontiac (automobile)|Pontiac]] and 1965-2009)<br /><br /> C (1964 [[w:Chevrolet|Chevrolet]])<br /><br />A (Pre-1965 [[w:Oldsmobile|Oldsmobile]] and Pre-1960 [[w:Pontiac (automobile)|Pontiac]])<br /><br />6 (Pre-1964 [[w:Buick|Buick]])||[[w:Doraville Assembly|Doraville Assembly]]||[[w:Doraville, Georgia|Doraville, Georgia]]||United States||[[w:Chevrolet Uplander|Chevrolet Uplander]] (2005-2008 & '09 in Canada)<br />[[w:Pontiac Montana#Second generation (2005)|Pontiac Montana SV6]] (2005-2006 & '07-'09 in Canada)<br />[[w:Buick Terraza|Buick Terraza]] (2005-2007)<br />[[w:Saturn Relay|Saturn Relay]] (2005-2007)||1947||2008||Located at 3900 Motors Industrial Way. Was originally part of the [[w:Buick-Oldsmobile-Pontiac Assembly Division|Buick-Oldsmobile-Pontiac Assembly Division]]. First vehicle built in Nov. 1947 was an Oldsmobile. Some of the original property bought by GM for the Doraville plant in 1945 was deemed as excess and was sold off. One of the parts that was sold (82 acres) was sold to Chevrolet to build a parts warehouse. Doraville began making Chevrolet passenger cars for 1964. BOP Assembly Division became GM Assembly Division in 1965. Oldsmobile and Pontiac production ended in Dec. 1965, leaving just Chevrolet and Buick. Oldsmobile production resumed in Aug. 1967 for the 1968 model year. Oldsmobile production again ended in April 1970 followed by Buick production in July 1970. Pontiac production resumed in Aug. 1970 for the 1971 model year. B-body full-size Chevrolet and Pontiac production ended in Dec. 1973 and midsize A-body Chevrolet and Oldsmobile production began in Jan. 1974.[https://dekalbhistory.org/wp-content/uploads/2020/04/history-of-doraville-gm-plant.pdf] Doraville switched to building fwd A-body Oldsmobiles and Buicks for 1982. Doraville then switched to building W-body Oldsmobiles for 1988. Passenger car production ended in 1995 and the Cutlass Supreme coupe & sedan were moved to Fairfax II during 1995 while the convertible was discontinued. Doraville was converted to build minivans for 1997. Production ended in September 2008. Last vehicle built was a Chevy Uplander. Demolished in 2014-2015. Site is being redeveloped. Parts of the site are now occupied by Nalley Automotive Group (Infiniti dealership & a Collision Center), Mike Rezi Nissan (formerly Nalley Nissan), Assembly Studios Atlanta, Third Rail Studios at Assembly Atlanta, and Serta Simmons Bedding.<br />Past models: [[w:Chevrolet Venture|Chevrolet Venture]] (1997-2005), [[w:Oldsmobile Silhouette#Second generation (1997–2004)|Oldsmobile Silhouette]] (1997-2004), [[w:Pontiac Trans Sport#Second generation (1997-1999)|Pontiac Trans Sport]] (1997-1998), [[w:Pontiac Montana|Pontiac Montana]] (1999-2005), [[w:Pontiac Trans Sport#Second generation (Chevrolet)|Chevrolet Trans Sport]] (Europe: '97-'04), [[w:Buick Century#Second generation (1954–1958)|Buick Century]] (1954-1958), [[w:Buick Century#Fifth generation (1982–1996)|Buick Century]] (1982-1987), [[w:Buick Electra|Buick Electra]] (1959-1962), [[w:Buick Invicta|Buick Invicta]] (1959-1962), [[w:Buick LeSabre|Buick Lesabre]] (1959-1970), [[w:Buick Roadmaster|Buick Roadmaster]] (1951-1952, 1954-1958), [[w:Buick Special|Buick Special]] (1950-1958), [[w:Buick Super|Buick Super]] (1955, 1957-1958), [[w:Buick Wildcat|Buick Wildcat]] (1963, 1965-1970), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1964-1970), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1964-70), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-74), [[w:Chevrolet Chevelle#Third generation (1973–1977)|Chevrolet Chevelle]] (1974-77), [[w:Chevrolet Impala|Chevrolet Impala]] (1964-1974), [[w:Chevrolet Malibu#Fourth generation (1978)|Chevrolet Malibu]] (1978-1981), [[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1975-1980), [[w:Oldsmobile Cutlass#Fourth generation (intermediate) 1973–1977|Oldsmobile Cutlass]] (Gen 4) (1974-1977), [[w:Oldsmobile Cutlass#Fifth-generation (intermediate) 1978–1988|Oldsmobile Cutlass]] (Gen 5) (1978-1981), [[w:Oldsmobile Cutlass Ciera|Oldsmobile Cutlass Ciera]] (1982-1987), [[w:Oldsmobile Cutlass Supreme#Fifth generation (1988–1997)|Oldsmobile Cutlass Supreme]] (1988-1995), [[w:Oldsmobile 88|Oldsmobile 88]] (1949-1966, 1968-1970), [[w:Oldsmobile 98|Oldsmobile 98]] (1948-1963), [[w:Oldsmobile Starfire#First generation (1961–1966)|Oldsmobile Starfire]] (1961-1966), [[w:Pontiac 2+2|Pontiac 2+2]] (1964-1966), [[w:Pontiac Bonneville|Pontiac Bonneville]] (1958, 1960-1966), [[w:Pontiac Grand Prix#First generation (1962–1964)|Pontiac Grand Prix]] (1962-1964), [[w:Pontiac Catalina|Pontiac Catalina]] (1960-1966, 1971-1974), [[w:Pontiac Chieftain|Pontiac Chieftain]] (1951, 1953, 1955, 1958), [[w:Pontiac Grand Ville|Pontiac Grand Ville]] (1973-1974), [[w:Pontiac Star Chief|Pontiac Star Chief]] (1955-1958, 1964), [[w:Pontiac Ventura#1960–1970|Pontiac Ventura]] (1961),<br> [[w:Chevrolet El Camino|Chevrolet El Camino]] (1974-1981), [[w:GMC Sprint |GMC Sprint]] (1974-77), [[w:GMC Caballero|GMC Caballero]] (1978-1981),<br> [[w:Opel Sintra|Opel Sintra]]/[[w:Vauxhall Sintra|Vauxhall Sintra]] (1997-1999).
|-
| ||General Motors East Africa||[[w:Nairobi|Nairobi]]||[[w:Kenya|Kenya]]||[[w:Isuzu F-Series|Isuzu F-Series]]<br />[[w:Isuzu N-Series|Isuzu N-Series]]<br />Isuzu buses<br /><br />||1977||2017||Originally established in 1975 as GM Kenya, a joint venture with the Kenyan govt. Renamed GM East Africa in 2003. Other shareholders are Kenya’s Industrial and Commercial Development Corporation (ICDC): 20%, Centum Investment Co. Ltd.: 17.8%, & Itochu Corporation: 4.5%.
Isuzu moved pickup production to South Africa in 2012 so it could focus on trucks & buses at the Nairobi plant. <br />
GM sold its 57.7% stake in the factory to Isuzu in 2017 and left the Kenyan market. Now known as Isuzu East Africa. <br />
Past models: [[w:Isuzu D-Max|Isuzu D-Max]], [[w:Bedford Vehicles|Bedford trucks]], [[w:Bedford HA#The BTV|BTV]]
|-
| ||ELAZ-GM||[[w:Yelabuga|Yelabuga]], [[w:Tatarstan|Tatarstan]]||[[w:Russia|Russia]]||[[w:Chevrolet S-10 Blazer#Second generation (1995)|Chevrolet Blazer]]||1996||2001||GM owned about 25% & ELAZ owned the other 75%. Joint venture dissolved in 2001.
|-
| ||[[w:Electro Motive Division|Electro Motive Division]] - [[w:Electro-Motive Diesel#EMD La Grange (McCook)|La Grange Operations]]||[[w:McCook, Illinois|McCook, Illinois]]||United States||[[w:List of GM-EMD locomotives|Locomotives]]<br />Engines<br />Components||1936|| ||Located at 9301 W. 55th St.<br /> Electro-Motive headquarters and R&D operations. Locomotive production ended in 1991 and was moved to London, ON, Canada. Sold in 2005, renamed [[w:Electro-Motive Diesel|Electro-Motive Diesel]], bought by Caterpillar's Progress Rail subsidiary in 2010.
|-
| ||[[w:Elmore Manufacturing Company|Elmore]]||[[w:Clyde, Ohio|Clyde]], [[w:Ohio|Ohio]]||United States||Elmore automobiles||1909||1912|| Factory was located on Amanda St. Bought by GM in November 1909. Elmore was known for its two-stroke engines. GM closed it down in the fall of 1912. GM sold the factory to a truckmaker named Krebs Commercial Car Company in 1912. In 1917, Krebs Commercial Car Company merged with Clyde Cars Company and Lincoln Motor Truck Company to form what became Clydesdale Motor Truck Company in 1919. Clydesdale Motor Truck Company closed in 1939 and the factory was then used by Clyde Porcelain Steel Company until the factory burned down November 11, 1945. The factory would be rebuilt and used for making washing machines by various companies, most recently, Whirlpool Corp.
|-
| ||Ewing||[[w:Geneva, Ohio|Geneva]], [[w:Ohio|Ohio]]||United States||Ewing automobiles||1909||1911||Bought by GM in October 1909. Made taxis. GM closed it down in 1911.
|-
|X (1965–1987)<br /><br />K (Pre-1965 [[w:Oldsmobile|Oldsmobile]] & [[w:Pontiac (automobile)|Pontiac]])<br /><br />4 (Pre-1965 [[w:Buick|Buick]])||[[w:Fairfax Assembly|Fairfax Assembly]] (Fairfax I)||[[w:Kansas City, Kansas|Kansas City, Kansas]]||United States||[[w:Buick Centurion|Buick Centurion]] (1971-1973), [[w:Buick Century#Second generation (1954–1958)|Buick Century]] (1954-1958), [[w:Buick Electra|Buick Electra]] (1959-1963, 1971-1974), [[w:Buick Estate|Buick Estate]] (1970-1979), [[w:Buick Estate#1977–1990|Buick Electra Estate]] (1980-1987), [[w:Buick Invicta|Buick Invicta]] (1959-1962), [[w:Buick LeSabre|Buick LeSabre]] (1959-1985), [[w:Buick Estate#1977–1990|Buick LeSabre Estate]] (1980-1987), [[w:Buick Limited|Buick Limited]] (1958), [[w:Buick Roadmaster|Buick Roadmaster]] (1948-1949, 1951, 1953, 1956-1958), [[w:Buick Skylark#First generation (1961–1963)|Buick Skylark]] (1962-1963), [[w:Buick Special|Buick Special (B-body)]] (1947-1950, 1952-1958), [[w:Buick Special#1961–1963|Buick Special (Y-body)]] (1962-1963), [[w:Buick Super|Buick Super]] (1954-1958), [[w:Buick Wildcat|Buick Wildcat]] (1963-1970), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1982-1987), [[w:Chevrolet Impala|Chevrolet Impala]] (1982-1985), [[w:Oldsmobile 88|Oldsmobile 88]] (1949-1984), [[w:Oldsmobile 98|Oldsmobile 98]] (1948-1963), [[w:Oldsmobile F-85|Oldsmobile F-85/<br>Cutlass]] (1962-1963), [[w:Oldsmobile Custom Cruiser|Oldsmobile Custom Cruiser]] (1974-1984), [[w:Oldsmobile Jetstar I|Oldsmobile Jetstar I]] (1964-1965), [[w:Oldsmobile Starfire#First generation (1961–1966)|Oldsmobile Starfire]] (1961-1966), [[w:Pontiac 2+2|Pontiac 2+2]] (1964-1967), [[w:Pontiac Bonneville#Sixth generation (1977–1981)|Pontiac Bonneville]] (1958-70, 1975-1981), [[w:Pontiac Catalina|Pontiac Catalina]] (1959-1981), [[w:Pontiac Chieftain|Pontiac Chieftain]] (1950-1958), [[w:Pontiac Executive|Pontiac Executive]] (1967-1968), [[w:Pontiac Grand Prix|Pontiac Grand Prix]] (1962-1968), [[w:Pontiac Grand Ville|Pontiac Grand Ville]] (1971-1975), [[w:Pontiac LeMans#First generation (1961–1963)|Pontiac LeMans]] (1962-1963), [[w:Pontiac Parisienne#Fifth generation: 1977–1986|Pontiac Parisienne]] (1984-1986), [[w:Pontiac Safari|Pontiac Safari]] (1987), [[w:Pontiac Star Chief|Pontiac Star Chief]] (1954-1959, 1964, 1966), [[w:Pontiac Tempest#First generation (1961–1963)|Pontiac Tempest]] (1962-1963), [[w:Pontiac Ventura#1960–1970|Pontiac Ventura]] (1960-1961) ||1946||1987||Located at 100 Kindelberger Road. Originally, the location of the [[w:North American Aviation|North American Aviation]] Bomber Production Plant (built in 1940) where the [[w:B-25 Mitchell|B-25 Mitchell]] was manufactured during World War II. After the war, GM leased it in 1945 and converted the plant to auto production. Automotive production began in June 1946. GM later bought the plant in 1960. Was originally part of the [[w:Buick-Oldsmobile-Pontiac Assembly Division|Buick-Oldsmobile-Pontiac Assembly Division]]. BOP Assembly Division became GM Assembly Division in 1965. Fairfax mostly focused on full-size cars ([[w:General Motors A platform (RWD)#1926-1959|A-]], B-, & C-body) but it also built B-O-P Y-body compact cars for 1962-1963. Fairfax only began making Chevrolet passenger cars for 1982. Also built [[w:F-84F Thunderstreak|F-84F Thunderstreak]] fighter jets alongside cars beginning in 1952 and ending in May 1955 when the contract ended. Plant closed May 1987. Production moved to new building on adjacent site (Fairfax II) for 1988 model year production.
|-
| ||[[w:History of General Motors#Corporate restructuring and operating losses|Fiat-GM Powertrain Polska]]||[[w:Bielsko-Biala|Bielsko-Biala]]||[[w:Poland|Poland]]||[[w:Fiat JTD engine#1.3 JTDm/Multijet/CDTI/D/DDiS/HDi|GM Small Diesel Engine]] ||2003||2010|| Engine began production here in 2003 as part of Fiat-GM Powertrain, a 50/50 joint venture between GM & Fiat involving joint development and production of engines and transmissions. The joint venture was disbanded in 2005. As part of the dissolution, GM took a 50% stake in the Bielsko-Biala engine plant and the intellectual property of the 1.3 liter diesel engine produced there. In 2010, GM sold its half of the Bielsko-Biala engine plant back to Fiat. However, GM kept its half of the intellectual property of the 1.3 liter diesel engine produced there and continued to source the 1.3 liter diesel engine from the Bielsko-Biala engine plant. Chevrolet stopped using this engine around 2015. Opel was still using this engine when it was sold by GM to PSA in 2017. Opel last used this engine in 2019. This plant became part of [[w:Fiat Chrysler Automobiles|FCA]] in 2014 when Fiat and Chrysler Group merged. This plant became part of [[w:Stellantis|Stellantis]] in 2021 when FCA merged with PSA Group. Stellantis has announced that the Bielsko-Biala engine plant will close by the end of 2024.
|-
| ||Fisher Body No. 10||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||Auto bodies ||1917-<br />1919||1939||Was located at 5140 Riopelle St. (between Farnsworth St. & Theodore St.).GM bought 60% of Fisher Body in 1919 and bought the remainder in 1926. From 1926, Fisher Body only supplied bodies to GM brands. In 1939, became headquarters and manufacturing site of GM's new Detroit Transmission Division, which manufactured Hydramatic fully automatic transmissions that first appeared on the 1940 Oldsmobile.
|-
| ||[[w:Fisher Body#Fisher Body Corporation and General Motors|Fisher Body No. 12]]||[[w:Detroit|Detroit]], Michigan||United States|| ||1916||1942||Located at 1961 E. Milwaukee Ave. Previously used by Metzger Motor Car Company from 1910-1913 and [[w:Maxwell Motor Company|Maxwell Motor Company]] from 1913-1916. Owned by Fisher from 1916-1942 then sold to J. Lee Hackett Co. which owned it until 1973. Used for warehousing from 1973-1981 and then demolished.
|-
| ||[[w:Fisher Body#Fisher Body Corporation and General Motors|Fisher Body No. 21]]||[[w:Detroit|Detroit]], Michigan||United States||Bodies for Buick & Cadillac<br />Engineering and Tool & Die operations<br />Bodies for Cadillac limousines<br />Pre-production Pilot bodies||1919||1984||Located at 700 Piquette Ave. In 1999, was re-addressed as 6051 Hastings Street. Made bodies for Buick through 1926 when Buick body production moved to Fisher Body Plant No. 1 - Flint on S. Saginaw St. Made bodies for Cadillac through 1929 when Cadillac body production moved to the Fisher Body Plant No. 18/Fleetwood Body plant. Became an engineering facility from 1930-1955. Produced parts for B-25 & B-29 bombers in World War II (Aircraft Unit). Also did product development and engineering during World War II (Central Development and Experimental Unit). In 1955, GM transferred production of Cadillac limousine bodies from the Fleetwood plant in Detroit to Fisher #21 plant due to it being a low-volume operation. Closed April 1984. Sold to Cameo Color Coat in 1985 which transferred it to Carter Color Coat in 1990. Carter Color Coat then went bankrupt and the property was abandoned in 1993. GM removed some paints and other hazardous materials in the early 1990s. It's been owned by the city of Detroit since 2000. Now being converted into Fisher 21 Lofts, a mixed residential and commercial development scheduled to open in 2027.
|-
| ||[[w:Fisher Body#Fisher Body Corporation and General Motors|Fisher Body No. 23/23B]]||[[w:Detroit|Detroit]], Michigan||United States||Tool & Die plant through 1972.||1921||1972||Located at 601 Piquette Ave. #23 was the six story portion while #23B was the one story portion. Known as the Detroit Die and Machine Plant. In WWII, made B-25, B-29, P-80 aircraft tools and fixtures; M4, M10, M36, M26, M18 tank parts; 3-inch and 5-inch Naval Gun Breech Housings, 155mm and 8-in. gun parts, Diesel Engine parts and Torqmatic Transmission parts. Became Chevrolet's Detroit Truck & Bus plant in 1974.
|-
| ||[[w:Fisher Body#Fisher Body Corporation and General Motors|Fisher Body No. 37]]||[[w:Detroit|Detroit]], Michigan||United States||Large bodyside stampings||1919||1985||Located at 950 E Milwaukee Ave. Produced aircraft and tank assemblies, 90 mm AA guns, 5” naval gun housings and Lockheed missile parts during World War II. In 1989, bought by Lakeside Stamping which was renamed New Center Stamping in 1994. In 2019, New Center Stamping Inc. was taken over by Soave Enterprises and still stamps parts for automakers including GM, Ford, and Stellantis.
|-
| ||Fisher Body No. 40||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||Tooling ||1928||1983-1984||Was located at 1500 E. Ferry St. Plant 41 was next door and was used for storage.
|-
| ||Fisher Body Overseas Corp. - Dundonald plant||[[w:Dundonald, County Down|Dundonald]], [[w:Northern Ireland|Northern Ireland]]||[[w:United Kingdom|United Kingdom]] ||Seat Belts, window regulators, door locks, door switches, & other automotive hardware||1980||1988||Located at 770 Upper Newtownards Road at the corner of Carrowreagh Road. Dundonald is an eastern suburb of Belfast. From 1966-1977, was a Rolls-Royce plant making aircraft engine parts. GM's Fisher Body division bought the plant in 1978 and reopened it in 1979. Production began in 1980. In 1982, the Dundonald plant became part of Fisher Body Overseas Corp., part of GM Overseas Corp. Sold to Takata Corp. in 1988. Operated as European Components Corp. (ECC) and later as TK-ECC, still making seat belts, until it was closed in 2004. Plant was later demolished.
|-
| ||Fisher Body Overseas Corp. - Kennedy Way plant||[[w:Belfast|Belfast]], [[w:Northern Ireland|Northern Ireland]]||[[w:United Kingdom|United Kingdom]] ||Seat Belt Buckles, Door switches, & other automotive hardware||1982||?||Located in Kennedy Way Industrial Estate on Blackstaff Road in western Belfast. The Kennedy Way plant was part of Fisher Body Overseas Corp., part of GM Overseas Corp.
|-
| ||[[w:Flint, Michigan auto industry#Flint Plant #1|Flint Body Assembly]] (Fisher Body Flint Plant #1)||[[w:Flint, Michigan|Flint]], Michigan||United States||Bodies for Buick and later also Chevrolet & Oldsmobile<br />||1923||1987||Located at 4000-4500 S. Saginaw St. Originally a [[w:Durant Motors|Durant Motors]] plant. Bought by GM in 1926. Became Fisher Body Plant No. 1 - Flint. Supplied bodies to the Buick plant in Flint (later known as Buick City). After Buick City switched to unibody, fwd cars for 1986, Flint Body began supplying bodies for G-cars built at the Pontiac Assembly plant in Pontiac, MI. Closed in Dec. 1987 when G-body production at Pontiac Assembly ended. Last body built was a Buick Regal Grand National to be completed at Pontiac Assembly. Most of the site was demolished and the remainder was converted into the Great Lakes Technology Center. GM leased space there for R&D and offices (including AC Rochester world headquarters) until 2009. Various medical-related companies now occupy much of the property. The original administration building at 4300 S. Saginaw St. still stands as of 2022 and still has a Fisher Body logo at the top of the front of the building in the center.
|-
| ||[[w:Flint, Michigan auto industry#Flint V8 Engine Plant/Flint Engine South|Chevrolet-Flint (V8) Engine Plant]] (Van Slyke Road)||[[w:Flint, Michigan|Flint, Michigan]]||United States||[[w:Chevrolet small-block engine (first and second generation)|Chevrolet Small-Block V8]]<br />[[w:Chevrolet Turbo-Thrift engine|Chevrolet Turbo-Thrift I6]]<br />[[w:Chevrolet 153 4-cylinder engine|Chevrolet 153 4-cylinder engine]]<br />[[w:List of Isuzu engines#Isuzu G engine|Isuzu G140 & G161Z SOHC gas<br> 4-cylinder engine for Chevy Chevette & Pontiac 1000/Acadian]]<ref>{{cite news| title = 1975, Chevrolet Turns to Opel for the New Fuel-Saving Chevette| url = https://web.archive.org/web/20180116081057/https://history.gmheritagecenter.com/wiki/index.php/1975%2C_Chevrolet_Turns_to_Opel_for_the_New_Fuel-Saving_Chevette| archive-date = 2018-01-16| publisher = General Motors| access-date = 2014-06-05| url-status = dead}}</ref>||1954||1999||Located at 3848 Van Slyke Road, down the block from the Flint Truck Assembly Plant. Chevy Small-Block V8 engine production began here on July 9, 1954. Only V8 engines were made until 1961, when 4 & 6 cylinder engines began to be made for the 1962 Chevy II. Around 45 million Chevy small-block V8 engines were built at this plant. Plant closed in 1999 and was demolished. Land is now used by a new paint shop for the [[w:Flint Truck Assembly|Flint Truck Assembly Plant]]. The new paint shop (Flint Assembly Paint Operations) was announced in December 2013 and opened in 2016, replacing the previous paint shop inside the assembly plant.
|-
|1 (1928-1947)||[[w:Flint, Michigan auto industry#Flint Manufacturing Div./Delphi Flint West/Flint Tool and Die|Chevrolet-Flint Manufacturing Complex]] ("Chevy in the Hole") /<br /> Flint West||[[w:Flint, Michigan|Flint, Michigan]]||United States||[[w:Chevrolet|Chevrolet]] vehicles including [[w:Chevrolet Series 490|Chevrolet Series 490]]<br />[[w:Chevrolet Superior|Chevrolet Superior]]<br />[[w:Chevrolet Series AA Capitol|Chevrolet Series AA Capitol]]<br />[[w:Chevrolet Series AB National|Chevrolet Series AB National]]<br />[[w:Chevrolet Series AC International|Chevrolet Series AC International]]<br />[[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]]<br />[[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]]<br />[[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]]<br />[[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]]<br />[[w:Chevrolet Master|Chevrolet Master]]<br />[[w:Chevrolet Deluxe|Chevrolet Deluxe]]<br />[[w:Chevrolet Stylemaster|Chevrolet Stylemaster]]<br />[[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]]<br />[[w:Chevrolet AK Series|Chevrolet AK Series]]<br />[[w:Chevrolet Suburban|Chevrolet Suburban]] (Gen 1 & 2)<br /><br />[[w:Chevrolet|Chevrolet]] engines including [[w:Chevrolet Inline-4 engine#171|Chevrolet Inline-4 engine]]<br />[[w:Chevrolet Stovebolt engine|Chevrolet Stovebolt / Blue Flame I6]]<br />||1913||2004||Located at 300 N. Chevrolet Ave. (formerly known as Wilcox Street). This was Chevrolet's home plant. It predated Chevrolet becoming part of GM in 1918. The complex originally included metal stamping, body assembly, vehicle assembly, engine assembly, and various component manufacturing plants. On January 11, 1940, the 25 millionth GM vehicle built in the US, a 1940 Chevrolet Special Deluxe Sedan, was built here. Plant 2 (vehicle assembly) & 2A (Fisher Body) were replaced by new plants on Van Slyke Road elsewhere in Flint in 1947 (now the [[w:Flint Truck Assembly|Flint Truck Assembly Plant]]). Plant 4 was the engine plant. It closed in 1984 but was ultimately reopened later. In 1987, the complex was taken over by the AC Spark Plug division and became AC Spark Plug Flint West. In 1988, it became AC Rochester Flint West, and in 1994 AC Delco Systems Flint West following further consolidations. In early 1995, it was renamed Delphi Flint West. Around this time, plants in the complex began to be demolished until Plant 4 closed in 2004 and was subsequently demolished. Plant 4 last made generators and fuel filters. Building 35 still exists as part of [[w:Kettering University|Kettering University]]. It is now the C.S. Mott Science and Engineering Building after the addition of another floor and a new façade. Plant 38 still exists as GM's Flint Tool & Die plant. All the other buildings are gone. Much of the property is being redeveloped into a park called [[w:Chevy Commons|Chevy Commons]].
|-
| ||[[w:Flint North|Flint North]] Powertrain||[[w:Flint, Michigan|Flint, Michigan]]||United States||[[w:Buick V8 engine|Buick V8 engine]]<br />[[w:Buick V6 engine|Buick V6 engine]]<br />Engine Components<br />[[w:Dynaflow|Dynaflow]] transmissions<br />transmission components<br /> torque converters<br />coil springs||1905||2010||Complex was made up of several factories. Flint North is the part of the Buick City factory complex north of Leith St. stretching north to E. Pierson Rd. [[w:Liberty L-12|Liberty aircraft engines]] were made here during WWI. Factory 36 was the engine plant. Factory 36 opened in 1952 and closed in 2008. The remainder of the complex closed by December 2010. Demolished by 2012. Part of the site (1225 E. Marengo Ave.) is now occupied by American SpiralWeld Pipe Co.
|-
||7||[[w:Arlington Assembly#History|Fort Worth Assembly]]||[[w:Fort Worth, TX|Fort Worth, Texas]]||United States||[[w:Chevrolet Series 490|Chevrolet Series 490]]||1917||1924
|Built by Chevrolet before it became part of GM. Located at 2601 W. 7th St. (then known as Arlington Heights Blvd.). Is across the street from what is now Montgomery Plaza. A 3rd story was added to the building in 1920. Closed due to flood damage from the April 1922 flooding of the Trinity River and the subsequent imposition of flood-control taxes.<ref>https://books.google.com/books?id=mTvuAwAAQBAJ&dq=1920+fort+worth+chevrolet+factory&pg=PA52 Lost Fort Worth, page 52</ref> Montgomery Ward leased the empty Chevy plant between 1924 and 1928 to house a temporary store while its main Fort Worth facility was built across what is now West Seventh Street. That building is now Montgomery Plaza. The Chevy plant was later used by various different companies including GM's Frigidaire division as a sales and warehouse facility and later by Tandy Corp., first for its Radio Shack division and later for its corporate HQ. Demolished in 1986. Site is now Olympus 7th Street Station, a luxury apartment building.
|-
|G <br />(1960-1964 [[w:Chevrolet|Chevrolet]] and 1965-1989)<br /><br /> B (Pre-1960 [[w:Oldsmobile|Oldsmobile]])<br /><br /> F (Pre-1960 [[w:Pontiac (automobile)|Pontiac)]]<br /><br /> 7 (Pre-1960 [[w:Buick|Buick]])||[[w:Framingham Assembly|Framingham Assembly]]||[[w:Framingham, Massachusetts|Framingham, Massachusetts]]||United States||[[w:General Motors A platform (1925)#1964|GM rwd A-bodies]]: [[w:Chevrolet Chevelle|Chevrolet Chevelle]] (1965-1969), [[w:Pontiac Tempest|Pontiac Tempest]] (1967-1970), [[w:Pontiac LeMans|Pontiac LeMans]] (1967-1972, 1974-1976), [[w:Pontiac GTO|Pontiac GTO]] (1966-1969, 1971-1972), [[w:Oldsmobile Cutlass|Oldsmobile Cutlass]] (1967-1981), [[w:Oldsmobile Cutlass Supreme|Oldsmobile Cutlass Supreme]] (1967-1981), [[w:Oldsmobile 442|Oldsmobile 442]] (1967-1977), [[w:Oldsmobile Vista Cruiser|Oldsmobile Vista Cruiser]] (1968-1977), [[w:Buick Skylark#Third generation (1968–1972)|Buick Skylark]] (1970-1972), [[w:Buick GS|Buick GS]] (1970-1972), [[w:Buick Century|Buick Century]] (1973-1981), [[w:Buick Regal|Buick Regal]] (1973-1981)
[[w:General Motors A platform (1982)|GM fwd A-bodies]]: [[w:Chevrolet Celebrity|Chevrolet Celebrity]] (1982-1988), [[w:Pontiac 6000|Pontiac 6000]] (1982), [[w:Oldsmobile Cutlass Ciera|Oldsmobile Cutlass Ciera]] (1983-1989), [[w:Buick Century#Fifth generation (1982–1996)|Buick Century]] (1989)
||1948||1989|| Located at 63 Western Ave. First vehicle produced was a 1948 Buick on February 26, 1948. Was originally part of the [[w:Buick-Oldsmobile-Pontiac Assembly Division|Buick-Oldsmobile-Pontiac Assembly Division]]. Framingham is the only BOP Assembly Division plant to switch to the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Framingham switched to Chevrolet Assembly Division in August 1959 [https://www.worthpoint.com/worthopedia/gm-framingham-ma-canada-pontiac-buick-olds-plant]. Framingham began making Chevrolet passenger cars for 1960. BOP Assembly Division became GM Assembly Division in 1965. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were then gradually transferred to the GM Assembly Division. Framingham Assembly joined the GM Assembly Division in 1968. Idled October 1, 1982 but reopened March 14, 1983. Closed August 1, 1989. Sold to ADESA to use as a vehicle auction site. <br/>Past models: <br/> [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1960-1966), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1960-1966), [[w:Chevrolet Impala|Chevrolet Impala]] (1960-1966), [[w:Chevrolet Chevy II / Nova#First generation (1962–1965)|Chevrolet Chevy II/Nova]] (1962-1963), [[w:Buick Century#Second generation (1954–1958)|Buick Century]] (B-body), [[w:Buick Roadmaster|Buick Roadmaster]] (1949-1950, 1955, 1958), [[w:Buick Special#1949–1958|Buick Special]] (1952-1953, 1955-1958), [[w:Buick Super|Buick Super]] (1954), [[w:Oldsmobile 88|Oldsmobile 88]], [[w:Oldsmobile 98|Oldsmobile 98]], [[w:Pontiac Bonneville|Pontiac Bonneville]] (1958), [[w:Pontiac Chieftain|Pontiac Chieftain]] (1951, 1954, 1956), [[w:Pontiac Star Chief|Pontiac Star Chief]] (1955, 1957, 1959)
|-
| ||General Motors France S.A.||[[w:Gennevilliers|Gennevilliers]]||[[w:France|France]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Buick|Buick]]||1939||1940||Operations interrupted by German invasion of France and seizure of the plant in 1940 during WWII.
|-
|Z (1965-1982)<br /><br />H (1963-1964 [[w:Chevrolet|Chevrolet]] and [[w:GMC (automobile)|GMC]])<br /><br />F (1964 [[w:Pontiac (automobile)|Pontiac]] and [[w:Oldsmobile|Oldsmobile]])<br /><br />3 (1964 [[w:Buick|Buick]])||[[w:Fremont Assembly|Fremont Assembly]]||[[w:Fremont, California|Fremont, California]]||United States||[[w:Buick Century|Buick Century]] (1973-1981)<br />[[w:Buick GS|Buick GS]] (1965-1972)<br />[[w:Buick Regal|Buick Regal]] (1973-1981)<br />[[w:Buick Skylark|Buick Skylark]] (1964-1972)<br />[[w:Buick Special|Buick Special]] (1964-1969)<br />[[w:Buick Sport Wagon|Buick Sport Wagon]] (1965)<br />[[w:Chevrolet K5 Blazer#1973–1991|Chevrolet K5 Blazer]] (1977-1979)<br />[[w:Chevrolet C/K|Chevrolet C/K]] (1963-1982)<br />[[w:Chevrolet Celebrity|Chevrolet Celebrity]] (1982)<br />[[w:Chevrolet Chevelle|Chevrolet Chevelle]] (1964-1969, 1973-1977)<br />[[w:Chevrolet El Camino|Chevrolet El Camino]] (1964-1969, 1973-1981)<br />[[w:Chevrolet Malibu|Chevrolet Malibu]] (1978-1981)<br />[[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1973-1981)<br />[[w:Chevrolet Suburban|Chevrolet Suburban]] (1964-1971)<br />[[w:GMC C/K|GMC C/K]] (1963-1982)<br />[[w:GMC Caballero|GMC Caballero]] (1978-1981)<br />[[w:Chevrolet K5 Blazer#1973–1991|GMC Jimmy]] (1977-1979)<br />[[w:GMC Sprint|GMC Sprint]] (1973-1977)<br />[[w:GMC Suburban|GMC Suburban]] (1964-1971)<br />[[w:Oldsmobile Cutlass|Oldsmobile Cutlass]] (1964-1972)<br />[[w:Oldsmobile Cutlass Ciera|Oldsmobile Cutlass Ciera]] (1982)<br />[[w:Oldsmobile Cutlass Supreme|Oldsmobile Cutlass Supreme]] (1966-1972)<br />[[w:Oldsmobile 442|Oldsmobile 442]] (1964-1972)<br />[[w:Oldsmobile Vista Cruiser|Oldsmobile Vista Cruiser]] (1965-1966)<br />[[w:Pontiac Grand Prix#Third generation (1969–1972)|Pontiac Grand Prix]] (1970)<br />[[w:Pontiac LeMans|Pontiac LeMans]] (1964-1974)<br />[[w:Pontiac GTO|Pontiac GTO]] (1964-1973)<br />[[w:Pontiac Tempest|Pontiac Tempest]] (1964-1969)||1963||1982||Located at 45500 Fremont Blvd.<br />
Operated from 1963-1982 as a GM factory. Was originally part of the [[w:Buick-Oldsmobile-Pontiac Assembly Division|Buick-Oldsmobile-Pontiac Assembly Division]] though it also built Chevrolet passenger cars from the beginning. Fremont built GM's midsize A-bodies. Was the first BOP Assembly Division plant to also build Chevrolet and GMC trucks. Regular truck production began June 10, 1963. First production car built September 3, 1963. BOP Assembly Division became GM Assembly Division in 1965. Plant was idled March 1982.<br />
From 1984-2010, operated as [[w:NUMMI|New United Motor Manufacturing Inc. (NUMMI)]], which was a 50/50 joint venture between GM and [[w:Toyota|Toyota]] and assembled both GM and Toyota vehicles.<br />
Sold to [[w:Tesla Motors|Tesla, Inc.]] in May 2010.<ref>{{cite news|author=Sam Abuelsamid|title=Tesla to buy old resources from GM, Toyota for NUMMI plant|url=http://www.autoblog.com/2010/08/22/tesla-to-buy-old-resources-from-gm-toyota/|access-date=20 August 2015|publisher=Autoblog.com|date=August 22, 2010}}</ref> Tesla began production at Fremont in 2012.
|-
|P||[[w:Fabryka Samochodów Osobowych|FSO]]||[[w:Warsaw|Warsaw]]||[[w:Poland|Poland]]||[[w:Opel Astra#F|Opel Astra]]<br />[[w:Opel Vectra#Vectra B (1995–2002)|Opel Vectra]]||1994||2000||Built by an [[w:Fabryka Samochodów Osobowych|FSO]] - GM joint venture operating out of a converted old FSO warehouse.
|-
|W||[[w:Fabryka Samochodów Osobowych|FSO]]||[[w:Warsaw|Warsaw]]||[[w:Poland|Poland]]||[[w:Chevrolet Aveo (T200)|Chevrolet Aveo]]||2007||2011||Built by [[w:Fabryka Samochodów Osobowych|FSO]] for GM as part of a joint venture between [[w:Ukrainian Automobile Corporation|UkrAvto]] (parent of FSO) & GM. [[w:Ukrainian Automobile Corporation|Ukravto]] owned 60% & [[w:GM Daewoo|GM Daewoo]] owned 40%. The production license ended in 2011 & was not renewed.
|-
| ||[[General Motors Gmbh]]||[[w:Berlin|Berlin]]||Germany||[[w:Chevrolet|Chevrolet]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Oakland (automobile)|Oakland]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Buick|Buick]]<br />[[w:Cadillac|Cadillac]]||1927||1932||Replaced Hamburg plant. Located in Borsigwalde area of Berlin. Also predates the acquisition of [[w:Opel|Opel]] by GM.
|-
| ||[[General Motors Gmbh]]||[[w:Hamburg|Hamburg]]||Germany||[[w:Chevrolet|Chevrolet]] trucks||1926||1927||GM's first German plant predating the acquisition of [[w:Opel|Opel]]. Located in a leased warehouse.
|-
| ||[[General Motors Ltd.]]||[[w:Hendon|Hendon]], [[w:England|England]]||United Kingdom||[[w:Chevrolet|Chevrolet]] <br /> [[w:GMC (automobile)|GMC]] ||1924||1930||GM's first British plant predating the acquisition of [[w:Vauxhall Motors|Vauxhall]]. Operated out of a leased plant. When Chevrolet production was moved to Luton in 1930, Hendon was used for parts distribution. Later, Frigidaire made appliances at Hendon. In 1970, Hendon began producing steering columns. In 1971, more automotive components began to be produced in place of Frigidaire appliances. In 1980, GM sold the Hendon site for redevelopment but leased back an area for construction of a new plant for Saginaw Steering Gear. The new plant opened in 1981. See listing for "Saginaw Steering Gear Overseas Corp. - Southampton plant" for more details.
|-
| ||[[General Motors Ltd.]]||[[w:Southampton|Southampton]], [[w:Hampshire|Hampshire]], [[w:England|England]]||United Kingdom||[[w:Chevrolet|Chevrolet]]||1938||1946||Located on West Bay Road in the New Dock area of Southampton. Operations interrupted by German bombing of the UK during WWII. Plant was bombed in 1940 & 1941. Plant was reoccupied in 1946. Plant acquired by GM Ltd. in 1951 and converted to produce automotive components in 1952. See listing for "AC Spark Plug Overseas Corp. - Southampton plant" for more details.
|-
| ||[[w:Ghandhara Industries|Ghandhara Industries]]||[[w:Karachi|Karachi]], [[w:Sindh|Sindh]]||[[w:Pakistan|Pakistan]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Vauxhall Motors|Vauxhall]]<br />[[w:Bedford Vehicles|Bedford trucks and buses]] including [[w:Bedford TJ|Bedford TJ]]<br />[[w:Holden|Holden]]||1953||1970's||Originally a GM owned plant (General Motors Overseas Distribution Corporation). Sold to [[w:Ghandhara Industries|Ghandhara Industries]] Ltd. in 1963. Nationalized in 1972, it then became National Motors Ltd. Privatized to the [[w:Bibojee Group|Bibojee Group]] in 1992 who reverted back to the previous name, Ghandhara Industries. Ghandara Industries assembles Isuzu vehicles today.
|-
| ||[[GM-Auto]]||[[w:Saint-Petersburg|Saint-Petersburg]]||[[w:Russia|Russia]]||[[w:Chevrolet Cruze|Chevrolet Cruze]]<br />[[w:Opel Astra|Opel Astra]]
[[w:Chevrolet Trailblazer (SUV)#Second generation (RG; 2011)|Chevrolet Trailblazer]]
[[w:Chevrolet Captiva#First generation (C100, C140; 2006)|Chevrolet Captiva]]<br />[[w:Opel Antara|Opel Antara]]
||2007||2015||Includes operations at the temporary "Arsenal plant" & the permanent plant in [[w:Shushary, Saint Petersburg|Shushary]]. GM ceased most operations in Russia back in 2015 and the GM-Auto plant closed. Sold to Hyundai Motor in 2020.
|-
| ||[[w:GM-AvtoVAZ|GM-AvtoVAZ]]||[[w:Tolyatti|Togliatti]]||[[w:Russia|Russia]]||[[w:Chevrolet Niva|Chevrolet Niva]]<br />[[w:Chevrolet Viva|Chevrolet Viva]]||2002||2019||Was originally owned 41.5% by GM, 41.5% by AvtoVAZ, & 17% by [[w:EBRD|EBRD]]. In 2012, [[w:EBRD|EBRD]] was bought out & GM-AvtoVAZ became 50/50 owned by GM & AvtoVAZ. The GM-AvtoVAZ joint venture was dissolved in 2019 when AvtoVAZ bought out GM. The Chevrolet Niva was renamed Lada Niva Travel during 2020. AvtoVAZ was a part of [[w:Renault Group|Renault Group]] from 2016 until 2022.
|-
|4||GM España S.A.||[[w:Figueruelas|Figueruelas]], [[w: Zaragoza (province)| Zaragoza (province)]]||[[w:Spain|Spain]]||[[w:Opel Corsa|Opel/Vauxhall Corsa]] A, B, C, D, E (5 door, van)<br />[[w:Opel Meriva|Opel/Vauxhall Meriva]] A, B<br />[[w:Opel Combo#Combo C (2001-2012)|Opel/Vauxhall/Holden Combo]] C<br />[[w:Opel Tigra#Tigra A (1994–2000)|Opel/Vauxhall Tigra A]]<br />[[w:Vauxhall Nova|Vauxhall Nova]]<br />[[w:Holden Barina#Third generation (SB; 1994–2000)|Holden Barina (SB)]]<br />[[w:Holden Barina#Fourth generation (XC; 2001–2005)|Holden Barina (XC)]]||1982||2017|| [[w:Adam Opel AG|Opel plant]]. Sold to [[w:PSA Group|PSA Group]] in 2017. Part of [[w:Stellantis|Stellantis]] since 2021.
|-
| ||GM Indonesia||Pondok Ungu, [[w:Bekasi|Bekasi]], [[w:West Java|West Java]]||[[w:Indonesia|Indonesia]]||After reopening:<br /> [[w:Chevrolet Spin|Chevrolet Spin]]<br /><br />Before temporary closure in 2005:<br /> [[w:Chevrolet S-10 Blazer#Second generation (1995)|Chevrolet Blazer]]<br />[[w:Opel Blazer|Opel Blazer]]<br />[[w:Opel Astra#F|Opel Optima]]<br />[[w:Opel Vectra#Vectra A (1988–1995)|Opel Vectra]]||1995||2015||PT Garmak Motor assembled models under license from GM beginning in 1976, before the establishment of their joint venture with GM in 1993. These license built models include: [[w:Bedford Vehicles|Bedford]] trucks, [[w:Bedford HA#The BTV|Morina]], [[w:Opel Rekord Series E|Opel Rekord E 3-d panel van]], [[w:Opel Kadett#Kadett D (1979–1984)|Opel Kadett D]], [[w:Isuzu Faster#First generation (1972–1980)|Chevrolet LUV (Mk 1)]], [[w:Isuzu Faster#Second generation (1980–1988)|Chevrolet LUV (Mk II)]], & [[w:Isuzu Trooper#First generation (1981–1991)|Chevrolet Trooper/Stallion]].
Originally established as PT General Motors Buana Indonesia, which was owned 60% by GM and 40% by PT Garmak Motor. GM bought out Garmak in 1997 taking 100% of the shares. The assembly plant was closed from 2005-2011 and reopened in 2012 to make the Chevy Spin. Closed again in June 2015.
|-
| ||GM Java||[[w:Tanjung Priok|Tanjung Priok]], [[w:North Jakarta|North Jakarta]], [[w:Jakarta|Jakarta]]||[[w:Indonesia|Indonesia]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Opel|Opel]] ([[w:Opel 1.2 Liter|1.2 Liter]])<br />[[w:Vauxhall Motors|Vauxhall]] ([[w:Vauxhall 10-4|10-4]])||1927||1953||First Car Factory in what is now Indonesia (at the time, it was the Dutch East Indies). GM pulled out of Indonesia in 1954 and liquidated the company by 1956. Sold to P.N. Gaja Motors, which assembled the Opel Rekord and Kadett in the 1960's. Eventually became part of Astra International and its joint ventures with Toyota/Daihatsu.
|-
| ||GM Malaysia Sdn. Bhd.||[[w:Tampoi, Johor|Tampoi]], [[w:Johor|Johor]]||[[w:Malaysia|Malaysia]]||[[w:Opel Ascona|Opel Ascona]]<br />[[w:Opel Commodore|Opel Commodore]]<br />[[w:Opel Gemini|Opel Gemini]]<br />[[w:Opel Kadett|Opel Kadett]]<br />[[w:Opel Manta|Opel Manta]]<br />[[w:Opel Rekord|Opel Rekord]]<br />[[w:Bedford HA#The BTV|Bedford Harimau]]<br />[[w:Holden|Holden]]||1968||1982||Originally Capital Motor Assembly Corp., which assembled Opel models under license from GM beginning in 1968. These license built models include: [[w:Opel Commodore|Opel Commodore]] A, [[w:Opel Kadett|Opel Kadett B]], [[w:Opel Rekord Series C|Opel Rekord C]], & components. Capital Motor also assembled cars for Honda and Datsun (Nissan). GM bought Capital Motor Assembly in 1971 and renamed it GM Malaysia. Malaysian government policies that said Malaysians had to own a majority of local auto assembly plants forced GM to sell GM Malaysia to Oriental Holdings in 1980 which then renamed the unit Oriental Assemblers. Assembly of GM vehicles ended in 1982. Oriental Assemblers continued making Honda cars at this plant until around 2004.
|-
| ||GM Philippines, Inc.||[[w:Paco, Manila|Paco district]], [[w:Manila|Manila]]||[[w:Philippines|Philippines]]||[[w:Buick Electra|Buick Electra]]<br />[[w:Chevrolet Bel Air|Chevrolet Bel Air]]<br />[[w:Chevrolet Camaro (first generation)|Chevrolet Camaro]]<br />[[w:Chevrolet Impala|Chevrolet Impala]]<br />[[w:Chevrolet Malibu|Chevrolet Malibu]]<br />Chevrolet trucks<br />[[w:Holden EH|Holden EH]]<br />[[w:Holden HD|Holden HD]]<br />[[w:Holden HR|Holden HR]]<br />[[w:Holden HK|Holden HK]]<br />[[w:Holden HT|Holden HT]]<br />[[w:Holden HG|Holden HG]]<br />[[w:Holden HQ|Holden HQ]]<br />[[w:Holden Torana|Holden Torana]]<br />[[w:Isuzu Gemini|Isuzu Gemini]]<br />[[w:Opel Ascona|Opel Ascona]]<br />[[w:Opel Kadett|Opel Kadett]]<br />[[w:Opel Manta|Opel Manta]]<br />[[w:Opel Rekord|Opel Rekord]]<br />[[w:Pontiac Parisienne#Philippines|Pontiac Parisienne]]<br />[[w:Vauxhall Victor|Vauxhall Victor]]<br />[[w:Vauxhall Viva|Vauxhall Viva]]<br />[[w:Vauxhall VX4/90|Vauxhall VX4/90]]<br />[[w:Bedford HA#The BTV|GM Amigo/Tiger/Harabas]]<br />[[w:Bedford Vehicles|Bedford trucks]] ||1953||1985||Originally Yutivo Sons Hardware Co. Yutivo assembled various models under license from GM beginning in 1953. GM bought a 49% stake in Yutivo in 1972 and renamed it GM Philippines. Isuzu invested in the company in 1979 and it was renamed GM Pilipinas, Inc. Assembly of GM vehicles ended in 1985 and GM sold the plant to Isuzu in 1994. Isuzu closed this plant and company in 1995 and replaced it with a new plant in Biñan, Laguna owned by a new subsidiary (Isuzu Philippines Corporation).
|-
|G||[[w:GM Manufacturing Poland|GM Manufacturing Poland Sp. z o.o.]]||[[w:Gliwice|Gliwice]]||[[w:Poland|Poland]]||[[w:Opel Astra#Astra K (B16; 2015)|Opel Astra]] K (5-door)<br />[[w:Holden Astra#Seventh generation (BK, BL; 2016)|Holden Astra (BK)]] (5-door)<br />[[w:Opel Astra#Astra J (P10; 2009)|Opel/Vauxhall Astra J]] (3-door, 4-door sedan, 5-door)<br />[[w:Opel Astra#Astra H (A04; 2004)|Opel Astra Classic III]] sedan<br />[[w:Holden Astra#Sixth generation (PJ; 2015)|Holden Astra (PJ)]] (GTC, VXR)<br />[[w:Opel Astra#Astra H (A04; 2004)|Opel Astra H]] sedan<br />[[w:Opel Astra#Astra G (T98; 1998)|Opel Astra Classic II]]<br />[[w:Holden Astra#Fourth generation (TS; 1998)|Holden Astra Classic (TS)]]<br />[[w:Opel Astra#Astra F (T92; 1992)|Opel Astra Classic I]]<br />[[w:Opel Agila#First generation (H00; 2000)|Opel/Vauxhall Agila A]]<br />[[w:Suzuki Solio#First generation (MA63S/MA64S/MA32S; 1999)|Suzuki Wagon R+ (2005-2007)]]<br />[[w:Opel Cascada|Opel/Vauxhall Cascada]]<br />[[w:Buick Cascada|Buick Cascada]]<br />[[w:Holden Cascada|Holden Cascada (CJ)]]<br />[[w:Opel Zafira#Zafira B (2005)|Opel/Vauxhall Zafira B]]||1998||2019|| [[w:Adam Opel AG|Opel]] plant. Sold to [[w:PSA Group|PSA Group]] in 2017. Continued to supply the [[w:Buick Cascada|Buick Cascada]] to GM through 2019. Part of [[w:Stellantis|Stellantis]] since 2021.
|-
| ||GM Powertrain Fredericksburg||[[w:Fredericksburg, Virginia|Fredericksburg, Virginia]]||United States||Torque converter clutches for automatic transmissions||1979||2010|| Located at 11032 Tidewater Trail. Originally part of Delco Moraine Division, which bought the plant in 1978 from American Poclain. Moved to GM Powertrain division in 1993. Sold to idX Corp. in 2017.
|-
| ||[[w:GM Powertrain Poland|GM Powertrain Poland]]||[[w:Tychy|Tychy]]||[[w:Poland|Poland]]||Diesel engines including the Isuzu [[w:Circle L engine|Circle L engine]]||1999||2017|| [[w:Adam Opel AG|Opel]] plant. Originally founded as Isuzu Motors Polska (ISPOL) in 1996. GM bought 60% in 2002 & the remaining 40% in 2013. Sold to [[w:PSA Group|PSA Group]] along with Opel in 2017. Part of [[w:Stellantis|Stellantis]] since 2021.
|-
| ||[[w:Grand Blanc Metal Center|Grand Blanc Metal Center]]||[[w:Grand Blanc, Michigan|Grand Blanc, Michigan]]||United States||Metal stampings and metal fabrication of body components, Tooling jigs-and-fixtures||1942||2013||Located at 10800 S. Saginaw St. Originally built by the US govt. and opened in 1942 to build tanks. Also known as the Fisher Body Tank Plant as it was operated by GM's Fisher Body Div. Built [[w:M4 Sherman|M4 Sherman]] (M4A2, M4A3 & M4A3E2) and [[w:M26 Pershing|M26 Pershing]] (T26E3) tanks as well as M10 & M10A1 "Wolverine" Tank Destroyers during WWII and [[w:M48 Patton|M48 Patton]] (M48 and M48A1) tanks beginning in 1952 for the Korean War. Grand Blanc also made a 90mm main gun that Grand Blanc installed on the last 300 M10A1s built at Grand Blanc, thus converting them into the M36 "Jackson". The Grand Blanc-built 90mm main gun was also installed on other M10A1s by other companies and by Grand Blanc on the M4A3 Sherman tank to create the M36B1 & M36B2 tank destroyers. Grand Blanc also supplied 2,445 turrets and 1,511 hulls for the 2,507 M18 Hellcats built by the Buick Division. Production ended in 1945 as WWII wound down. Buick then leased Grand Blanc and used it as a warehouse from 1947 until Fisher Body bought it in 1951. The M48 Patton was built from 1952-1955. Converted in 1955 into an automotive body metal fabricating plant. Became part of GM's Metal Fabricating Division in 1994 and became Grand Blanc Weld Tool Center in 2002, making tooling for GM. Closed July 2013. Most of the work done at Grand Blanc was transferred to Parma, OH. Now called Grand Blanc Center, apparently used as a warehouse.
|-
| ||Grand Rapids Metal Center||[[w:Wyoming, Michigan|Wyoming, Michigan]]||United States|| ||1936||2009||Located at 300 36th Street SW. Metal fabricating plant. Demolished.
|-
| ||Guide Lamp Division||[[w:Anderson, Indiana|Anderson, Indiana]]||United States||Headlamp, Taillamp assemblies||1929||1998||GM bought Guide Motor Lamp Manufacturing Company in 1928, becoming part of the Delco Remy division initially before becoming the separate Guide Lamp Division in 1929. Guide Lamp Division was renamed Guide Division in 1975. Guide Division merged with Fisher Body in 1984 to create Fisher Guide. Fisher Guide then merged with the Inland Division in 1990 to form Inland Fisher Guide. In 1998, Guide operations were sold to [[w:Palladium Equity Partners|Palladium Equity Partners]] which turned the operation into Guide Corp. In 2007, Guide Corp. closed down.
|-
|H||[[w:General Motors India|Halol]]||[[w:Halol|Halol]], [[w:Gujarat|Gujarat]]||[[w:India|India]]||[[w:Chevrolet Sail#India|Chevrolet Sail U-VA]] (hatchback)<br />[[w:Chevrolet Sail#India|Chevrolet Sail]] (sedan)<br />[[w:Chevrolet Cruze|Chevrolet Cruze]]<br />[[w:Chevrolet Tavera|Chevrolet Tavera]]||1995||2017||Past models:
[[w:Chevrolet Aveo (T200)|Chevrolet Aveo]], [[w:Chevrolet SRV|Chevrolet SRV]] (sports hatch), [[w:Chevrolet Optra|Chevrolet Optra]], [[w:Chevrolet Enjoy|Chevrolet Enjoy]], [[w:Opel Corsa|Opel Corsa]] (sedan), [[w:Opel Corsa|Opel Corsa Sail]] (hatchback), [[w:Opel Corsa|Opel Corsa Swing]] (station wagon), [[w:Opel Astra|Opel Astra]]. <br />
The new [[w:General Motors India|GM India]] began as a 50/50 joint venture with [[w:Hindustan Motors|Hindustan Motors]] in 1994.The Halol plant was bought from [[w:Hindustan Motors|Hindustan Motors]] in 1995. GM bought out [[w:Hindustan Motors|Hindustan Motors]] in 1999.
Sold to SAIC to produce [[w:MG Motor India|MG Motor India]] vehicles in 2017.
|-
| ||Fisher Body - Hamilton-Fairfield Stamping Plant||[[w:Hamilton, Ohio|Hamilton, Ohio]]||United States||Stampings & Bodies for GM vehicles||1947||1988||Located at 4400 Dixie Highway. Now the Fisher Industrial Park.
|-
| ||Harrison Radiator Division - Moraine||[[w:Moraine|Moraine]], [[w:Ohio|Ohio]]||United States||Machining and assembly of automotive A/C compressors, valves, and accumulator dehydrators||1941||1999||Located at 3600 Dryden Road. Originally built for [[w:Frigidaire|Frigidaire]]. In 1975, automotive and appliance operations were split with the automotive operations becoming Delco Air Conditioning Division. [[w:Frigidaire|Frigidaire]] appliance division was sold in 1979. Delco Air Conditioning Division merged into Harrison Radiator Division in 1981. Spun off with [[w:Delphi Automotive Systems|Delphi Automotive Systems]] in 1999. Became Delphi Harrison Thermal Systems. Closed by Delphi in 2003. Demolished by 2005.
|-
|H1, H2,<br> H3, H4 [https://www.uniquecarsandparts.com.au/holden_identification]||Holden Acacia Ridge Plant||[[w:Acacia Ridge, Queensland|Acacia Ridge, Queensland]]||[[w:Australia|Australia]]||[[w:Holden|Holden]] models including:<br /> [[w:Holden HD|Holden HD]]<br />[[w:Holden HR|Holden HR]]<br />[[w:Holden HK|Holden HK]]<br />[[w:Holden HT|Holden HT]]<br />[[w:Holden HG|Holden HG]]<br />[[w:Holden Torana|Holden Torana]]<br />[[w:Holden HQ|Holden HQ]]<br />[[w:Holden HJ|Holden HJ]]<br />[[w:Holden HX|Holden HX]]<br />[[w:Holden HZ|Holden HZ]]<br />[[w:Holden Gemini#First generation|Holden Gemini TX, TC, TD, TE, TF, TG]]<br />[[w:Holden Commodore (VC)|Holden Commodore (VC)]]<br />[[w:Holden Camira|Holden Camira]]||1966||1984||[[w:Holden|Holden]] plant. Replaced Fortitude Valley plant.
|-
|A||Holden Birkenhead Plant||[[w:Birkenhead, South Australia|Birkenhead, South Australia]]||[[w:Australia|Australia]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Oakland (automobile)|Oakland]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Buick|Buick]]<br />[[w:Cadillac|Cadillac]]<br />[[w:GMC (automobile)|GMC]]<br />[[w:Vauxhall Motors|Vauxhall]]<br />[[w:Bedford Vehicles|Bedford]]<br />[[w:Holden|Holden]]<br />||1926||1981||[[w:Holden|Holden]] plant. Built by GM Australia before it merged with Holden's Motor Body Builders Ltd. Plant was closed from 1931 until 1938. Also produced military vehicles & equipment during WWII. Before WWII, Birkenhead combined bodies made in Woodville with CKD chassis assembled in Melbourne. After WWII, Birkenhead assembled CKD chassis imported from the US, Canada, & the UK and combined them with bodies made in Woodville. Once Holden brand cars started to be made in 1948, body and chassis components came from Woodville & powertrain came from Fishermans Bend and complete cars were assembled in Birkenhead. Vehicle production ended in 1965 when the Elizabeth plant started making complete vehicles. Birkenhead was then used as an export boxing area, a parts warehouse, and also assembled earthmoving equipment for Terex (then owned by GM) from 1969 until the mid 1970's.
|-
|M,<br> J1, J2, J3, <br> and J4-J9||Holden Dandenong Plant||[[w:Dandenong|Dandenong]], [[w:Victoria, Australia|Victoria]]||[[w:Australia|Australia]]||[[w:Holden|Holden]] models including:<br /> [[w:Holden FE|Holden FE]]<br />[[w:Holden FC|Holden FC]]<br />[[w:Holden FB|Holden FB]]<br />[[w:Holden EK|Holden EK]]<br />[[w:Holden EJ|Holden EJ]]<br />[[w:Holden EH|Holden EH]]<br />[[w:Holden HD|Holden HD]]<br />[[w:Holden HR|Holden HR]]<br />[[w:Holden HQ|Holden HQ]]<br />[[w:Holden HZ|Holden HZ]]<br />[[w:Holden HK|Holden HK]]<br />[[w:Holden Torana|Holden Torana]] LH, LX, UC<br />[[w:Holden Sunbird|Holden Sunbird]] LX, UC<br />[[w:Holden Commodore (VB)|Holden Commodore (VB)]]<br />[[w:Holden Commodore (VC)|Holden Commodore (VC)]]<br />[[w:Holden Commodore (VH)|Holden Commodore (VH)]]<br />[[w:Holden Commodore (VK)|Holden Commodore (VK)]]<br />[[w:Holden Commodore (VL)|Holden Commodore (VL)]]<br />[[w:Holden Camira|Holden Camira]]<br />[[w:Holden Nova|Holden Nova]] LE, LF <br /> [[w:Toyota Corolla (E90)#Australia|Toyota Corolla (E90)]]<br />Bedford by Isuzu & [[w:Isuzu|Isuzu]] trucks<br />Body making<br />Torque converters & other components||1956|||1996||[[w:Holden|Holden]] plant. Also assembled Chevrolet trucks, Bedford vans & trucks and Frigidaire appliances. Built the 1 millionth Holden (an EJ) in October 1962, the 2 millionth Holden (an HK) in March 1969, and the 4 millionth Holden (a VC Commodore) in June 1981. Vehicle production by Holden ceased in 1988, vehicle production by Toyota for itself and for Holden lasted from 1989-1994 under a plant lease agreement<ref>{{cite web |author=Takahiro Fujimoto |date=October 1998 |url=http://e-server.e.u-tokyo.ac.jp/cirje/research/dp/98/cf23/dp.pdf |title=Toyota Motor Manufacturing Australia in 1995: An Emergent Global Strategy |publisher=[[w:University of Tokyo|University of Tokyo]] |page=23 |archive-url=https://www.webcitation.org/5xJZkwEEX?url=http://e-server.e.u-tokyo.ac.jp/cirje/research/dp/98/cf23/dp.pdf |archive-date=2011-03-20 |url-status=dead }}</ref>. Minor assembly until 1996. Then became known as Holden Service Parts Operations (HSPO) which manages the distribution and marketing of Holden service parts and accessories for the Holden dealer network and international customers.
|-
|L,<br><br> L1, L2, <br> L3-L5||Holden Elizabeth Plant||[[w:Elizabeth, South Australia|Elizabeth, South Australia]]||[[w:Australia|Australia]]||[[w:Holden Berlina|Holden Berlina]]<br />[[w:Holden Calais|Holden Calais]]<br /> [[w:Holden Caprice|Holden Caprice]]<br /> [[w:Holden Commodore|Holden Commodore]]<br /> [[w:Holden Ute|Holden Ute]]<br /> [[w:Holden Statesman|Holden Statesman]]<br /> [[w:Vauxhall VXR8|Vauxhall VXR8]]<br />[[w:Chevrolet SS (2013)|Chevrolet SS]] (2014-2017)<br />[[w:Chevrolet Caprice PPV|Chevrolet Caprice PPV]] (2011-2017)
|1959||2017||[[w:Holden|Holden]] manufacturing plant. Holden Vehicle Manufacturing Operations. Located at 180 Philip Highway. First opened as a body hardware plant making components, then expanded to making complete vehicle bodies in 1962, then expanded to making complete vehicles in 1965. Elizabeth became Holden’s only remaining car manufacturing plant in Australia in 1994. Built the 5 millionth Holden (a VN Calais) in August 1990, the 6 millionth Holden (a VX Commodore SS) in June 2001, and the 7 millionth Holden (a VE Commodore) in August 2008. Total number of vehicles built at all plants in Australia by Holden (including export models) from 1948-2017 is 7,687,675. Production ended October 20, 2017. Final vehicle made at Elizabeth and final Australian-built Holden was a VFII Commodore Redline with a manual transmission.[https://www.carsales.com.au/editorial/details/holdens-manufacturing-closure-by-the-numbers-109466/] Epicurean Food Group bought the site in 2023 and is using it as a farm to grow mushrooms.
Cars produced before its final year before closure included the [[w:Pontiac GTO#Fifth generation|Pontiac GTO]] (2004-2006), [[w:Vauxhall Monaro|Vauxhall Monaro]], [[w:Holden Monaro|Holden Monaro]], [[w:Pontiac G8|Pontiac G8]] (2008-2009), [[w:Holden Gemini#Second generation|Holden Gemini (RB)]], [[w:Chevrolet Cruze#First generation (J300; 2008)|Holden Cruze (JH)]], [[w:Holden Torana|Holden Torana]], [[w:Opel Vectra#Vectra B (1995–2002)|Holden Vectra (JS)]], [[w:Statesman (automobile)|Statesman brand WB]], [[w:Holden WB|Holden WB]] Ute & One-Tonner, [[w:Holden Adventra|Holden Adventra]], [[w:Holden Crewman|Holden Crewman]], [[w:Chevrolet Lumina#Holden-based models|Chevrolet Lumina]], [[w:Chevrolet Caprice#Fifth generation (1999–2006)|Chevrolet Caprice]], [[w:Chevrolet Cruze#First generation (J300; 2008)|Chevrolet Cruze]] 5-door, [[w:Chevrolet Omega|Chevrolet Omega]] B & C, [[w:Buick Royaum|Buick Royaum]], [[w:Daewoo Statesman|Daewoo Statesman]], and [[w:Daewoo Veritas|Daewoo Veritas]]. Also, [[w:United Australian Automobile Industries#Toyota Lexcen|Toyota Lexcen]].
|-
| ||Holden Fishermans Bend Plant (Port Melbourne)||[[w:Port Melbourne|Port Melbourne]], [[w:Victoria, Australia|Victoria]]||[[w:Australia|Australia]]||[[w:GM High Feature engine|Holden Alloytec V6 engine]]<br />[[w:Buick V6 engine#3800 V6|Buick V6]]<br />[[w:GM Family II engine|GM Family II I4 engine]]<br />[[w:Holden V8 engine]]<br />[[w:Holden straight-six motor#Starfire|Holden Starfire I4]]<br />[[w:Holden straight-six motor|Holden straight-six motor]]<br />Manual transmissions<br />[[w:Holden Salisbury differential|Holden Banjo/Salisbury differentials]]<br />Axles<br />Stampings<br />Components<br />Foundry ||1936||2016||Headquarters of GM Holden Ltd. <br /> Holden's Engine Company/Holden Engine Operations.<br />
Used to build vehicles as well including the [[w:Holden 48-215|Holden 48-215]] & [[w:Holden FJ|Holden FJ]]. Vehicle assembly ended in 1956 and was moved to Dandenong. <br /> Versions of the Alloytec/High Feature V6 were also supplied to [[w:Saab Automobile|Saab]] & [[w:Alfa Romeo|Alfa Romeo]] from this plant. <br />
Sold to the Victorian state Government in 2016.
|-
|B||Holden Fortitude Valley Plant||[[w:Fortitude Valley|Fortitude Valley]], [[w:Queensland|Queensland]]||[[w:Australia|Australia]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Oakland (automobile)|Oakland]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Buick|Buick]]<br />[[w:Cadillac|Cadillac]]<br />[[w:GMC (automobile)|GMC]]<br />[[w:Vauxhall Motors|Vauxhall]]<br />[[w:Bedford Vehicles|Bedford]]<br />[[w:Holden 48-215|Holden 48-215]]<br />[[w:Holden FJ|Holden FJ]]<br />[[w:Holden FE|Holden FE]]<br />[[w:Holden FC|Holden FC]]<br />[[w:Holden FB|Holden FB]]<br />[[w:Holden EK|Holden EK]]<br />[[w:Holden EJ|Holden EJ]]<br />[[w:Holden EH|Holden EH]]<br />||1927||1965||[[w:Holden|Holden]] plant. Built by GM Australia before it merged with Holden's Motor Body Builders Ltd. Plant was closed from 1931 until 1934. Fortitude Valley combined bodies made in Woodville with CKD chassis assembled in Melbourne. Replaced by Acacia Ridge plant.
|-
| ||Holden Marrickville Plant||[[w:Marrickville, New South Wales|Marrickville, New South Wales]]||[[w:Australia|Australia]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Oakland (automobile)|Oakland]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Marquette (automobile)#Buick brand|Marquette]]<br />[[w:Buick|Buick]]<br />[[w:Cadillac|Cadillac]]<br />[[w:GMC (automobile)|GMC]]<br />[[w:Vauxhall Motors|Vauxhall]]<br />[[w:Bedford Vehicles|Bedford]]||1926||1940||[[w:Holden|Holden]] plant. Built by GM Australia before it merged with Holden's Motor Body Builders Ltd. Plant was closed from 1931 until 1934. Marrickville combined bodies made in Woodville with CKD chassis assembled in Melbourne. Building sold. Replaced by Pagewood plant.
|-
| ||Holden Melbourne Plant (City Road)||[[w:Melbourne|Melbourne]], [[w:Victoria, Australia|Victoria]]||[[w:Australia|Australia]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Oakland (automobile)|Oakland]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Buick|Buick]]<br />[[w:Cadillac|Cadillac]]<br />[[w:GMC (automobile)|GMC]]<br />[[w:Vauxhall Motors|Vauxhall]]||1926||1936||[[w:Holden|Holden]] plant. Acquired by GM Australia before it merged with Holden's Motor Body Builders Ltd. Melbourne combined bodies made in Woodville with CKD chassis assembled in Melbourne. Building sold. Replaced by Fishermans Bend plant.
|-
|P,<br> L6||Holden Mosman Park Plant||[[w:Mosman Park, Western Australia|Mosman Park (formerly Cottesloe Beach)]], [[w:Western Australia|Western Australia]]||[[w:Australia|Australia]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Oakland (automobile)|Oakland]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Buick|Buick]]<br />[[w:Cadillac|Cadillac]]<br />[[w:GMC (automobile)|GMC]]<br />[[w:Vauxhall Motors|Vauxhall]]<br />[[w:Bedford Vehicles|Bedford]]<br />[[w:Holden|Holden]]<br />||1926||1972||[[w:Holden|Holden]] plant. Built by GM Australia before it merged with Holden's Motor Body Builders Ltd. Plant was closed from 1932 until 1935. Also produced military vehicles & equipment during WWII. Before WWII, Mosman Park combined bodies made in Woodville with CKD chassis assembled in Melbourne. After WWII, Mosman Park assembled CKD chassis imported from the US, Canada, & the UK and combined them with bodies made in Woodville. Once Holden brand cars started to be made in 1948, body and chassis components came from Woodville & powertrain came from Fishermans Bend and final assembly was done in Mosman Park. Plant was closed down in 1972. Demolished in the early 1990s.
|-
|S,<br> H5, H6, H7,<br> H8, H9||Holden Pagewood Plant||[[w:Pagewood, New South Wales|Pagewood, New South Wales]]||[[w:Australia|Australia]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Vauxhall Motors|Vauxhall]]<br />[[w:Bedford Vehicles|Bedford]]<br />[[w:Holden 48-215|Holden 48-215]]<br />[[w:Holden FJ|Holden FJ]]<br />[[w:Holden FE|Holden FE]]<br />[[w:Holden FC|Holden FC]]<br />[[w:Holden FB|Holden FB]]<br />[[w:Holden EK|Holden EK]]<br />[[w:Holden EJ|Holden EJ]]<br />[[w:Holden EH|Holden EH]]<br />[[w:Holden HD|Holden HD]]<br />[[w:Holden HR|Holden HR]]<br />[[w:Holden HK|Holden HK]]<br />[[w:Holden HT|Holden HT]]<br />[[w:Holden HG|Holden HG]]<br />[[w:Holden Monaro|Holden Monaro]]<br />[[w:Holden HQ|Holden HQ]]<br />[[w:Holden HJ|Holden HJ]]<br />[[w:Holden HX|Holden HX]]<br />[[w:Holden HZ|Holden HZ]]<br />[[w:Holden Torana|Holden Torana]]<br /> [[w:Holden Commodore (VB)|Holden Commodore (VB)]]<br />[[w:Statesman (automobile)|Statesman brand HQ-HZ]]<br />Body making||1940||1980||[[w:Holden|Holden]] plant. Also produced military equipment during WWII. Before WWII, Pagewood combined bodies made in Woodville with CKD chassis assembled in Melbourne. After WWII, Pagewood assembled CKD chassis imported from the US, Canada, & the UK and combined them with bodies made in Woodville. Also made Frigidaire appliances. Built the 3 millionth Holden (an HQ) in June 1974. Vehicle production ended in 1980 while plant closedown operations extended into 1981.
|-
| ||[[w:Holden Woodville Plant|Holden Woodville Plant]]||[[w:Woodville, South Australia|Woodville, South Australia]]||[[w:Australia|Australia]]||[[w:Holden|Holden]]:<br />Stamping<br />Body making<br />Paint shop<br />Body Hardware<br />Trim<br />Tool & Die<br />[[w:Tri-Matic|Tri-Matic]] automatic transmission||1923||1965||[[w:Holden|Holden]] plant. Built before Holden was taken over by GM. Built car bodies for many brands of cars including GM brands (Chevrolet, Pontiac, Oakland, Oldsmobile, Marquette, Buick, LaSalle, Cadillac, GMC, Vauxhall, & Bedford) and non-GM brands (Chrysler, DeSoto, Dodge, Plymouth, Willys, Hudson, Nash, Studebaker, Austin, Morris, Rover, Standard, Fiat, & others). (Holden Motor Body Works.) Also produced military equipment during WWII. Once Holden brand cars started to be made in 1948, body and chassis components were made in Woodville. Also produced replacement parts for discontinued models. Most operations transferred to Elizabeth between 1959 & 1965. Built the Tri-Matic automatic transmission from 1969-1987. Plant sold in 1984. Tri-Matic production area was leased back until production ended. Other companies continued production of spare parts.
|-
|V||[[w:IBC Vehicles|IBC Vehicles Ltd.]]/<br>[[w:GMM Luton|GMM Luton]]<ref>{{cite web |title=Company Profile |publisher=Vauxhall |url=http://media.gm.com/gb/vauxhall/en/company/c_company-profile/index.html |access-date=2009-06-29 |archive-url=https://web.archive.org/web/20090629105853/http://media.gm.com/gb/vauxhall/en/company/c_company-profile/index.html |archive-date=2009-06-29}}</ref>||[[w:Luton|Luton]], [[w:Bedfordshire|Bedfordshire]]||[[w:United Kingdom|United Kingdom]]||[[w:Bedford CF#CF2|Bedford CF2]]<br />[[w:Isuzu Fargo#Bedford Midi / Vauxhall Midi|Bedford/Vauxhall/GME/Isuzu Midi/<br>Bedford Seta/Vauxhall Albany]]<br />[[w:Suzuki Carry#Bedford Rascal|Bedford/Vauxhall/GME Rascal]]<br />[[w:Suzuki Carry#Export models|Suzuki Super Carry]]<br />[[w:Isuzu MU#First generation (UCS55/UCS69GW; 1989–1998)|Opel/Vauxhall Frontera A]]<br />[[w:Isuzu MU#Second generation (UER25FW, UES25FW, UES73FW; 1998–2004)|Opel/Vauxhall Frontera B]]<br />[[w:Holden Frontera#First generation (UCS55/UCS69GW; 1989–1998)|Holden Frontera (UT)]]<br />[[w:Renault Trafic#Second generation (X83; 2001)|Opel/Vauxhall Vivaro]] A (low roof versions only)<br />[[w:Renault Trafic#Third generation (X82; 2014)|Opel/Vauxhall Vivaro]] B (low roof versions only)<br />[[w:Renault Trafic#Second generation (X83; 2001)|Renault Trafic (X83)]] (low roof versions only)<br />[[w:Renault Trafic#Second generation (X83; 2001)|Nissan Primastar (X83)]] (low roof versions only)||1950 (as AA Block of Luton plant)<br><br>1984 (as Bedford Luton Van Plant)||2017|| [[w:Vauxhall Motors|Vauxhall plant]]. Began as the Bedford van plant when Bedford vans were moved out of the Luton passenger car plant and into a separate, nearby plant (AA Block [body assembly and paint] &<br> K Block [trim and final assembly] of the Luton complex) connected by a bridge so that components for the CF van made in the car plant could be easily transferred to the van plant. Was part of the Bedford Commercial Vehicles Division of the GM Overseas Commercial Vehicles Corp. CF2 production ended in July 1987. Built the Isuzu-designed Midi from December 20, 1984 through May 23, 1996 though the Midi was still available through the 1997 model year. An upscale, 7-psgr. variant of the Midi called the Vauxhall Albany was built for 1991 only. Built the Suzuki-designed Rascal from February 1986 through July 3, 1993. Also built the Rascal's Suzuki counterpart, the Super Carry, for the UK & other European markets. Became a joint venture with [[w:Isuzu|Isuzu]] called IBC Vehicles Ltd., which was incorporated on January 20, 1987. Production under IBC Vehicles began in October 1987 after the plant was reorganized and staff was retrained. GM owned 60% & Isuzu held 40%. The Bedford brand was discontinued and replaced by the Vauxhall brand on light commercial vehicles as of June 1, 1990. GM bought Isuzu's stake in IBC Vehicles back in Sept. 1998 & the operation was again a subsidiary of GM. It was then renamed GMM (GM Manufacturing) Luton. Began making Vivaro and Trafic midsize commercial vans in 2001, followed by the Primastar in 2002. Frontera SUV ended production at the end of 2003 and GMM Luton focused solely on light commercial vehicles from that point onwards. Sold to [[w:PSA Group|PSA Group]] in 2017. Part of [[w:Stellantis|Stellantis]] since 2021. Production ended March 28, 2025. Last vehicle produced was a Vauxhall Vivaro. Site has been sold for redevelopment into an industrial park.
|-
| ||[[w:IDA-Opel|IDA-Opel]]||[[w:Kikinda|Kikinda]], [[w:Socialist Republic of Serbia|Socialist Republic of Serbia]]||[[w:Yugoslavia|Yugoslavia]]||[[w:Opel Ascona#Ascona C (1981–1988)|Opel Ascona]] C<br />[[w:Opel Corsa#Corsa A (S83; 1982)|Opel Corsa]] A<br />[[w:Opel Kadett|Opel Kadett]] D & E<br />[[w:Opel Kikinda#Senator A (1978–1986)|Opel Kikinda]] (Senator A)<br />[[w:Opel Omega#Omega A (1986–1994)|Opel Omega]] A<br />[[w:Opel Rekord Series E|Opel Rekord]] E<br />[[w:Opel Vectra#Vectra A (1988–1995)|Opel Vectra]] A<br />Iron castings, brake, and axle components||1977||1992|| [[w:Adam Opel AG|Opel affiliate]]. A joint venture owned 49% by GM & 51% by Kikinda Iron Foundry. IDA = Industrija Delova Automobila or Industry of Automobile Parts. The operation exported iron castings, brake, and axle components to GM/Opel, thus allowing partially built Opels to be imported into Yugoslavia and not be counted as imports. Ended by the wars of the breakup of Yugoslavia and imposition of sanctions on Yugoslavia in 1992. The plant was later restructured as the Livnica Kikinda metal foundry, which was taken over by Slovenia's Cimos in 2004 and manufactures auto parts for various European manufacturers including Opel.
|-
| ||Indianapolis Metal Center||[[w:Indianapolis|Indianapolis]], [[w:Indiana|Indiana]]||United States||Metal stampings for trucks||1930||2011||Located at 340 S. White River Parkway W. Drive. Stamping plant. Acquired from the former Martin-Parry Corporation in 1930. Became a Chevrolet plant making truck bodies. Became part of GM Truck & Bus Group in 1982 and in early 1992, became part of NATP (North American Truck Platforms) and later transferred to CLCD (Cadillac/Luxury Car Division) before joining the Metal Fabrication Division in 1994. Closed in June 2011. Demolished in 2014-2015.
|-
| ||Inland Fisher Guide Plant (Columbus, Ohio)||[[w:Columbus, Ohio|Columbus, Ohio]]||United States||Door Panel Assemblies & Small Components||1946||1999||Located at 200 Georgesville Road. Originally opened as a plant for the Ternstedt Division of General Motors. Then, Fisher Hardware Fabrication when Ternstedt merged back into Fisher Body in 1969. Fisher became Fisher Guide in 1984 and Inland Fisher Guide in 1989. In 1995, Inland Fisher Guide became the Delphi Interior and Lighting Systems division of GM's [[w:Delphi Automotive Systems|Delphi Automotive Systems]] subsidiary. Spun off with [[w:Delphi Automotive Systems|Delphi Automotive Systems]] in 1999. Closed by Delphi in 2007.
|-
| ||Inland Fisher Guide Dayton Plant||[[w:Dayton, Ohio|Dayton]], [[w:Ohio|Ohio]]||United States||Engine Mounts<br />Transmission Mounts<br />Strut Mounts<br />Steering Wheels<br />Liteflex Springs<br />Brake Linings<br />Brake Hose<br />Brake Pads<br />Ball Joints<br />Ice Cube Trays ||1921||1999||Located at 2701 Home Avenue (originally Home Road). The first factory building was built in 1910 by the Wright Company and made airplanes and components. The 2nd factory building was built in 1911 & made airplane engines. Aircraft production ceased in 1916. 13 different types of planes had been produced. In Feb. 1917, the plants were sold to the Darling Motor Co. but they went bankrupt shortly thereafter. The Dayton-Wright Company bought the site from Darling Motor on March 22, 1917 and made aircraft parts at the site for its Moraine assembly plant from 1918 to 1919. Dayton-Wright Company was bought by GM in 1919 & it was initially run as a GM subsidiary. In 1923, the aircraft part of the business was sold to Consolidated Aircraft Co. & this site switched from aviation production to automotive production. Inland Manufacturing Division (originally Inland Mfg. Company) of GM was formed on January 6, 1923 at this site, initially to make steering wheels. Merged with Fisher Guide to became Inland Fisher Guide in 1989. In 1995, Inland Fisher Guide became the Delphi Interior and Lighting Systems division of GM's [[w:Delphi Automotive Systems|Delphi Automotive Systems]] subsidiary. Spun off with [[w:Delphi Automotive Systems|Delphi Automotive Systems]] in 1999. Delphi closed it in 2008. The 2 original Wright Brothers' buildings were left standing and became part of Dayton Aviation Heritage National Historical Park in 2009 but the rest was demolished around 2014. The Wright Brothers factory buildings were damaged by fire in March 2023.
|-
| ||Inland Fisher Guide Plant (Detroit - Fort St.)||[[w:Detroit, Michigan|Detroit, Michigan]]||United States||Door hinges and interior parts||1920||1989||Located at 6307 W. Fort St. & Livernois St. Was Ternstedt's headquarters until 1962. Originally opened by Ternstedt Manufacturing Co., which was taken over by Fisher Body Co. in 1920. Became part of GM when GM took over Fisher Body in 1926. Ternstedt became a separate division of GM in 1948 before merging back in to Fisher Body in 1969. Was a plant for the Ternstedt Division (Plant# 16) of General Motors. Then, Fisher Hardware Fabrication. Fisher became Fisher Guide in 1984 and Inland Fisher Guide in 1989. Is now Evans Distribution Systems.
|-
| ||Inland Fisher Guide Plant (Elyria, Ohio)||[[w:Elyria, Ohio|Elyria, Ohio]]||United States||Car seats||1947||1990||Located at 1400 Lowell St. Originally opened as a plant for the Ternstedt Division of General Motors. Then, Fisher Hardware Fabrication when Ternstedt merged back into Fisher Body in 1969. Fisher became Fisher Guide in 1984 and Inland Fisher Guide in 1989.
|-
| ||Inland Fisher Guide Plant (Euclid, Ohio)||[[w:Euclid, Ohio|Euclid, Ohio]]||United States||Vehicle Bodies until 1970<br />Then, trim fabrication, seat covers & backs, upholstery, door panels, sunvisors, & other interior parts.<br />Also made seats & cushions for Sea Ray Boats||1947||1993||Located at 20001 Euclid Ave. Originally built in 1943. Bought by GM in 1947 from Cleveland Pneumatic Aerol Co., which made rocket shells and aircraft landing gear there during WWII. Was a Fisher Body plant making bodies for Chevrolet, Pontiac, Oldsmobile, & Buick until 1970. Then became a Fisher Trim Fabrication plant. Fisher became Fisher Guide in 1984 and Inland Fisher Guide in 1989. Closed in 1993. Site currently in use by an industrial supply store (HGR) and indoor sports facilities (The Sports Plant).
|-
| ||[[w:Automotive industry in Flint, Michigan#Coldwater Road Plant|Inland Fisher Guide Plant (Flint - Coldwater Road)]]||[[w:Genesee Township, Michigan|Genesee Township, Michigan]]||United States||Window regulators, door hinges, door modules and seat adjusters||1953||1996||Located at 1245 East Coldwater Road. Originally opened as a plant for the Ternstedt Division of General Motors. Then, Fisher Hardware Fabrication when Ternstedt merged back into Fisher Body in 1969. Fisher became Fisher Guide in 1984 and Inland Fisher Guide in 1989. In 1995, Inland Fisher Guide became the Delphi Interior and Lighting Systems division of GM's [[w:Delphi Automotive Systems|Delphi Automotive Systems]] subsidiary. Sold to Peregrine Inc. in 1996, which continued making window regulators and door hinges and modules. Closed by Peregrine in 1998. A GM subsidiary called REALM bought the property in 1999 and GM used the administration building until 2000. Demolished by 2001. Site now used by Deployment Strategies Group LLC for container storage.
|-
| ||Inland Fisher Guide Plant (Grand Rapids, Michigan)||[[w:Walker, Michigan|Walker, Michigan]]||United States||Interior trim||1942||1998||Located at 2150 Alpine Avenue NW. Built by Haskelite Manufacturing Corporation to make wooden gliders for use in WWII. Bought by GM in the early 1950's. Built fuselages for [[w:F-84F Thunderstreak|F-84F Thunderstreak]] fighter jets. Fisher became Fisher Guide in 1984 and Inland Fisher Guide in 1989. In 1995, Inland Fisher Guide became the Delphi Interior and Lighting Systems division of GM's [[w:Delphi Automotive Systems|Delphi Automotive Systems]] subsidiary. Became part of Delphi in 1995. Sold by GM to [[w:Lear Corp.|Lear Corp.]] in 1998. Closed by Lear in 2005. Now called Avastar Park, a multi-tenant industrial site.
|-
| ||Inland Fisher Guide Plant (Livonia, Michigan)||[[w:Livonia, Michigan|Livonia, Michigan]]||United States||Seat Cushions, Seat Pads, Seat Backs, Door Panel Trim||1954||1995||Built on the site of the former Detroit Transmission Division plant that burned down in 1953. Located at 28400 Plymouth Road. Fisher became Fisher Guide in 1984 and Inland Fisher Guide in 1989. In 1995, Inland Fisher Guide became the Delphi Interior and Lighting Systems division of GM's [[w:Delphi Automotive Systems|Delphi Automotive Systems]] subsidiary. Closed in 1995. Sold to Peregrine Inc. in 1996, which continued making interior trim parts. Peregrine then closed the plant in 1998. Now the Plymouth Road Technical Center, a multi-tenant site for industrial, warehousing, and logistics purposes.
|-
| ||Inland Fisher Guide Plant (Syracuse)||[[w:Salina, New York|Salina, New York]]||United States||Metal auto parts (die casting, stamping, machining, painting, plating), Plastic trim parts - exterior and interior (injection molding)||1952||1993||Located at One General Motors Drive (address sometimes listed as 1000 Town Line Road). Plastic operations were added in the early 1960's. Metal operations were subsequently reduced and ultimately replaced by the plastic operations by the early 1970's. Fisher became Fisher Guide in 1984 and Inland Fisher Guide in 1989. Closed December 1993. Property is now Salina Industrial Powerpark, a multi-tenant industrial park.
|-
| ||Inland Fisher Guide Plant (Tecumseh, Michigan)||[[w:Tecumseh, Michigan|Tecumseh, Michigan]]||United States||Seat Pads & Backs||1966||1988||Located at 5550 Occidental Highway. Fisher became Fisher Guide in 1984. Now occupied by Uniloy Inc., a plastics company.
|-
| ||[[w:Inland Fisher Guide Plant (New Jersey)|Inland Fisher Guide Plant (Trenton)]]||[[w:West Trenton, New Jersey|West Trenton]], [[w:Ewing Township, New Jersey|Ewing Township]], [[w:New Jersey|New Jersey]]||United States||Door handles<br />Hinges<br />Door locks<br />Seat adjusters<br />Exterior body moldings and painted components||1938||1998||Located at 1445 Parkway Ave. Built 7,546 [[w:TBM Avenger|TBM Avenger]] torpedo bombers during WWII under license from Grumman as part of GM's Eastern Aircraft Division. In 1961, the facility became the first commercial user in the United States to use a programmable industrial robot to replace human workers. Brief article about the plant's closing and displaced workers. 1993 Plant closing date was later delayed until Summer of 1998 : [https://query.nytimes.com/gst/fullpage.html?res=9E0CEEDB1E3EF937A35751C1A964958260] Originally part of the [[w:Flint, Michigan auto industry#Ternstedt Division|Ternstedt Division]] of Fisher Body, then the Ternstedt Division of GM in 1948 before Ternstedt merged back in to Fisher Body in 1969. Then, Fisher Hardware Fabrication. Fisher became Fisher Guide in 1984 and Inland Fisher Guide in 1989. In 1995, Inland Fisher Guide became the Delphi Interior and Lighting Systems division of GM's [[w:Delphi Automotive Systems|Delphi Automotive Systems]] subsidiary. Closed in 1998. Plant was subsequently demolished. Site redeveloped into Ewing Town Center, a mixed retail and residential complex.
|-
| ||Inland Fisher Guide Plant (Vandalia, Ohio)||[[w:Vandalia, Ohio|Vandalia, Ohio]]||United States||Door Panel Assemblies<br />Seat Pads<br />Instrument Panels||1941||1999||Located at 250 Northwoods Boulevard. Originally a GM Aeroproducts division facility making aircraft propellers, Aeroproducts division became part of GM's Allison division in 1952, site was absorbed by GM's Inland division in 1961 after propeller production moved to Allison's Indianapolis operation in 1960, merged into Inland Fisher Guide division in 1991, became part of GM's [[w:Delphi Automotive Systems|Delphi Automotive Systems]] subsidiary in 1995 and transferred to Delphi Chassis Division. Spun off with Delphi in 1999. Transferred to Delphi Thermal Division in 2007. Sold in 2015 to [[w:Mahle GmbH|Mahle GmbH]]. Mahle transferred operations to its Behr plant in Dayton and closed the Vandalia plant by 2016. Mahle sold the property in 2017.
|-
| ||General Motors International A/S||[[w:Copenhagen|Copenhagen]]||[[w:Denmark|Denmark]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Oakland (automobile)|Oakland]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Buick|Buick]]<br />[[w:Opel|Opel]]<br />[[w:Vauxhall Motors|Vauxhall]]||1924||1974||GM's 1st European assembly plant & 1st assembly plant outside North America. First vehicle off the line was a Chevrolet utility truck on January 7, 1924. Pontiac assembly began July 24, 1926. Oakland, Oldsmobile, & Buick assembly began in 1929. In the 1960's, the Chevy Chevelle & Buick Skylark were assembled along with most Opel & Vauxhall models. Station wagon-based vans were assembled as was the Opel 1500, based on the 1200. Production ended in Oct. 1974. Over 550,000 units had been produced.
|-
| ||[[w:General Motors do Brasil|Ipiranga]]||[[w:Ipiranga (district of São Paulo)|Ipiranga]], [[w:São Paulo (state)|São Paulo (state)]]||[[w:Brazil|Brazil]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Oakland (automobile)|Oakland]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Buick|Buick]]<br />[[w:Cadillac|Cadillac]]||1925||1930||GM's 1st Brazilian assembly plant. Replaced by Sao Caetano do Sul plant.
|-
| ||[[w:Pars Khodro|General Motors Iran]]||[[w:Tehran|Tehran]]||[[w:Imperial State of Iran|Imperial State of Iran]]||[[w:Opel Commodore#Foreign assembly|Chevrolet Iran 2500/2800/Royale]]<br />[[w:Chevrolet Nova#Fourth generation (1975–1979)|Chevrolet Iran (Nova)]]<br />[[w:Buick Skylark#Buick Skylarks in Iran|Buick Iran (Skylark)]]<br />[[w:Cadillac Seville#First generation (1976–1979)|Cadillac Iran (Seville)]]<br />[[w:Chevrolet C/K (third generation)|Chevrolet C/K pickup]] ||1974||1987||When the Shah ruled Iran, GM established a joint venture in Iran called GM Iran. GM held 45% while Pars Khodro held the other 55%. Production began on January 15, 1974 of the Opel Commodore-based Chevrolet Iran 2500/2800/Royale. By 1977, this was replaced by the American Chevrolet Nova, Buick Skylark, & Cadillac Seville. Chevy pickups followed. Once the Shah was overthrown in the 1979 Revolution and Iran was taken over by fanatics, GM abandoned the factory & Iran. The company became Pars Khodro and the local management changed. Production of GM models continued sporadically until 1987 when it finally ended.
|-
|J (1953-2009)<br /><br />21 (1928-1952 [[w:Chevrolet|Chevrolet]])||[[w:Janesville Assembly Plant|Janesville Assembly Plant]]||[[w:Janesville, Wisconsin|Janesville, Wisconsin]]||United States||[[w:Chevrolet K5 Blazer|Chevrolet K5 Blazer]] (1992-1994)<br /> [[w:Chevrolet Tahoe|Chevrolet Tahoe]] (1995-2009) <br />[[w:Chevrolet Suburban|Chevrolet Suburban]] (1947-1966, 1992-2009)<br /> [[w:Chevrolet Tiltmaster|Chevrolet Tiltmaster/W-Series (Gas-powered)]] (1994-2009)<br /> [[w:GMC Forward|GMC Forward/W-Series (Gas-powered)]] (1994-2009)<br /> [[w:Isuzu N-Series|Isuzu N-Series (Gas-powered)]] (1994-2009)<br />[[w:Chevrolet Tahoe|GMC Yukon]] (1992-2009)<br /> [[w:Chevrolet Tahoe#Second generation (2000)|GMC Yukon Denali (GMT800)]] (2001-2006)<br /> [[w:Chevrolet Tahoe#Third generation (2007)|GMC Yukon Denali (GMT900)]] (2007-2009) <br />[[w:GMC Suburban|GMC Suburban]] (1992-1999)<br />[[w:GMC Yukon XL|GMC Yukon XL]] (2000-2009) <br /> [[w:Chevrolet Suburban#Ninth generation (2000)|GMC Yukon XL Denali (GMT800)]] (2001-2006) <br /> [[w:Chevrolet Suburban#Tenth generation (2007)|GMC Yukon XL Denali (GMT900)]] (2007-2009)||1919||2009||Located at 1000 General Motors Dr. Was the oldest active GM assembly plant at time of its closure in 2009; largest under one roof in the U.S.
Originally built [[w:Samson Tractor|Samson tractors]] from 1919-1922. Also made [[w:Samson Tractor#Trucks and a car|Samson trucks]] from 1920-1922. On October 1, 1922, the Janesville plant was transferred to Chevrolet. Started producing Chevrolets on Feb. 14, 1923. Shortly thereafter, a neighboring Fisher Body plant was added. Plant closed from September 1932 - late 1933. During World War II, both the Chevy & Fisher Body sides of the plant were controlled by Oldsmobile and made artillery shells. Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. Janesville Assembly joined the GM Assembly Division in 1968. On April 21, 1967, the 100 millionth GM vehicle built in the US, a blue, two-door Chevrolet Caprice, was produced at the Janesville plant. Full-size cars ended production in 1982 and were replaced by the compact J-cars like the Cavalier. Last passenger car built was the 1991 Chevy Cavalier. Only SUVs and trucks were subsequently built. SUV production ended Dec. 23, 2008. Last vehicle produced was a black 2009 Chevy Tahoe. Medium-duty truck production ended on April 23, 2009, marking the end of vehicle production at Janesville. Officially, the plant was placed on "standby" status but production never restarted and the 2015 GM-UAW contract allowed Janesville to be closed permanently. Demolished from 2018-2019.<br />
Past models: [[w:Chevrolet Superior|Chevrolet Superior]], [[w:Chevrolet Series AA Capitol|Chevrolet Series AA Capitol]], [[w:Chevrolet Series AB National|Chevrolet Series AB National]], [[w:Chevrolet Series AC International|Chevrolet Series AC International]], [[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]], [[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]], [[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]], [[w:Chevrolet Standard Six|Chevrolet Standard Six]], [[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]], [[w:Chevrolet Master|Chevrolet Master]], [[w:Chevrolet Deluxe|Chevrolet Deluxe]], [[w:Chevrolet Stylemaster|Chevrolet Stylemaster]], [[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]], [[w:Chevrolet 150|Chevrolet 150]] (1953-1957), [[w:Chevrolet 210|Chevrolet 210]] (1953-1957), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1970), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-1972), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-1982), [[w:Chevrolet Cavalier|Chevrolet Cavalier]] (1982-1991), [[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958), [[w:Chevrolet El Camino#First generation (1959–1960)|Chevrolet El Camino]] (1959-1960), [[w:Chevrolet Impala|Chevrolet Impala]] (1958-1982), [[w:Chevrolet Nomad|Chevrolet Nomad]] (1955-1957), [[w:Buick Skyhawk#Second generation (1982–1989)|Buick Skyhawk]] (1988-1989), [[w:Cadillac Cimarron|Cadillac Cimarron]] (1982-1988), [[w:Chevrolet AK Series|Chevrolet AK Series]], [[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1947-1955), [[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959), [[w:Chevrolet C/K|Chevrolet C/K]] (1960-1986), [[w:Chevrolet C/K (third generation)#R/V-Series (1987–1991)|Chevrolet R/V]] (1987-1989), [[w:Chevrolet C/K (fourth generation)|Chevrolet C/K crew cab (GMT400)]] (1992-1994), [[w:Chevrolet C/K (fourth generation)#C3500HD (1991–2002)|Chevrolet C3500HD]] (1991-1998), [[w:Chevrolet Kodiak#Second generation (1990–2002)|Chevrolet Kodiak (GMT530)]] (1990-2002), [[w:Chevrolet/GMC B series#Third generation (1993–2003)|Chevrolet B-series]] (1993-02), [[w:Isuzu Forward|Chevrolet T-Series]] (1997-2002), [[w:Chevrolet C/K (second generation)|GMC C/K (Action Line)]] (1967-1972), [[w:Chevrolet C/K (third generation)|GMC C/K (Rounded Line)]] (1973-1986), [[w:Chevrolet C/K (third generation)#R/V-Series (1987–1991)|GMC R/V]] (1987-1989), [[w:Chevrolet C/K (fourth generation)|GMC Sierra crew cab (GMT400)]] (1992-1994), [[w:Chevrolet C/K (fourth generation)#C3500HD (1991–2002)|GMC Sierra C3500HD]] (1991-1998), [[w:Chevrolet Kodiak#Second generation (1990–2002)|GMC TopKick (GMT530)]] (1990-02), [[w:Chevrolet/GMC B series#Third generation (1993–2003)|GMC B-series]] (1993-2002), [[w:GMC T-Series|GMC T-Series]] (1997-2002), [[w:Isuzu F-Series|Isuzu F-Series]] (1997-2002)
|-
| ||Kalamazoo Metal Center||[[w:Kalamazoo, Michigan|Kalamazoo, Michigan]]||United States||Stamped Body panels ||1965||1999|| Located at 5200 East Cork Street. Metal stamping plant. Started out as a Fisher Body plant. Now Midlink Business Park.
|-
|K||[[w:GM Korea|GM Korea]]||[[w:Gunsan|Kunsan]], [[w:Jeolla Province|Jeolla]]||[[w:South Korea|South Korea]]||[[w:Chevrolet Cruze|Chevrolet Cruze]]<br />[[w:Holden Cruze#Australia|Holden Cruze (JG sedan/JH wagon)]]<br />[[w:Holden Astra#Seventh generation (BK, BL; 2016)|Holden Astra Sedan (BL)]] (4-door)<br />[[w:Chevrolet Orlando|Chevrolet Orlando]]<br />[[w:GM Family Z engine|Family Z diesel engine]]||1997||2018||Past models: [[w:Daewoo Lacetti|Daewoo Lacetti]], [[w:Daewoo Nubira|Daewoo Nubira]], [[w:Daewoo Tacuma|Daewoo Tacuma]], [[w:Chevrolet Optra|Chevrolet Optra]], [[w:Chevrolet Vivant|Chevrolet Vivant]], [[w:Holden Viva|Holden Viva (JF)]], [[w:Suzuki Forenza|Suzuki Forenza]], [[w:Suzuki Reno|Suzuki Reno]]
This factory also produced Chevrolet vehicles for [[w:General Motors Europe|General Motors Europe]] and [[w:Chevrolet Europe|Chevrolet Europe]]. The factory permanently closed on May 31, 2018, due to low productivity caused by GM's withdrawal from Europe in 2017 and due to GM's restructuring of its GM Korea operations. Sold to Myoung Shin Co., Ltd. in 2018. Diesel engines were produced at an adjacent facility beginning in 2006.
|-
|A<br />(1953-1964 [[w:Chevrolet|Chevrolet]] and 1965-1990)<br /><br />8 <br />(1929-1952 [[w:Chevrolet|Chevrolet]])||[[w:Lakewood Assembly|Lakewood Assembly]]||[[w:Lakewood Heights, Atlanta|Lakewood Heights, Georgia]]||United States ||[[w:Chevrolet Caprice|Chevrolet Caprice]] (1966, 1987-1990)<br />[[w:Pontiac Safari|Pontiac Safari wagon]] (1987-1989)<br />[[w:Buick Estate#1977–1990|Buick LeSabre Estate wagon]] (1987-1989)<br /> [[w:Buick Estate#1977–1990|Buick Electra Estate wagon]] (1987-1989)<br />[[w:Buick Estate#1977–1990|Buick Estate wagon]] (1990)||1928||1990||Located at McDonough Boulevard and Sawtell Avenue. Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. Lakewood Assembly joined the GM Assembly Division in 1968. Idled from September 1982 to early 1984. Production ended with Chevrolet Caprice Classic & Buick Estate Wagon. Last vehicle produced was a gray Chevy Caprice on <br> August 6, 1990.<br /> Past models:<br /> [[w:Chevrolet Series AC International|Chevrolet Series AC International]]<br />[[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]]<br />[[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]]<br />[[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]]<br />[[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]]<br />[[w:Chevrolet Master|Chevrolet Master]]<br />[[w:Chevrolet Deluxe|Chevrolet Deluxe]]<br />[[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]]<br /> [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1966), [[w:Chevrolet 150|Chevrolet 150]] (1953-1957), [[w:Chevrolet 210|Chevrolet 210]] (1953-1957), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-1966), [[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958), [[w:Chevrolet El Camino#First generation (1959–1960)|Chevrolet El Camino]] (1959-1960), [[w:Chevrolet Impala|Chevrolet Impala]] (1958-1966), [[w:Chevrolet Nomad|Chevrolet Nomad]] (1955-1957), [[w:Chevrolet Suburban|Chevrolet Suburban]] (1957, 1965-1966). Also built the <br> [[w:Chevrolet Chevette|Chevrolet Chevette]] (1981-1982, 1984-1987) & [[w:Pontiac 1000|Pontiac 1000]] (1981-1982, 1984-1987),<br> [[w:Pontiac Acadian|Pontiac Acadian]] (Canada only).<br> GM G-body: [[w:Pontiac Grand Prix#Third generation (1969–1972)|Pontiac Grand Prix]] (1970-1972). GM A-body: [[w:Chevrolet Chevelle|Chevrolet Chevelle]] (1964-1970), [[w:Chevrolet El Camino#Second generation (1964–1967)|Chevrolet El Camino]] (1965), [[w:Pontiac Grand Prix|Pontiac Grand Prix]] (1973-1979), [[w:Pontiac GTO|Pontiac GTO]] (1969, 1971-1973), [[w:Pontiac LeMans|Pontiac LeMans]] (1971-1977).<br> [[w:Chevrolet AK Series|Chevrolet AK Series]], [[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1948-1955), [[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959), [[w:Chevrolet C/K|Chevrolet C/K]] (1960-80), [[w:Chevrolet C/K (second generation)|GMC C/K (Action Line)]] (1967-1972),<br> [[w:Chevrolet C/K (third generation)|GMC C/K (Rounded Line)]] (1973-1980).
|-
| ||[[w:Lansing Car Assembly|Lansing Car Assembly - Body]]||[[w:Lansing, Michigan|Lansing, Michigan]]||United States||Automotive bodies||1920||2005||Located at 401 N. Verlinden St. Opened as a [[w:Durant Motors|Durant Motors]] plant in 1920. Durant Motors went out of business in 1931 and the plant was vacant until GM bought it in 1935. Known as GM's Lansing Plant 6. The plant reopened as a Fisher Body plant replacing the Fisher Body operation within the main Oldsmobile plant (Lansing Plant 1) that operated out of space leased from Oldsmobile since 1923. It supplied bodies to the main Oldsmobile plant (Lansing Plant 1 or Lansing Car Assembly - Chassis). Together with the chassis plant, they made up Lansing Car Assembly. Demolished in 2008-2009.
|-
|M (1949-1984 [All], 1985-2005 [North Line])||[[w:Lansing Car Assembly|Lansing Car Assembly - Chassis (North)]]||[[w:Lansing, Michigan|Lansing, Michigan]]||United States||,<br> [[w:Chevrolet Cavalier#Third generation (1995)|Chevrolet Cavalier coupe]] (1995-1998),<br> [[w:Chevrolet Malibu#Fifth generation (1997)|Chevrolet Malibu]] (2001-2003),<br> [[w:Chevrolet Malibu#Fifth generation (1997)|Chevrolet Classic]] (2004-2005),<br> [[w:Pontiac Grand Am|Pontiac Grand Am]] (1992-2005),<br> [[w:Oldsmobile Calais|Oldsmobile Calais]] (1985-1987),<br> [[w:Oldsmobile Cutlass Calais|Oldsmobile Cutlass Calais]] (1988-1991),<br> [[w:Oldsmobile Achieva|Oldsmobile Achieva]] (1992-1998),<br> [[w:Buick Skylark#Sixth generation (1985–1991)|Buick Somerset Regal/Somerset/Skylark]] (1985-1991)||1902||2005|| "M" - North assembly line. Part of GM's Lansing Plant 1. Located around 1014 Townsend St., next to the former Oldsmobile headquarters at 920 Townsend St. This was Oldsmobile's home plant. It predated the founding of GM in 1908. Fisher Body leased space here to build bodies for Oldsmobile beginning in 1923, when Fisher started making bodies for 1924 Oldsmobiles. In 1935, Fisher Body moved to the ex-Durant Motors plant on Verlinden St. that GM bought earlier that year. Oldsmobile then took back the space that Fisher Body had been using (Bldg. 26). Lansing Car Assembly was converted to build unibody, fwd, compact cars for 1985 for multiple GM brands instead of the previous body-on-frame, rwd midsize & full-size cars exclusively for Oldsmobile. Demolished in 2007.
Past models: [[w:Oldsmobile F-Series|Oldsmobile F-Series]] (1928-1938), [[w:Oldsmobile L-Series|Oldsmobile L-Series]] (1932-1938), [[w:Oldsmobile Series 60|Oldsmobile Series 60]] (1939-1948), [[w:Oldsmobile Series 70|Oldsmobile Series 70]] (1939-1950), [[w:Oldsmobile 88|Oldsmobile 88]] (1949-1984), Oldsmobile 80 (1939), [[w:Oldsmobile 98#First generation (1941)|Oldsmobile 90]] (1940), [[w:Oldsmobile 98#First generation (1941)|Oldsmobile 96]] (1941), [[w:Oldsmobile 98|Oldsmobile 98]] (1941-1984), [[w:Oldsmobile 98#1953|Oldsmobile 98 Fiesta]] convertible (1953),<br> [[w:Oldsmobile Custom Cruiser#First generation (1971–1976)|Oldsmobile Custom Cruiser]] (1971-1976), [[w:Oldsmobile Cutlass|Oldsmobile Cutlass]] (1961-1984), [[w:Oldsmobile Cutlass Supreme|Oldsmobile Cutlass Supreme]] (1966-1984), [[w:Oldsmobile 442|Oldsmobile 442]] (1964-80), [[w:Oldsmobile Jetstar I|Oldsmobile Jetstar I]] (1964-1965), [[w:Oldsmobile Starfire#First generation (1961–1966)|Oldsmobile Starfire]] (1961-1966), [[w:Oldsmobile Toronado|Oldsmobile Toronado]] (1966-1978), [[w:Oldsmobile Vista Cruiser|Oldsmobile Vista Cruiser]] (1964-1977), [[w:Viking (automobile)|Viking]] (1929-1931)<br />Oldsmobile engines:<br />[[w:Oldsmobile straight-6 engine|Oldsmobile straight-6 engine]]<br />[[w:Oldsmobile straight-8 engine|Oldsmobile straight-8 engine]]<br />[[w:Oldsmobile V8 engine|Oldsmobile Rocket V8 engine]]<br />[[w:Oldsmobile V8 engine#Aluminum 215|Oldsmobile Rockette V8 engine]]<br />[[w:Oldsmobile Diesel engine|Oldsmobile Diesel V8]]
|-
|C (1985-2004 [South Line])||[[w:Lansing Car Assembly|Lansing Car Assembly - Chassis (South)]]||[[w:Lansing, Michigan|Lansing, Michigan]]||United States||[[w:Pontiac Grand Am|Pontiac Grand Am]] (1985-2004),<br> [[w:Oldsmobile Calais|Oldsmobile Calais]] (1985-1986),<br> [[w:Oldsmobile Alero|Oldsmobile Alero]] (1999-2004),<br> [[w:Chevrolet Alero|Chevrolet Alero]] (Export only: 1999-2001),<br> [[w:Buick Skylark#Seventh generation (1992–1998)|Buick Skylark]] (1992-1998)||1902||2004||"C" - South assembly line. Only started using a separate plant code from the North plant beginning with the 1985 N-body cars. Part of GM's Lansing Plant 1. Located around 1014 Townsend St., next to the former Oldsmobile headquarters at 920 Townsend St. Demolished in 2007.
|-
|B<br />(0 for EV1)||[[w:Lansing Craft Centre|Lansing Craft Centre]]||[[w:Lansing Township, Michigan|Lansing Township, Michigan]]||United States||[[w:Chevrolet SSR|Chevrolet SSR]] (2003–2006)||1987||2006||Located at 2801 West Saginaw Street, across the street from the Lansing Metal Center. Originally built by Ryan-Bohn Foundry and opened in 1920. Owned by Driggs Aircraft Company from 1927-1930. Owned by R.E. Olds from 1930-1940 but not used. Bought by GM's Oldsmobile Division in 1940. Became GM's Lansing Plant 2. Also known as Olds Forge. Built artillery shells during WWII. Oldsmobile used this plant as a forge (through 1983) and for making axles and differentials (through 1984). Became known as the Oldsmobile Differential Plant and Foundry. Converted into a full vehicle assembly plant including stamping, body shop and general assembly areas. First opened as a vehicle assembly plant known as the Reatta Craft Centre in 1988 though pilot production began in December 1986. After Buick Reatta production ended in 1991, plant was renamed Lansing Craft Centre. Used by the Genasys joint venture with [[w:American Specialty Cars|ASC]] to complete production of the Chevy Cavalier and Pontiac Sunfire convertibles. Cavalier and Sunfire convertible production ends during 1999. Cadillac Eldorado production moved here from Detroit-Hamtramck Assembly during 2000. Eldorado production ended April 22, 2002. Plant was then converted to truck production for the Chevy SSR. First saleable production SSR completed on July 29, 2003. Final SSR built March 17, 2006. Closed in 2006. Demolished in 2008-2009.
Past models: [[w:Buick Reatta|Buick Reatta]] (1988–1991), [[w:Chevrolet Cavalier#Third generation (1995)|Chevrolet Cavalier convertible]] (1995–2000), [[w:Pontiac Sunfire|Pontiac Sunfire]] convertible (1995–2000), [[w:General Motors EV1|General Motors EV1]] (1997, 1999), [[w:Cadillac Eldorado#Twelfth generation (1992–2002)|Cadillac Eldorado]] (2000-2002)
|-
|||[[w:Lansing Engine Plant|Lansing Engine]]||[[w:Delta Township, Michigan|Delta Township, Michigan]]||United States||[[w:Oldsmobile Diesel engine|Oldsmobile Diesel V6]]<br />[[w:Quad 4 engine|Quad 4 engine]]<br />[[w:GM Ecotec engine|GM Ecotec engine]] (2002 only)||1981||2002||Located at 2901 S. Canal Road. Known as GM's Lansing Plant 5. Also known as Delta Engine. Built to produce experimental diesel engine; part of Ryder Logistics since 2005.
|-
| ||[[w:Lansing Metal Center|Lansing Metal Center]]||[[w:Lansing Township, Michigan|Lansing Township, Michigan]]||United States|| Stamping and electroplating bumpers; general machining of crankshafts and connecting rods; and machining, welding, and stamping of other automobile parts||1952||2006|| Located at 2800 W. Saginaw Street, across the street from the Lansing Craft Centre. Known as GM's Lansing Plant 3. Also known as the Olds Jet plant. Originally built to manufacture turbine blades for Buick-built J65 axial flow jet engines. Metal fabricating plant. Electroplating operation ended in May 1987. Closed in March 2006. Demolished in 2008-2010.
|-
|K <br />(1953-1964 [[w:Chevrolet|Chevrolet]] and 1965-1988)<br /><br />5 (1929-1952 [[w:Chevrolet|Chevrolet]])<br /><br />M (1964 [[w:Pontiac (automobile)|Pontiac]])<br /><br />8 (1964 [[w:Buick|Buick]]) ||[[w:Leeds Assembly|Leeds Assembly]]||[[w:Kansas City, Missouri|Kansas City, Missouri]]||United States||[[w:Chevrolet Cavalier|Chevrolet Cavalier]] (1984-1987),<br> [[w:Oldsmobile Firenza|Oldsmobile Firenza]] (1982-1988),<br> [[w:Buick Skyhawk#Second generation (1982–1989)|Buick Skyhawk]] (1982-1988)<br>[[w:Pontiac Sunbird#Second generation (1982–1994)|Pontiac J2000]] (1982)||1929||1988||Located at 6817 Stadium Drive. Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Leeds Assembly began making Pontiac and Buick passenger cars for 1964. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. Leeds Assembly joined the GM Assembly Division in 1968. Retooled to build fwd J-cars for 1982. Closed April 15, 1988. <br />[[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]]<br />[[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]]<br />[[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]]<br />[[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]]<br />[[w:Chevrolet Master|Chevrolet Master]]<br />[[w:Chevrolet Deluxe|Chevrolet Deluxe]]<br />[[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]]<br />[[w:Buick Apollo|Buick Apollo]] (1974), [[w:Buick GS|Buick GS]] (1965-1968, 1970), [[w:Buick Regal|Buick Regal]] (1980-1981), [[w:Buick Skylark|Buick Skylark]] (1964-1970, 1975-76), [[w:Buick Special#1964–1967|Buick Special]] (1964-1967), [[w:Chevrolet 150|Chevrolet 150]] (1953-1957), [[w:Chevrolet 210|Chevrolet 210]] (1953-1957), [[w:Chevrolet AK Series|Chevrolet AK Series]], [[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1947-1955), [[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959), [[w:Chevrolet C/K (first generation)|Chevrolet C/K]] (1960-1966), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1963), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-1963), [[w:Chevrolet Corvair|Chevrolet Corvair]] (1960-1961), [[w:Chevrolet Chevelle|Chevrolet Chevelle]] (1964-1974, 1977), [[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958), [[w:Chevrolet El Camino|Chevrolet El Camino]] (1964-1974, 1978-80), [[w:Chevrolet Impala|Chevrolet Impala]] (1958-1963), [[w:Chevrolet Malibu|Chevrolet Malibu]] (1978-1981), [[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1971-1981), [[w:Chevrolet Nomad|Chevrolet Nomad]] (1955-1957), [[w:Chevrolet Nova|Chevrolet Chevy II/Nova]] (1962-63, 1974-1977),[[w:Chevrolet Suburban|Chevrolet Suburban]] (1952, 1956, 1959, 1961-1962), [[w:GMC Sprint|GMC Sprint]] (1971-1974), [[w:GMC Caballero|GMC Caballero]] (1978-1980), [[w:Pontiac GTO|Pontiac GTO]] (1964-1968), [[w:Pontiac LeMans|Pontiac LeMans]] (1964-1968), [[w:Pontiac Tempest|Pontiac Tempest]] (1964-1965)
|-
|K ('94-'05)<br /><br />E ('65-'91)<br /><br />L (Pre-1965 [[w:Oldsmobile|Oldsmobile]] & [[w:Pontiac (automobile)|Pontiac]]) <br /><br /> 3 (Pre-1964 [[w:Buick|Buick]]) ||[[w:Linden Assembly|Linden Assembly]]||[[w:Linden, New Jersey|Linden, New Jersey]]||United States||[[w:Chevrolet S-10 Blazer#Second generation (1995)|Chevrolet Blazer]] (1995-2005)<br />[[w:Chevrolet S-10 Blazer#Second generation (1995)|GMC Jimmy]] (1995-2005)<br />[[w:Chevrolet S-10#Second generation (1994)|Chevrolet S-10]] (1994-2004)<br /> [[w:Chevrolet S-10#Second generation (1994)|GMC Sonoma]] (1994-2004)||1937||2005||Located at 1016 W. Edgar Road. Linden Assembly was the 2nd GM multi-brand assembly plant (the 1st was Southgate, CA), assembling Buick, Oldsmobile, and Pontiac models. It was operated by GM's Linden Division through January 1942. During WWII, GM built 5,837 [[w:FM-1 Wildcat|FM-1 Wildcat]] and [[w:FM-2 Wildcat|FM-2 Wildcat]] fighter planes at Linden under license from Grumman as part of GM's Eastern Aircraft Division. After the war ended, in 1945, Linden & Southgate were both placed in a new division called the [[w:Buick-Oldsmobile-Pontiac Assembly Division|Buick-Oldsmobile-Pontiac Assembly Division]]. BOP Assembly Division became GM Assembly Division in 1965. In 1971, Linden Assembly became the first plant outside Cadillac's home plant in Detroit to assemble Cadillacs when it began to assemble C-body Cadillacs like the DeVille & Calais. In 1979, Linden became the sole source for all three of GM's E-body personal luxury coupes, the Oldsmobile Toronado, Buick Riviera, and Cadillac Eldorado. The closely related K-body Cadillac Seville was added in 1980. In the mid-1980s, the factory was retooled to produce the new L-body Chevy Beretta & Corsica, which began production in 1987. This was the first time Linden built a Chevrolet model. Linden was idled in September 1991 for conversion to truck and SUV production. It reopened in 1993 to produce the 1994 S-10 and Sonoma pickups, adding the Blazer and Jimmy SUVs for 1995. Closed April 2005. Last vehicle built was a white 2005 four-door Chevy Blazer on April 20, 2005. Demolished in 2008. Now Legacy Square, a complex of retail stores, and Legacy Commerce Center, an industrial space at the back of the property along Linden Ave.<br /> [[w:Chevrolet Corsica|Chevrolet Corsica]] (1987-1991), [[w:Chevrolet Beretta|Chevrolet Beretta]] (1987-1991), [[w:Buick Riviera#Sixth generation (1979–1985)|Buick Riviera]] (1979-1985), [[w:Oldsmobile Toronado#Third generation (1979–1985)|Oldsmobile Toronado]] (1979-1985), [[w:Cadillac Eldorado#Tenth generation (1979–1985)|Cadillac Eldorado]] (1979-1985), [[w:Cadillac Seville#Second generation (1980–1985)|Cadillac Seville]] (1980-85), [[w:Buick Century|Buick Century]] (1939, 1955-1957), [[w:Buick Electra|Buick Electra]] (1959-1963, 1971-1978), [[w:Buick Invicta|Buick Invicta]] (1959-1962), [[w:Buick LeSabre|Buick LeSabre]] (1959-1963), [[w:Buick Roadmaster|Buick Roadmaster]] (1948-1949, 1953-1957), [[w:Buick Special|Buick Special]] (1952-1957), [[w:Buick Super|Buick Super]] (1955-1957), [[w:Buick Wildcat|Buick Wildcat]] (1963), [[w:Cadillac Calais|Cadillac Calais]] (1971-1976), [[w:Cadillac DeVille|Cadillac DeVille]] (1971-1978), [[w:Oldsmobile 88|Oldsmobile 88]] (1949-1976), [[w:Oldsmobile 98|Oldsmobile 98]] (1941-1963, 1971-1978), [[w:Oldsmobile Cutlass|Oldsmobile Cutlass]] (1968-1970), [[w:Oldsmobile 442|Oldsmobile 442]] (1968-1970), [[w:Oldsmobile Jetstar I|Oldsmobile Jetstar I]] (1964-1965), [[w:Oldsmobile Starfire#First generation (1961–1966)|Oldsmobile Starfire]] (1961-1966), [[w:Pontiac Bonneville|Pontiac Bonneville]] (1958-1970, 1972-1973), [[w:Pontiac Catalina|Pontiac Catalina]] (1959-1970), [[w:Pontiac Chieftain|Pontiac Chieftain]] (1949, 1953, 1955, 1958), [[w:Pontiac Executive|Pontiac Executive]] (1967-1970), [[w:Pontiac Grand Prix|Pontiac Grand Prix]] (1962-1968), [[w:Pontiac Star Chief|Pontiac Star Chief]] (1955-1958, 1962, 1965-1966), [[w:Pontiac 2+2|Pontiac 2+2]] (1964-1967), [[w:Pontiac Ventura#1960–1970|Pontiac Ventura]] (1960-61)
|-
| ||[[w:Livonia Engine|Livonia Engine]]||[[w:Livonia, Michigan|Livonia, Michigan]]||United States||[[w:Cadillac High Technology engine|Cadillac High Technology engine]] (4.1/4.5/4.9L OHV V8)<br>[[w:GM Premium V engine|Premium V engine]] (4.6L Northstar V8, 4.0L Aurora V8, 3.5L Shortstar V6)||1971||2010|| Located at 12200 Middlebelt Road. Originally built as a parts supplier to Cadillac. Converted into an engine plant for the HT-series V8 that debuted for 1982. Now a multi-tenant commercial space including [[w:Penske Corporation|Penske Logistics]] and [[w:KUKA|KUKA]]. The [[w:KUKA|KUKA]] facility appears to be the one building the initial batch of [[w:BrightDrop Zevo 600|BrightDrop Zevo 600]] electric vans for GM prior to production moving to GM's [[w:CAMI Automotive|CAMI Automotive]] plant.
|-
||7 (1979-2019)<br /><br /> U (1966-1978)||[[w:Lordstown Assembly|Lordstown Assembly]]||[[w:Warren, Ohio|Warren, Ohio]]||United States||[[w:Chevrolet Cruze#Second generation (J400)|Chevrolet Cruze (2016-2019)]]||1966||2019
|GM bought the property in 1955 and announced plans for the new Chevrolet plant in 1956 but construction didn't begin until 1964. Production began on April 28, 1966. Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. Lordstown Assembly joined the GM Assembly Division in 1971. <br /> Past models: [[w:Chevrolet Cruze#First generation (J300; 2008)|Chevrolet Cruze (2011-2015)/ Cruze Limited (2016)]], [[w:Chevrolet Cobalt|Chevrolet Cobalt]] (2005-2010)/[[w:Pontiac G5|Pontiac G5]] (2007-2009, Canada: 2007-2010), [[w:Chevrolet Cavalier|Chevrolet Cavalier]] (1982-2005)/[[w:Pontiac Sunbird#Second generation (1982–1994)|Pontiac J2000/2000/2000 Sunbird/Sunbird]] (1982-1994)/ [[w:Pontiac Sunfire|Pontiac Sunfire]] (1995-2004), [[w:Chevrolet Vega|Chevrolet Vega]] (1971–1977)/[[w:Pontiac Astre|Pontiac Astre]] (1975-1977), [[w:Chevrolet Monza|Chevrolet Monza]] (1978-1980)/[[w:Pontiac Sunbird#First generation (1976–1980)|Pontiac Sunbird]] (1978-1980)/[[w:Oldsmobile Starfire#Second generation (1975–1980)|Oldsmobile Starfire]] (1978-1980)/ [[w:Buick Skyhawk#First generation (1975–1980)|Buick Skyhawk]] (1978-1980), [[w:Chevrolet van#Third generation (1971-1996)|Chevrolet Van/Sportvan]] (1971-1992), [[w:Chevrolet van#Third generation (1971-1996)|GMC Vandura/ Rally Van]] (1971-1992), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1966-1970), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1966-1970), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-1970), [[w:Chevrolet Impala|Chevrolet Impala]] (1966-1970), [[w:Pontiac Firebird#First generation (1967–1969)|Pontiac Firebird]] (1967-1969), [[w:Pontiac Pursuit|Pontiac Pursuit/G5 Pursuit]] (Canada: 2005-2006), [[w:Toyota Cavalier|Toyota Cavalier]] (1996-2000).
Located at 2300 Hallock-Young Road. Main assembly plant is the East part of the complex on Hallock-Young Road. Stamping plant added in 1970. Paint shop added in 2004. Stamping plant and paint shop are part of the West part of the complex on Ellsworth-Bailey Road. <br /> Closed on March 6, 2019. Sold to [[w:Lordstown Motors|Lordstown Motors]] in 2019. Lordstown Motors sold the plant to [[w:Foxconn|Foxconn]] in 2022 and Foxconn will do contract assembly for Lordstown Motors and others.
|-
|1 (Lotus Omega &<br />Lotus Carlton)<br /><br />H (Lotus models)||[[w:Lotus Cars|Lotus Cars]]||[[w:RAF Hethel|RAF Hethel]], [[w: Hethel|Hethel]], [[w:Norfolk|Norfolk]], [[w:England|England]]||[[w:United Kingdom|United Kingdom]]||
[[w:Opel Lotus Omega|Opel Lotus Omega]] A / [[w:Vauxhall Lotus Carlton|Vauxhall Lotus Carlton]]<br /> 1990-1992, 950 units
[[w:Lotus Esprit|Lotus Esprit]], [[w:Lotus Excel|Lotus Excel]], [[w:Lotus Elan#Elan (M100)|Lotus Elan]]
||1986||1993||GM owned Lotus from 1986-1993. GM sold Lotus in 1993 to A.C.B.N. Holdings S.A. of Luxembourg, a company controlled by Italian businessman Romano Artioli, who also owned Bugatti Automobili SpA. Artioli sold Lotus to Malaysian automaker [[w:Proton Holdings|Proton]] in 1996.
|-
| ||Mansfield Metal Center||[[w:Ontario, Ohio|Ontario, Ohio]]||United States||Metal stamping||1955||2010||Located at 2525 W. 4th St. Mostly demolished. Redeveloped into Ontario Commerce Park.
|-
| ||[[w:Massena Castings Plant|Massena Castings Plant]]||[[w:Rooseveltown, New York|Rooseveltown, New York]]||United States|| Aluminum engine blocks & cylinder heads for [[w:Chevrolet Turbo-Air 6 engine|Corvair engine]], Aluminum engine blocks for [[w:Chevrolet 2300 engine|Vega engine]], & aluminum cylinder heads & blocks for other engines.<br /> Also clutch housings, transmission cases, pistons, aluminum intake manifolds||1959||2009||Located at 56 Chevrolet Rd, Rooseveltown, NY 13662 <br /> Originally a Chevrolet facility. In 1978, became part of GM's Central Foundry Division. In 1991, Central Foundry became part of GM Powertrain. <br />Production ended April 23, 2009. Demolished in 2011.
|-
|M||Mexico City Assembly||[[w:Mexico City|Mexico City]]||[[w:Mexico|Mexico]]||[[w:Chevrolet|Chevrolet]] trucks & vans||1937||1995<ref>{{cite news|author=Thomas H. Klier, James Rubenstein|title=Mexico’s Growing Role in the Auto Industry Under NAFTA: Who Makes What and What Goes Where|url=https://www.chicagofed.org/publications/economic-perspectives/2017/6.|publisher=Federal Reserve Bank of Chicago, Economic Perspectives, Vol. 41, No. 6|at=see table 11 and footnotes right under table 11|date=September 2017}}</ref>||[[w:Chevrolet|Chevrolet]] including: Caprice, Chevelle, Corvair, Impala, Malibu, Nova, Malibu Rallye (Nova-based), trucks<br />[[w:Pontiac (automobile)|Pontiac]], [[w:Oldsmobile|Oldsmobile]], [[w:Buick|Buick]], [[w:Cadillac|Cadillac]],<br /> [[w:Opel Olympia|Opel Olympia]],<br> [[w:Opel Rekord|Opel Rekord/MX-1/<br>Olimpico/Fiera]] <br /> Located at 843 Avenida Ejército Nacional (formerly Calzada de Los Morales) although the old headquarters building was demolished in 2018. The current headquarters is in the GM Tower at the other end of the property on Blvd. Miguel de Cervantes Saavedra. Started with trucks then added passenger cars in the early 1940s. Switched from assembly to manufacturing in 1965. Production ended in 1995 and most of the property was sold but GM de Mexico still has its corporate headquarters at this location. Most of the location is now Plaza Antara, an open-air shopping center.
|-
|2||[[w:Moraine Assembly|Moraine Assembly]]||[[w:Moraine, Ohio|Moraine, Ohio]]||United States||[[w:Chevrolet S-10#First generation (1982)|Chevrolet S-10]] (1982-1992)<br /> [[w:Chevrolet S-10 Blazer#First generation (1983–1994)|Chevrolet S-10 Blazer]] 4-door (1991-1994)<br /> [[w:Chevrolet S-10 Blazer#Second generation (1995–2005)|Chevrolet Blazer]] (1995-2001)<br />[[w:GMC S-15#First generation (1982)|GMC S-15]] (1982-1990)<br />[[w:GMC Sonoma#First generation (1982)|GMC Sonoma]] (1991-1992)<br /> [[w:GMC S-15 Jimmy#First generation (1983–1994)|GMC S-15 Jimmy/Jimmy]] 4-door (1991-1994)<br /> [[w:GMC S-15 Jimmy#Second generation (1995–2005)|GMC Jimmy]] (1995-2001)<br /><br /> [[w:Chevrolet TrailBlazer#First generation (KC; 2001)|Chevrolet TrailBlazer]] (2002-2009)<br /> [[w:GMC Envoy#Second generation (2002–2009)|GMC Envoy]] (2002-2009)<br /> [[w:Isuzu Ascender|Isuzu Ascender]] (2003-2008)<br />[[w:Oldsmobile Bravada|Oldsmobile Bravada]] (1991-1994, 1996-2004)<br />[[w:Buick Rainier|Buick Rainier]] (2004-2007) <br />[[w:Saab 9-7X|Saab 9-7X]] (2005-2009)<br /><br />[[w:Grumman LLV|Grumman LLV]] chassis (1987-1994)||1951<br><br>1981 (Vehicle production)||2008|| Located at 2601 West Stroop Road. Began in 1951 as part of the [[w:Frigidaire|Frigidaire]] Division of General Motors Corporation producing household appliances. [[w:Frigidaire|Frigidaire]] production ended in 1979 when GM sold [[w:Frigidaire|Frigidaire]] to [[w:White Consolidated Industries|White Consolidated Industries]] but kept the Moraine plant and converted it to build vehicles. Vehicle production began in 1981. Was part of GM's Truck & Bus Group. Closed on December 23, 2008. Sold to [[w:Fuyao Group#Fuyao Glass America Inc.|Fuyao Group]] in 2014; began production of automotive glass for GM and other automakers in 2016.
|-
| ||Moraine Engine||[[w:Moraine, Ohio|Moraine, Ohio]]||United States||[[w:Detroit Diesel V8 engine|Detroit Diesel V8 engine]] 6.2L/6.5L||1981||2000||Located at 4100 Springboro Pike. Also began as a [[w:Frigidaire|Frigidaire]] plant. Replaced by the nearby DMAX Ltd. engine plant (originally a joint venture with Isuzu) which builds the replacement engine ([[w:Duramax V8 engine|Duramax V8 engine]]). Demolished by 2003. Production of the 6.5-liter diesel V8 moved to a new AM General plant in Franklin, OH known as General Engine Products. AM General makes the engine for its own use and for GM service parts, & 3rd party customers.
|-
| ||Muncie Transmission||[[w:Muncie, Indiana|Muncie, Indiana]]||United States||Transmissions including: [[w:Getrag 282 transmission|Getrag 282/NVG T550]], Getrag 284, Muncie M17, Muncie M20/M21/M22, Muncie M62/M64, [[w:Muncie SM420 transmission|Muncie SM420 transmission]], [[w:Muncie SM465 transmission|Muncie SM465 transmission]], [[w:New Venture Gear 3500 transmission|NV3500/NV3550]], [[w:New Venture Gear 4500 transmission|NV4500]]<br />Valves, Steering gears<br />Forge||1919||2006||Located at 1200 W. Eighth St. Originally founded as Warner Gear Company in 1902. Bought by GM in 1919. Became Muncie Products Division. Closed in 1932. Reopened by Chevrolet in 1935 (Chevrolet Muncie). Moved to Detroit Diesel Allison Division in 1984 & then to Hydramatic Division in 1986. Became part of [[w:New Venture Gear|New Venture Gear]] joint venture with Chrysler in 1990. GM owned 36% while [[w:Chrysler|Chrysler]] owned 64%. GM sold its stake to [[w:DaimlerChrysler|DaimlerChrysler]] in 2002 but took back the Muncie plant. Became Manual Transmissions of Muncie. The plant closed in 2006. Demolished in 2008-09.
|-
| ||GM Near East||[[w:Alexandria|Alexandria]]|| [[w:Egypt|Egypt]]||[[w:Chevrolet|Chevrolet]] cars and trucks <br />[[w:Buick|Buick]]||1936||1958||Began CKD assembly of trucks in 1936 followed by cars in 1938. In 1951, GM Near East became the Alexandria Branch of GM Middle East. Plant was liquidated in 1958.
|-
| ||[[w:General Motors New Zealand|General Motors New Zealand]]||[[w:Petone|Petone]]||[[w:New Zealand|New Zealand]]||[[w:Chevrolet|Chevrolet]] including [[w:Chevrolet Deluxe|Chevrolet Deluxe]], [[w:Chevrolet 210|Chevrolet 210]], [[w:Chevrolet Bel Air|Chevrolet Bel Air]], [[w:Chevrolet Impala|Chevrolet Impala]], [[w:Chevrolet Thriftmaster|Chevrolet Thriftmaster]]<br />[[w:Pontiac (automobile)|Pontiac]] including [[w:Pontiac Laurentian|Pontiac Laurentian]], [[w:Pontiac Parisienne#New Zealand|Pontiac Parisienne]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Buick|Buick]]<br />[[w:Opel Kadett#Kadett I (1936–1940)|Opel Kadett]]<br />[[w:Vauxhall Motors|Vauxhall]] including [[w:Vauxhall Cresta|Vauxhall Cresta]] (E, PA, PC), [[w:Vauxhall Wyvern|Vauxhall Wyvern]], [[w:Vauxhall Velox|Vauxhall Velox]], [[w:Vauxhall Viva|Vauxhall Viva]], [[w:Vauxhall Victor|Vauxhall Victor]]<br />[[w:Bedford Vehicles|Bedford]] including [[w:Bedford CF|Bedford CF]], [[w:Bedford TK|Bedford TK]]<br />[[w:Holden|Holden]] including [[w:Holden FE|Holden FE]], [[w:Holden FB|Holden FB]], [[w:Holden EJ|Holden EJ]], [[w:Holden EH|Holden EH]], [[w:Holden HD|Holden HD]]||1926||1984||Also made [[w:Frigidaire|Frigidaire]] refrigerators, freezers, washers, and dryers (Frigidaire was owned by GM from 1919 to 1979). <br />
Axle tube assemblies, oil filters, and spark plugs.
|-
|Z1-Z9 [https://forums.justcommodores.com.au/threads/commodore-vin-decoder-vb-to-zb.279978/]||[[w:General Motors New Zealand|General Motors New Zealand]]||[[w:Trentham, New Zealand|Trentham]]||[[w:New Zealand|New Zealand]]||[[w:Vauxhall Motors|Vauxhall]] including [[w:Vauxhall Chevette|Vauxhall Chevette]], [[w:Vauxhall Cresta#Cresta PC|Vauxhall Cresta]], [[w:Vauxhall Viva|Vauxhall Viva]]<br />[[w:Holden|Holden]] including [[w:Holden HQ|Holden HQ]], [[w:Statesman (automobile)#HQ|Holden Statesman HQ]], [[w:Holden HJ|Holden HJ]], [[w:Statesman (automobile)#HJ|Holden Statesman HJ]], [[w:Holden HX|Holden HX]], [[w:Statesman (automobile)#HX|Holden Statesman HX]], [[w:Holden HZ|Holden HZ]], [[w:Statesman (automobile)#HZ|Holden Statesman HZ]], [[w:Statesman (automobile)#WB|Holden Statesman WB]],<br /> [[w:Holden Commodore (VB)|Holden Commodore (VB)]],<br /> [[w:Holden Commodore (VC)|Holden Commodore (VC)]],<br /> [[w:Holden Commodore (VH)|Holden Commodore (VH)]],<br /> [[w:Holden Commodore (VK)|Holden Commodore (VK)]],<br /> [[w:Holden Commodore (VL)|Holden Commodore (VL)]],<br /> [[w:Holden Commodore (VN)|Holden Commodore (VN)]], [[w:Holden Royale|Holden Commodore Royale (VH/VK/VL)]] <br />[[w:Holden Torana|Holden Torana]]<br /> [[w:Isuzu Faster#Second generation (1980–1988)|Holden Rodeo]]<br />[[w:Isuzu Gemini#In other markets|Isuzu Gemini/Holden Gemini]]<br />[[w:Holden Camira|Holden Camira]]<br />[[w:Holden Barina#First generation (MB, ML; 1985–1988)|Holden Barina]]<br />[[w:Suzuki Cultus#First generation (1983)|Suzuki Swift]]<br />[[w:Daihatsu Charade#First generation (G10, G20; 1977–1983)|Daihatsu Charade (under contract for Daihatsu)]]<br />[[w:Datsun Truck#Nissan D21|Nissan Navara pickup (under contract for Nissan)]]||1967||1990||
|-
| ||GM Nordiska AB||Södra Hammarbyhamnen, [[w:Stockholm|Stockholm]]||[[w:Sweden|Sweden]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Opel|Opel]]<br />[[w:Vauxhall Motors|Vauxhall]]<br />[[w:Bedford Vehicles|Bedford]] trucks||1928||1957|| Converted into a warehouse in 1957.
|-
| ||Northway Motor Plant||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||Northway engines||1905||Burned down 1987||Located at 4584 Maybury Grand Ave. (Jeffries Expressway Service Drive) and W. Hancock St. Around 4646 Lawton St. (rear side) is the remnants of a water tower and railroad spur. Northway Motor and Manufacturing Company was acquired by GM in 1909, becoming Northway Motor and Manufacturing Division. Northway had made engines for both GM brands (in particular [[w:Oakland Motor Car Company|Oakland]], [[w:Oldsmobile|Oldsmobile]], [[w:Sheridan (automobile)|Sheridan]], [[w:Scripps-Booth|Scripps-Booth]], [[w:Samson Tractor|Samson Tractor]], and [[w:GMC (automobile)|GMC]]) and other automakers. Became part of GM Intercompany Parts Group. In 1920, Northway moved to a new plant on Holbrook Ave. in Detroit. This address was subsequently been used by [[w:Frigidaire|Frigidaire]] in the 1920's and 1930's and then by Refrigeration Service Inc. in the 1950's. At some point, the building was sold to Motor City Wiping Cloth Co. but they abandoned the property in 1983, leaving behind massive bales of rags and cloths. The building burned down in a horrific fire in 1987 after homeless people in the building were burning fires there to keep warm. The fire killed three firefighters and injured ten others. The fire even spread to the nearby Continental Paper warehouse.
|-
| ||Northway Motor Plant/General Motors Truck Co. Plant No. 7/ <br>Chevrolet Gear and Axle Div.||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||Northway engines, Axles, parts for past model Chevrolets||1920||1994||Located at 1806 Holbrook Ave. Northway Motor and Manufacturing Company was acquired by GM in 1909, becoming Northway Motor and Manufacturing Division. Northway had made engines for both GM brands (in particular [[w:Oakland Motor Car Company|Oakland]], [[w:Oldsmobile|Oldsmobile]], [[w:Sheridan (automobile)|Sheridan]], [[w:Scripps-Booth|Scripps-Booth]], [[w:Samson Tractor|Samson Tractor]], and [[w:GMC (automobile)|GMC]]) and other automakers. Became part of GM Central Products Division. In 1920, Northway moved here from their original plant on Maybury Grand Ave. and primarily supplied engines to GMC. In 1925, became part of Yellow Truck & Coach Manufacturing Company as part of the merger of Yellow Cab Manufacturing Company and General Motors Truck Corp., the manufacturer of GMC trucks. In 1926, Northway Motor Division was liquidated and its Detroit plant was sold to Chevrolet on March 31 to become the Chevrolet Gear and Axle Div. Part of the engine tooling machinery was transferred to the Yellow Sleeve-Valve Engine Works at East Moline, IL. Some Northway engines were still used by some GMC trucks (K-series) through 1930. Was part of the Detroit complex sold to [[w:American Axle|American Axle]] in 1994. Now part of American Axle's Advanced Technology Development Center.
|-
|N<br />(1953-1964 [[w:Chevrolet|Chevrolet]]) and 1965-1987<br /><br />9 <br />(1928-1952 [[w:Chevrolet|Chevrolet]])||[[w:Norwood Assembly|Norwood Assembly]]||[[w:Norwood, Ohio|Norwood, Ohio]]||United States||[[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1961)<br />[[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-1961)<br />[[w:Chevrolet Camaro|Chevrolet Camaro]] (1967-1987)<br />[[w:Chevrolet Caprice|Chevrolet Caprice]] (1966)<br />[[w:Chevrolet El Camino#First generation (1959–1960)|Chevrolet El Camino]] (1959-1960)<br />[[w:Chevrolet Impala|Chevrolet Impala]]<br /> (1958-1961, 1965-1966)<br />[[w:Chevrolet Nomad|Chevrolet Nomad]] (1955-1957)<br />[[w:Chevrolet Nova|Chevrolet Chevy II/Nova]]<br> (1962-1966, 1972)<br />[[w:Pontiac Firebird|Pontiac Firebird]] (1969-1987)<br />[[w:Buick Apollo|Buick Apollo]] (1973)||1923||1987||Located at 5025 Carthage Ave. First vehicle produced was a Chevrolet Superior on August 13, 1923. Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. Norwood Assembly joined the GM Assembly Division in 1971. Closed August 26, 1987. Last vehicle produced was a Chevy Camaro IROC-Z. Demolished. Now Linden Pointe on the Lateral, a mixed use retail and office space. <br />[[w:Chevrolet Superior|Chevrolet Superior]]<br />[[w:Chevrolet Series AA Capitol|Chevrolet Series AA Capitol]]<br />[[w:Chevrolet Series AB National|Chevrolet Series AB National]]<br />[[w:Chevrolet Series AC International|Chevrolet Series AC International]]<br />[[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]]<br />[[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]]<br />[[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]]<br />[[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]]<br />[[w:Chevrolet Master|Chevrolet Master]]<br />[[w:Chevrolet Deluxe|Chevrolet Deluxe]]<br />[[w:Chevrolet Stylemaster|Chevrolet Stylemaster]]<br />[[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]]<br />[[w:Chevrolet 150|Chevrolet 150]] (1953-1957)<br />[[w:Chevrolet 210|Chevrolet 210]] (1953-1957)<br />[[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958)<br />[[w:Chevrolet AK Series|Chevrolet AK Series]]<br />[[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1947-1955)<br />[[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959)<br />[[w:Chevrolet C/K (first generation)|Chevrolet C/K]] (1960-1966)<br />[[w:Chevrolet Suburban|Chevrolet Suburban]] (1952)
|-
|Z||[[w:NUMMI|NUMMI]]||[[w:Fremont, California|Fremont, California]]||United States||[[w:Chevrolet Chevy II / Nova#Fifth generation (1985–1988)|Chevrolet Nova]] (1985-1988)<br />[[w:Geo Prizm|Geo Prizm]] (1989-1997)<br />[[w:Chevrolet Prizm|Chevrolet Prizm]] (1998-2002)<br />[[w:Pontiac Vibe|Pontiac Vibe]] (2003-2010)<br />[[w:Toyota Corolla (E80)|Toyota Corolla FX]] (1987-1988)<br />[[w:Toyota Corolla|Toyota Corolla]] (1989-2010) (E90/E100/E110/E130/E140)<br />[[w:Toyota Hilux#Fifth generation (N80, N90, N100, N110; 1988)|Toyota Pickup]] (1992-1995)<br />[[w:Toyota Tacoma|Toyota Tacoma]] (1995-2010)<br />[[w:Toyota Voltz|Toyota Voltz]] (Japan: '02-'04)||1984||2009||Located at 45500 Fremont Blvd.<br /> Operated from 1963-1982 as a GM factory.<br />From 1984-2010, operated as [[w:NUMMI|New United Motor Manufacturing Inc. (NUMMI)]], which was a 50/50 joint venture between GM and [[w:Toyota|Toyota]] and assembled both GM and Toyota vehicles. First vehicle produced was a yellow Chevrolet Nova in December 1984. First Toyota produced was a Corolla FX16 3-d hatchback in September 1986. This was followed by the Corolla FX 3-d hatchback in February 1987. Nova and Corolla FX production ended in September 1988. That same month, NUMMI began producing the Toyota Corolla 4-door sedan. Geo Prizm production began in November 1988. In August 1991, Toyota pickup production began with the Regular Cab 4x2. The 4x4 followed in February 1992 ant the Xtracab followed in March 1993. Tacoma pickup production began in January 1995, replacing the previous unnamed Toyota pickup model. Prizm production ended in December 2001. In January 2002, Pontiac Vibe production began. In June 2002, production began of the Toyota Voltz, a rhd version of the Pontiac Vibe built for export to Japan. In September 2004, the 2nd generation Tacoma pickup began production. Pontiac Vibe production ended on August 17, 2009, ending GM production at Fremont. Tacoma pickup production ended March 26, 2010. The last vehicle built at NUMMI, a red Corolla sedan, was built April 1, 2010. NUMMI produced 7.7 million vehicles. <br />Sold to [[w:Tesla Motors|Tesla, Inc.]] in May 2010.<ref>{{cite news|author=Sam Abuelsamid|title=Tesla to buy old resources from GM, Toyota for NUMMI plant|url=http://www.autoblog.com/2010/08/22/tesla-to-buy-old-resources-from-gm-toyota/|access-date=20 August 2015|publisher=Autoblog.com|date=August 22, 2010}}</ref> Tesla only bought 210 of the total 370 acres owned by NUMMI. Tesla also bought $15 million worth of equipment and parts from the former NUMMI plant. Tesla took possession of the plant in October 2010. Tesla began production at Fremont in June 2012 with the Model S.
|-
|O <br />(1953-1963 [[w:Chevrolet|Chevrolet]])<br /><br />6 <br />(1928-1952 [[w:Chevrolet|Chevrolet]])<br /><br />C ([[w:GMC (automobile)|GMC]])||[[w:Oakland Assembly|Oakland Assembly]] (Chevrolet)||[[w:Oakland, California|Oakland, California]]||United States||[[w:Chevrolet Series 490|Chevrolet Series 490]]<br />[[w:Chevrolet Superior|Chevrolet Superior]]<br />[[w:Chevrolet Series AA Capitol|Chevrolet Series AA Capitol]]<br />[[w:Chevrolet Series AB National|Chevrolet Series AB National]]<br />[[w:Chevrolet Series AC International|Chevrolet Series AC International]]<br />[[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]]<br />[[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]]<br />[[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]]<br />[[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]]<br />[[w:Chevrolet Master|Chevrolet Master]]<br />[[w:Chevrolet Deluxe|Chevrolet Deluxe]]<br />[[w:Chevrolet Stylemaster|Chevrolet Stylemaster]]<br />[[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]]<br />[[w:Chevrolet 150|Chevrolet 150]] (1953-1957)<br />[[w:Chevrolet 210|Chevrolet 210]] (1953-1957)<br />[[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1963)<br />[[w:Chevrolet Corvair|Chevrolet Corvair]] (1960-1963)<br />[[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958)<br />[[w:Chevrolet Impala|Chevrolet Impala]] (1958-1963)<br />[[w:Chevrolet Nova|Chevrolet Chevy II/Nova]] (1962-1963)<br />[[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1947-1955)<br />[[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959)<br />[[w:Chevrolet C/K (first generation)|Chevrolet C/K]] (1960-1963)<br />[[w:GMC New Design|GMC New Design]] (1952-1954)<br />[[w:GMC Blue Chip|GMC Blue Chip]] (1955-1959)<br />[[w:Chevrolet C/K (first generation)|GMC C/K]] (1960-1963)<br />[[w:Chevrolet Suburban|Chevrolet Suburban]] (1952-1953, 1955, 1957, 1959, 1963)<br />[[w:GMC Suburban|GMC Suburban]]||1917||1963||Located at 73rd Ave. & Foothill Blvd. Built by Chevrolet before it became part of GM. Began building GMC trucks in December 1937 for the 1938 model year. Replaced by Fremont Assembly plant. Demolished. Site became Eastmont Mall which is now [[w:Eastmont Town Center|Eastmont Town Center]].
|-
| ||[[w:Oakland Motor Car Company|Oakland Motor Car Co.]]||[[w:Pontiac, Michigan|Pontiac, Michigan]]||United States||Oakland automobiles <br /> Pontiac 1926-1927||1909||1931||Located at 196 Oakland Ave. (now Cesar E Chavez Ave.). Also bordered by Baldwin Ave. and W. Howard St. GM bought Oakland Motor Car Co. in 1909. Oakland introduced sister brand Pontiac in 1926. Pontiac replaced Oakland for 1932. Early Pontiacs were built here before production moved to the new factory stretching from Baldwin Ave. east to Joslyn Ave. a little farther north. This was Pontiac's first headquarters until 1970 when Pontiac headquarters moved north to the Pontiac Assembly complex on Joslyn Ave. and <br> E. Montcalm St. Some of the buildings are still standing.
|-
| ||[[w:es:General Motors OBB|GM-OBB]]||[[w:Quito, Ecuador|Quito]]||[[w:Ecuador|Ecuador]]||[[w:Isuzu D-Max#Second generation (RT; 2011)|Chevrolet D-Max 2011]]||1980 (1st GM product)||2024||OBB (Ómnibus BB Transportes) was founded in 1975. GM bought 22% of OBB in 1981 & became majority shareholder in 1988. GM announced in April 2024 that GM-OBB will shut down at the end of August 2024.<ref>{{Cite web|url=https://gmauthority.com/blog/2024/04/gm-shutting-down-manufacturing-operations-in-colombia-and-ecuador/|title = GM Shutting Down Manufacturing Operations In Colombia And Ecuador|author=Deivis Centeno|publisher=GMAuthority.com|date = April 29, 2024}}</ref><ref>{{Cite web|url=https://www.americaeconomia.com/en/business-industries/general-motors-announces-end-car-manufacturing-operations-colombia-and-ecuador/|title = General Motors announces the end of car manufacturing operations in Colombia and Ecuador|publisher=AmericaEconomia.com|date = April 26, 2024}}</ref>
Past models: [[w:Chevrolet Aveo (T200)|Chevrolet Aveo]]<br />[[w:Chevrolet K5 Blazer|Chevrolet K5 Blazer]]<br />[[w:Opel Corsa#Corsa B (S93; 1993)|Chevrolet Corsa]], [[w:Opel Corsa#Corsa C (X01; 2000)|Chevrolet Corsa Evolution]]<br />[[w:Suzuki Cultus Crescent|Chevrolet Esteem]], [[w:Suzuki Cultus#Second generation (1988)|Chevrolet Forsa]]<br />[[w:Isuzu Gemini#Second generation (1985)|Chevrolet Gemini]]<br />[[w:Isuzu Faster#TF|Chevrolet LUV]], [[w:Isuzu D-Max#First generation (RA, RC; 2002)|Chevrolet LUV D-Max]]<br />[[w:Isuzu MU#First generation (UCS55/UCS69GW; 1989–1998)|Chevrolet Rodeo]], [[w:Isuzu Trooper#First generation (1981–1991)|Chevrolet Trooper]]<br />[[w:Chevrolet Sail#Second generation (2010)|Chevrolet Sail (Gen 2)]], [[w:Chevrolet Sail#Third generation (2014)|Chevrolet Sail (Gen 3)]]<br />[[w:Chevrolet C/K (third generation)|Chevrolet Silverado]]<br />[[w:Chevrolet Tracker (Americas)|Chevrolet Vitara]], [[w:Chevrolet Tracker (Americas)#Second generation|Chevrolet Grand Vitara]], [[w:Suzuki Vitara#Third generation (JT; 2005)|Chevrolet Grand Vitara SZ]]
|-
|6||[[w:Oklahoma City Assembly|Oklahoma City Assembly]]||[[w:Oklahoma City, Oklahoma|Oklahoma City, Oklahoma]]||United States||[[w:Chevrolet Trailblazer (SUV)#EXT|Chevrolet TrailBlazer EXT]] (2002-2006)<br />[[w:GMC Envoy XL#Second generation (2002–2009)|GMC Envoy XL]] (2002-2006)<br />[[w:GMC Envoy#Envoy XUV|GMC Envoy XUV]] (2004-2005)<br />[[w:Isuzu Ascender|Isuzu Ascender extended length]] (2003-2006)||1979||2006||Located at 7447 SE 74th Street. <br /> Initially produced front wheel drive [[w:GM X platform (FWD)|X platform]] vehicles ([[w:Chevrolet Citation|Chevrolet Citation]] (1980-1983) & [[w:Pontiac Phoenix#Second generation (1980–1984)|Pontiac Phoenix]] (1980-1982)) followed by front wheel drive [[w:General Motors A platform (FWD)|A platform]] vehicles ([[w:Chevrolet Celebrity|Chevrolet Celebrity]] (1982-1989), [[w:Pontiac 6000|Pontiac 6000]] (1988-1991), [[w:Oldsmobile Cutlass Ciera|Oldsmobile Cutlass Ciera]] (1989-1996), [[w:Buick Century#Fifth generation (1982–1996)|Buick Century]] (1982-1996)) as well as [[w:Chevrolet Malibu#Fifth generation (1997)|Chevrolet Malibu]] (1997-2001) & [[w:Oldsmobile Cutlass#Sixth generation (midsize) 1997–1999|Oldsmobile Cutlass]] (1997-1999). Converted to build body-on-frame SUVs for 2002 model year. Damaged by a tornado on May 8, 2003, but the company repaired the damage and returned the plant to operation just 53 days later. Idled February 20, 2006. Last vehicle produced was a white 2006 Chevrolet TrailBlazer EXT. Plant was taken over by Oklahoma City in 2008 and leased to neighbor Tinker Air Force Base. Now known as Building 9001 Tinker Aerospace Complex. Used for maintaining jet engines and for software engineering.
|-
|2||[[w:Opel|Opel]] Werk Bochum||[[w:Bochum|Bochum]], [[w:North Rhine-Westphalia|North Rhine-Westphalia]]||[[w:Germany|Germany]]||[[w:Opel Olympia#Name revival: Opel Olympia (1967–1970)|Opel Olympia]] A<br />[[w:Opel Ascona|Opel Ascona]] A, B<br />[[w:Opel Kadett|Opel Kadett]] A, B, C, D, & E<br />[[w:Opel Astra|Opel Astra]] F, G, & H<br />[[w:Opel Astra#H|Opel Astra]] H Classic (5-door, Caravan)<br />[[w:Opel GT#GT (1968–1973)|Opel GT]]<br />[[w:Opel Manta|Opel Manta]] A, B<br />[[w:Opel Zafira#Zafira Tourer C (2011–2019)|Opel/Vauxhall Zafira Tourer]] C<br />[[w:Opel Zafira#Zafira B (2005–2014)|Opel/Vauxhall Zafira]] B/Zafira Family<br />[[w:Opel Zafira#Zafira A (1999–2006)|Opel/Vauxhall Zafira]] A<br />[[w:Vauxhall Astra|Vauxhall Astra]]<br />Engines<br />Transmissions<br />Axles||1962||2014|| Plant I was the vehicle assembly plant. First car off the line was a Kadett A. Plant II was the engine, transmission, & axle plant. Engine production ended in 2004. Axle production ended in 2011. Transmission production ended Oct. 7, 2013. Vehicle production ended December 5, 2014.
|-
| ||[[w:Opel|Opel]] [[w:Opelwerk Brandenburg|Werk Brandenburg]]||[[w:Brandenburg an der Havel|Brandenburg an der Havel]], [[w:Brandenburg|Brandenburg]]||[[w:Germany|Germany]]||[[w:Opel Blitz|Opel Blitz]]<br />||1935||1944|| Bombed and heavily damaged by the Allies on Aug. 6, 1944. Factory was dismantled and shipped to the Soviet Union after the war ended as reparations.
|-
|6||[[w:Opel Eisenach|Opel Eisenach GmbH]]||[[w:Eisenach|Eisenach]], [[w:Thuringia|Thuringia]]||[[w:Germany|Germany]]||[[w:Opel Corsa#Corsa E (X15; 2014)|Opel/Vauxhall Corsa]] E (3-door)<br />[[w:Opel Corsa#Corsa D (S07; 2006)|Opel/Vauxhall Corsa]] D (3-door)<br />[[w:Opel Corsa#Corsa C (X01; 2000)|Opel/Vauxhall Corsa]] C (3-door)<br />[[w:Opel Corsa#Corsa B (S93; 1993)|Opel/Vauxhall Corsa]] B <br /> [[w:Opel Adam|Opel/Vauxhall Adam]]<br />[[w:Opel Astra#F|Opel Astra F]] (1992-1995)<br />[[w:Opel Astra#G|Opel Astra G]] (1998-2003)||1992||2017|| [[w:Adam Opel AG|Opel plant]]. Began production with Astra F in 1992. Began Corsa production in 1993 with Corsa B. Added production of the Adam in 2013. Sold to [[w:PSA Group|PSA Group]] in 2017. Part of [[w:Stellantis|Stellantis]] since 2021.
|-
| ||[[w:Adam Opel AG|Opel]] Werk Kaiserslautern||[[w:Kaiserslautern|Kaiserslautern]], [[w:Rhineland-Palatinate|Rhineland-Palatinate]]||[[w:Germany|Germany]]||Components<br />Engines:<br /> Four-cylinder turbo diesel engines:<br /> [[w:Fiat JTD engine#2.0 Multijet II|2.0 CDTI Family B turbodiesel 4-cyl.]]<br />[[w:Fiat JTD engine#1.9|1.9 CDTI turbodiesel 4-cyl.]]<br /> [[w:GM Ecotec Diesel (1997)|2.0/2.2 Ecotec direct injection turbodiesel]]
Four-cylinder gasoline engines:<br /> [[w:GM Ecotec engine|GM Ecotec engine]] 2.2<br />[[w:GM Ecotec engine#2.0|GM Ecotec engine]] 2.0 supercharged (LSJ) <br />[[w:GM Family II engine|GM Family II engine]] 1.6, 1.8, 2.0 <br />
|1966||2017||[[w:Adam Opel AG|Opel plant]]. Sold to [[w:PSA Group|PSA Group]] in 2017. Part of [[w:Stellantis|Stellantis]] since 2021.
|-
|1<br /><br />R (Catera)<br /><br />5 (Pre-1976)||[[w:Adam Opel AG|Opel]] Werk Rüsselsheim||[[w:Rüsselsheim|Rüsselsheim]], [[w:Hesse|Hesse]]||[[w:Germany|Germany]]||[[w:Opel Insignia|Opel/Vauxhall Insignia]] (sedan, hatchback, Sports Tourer, Country Tourer)<br />[[w:Buick Regal#Fifth generation (2008)|Buick Regal]] (2011MY from March 1, 2010-March 25, 2011)<br />[[w:Buick Regal#Sixth generation (2018)|Buick Regal]] (2018-2020)<br />[[w:Holden Insignia#First generation (G09; 2008)|Holden Insignia VXR (GA)]] (2015-2017)<br />[[w:Holden Commodore ZB|Holden Commodore (ZB)]] (2018-2020)<br />[[w:Opel Astra#J|Opel/Vauxhall Astra J]] (5-door)<br />[[w:Opel Zafira|Opel/Vauxhall Zafira Tourer C]]<br />[[w:Opel Vectra|Opel/Vauxhall Vectra]]<br />[[w:Opel Vectra#Vectra B (1995–2002)|Holden Vectra (JR)]]<br />[[w:Opel Vectra#Vectra C (2002–2010)|Holden Vectra (ZC)]]<br />[[w:Opel Signum|Opel/Vauxhall Signum]]<br />[[w:Opel Omega|Opel/Vauxhall Omega]]<br />[[w:Cadillac Catera|Cadillac Catera]] (1997-2001)<br />[[w:Opel Senator|Opel/Vauxhall Senator & Vauxhall Royale]]<br />[[w:Opel Calibra|Opel/Vauxhall/Holden Calibra (YE)]]<br />[[w:Opel Monza|Opel Monza/Vauxhall Royale Coupe]]<br />[[w:Opel Commodore|Opel Commodore/Vauxhall Viceroy]]<br />[[w:Opel Kapitan|Opel Kapitan]]<br />[[w:Opel Admiral|Opel Admiral]]<br />[[w:Opel Diplomat|Opel Diplomat]]<br />[[w:Opel Kadett#Kadett I (1936–1940)|Opel Kadett]]<br />[[w:Opel Olympia|Opel Olympia]]<br />[[w:Opel Blitz|Opel Blitz]]<br />axles<br />components<br />[[w:GM F40 transmission|GM F40 transmission]]<br />Frigidaire refrigerators (1937-c.1940 & 1946-1959)||1899 (1st production car built)<br><br> 1929 (part of GM)||2017 (left GM)<br><br>2020 (production for GM ended)|| [[w:Adam Opel AG|Opel plant]]. GM bought 80% of Opel in March 1929 and bought the rest in 1931, making Opel a full GM subsidiary. Russelsheim previously make engines. Sold to [[w:PSA Group|PSA Group]] in 2017. Rüsselsheim continued to supply the Buick Regal & the Holden Commodore ZB to GM through 2020. Part of [[w:Stellantis|Stellantis]] since 2021.
|-
|S||[[w:Opel Szentgotthárd|Opel Szentgotthárd]]||[[w:Szentgotthárd|Szentgotthárd]]||[[w:Hungary|Hungary]]||[[w:Opel Astra|Opel Astra]] F 1992-1997, 80,835 units<br />[[w:Opel Vectra#Vectra B (1995–2002)|Opel Vectra]] B1 and B2 1998-1999, 4,404 units<br />Opel Engines including:<br /> [[w:GM Family 1 engine| Family 1 engine]] DOHC versions 1.4, 1.6, 1.8<br />[[w:GM small gasoline engine|GM Small Gasoline Engine]]<br />[[w:GM Medium Gasoline Engine|GM Medium Gasoline Engine]]<br />[[w:GM Medium Diesel engine|GM Medium Diesel engine]]<br />[[w:VTi transmission|"VTi" CVT transmission]]<br /> [[w:Allison Transmission|Allison]] 3000, 4000, & Torqmatic Series automatic transmissions||1992||2017 (left GM)<br><br>2019 (production for GM ended)|| [[w:Adam Opel AG|Opel plant]]. Originally a joint venture between GM & Hungarian truck and engine maker Raba. GM bought out Raba & became 100% owner in 1995. Production of Allison Transmissions began in 2000. Sold to [[w:PSA Group|PSA Group]] in 2017. Szentgotthárd continued to supply the [[w:GM Medium Diesel engine|1.6L LH7 turbodiesel I4]] to GM through 2019. Part of [[w:Stellantis|Stellantis]] since 2021.
|-
| ||[[w:Opel Wien|Opel Wien GmbH]]||[[w:Aspern|Aspern]]||[[w:Austria|Austria]]||[[w:Family 0 engine|Family 0]] engines (1.0, 1.2, 1.4, 1.4 Turbo)<br />Transmissions (Easytronic automated manual, F15/F17 five-speed manual and M20/M32 six-speed manual)||1982||2017|| [[w:Adam Opel AG|Opel plant]]. Sold to [[w:PSA Group|PSA Group]] in 2017. Part of [[w:Stellantis|Stellantis]] since 2021. Closed by Stellantis in 2024. <br /> Past engines: [[w:GM Family 1 engine|GM Family 1 engine]] SOHC versions.
|-
| ||Osaka Assembly (Built on land leased from [[w:Sojitz|Nihon Menka]])<ref>{{cite book|url=https://books.google.com/books?id=TY4l3qWIIh4C&q=general+motors+assembly+plant+location+osaka+japan&pg=PA70|title=American Multinationals and Japan: The Political Economy of Japanese Capital Controls, 1899-1980|author=Mark Mason|date=14 October 1992|publisher=Harvard Univ Asia Center|isbn=9780674026308|via=Google Books}}</ref>||[[w:Osaka|Osaka]]||[[w:Japan|Japan]]||Chevrolet, Pontiac, Oldsmobile, Buick from CKD kits||1927||1941||Factory was seized by [[w:Imperial Japanese|Imperial Japanese]] Government, see also [[w:General Motors Japan|General Motors Japan]]<ref>{{cite web|url=http://www.autonews.com/article/20080914/ANA03/809150388/gm-had-early-start-in-japan-but-was-hobbled-by-nationalism|title=GM early history in Japan|author=Hans Greimel|publisher=Autonews.com|date=September 14, 2008}}</ref><ref>{{cite web|url=https://history.gmheritagecenter.com/wiki/index.php/File:1926-6-1.jpg|title=Image of Osaka facility}}</ref>
|-
| ||[[w:Oshawa Truck Assembly|Oshawa Battery Plant]]||[[w:Oshawa, Ontario|Oshawa, Ontario]]||[[w:Canada|Canada]] ||Batteries||19?||1990's?||Was part of the overall Oshawa Assembly complex (Autoplex) on Park Road South. Referred to by Delco Remy as Plant 41. This operation was closed.
|-
|9 (1917-Mid 1923 Chevrolet)||Oshawa North||[[w:Oshawa, Ontario|Oshawa, Ontario]]||[[w:Canada|Canada]]||<br />||1907||1996||The original Oshawa (North) plant opened in 1907 as a McLaughlin Motor Car Co. plant. It produced McLaughlin-Buick cars by fitting Buick engines and chassis to McLaughlin bodies. It also built Chevrolets for Chevrolet Motor Co. beginning in 1915 as the Chevrolet Motor Car Co. of Canada. McLaughlin Motor Car Co. and the Chevrolet Motor Car Co. of Canada were bought out by GM in 1918 becoming GM of Canada. GM of Canada continued to make Chevrolets and McLaughlin-Buicks (which became simply Buick after WWII) and also assembled [[w:Oakland Motor Car Company|Oakland]] 1921-1930, [[w:Oldsmobile|Oldsmobile]] 1920-1942, 1946-1969, [[w:Marquette (automobile)#Buick brand|Marquette]] 1929-1930, [[w:Buick|Buick]] 1908-1942, 1951-1971, [[w:LaSalle (automobile)|LaSalle]] 1927-1930, 1932-1935, [[w:Cadillac|Cadillac]] 1923-1936. [[w:Pontiac (automobile)|Pontiac]] production in Oshawa began shortly after US production in 1926. From the 1950's into the 1980's, Canadian market full-size Pontiacs were built on Chevrolet chassis and were powered by Chevrolet engines and had model names different from US-market Pontiacs (Pathfinder, Strato Chief, Laurentian, and Parisienne). Car production shifted to the current Oshawa complex Car Assembly plant (South plant; also known as Autoplex beginning in the 1980's) which opened in 1953. [[w:Chevrolet|Chevrolet]] trucks were made beginning in 1919 and [[w:GMC (automobile)|GMC]] trucks were made beginning in 1923 before truck production shifted to the Oshawa Truck plant located next to the South car plant in 1965. Oshawa also produced 65 [[w:Samson Tractor#Trucks and a car|Samson trucks]] from 1920-1921. Oshawa also produced military vehicles and equipment during both WWI and WWII. Also, Maple Leaf trucks.
Operations were gradually moved from the older North plant to the newer South plant. The North plant, by then known as the GM North Fabrication plant making metal and plastic parts, was sold to Peregrine, Inc. in 1996. It was then sold to ACSYS Technologies Inc. in 2001. Both companies continued to operate as an auto parts manufacturer supplying GM. ACSYS closed the plant in 2004. The North plant ended all operations in 2005 and the last of it was demolished by 2006. Much of the site of the North plant at 155 Division Street (Ritson Road North is on the other side) is now a Costco.
|-
|1||[[w:Oshawa Truck Assembly|Oshawa Truck Assembly]]||[[w:Oshawa, Ontario|Oshawa, Ontario]]||[[w:Canada|Canada]]||[[w:Chevrolet Silverado|Chevrolet Silverado]] (1999-2009)<br />[[w:GMC Sierra|GMC Sierra]] (1988-2009)||1965||2009||Part of the overall Oshawa Assembly complex (Autoplex) on Park Road South. Truck plant was at 1100 Park Road South at the southern end of the Autoplex. Production ended May 14, 2009. Over 10 million vehicles were produced. Now the GM Canadian Technical Centre's (CTC) McLaughlin Advanced Technology Track. <br />Past models: [[w:Chevrolet C/K|Chevrolet C/K]] (-1986, 1988-1998), [[w:GMC C/K|GMC C/K]] (-1986)
|-
| ||[[w:Delphi Automotive Systems|Packard Electric]]<br /> Main complex||[[w:Warren, Ohio|Warren, Ohio]]||United States||Automotive wiring<br>Electric Motors||1932||1999||Packard Electric was acquired by GM in 1932. Located between Griswold St NE on the north side, Dana St NE on the south side, Paige Ave NE on the east side, and N. Park Ave on the west side. Some of the earliest Packard cars were built here before Packard Automobile split from Packard Electric in 1902. Plant 4, which opened in 1938, was originally used by GM's Sunlight Electrical Division, which made electric motors. GM had acquired the former Sunlight Electrical Manufacturing Co. in March 1933. On July 1, 1943, Sunlight Electrical Division merged into GM's Packard Electric Division. Sunlight motors were still made in Plant 4. Became part of GM's Delphi Automotive Systems subsidiary in 1995 as Delphi Packard Electric Systems. Spun off with Delphi in 1999. Closed in 2006.
|-
| ||[[w:Delphi Automotive Systems|Packard Electric]]<br /> Plant# 41||[[w:Warren, Ohio|Warren, Ohio]]||United States||Automotive wiring||1947||1998||Packard Electric was acquired by GM in 1932. Located at 1554 Thomas Rd SE. Became part of GM's Delphi Automotive Systems subsidiary in 1995 as Delphi Packard Electric Systems. Closed in 1998. Sold in 2004 to Wetzel, Inc. Sold to Berk Enterprise, Inc. in 2009.
|-
| ||[[w:Delphi Automotive Systems|Packard Electric]]<br /> North River Road complex||[[w:Bazetta Township, Ohio|Bazetta Township, Ohio]] and [[w:Howland Township, Trumbull County, Ohio|Howland Township, Ohio]]||United States||Automotive wiring||1955||1999||Packard Electric was acquired by GM in 1932. Located on North River Road and Larchmont Avenue NE. The plant is in Bazetta Township and extends across the border into Howland Township. The majority is in Bazetta Township. Became part of GM's Delphi Automotive Systems subsidiary in 1995 as Delphi Packard Electric Systems. Spun off with Delphi in 1999. Parts of the site have been closed and demolished and/or sold but Delphi successor Aptiv still operates part of the site at 1265 North River Road.
|-
| ||[[w:Delphi Automotive Systems|Packard Electric]]<br /> Brookhaven Plant||[[w:Brookhaven, Mississippi|Brookhaven, Mississippi]]||United States||Automotive wiring||1977||1999||Packard Electric was acquired by GM in 1932. Located at 925 Industrial Park Road NE. Became part of GM's Delphi Automotive Systems subsidiary in 1995 as Delphi Packard Electric Systems. Spun off with Delphi in 1999. Delphi successor Aptiv still operates the Brookhaven plant.
|-
| ||[[w:Delphi Automotive Systems|Packard Electric]]<br /> Clinton Plant||[[w:Clinton, Mississippi|Clinton, Mississippi]]||United States||Automotive wiring||1973||1999||Packard Electric was acquired by GM in 1932. Located at 1001 Industrial Park Dr. Became part of GM's Delphi Automotive Systems subsidiary in 1995 as Delphi Packard Electric Systems. Spun off with Delphi in 1999. One plant closed in 2006 and the second closed in 2009.
|-
| ||[[w:Delphi Automotive Systems|Packard Electric]]<br /> Mexico||[[w:Ciudad Juárez|Ciudad Juárez]], [[w:Chihuahua (state)|Chihuahua]]||[[w:Mexico|Mexico]]||Automotive wiring||1978||1999||Originally established as Conductores y Componentes Eléctricos by the Packard Electric division of GM. Became part of GM's Delphi Automotive Systems subsidiary in 1995. Spun off with Delphi in 1999. Delphi successor Aptiv still operates the Mexican plants.
|-
| ||[[w:Delphi Automotive Systems|Packard Electric]]<br /> Ireland Ltd.||[[w:Tallaght|Tallaght]]||[[w:Republic of Ireland|Ireland]]||Wire harnesses||1975||1996||Located on Airton Road. Production and export of wiring harnesses from this plant allowed GM to import fully built-up vehicles into Ireland before Ireland fully removed its restrictions on importing fully built-up vehicles. Became part of GM's Delphi Automotive Systems subsidiary in 1995. Closed in 1996.
|-
| ||GM Peninsular SA||[[w:Barcelona|Barcelona]]||[[w:Spain|Spain]]||[[w:Chevrolet|Chevrolet]] trucks||1932||1936|| Production ended due to Spanish Civil War. Liquidated around 1939.
|-
| ||GM del Peru||[[w:Lima|Lima]]||[[w:Peru|Peru]]||[[w:Chevrolet Bel Air|Chevrolet Bel Air]]<br />[[w:Chevrolet Camaro (first generation)|Chevrolet Camaro]]<br />[[w:Chevrolet Caprice|Chevrolet Caprice]]<br />[[w:Chevrolet Chevelle|Chevrolet Chevelle]]/[[w:Chevrolet Malibu|Chevrolet Malibu]]<br />[[w:Chevrolet Impala|Chevrolet Impala]]<br />[[w:Opel Kadett|Opel Kadett]]<br />[[w:Opel Rekord|Opel Rekord]]<br />[[w:Vauxhall Victor|Vauxhall Victor]]||1945||1970||
|-
| ||[[w:Pittsburgh Metal|Pittsburgh Metal]]||[[W:West Mifflin, Pennsylvania|West Mifflin, Pennsylvania]]||United States||Metal stamping||1949||2008||Located at 1451 Lebanon School Road. Originally part of [[w:Fisher Body|Fisher Body]] division. Demolished in 2011.
|-
| ||GM Polsce Sp. Zo.o.||[[w:Warsaw|Warsaw]]||[[w:Poland|Poland]]||[[w:Chevrolet|Chevrolet]] cars and trucks||1928||1930's||Was at 103 Wolska St. Closed during the Depression.
|-
|P (1939-1988)||[[w:Pontiac Assembly|Pontiac Assembly]]/Pontiac Fiero Assembly||[[w:Pontiac, Michigan|Pontiac, Michigan]]||United States||In ex-Fisher Body plant (Pontiac Fiero Assembly):<br /> [[w:Pontiac Fiero|Pontiac Fiero]] (1984-1988)<br /><br />In Main plant (Pontiac Assembly) after reopening:<br /> [[w:GM G platform (RWD)|RWD G-bodies]]:<br /> [[w:Chevrolet Monte Carlo#Fourth generation (1981–1988)|Chevrolet Monte Carlo]] (1987-1988),<br /> [[w:Oldsmobile Cutlass Supreme#Fourth generation (1978–1988)|Oldsmobile Cutlass Supreme]] (1985-1987),<br /> [[w:Oldsmobile 442|Oldsmobile 442]] (1986-1987),<br />[[w:Oldsmobile Cutlass Supreme#Fourth generation (1978–1988)|Oldsmobile Cutlass Supreme Classic]] (1988),<br /> [[w:Buick Regal#Second generation (1978)|Buick Regal]] (1985-1987)<br /><br />Also:<br /> Pontiac engines:<br /> [[w:Pontiac straight-8 engine|Pontiac straight-8 engine]]<br />[[w:Pontiac V8 engine|Pontiac V8 engine]]<br />[[w:Pontiac Trophy 4 engine|Pontiac Trophy 4 engine]]<br />[[w:Iron Duke engine|Pontiac Iron Duke/Tech IV I4 engine]]||1927||1987 (Pontiac Assembly)/1988 (Pontiac Fiero Assembly)||This was Pontiac's home plant. Property runs from Walton Blvd. on the north to E. Montcalm St. on the south with Joslyn Ave. or for certain stretches, Highwood Blvd., on the east side and Price St. or further south, Baldwin Ave. and then N. Saginaw St., on the west side. Also known as Pontiac North to distinguish from GMC's multiple plants in Pontiac, MI. Within 90 days of ground being broken, vehicles were already being produced in Pontiac's new home plant in 1927. Final Assembly was Plant 8 of Pontiac's Assembly complex in Pontiac, Michigan. On March 14, 1962, Pontiac Assembly built the 75 millionth GM vehicle built in the US, a white 1962 Bonneville convertible. Idled in 1982 but reopened in January 1985 with bodies supplied by Flint Body Assembly. Closed in December 1987. Last vehicle built was a Buick Regal Grand National. Demolished in 1997. GM still has the Pontiac Redistribution Center on the northeast portion of this property at 1251 Joslyn Road at the intersection with E. Columbia Ave. The Pontiac Metal Center is another still active part of this property. GM still uses the eastern part of the property bordered by Joslyn Ave. on the east, E. Beverly Ave. on the north, E. Montcalm St. on the south, and N. Glenwood Ave. on the west. This area includes GM Performance and Racing Center at 900 N. Glenwood Ave. and the Propulsion Systems Pontiac Engineering Center at 800 N. Glenwood Ave. Pontiac's divisional HQ moved here in 1970 from the previous location at the former Oakland HQ on 196 Oakland Ave. (now Cesar E Chavez Ave.). Pontiac's divisional HQ at One Pontiac Plaza was about where the Propulsion Systems Engineering Center is now. [[w:Fisher Body|Fisher Body]] operated a plant on the site (Plant 17) from 1935-1982. This plant was connected to the final assembly plant by an enclosed bridge that ran over N. Saginaw St., that was used to transport the bodies from the Fisher Body plant, where bodies up to the firewall were built, to the Pontiac final assembly plant where the body was mated to the chassis and the front end, powertrain, & interior were installed and the car was completed. This plant, located at 900 Baldwin Ave., was converted to build the [[w:Pontiac Fiero|Pontiac Fiero]], which it built from 1983-1988. Last Fiero built August 16, 1988. GM used it as a warehouse until 2009 ("Pontiac Warehouse Operations"). Prototyping work was also done there. Most of the Fiero plant was demolished in 2013 (from Kennett Rd. until just before the plant sign which is just past St. Louis Ave.). There used to be an overpass going over Baldwin Ave. to the parking lot on the other side of Baldwin but this was taken down after Fiero production ended. Pontiac engines were made in Plant 9 and Plant 18. Another engine plant was built in 1981 in the northern part of the property. It was originally called Plant 55, later renamed Plant 33. It was next to Plant 51, later renamed Plant 25, which did chassis parts and machining and later, engine machining. Engine production ended in 1993. Plant 9 was demolished in 1997 & Plant 18 was demolished in 1998. Plants 25 & 33 were demolished sometime between 2008 & 2013. Some parts of the complex have been sold to U-Pull And Save Auto Parts, Dani’s Trucking, GFL Environmental, & Bedrock Express. <br />[[w:Pontiac Six|Pontiac Six]] (1927-1932, 1935-1940), Pontiac Series 302 V8 (1932), Pontiac Economy Eight (1933-1934), Pontiac Improved Eight (1935), Pontiac Deluxe Eight (1936-1940), [[w:Pontiac 2+2|Pontiac 2+2]] (1964-1967), [[w:Pontiac Bonneville|Pontiac Bonneville (B-body)]] (1958-80), [[w:Pontiac Bonneville#Seventh generation (1982–1986)|Pontiac Bonneville (G-body)]] (1982), [[w:Pontiac Can Am|Pontiac Can Am]] (1977) [[w:Pontiac Catalina|Pontiac Catalina]] (1959-1980), [[w:Pontiac Chieftain|Pontiac Chieftain]] (1949-1958), [[w:Pontiac Custom S|Pontiac Custom S]] (1969), [[w:Pontiac Executive|Pontiac Executive]] (1967-70), [[w:Pontiac Grand Am#1973–1975|Pontiac Grand Am (1973-75)]], [[w:Pontiac Grand Am#1978–1980|Pontiac Grand Am (1978-80)]], [[w:Pontiac Grand Prix|Pontiac Grand Prix (B-body)]] (1962-1968), [[w:Pontiac Grand Prix#Third generation (1969–1972)|Pontiac Grand Prix (G-body)]] (1969-1972), [[w:Pontiac Grand Prix|Pontiac Grand Prix (A-/G-body)]] (1973-1982), [[w:Pontiac Grand Safari|Pontiac Grand Safari]] (1971-1978), [[w:Pontiac Grand Ville|Pontiac Grand Ville]] (1971-75), [[w:Pontiac GTO|Pontiac GTO]] (1964-1973), [[w:Pontiac LeMans|Pontiac LeMans]] (1962-1981), [[w:Pontiac Safari|Pontiac Safari]] (1955-1957), [[w:Pontiac Star Chief|Pontiac Star Chief]] (1954-66), [[w:Pontiac Streamliner|Pontiac Streamliner]] (1941-51), [[w:Pontiac Tempest|Pontiac Tempest]] (1961-1970), [[w:Pontiac LeMans#1970|Pontiac T-37]] (1970-1971), [[w:Pontiac Torpedo|Pontiac Torpedo]] (1940-1948), [[w:Pontiac Ventura#1960–1970|Pontiac Ventura]] (1960-1961)
|-
|V (1972-1990)<br /><br /> P (Pre-1972)||Pontiac Central Assembly||[[w:Pontiac, Michigan|Pontiac, Michigan]]||United States|||[[w:Chevrolet AK Series|GMC C-Series/E-Series]]<br />[[w:GMC New Design|GMC New Design]] (1947-1951, 1952-1954)<br />[[w:GMC Blue Chip|GMC Blue Chip]] (1955-1959)<br /> [[w:Chevrolet C/K|GMC C/K]] (1960-1985)<br />[[w:Chevrolet C/K|Chevrolet C/K]] (1967-1985)<br /> [[w:GMC Suburban|GMC Suburban]] (1937-1966)<br />[[w:GMC Motorhome|GMC Motorhome/TransMode]] (1978)<br /> Buses ([[w:GM "old-look" transit bus|Yellow Coach/GM "old-look" transit bus]] (1940-1969), [[w:GM PD-4103|GM PD-4103]], [[w:PD-4501 Scenicruiser|PD-4501 Scenicruiser]], [[w:GM New Look bus|GM New Look bus]] (1960-1977), [[w:GM Buffalo bus|GM Buffalo bus]] (1966-1980), [[w:Rapid Transit Series|Rapid Transit Series (RTS)]] (1978-1987))<br />Medium Duty Trucks & Heavy Duty Trucks including:<br />[[w:Chevrolet C/K (second generation)#Medium-duty trucks|Chevrolet C-Series medium-duty trucks]] (1967-1972)<br />[[w:Chevrolet/GMC B series#GMC (1966–1970)|GMC E-Series medium-duty trucks]] (E4500/E5500/E6500) (1967-1968) [https://web.archive.org/web/20140109015322/https://www.gmheritagecenter.com/docs/gm-heritage-archive/historical-brochures/GMC/100_YR_GMC_HISTORY_MAR09.pdf] (page 30)<br />[[w:Chevrolet C/K (second generation)#Medium-duty trucks|GMC C-Series medium-duty trucks]] (1969-1972)<br />[[w:Chevrolet C/K (third generation)#Medium-duty trucks (1973–1989)|Chevrolet/GMC C-Series medium-duty trucks]] (1985-1990)<br />[[w:Chevrolet Kodiak#First generation (1981–1989)|Chevrolet Kodiak]] (1985-1990)<br />[[w:Chevrolet Kodiak#First generation (1981–1989)|GMC Top Kick]] (1985-1990)<br />[[w:Chevrolet/GMC B series|Chevrolet B-series]] (-1991)<br />[[w:Chevrolet/GMC B series|GMC B-series]] (-1991)<br />[[w:GMC Brigadier#Background|Chevrolet/GMC H/J series]] (1966-1977)<br />[[w:Chevrolet Bruin|Chevrolet Bruin]] (1978-1980)<br />[[w:GMC Brigadier|GMC Brigadier]] (1978-1987)<br />[[w:WhiteGMC Brigadier|WhiteGMC Brigadier]] (1988-1989)<br />[[w:GMC General#Background|Chevrolet/GMC C/M series]] (1966-1976)<br />[[w:Chevrolet Bison|Chevrolet Bison]] (1977-1980)<br />[[w:GMC General|GMC General]] (1977-1987)<br />[[w:GMC Astro#Background|GMC F/D series "Crackerbox"]] (1959-1968)<br />[[w:Chevrolet Titan|Chevrolet Titan]] (1970-1980)<br />[[w:GMC Astro|GMC Astro]] (1969-1987)<br />Engines ([[w:GMC straight-6 engine|GMC straight-6 engine]] 1947-1962,<br /> [[w:GMC V6 engine|GMC V6 (1960-1973)/V12 (1960-1965) engine]],<br> [[w:GMC V8 engine#GMC engines|GMC 60° V8]] (1966-1972))||1928||1990||Located at 660 South Boulevard East. Known as GMC Truck & Coach Division Plant 2 when built. Production of trucks began in January 1928. In 1925, General Motors Truck Corp., the parent of the GMC brand, merged with Yellow Cab Manufacturing Company (including its Yellow Coach Mfg. Co. bus-making subsidiary) to form Yellow Truck & Coach Manufacturing Company, in which GM owned a majority stake of 57%. The Northway Motor Division of Detroit was transferred to General Motors Truck Corp. as part of that merger but was liquidated in 1926. On September 30, 1943, GM acquired the remainder of Yellow Truck & Coach Manufacturing Co. and on October 1, 1943 the GMC Truck & Coach Division of General Motors Corp. was formed and Yellow Truck & Coach Manufacturing Co. was dissolved. When limited production of civilian buses resumed in March 1944, they were badged as GM Coach and the Yellow name was retired. Headquarters of Yellow Truck & Coach Manufacturing Co. and later the GMC Truck & Coach Division. Headquarters building in front of Plant 2 was completed in March 1928. Administration and engineering buildings were part of the complex. Built 409,012 [[w:GMC CCKW 2½-ton 6×6 truck|CCKW 6x6 trucks]], AFKWX 6x6 cab-over trucks, [[w:DUKW|DUKW "Ducks"]], & other types of trucks during WWII. Also produced 2,249 buses & 30 T18E2 Boarhound armored cars during WWII. The small-block, Group 1 GMC inline-6s were moved from Plant 4 of Pontiac West to Building 29 at Pontiac Central in November 1947. In December 1947, engine manufacturing and machine shops moved from Plants 1 and 4 of Pontiac West to Building 29 at Pontiac Central. The medium- and big-block, Group 2 & 3 GMC inline-6s were moved to Building 29 at Pontiac Central in February 1948. In August 1977, the GMC MotorHome was moved from Plant 3 of Pontiac West to Building 29 at Pontiac Central. The GMC MotorHome was discontinued after 1978. [https://www.gmccolonial.com/gmc-motorhome-history] Transit bus production ended in spring 1987 when GM sold the product line to Greyhound Corporation, which continued RTS production at its [[w:Transportation Manufacturing Corporation|TMC]] plant in Roswell, New Mexico. Converted in 1994 into a Truck Product Engineering Center (Pontiac Centerpoint Campus) by GM using only the steel frame of the large main building while everything else was demolished. The Truck Product Engineering Center closed in 2009 and the site is now the Centerpoint Business Campus, which is occupied by many businesses including Fanuc Robotics and i.M. Branded.
|-
|E (1988-2009)<br /><br />V (1972-1985)||[[w:Pontiac East Assembly|Pontiac East Assembly]]||[[w:Pontiac, Michigan|Pontiac, Michigan]]||United States||Medium Duty Trucks:<br /> [[w:Chevrolet C/K (third generation)#Medium-duty trucks (1973–1989)|Chevrolet/GMC C-Series medium-duty trucks]] (1973-85), [[w:Chevrolet Kodiak#First generation (1981–1989)|Chevrolet Kodiak]] (1981-1985), [[w:Chevrolet Kodiak#First generation (1981–1989)|GMC Top Kick]] (1981-85)<br /><br /> [[w:Chevrolet C/K (fourth generation)|Chevrolet C/K (GMT400)]] (1988-1998)<br /> [[w:Chevrolet C/K (fourth generation)|GMC Sierra (GMT400)]] (1988-1998)<br /> [[w:Chevrolet Silverado#First-generation Silverado / second-generation Sierra (GMT800; 1999)|Chevrolet Silverado (GMT800)]] (1999-2006)<br /> [[w:Chevrolet Silverado#First-generation Silverado / second-generation Sierra (GMT800; 1999)|Chevrolet Silverado Classic (GMT800)]] (2007)<br /> [[w:Chevrolet Silverado#First-generation Silverado / second-generation Sierra (GMT800; 1999)|GMC Sierra (GMT800)]] (1999-2006)<br /> [[w:Chevrolet Silverado#First-generation Silverado / second-generation Sierra (GMT800; 1999)|GMC Sierra Classic (GMT800)]] (2007)<br /> [[w:Chevrolet Silverado#Second-generation Silverado / third-generation Sierra (GMT900; 2007)|Chevrolet Silverado (GMT900)]] (2007-2009)<br /> [[w:Chevrolet Silverado#Second-generation Silverado / third-generation Sierra (GMT900; 2007)|GMC Sierra (GMT900)]] (2007-2009) ||1972||2009||Located at 2100 South Opdyke Road. Known as GMC Truck & Coach Division Plant 6 when built, also known as Pontiac Assembly Center. Pontiac East is directly to the east of Pontiac Central. Pontiac East began by building medium-duty trucks, which were moved from Pontiac Central. In 1985, medium-duty trucks were moved back to Pontiac Central, combining with production of heavy-duty trucks and buses. GMT400 full-size pickup production began in December 1986 for the 1988 model year. Closed in September 2009. Demolished in 2011-2012. Portions of the site are now occupied by Challenge Manufacturing Co. and Williams International.
|-
|0 (1978-1994)<br /><br />V (1972-1977)<br /><br /> P (Pre-1972)||[[w:Pontiac West Assembly|Pontiac West Assembly]]||[[w:Pontiac, Michigan|Pontiac, Michigan]]||United States||Trucks, Buses,<br />Engines: ([[w:Buick straight-6 engine|Buick 257/331 straight-6 engine]] (1931-1932), [[w:GMC straight-6 engine|GMC straight-6 engine]] 1933-1948), <br /> [[w:GMC Motorhome|GMC Motorhome/TransMode]] (1973-1977)<br /> [[w:Chevrolet van#First generation (1964–1966)|Chevrolet Van/GMC Handi-Van]] (1964-1966)<br />[[w:Chevrolet van#Second generation (1967–1970)|Chevrolet Van/GMC Handi-Van]] (1967-1970)<br />[[w:Chevrolet van#Third generation (1971–1996)|Chevrolet Van/GMC Vandura]] (1978-1980)<br />[[w:Chevrolet S-10#First generation (1982)|Chevrolet S-10]]<br /> (1982-1984, 1991-1993)<br />[[w:GMC S-15|GMC S-15]] (1982-1984)<br />[[w:GMC Sonoma|GMC Sonoma]] (1991-1993)<br />[[w:Chevrolet S-10 Blazer#First generation (1983–1994)|Chevrolet S-10 Blazer]]<br /> (1983-1994 2-d, 1994 4-d)<br />[[w:GMC S-15 Jimmy|GMC S-15 Jimmy]]<br /> (1983-1994 2-d, 1994 4-d)<br />[[w:GMC Typhoon|GMC Typhoon]] (1992-1993)<br />[[w:Oldsmobile Bravada#First generation (1991–1994)|Oldsmobile Bravada]] (1994) ||1906||1994||Complex includes GMC Truck & Coach Division Plants 1, 3, 4, and 5. Plant 1 was originally the plant of Rapid Motor Vehicle Company, one of the 2 main ancestors of the modern GMC Division (the other being Reliance Motor Car Company). Plant 1 was located at 25 Rapid Street and opened in 1906, before Rapid was taken over by GM in 1908-1909. Plant 1 started making Buick 257 & 331 inline-6's in 1931 after Buick stopped making inline-6s after 1930 and switched its entire lineup to straight-8s. The tooling was moved to Plant 1 from the Buick complex in Flint. Buick had been supplying inline-6s to GMC since 1925. In 1933, GMC started making inline-6s of its own design in Plant 1. The medium- and big-block, Group 2 & 3 GMC inline-6s were moved to Building 29 at Pontiac Central in February 1948. Plant 1 was demolished around 1981. Plant 3 opened in 1940 and was located at South Boulevard West and Franklin Road. Plant 3 was used for sheet metal work and material storage at first. Plant 3 later built the [[w:GMC Motorhome|GMC Motorhome]]. In August 1977, the GMC MotorHome was moved from Plant 3 of Pontiac West to Building 29 at Pontiac Central for its final model year of 1978. Plant 3 was demolished around 2005. Plant 4 was located on South Saginaw Street (now Woodward Ave.) Engine production began in Plant 4 in October 1938. The [[w:GMC straight-6 engine|GMC straight-6 engine]] was built there through 1947/1948. Small-block, Group 1 GMC inline-6 engines were made in Plant 4 from October 1938. The small-block, Group 1 GMC inline-6s were moved to Building 29 at Pontiac Central in November 1947. In December 1947, engine manufacturing and machine shops moved from Plants 1 and 4 to Building 29 at Pontiac Central. Plant 4 was also used for material storage. Plant 4 also built the [[w:Chevrolet van|1964-1970 Chevrolet & GMC full-size vans]]. Plant 4 was demolished around 2008. Plant 5 was located on Franklin Road, to the north of Plant 3. Plant 5 was demolished around 2005. After Pontiac Central opened in 1928, Pontiac West focused on machining and component manufacturing rather than vehicle assembly.[https://www.hagerty.com/media/automotive-history/a-gmc-motor-homecoming-50-years-on/] (Paragraph 4) There would be sporadic vehicle production at Pontiac West in the 1960's and 1970's (vans, motorhomes). In the 1980's, vehicle production increased as Pontiac West became one of GM's plants building compact pickups and SUVs. Production ended in 1994. Entire property sold to M1 Concourse in 2014.
|-
| ||Pontiac Foundry||[[w:Pontiac, Michigan|Pontiac, Michigan]]||United States||[[w:Casting|Iron castings]] of engine parts. ||1927||1987||Was part of GM's Central Foundry Division. Was Plant 6 of Pontiac's Assembly complex in Pontiac, Michigan. Demolished in 1995. A U.S. Postal Service distribution center now occupies the approximate area where the foundry used to be.
|-
| ||[[w:Regina Plant|Regina Plant]]||[[w:Regina, Saskatchewan|Regina, Saskatchewan]]||[[w:Canada|Canada]]
|[[w:Chevrolet|Chevrolet]] cars & trucks, Maple Leaf trucks, [[w:Pontiac (automobile)|Pontiac]], [[w:Oldsmobile|Oldsmobile]], [[w:Buick|Buick]]
|1928||1941||Factory office building is located at 1102 8th Avenue while the factory building is behind the office building stretching down Winnipeg Street down to 6th Ave. Production began on Dec. 11, 1928. Production halted in August 1930, restarted in March 1931, then halted again a few months later in 1931. Production restarted in December 1937. In 1941, taken over by the [[w:Government of Canada|Government of Canada]] to produce munitions for World War II as Regina Industries Limited. Auto production never resumed and the property was used by the Canadian Department of National Defense until the mid-1960s. Sold to the Saskatchewan provincial govt. in 1967 and then the Regina city govt. in 1987. Was used by both public- and private-sector tenants. Damaged by a fire on May 3, 2017. In 2020, the City of Regina decommissioned the building and all the tenants were required to move out. Buildings are still standing and have been used by a variety of businesses and organizations. You can still see "GMC" carved in stone above the front entrance to the office building. Office building is designated a Heritage Inventory Property by city of Regina. A related building is down the block at 1260 8th Avenue at the corner of Toronto Street. After the factory closed in 1941, GM still used this building for its regional administrative and parts distribution operations until it moved in 1967.
|-
| ||[[w:GMC (marque)#History|Reliance Motor Truck Co.]]||[[w:Owosso, Michigan|Owosso]], [[w:Michigan|Michigan]]||United States||Reliance trucks (1909-1912)<br> GMC trucks (heavy duty models) (1912-1913)||1909||1913||Plant was located on Michigan Ave. In late 1908, GM bought Reliance Motor Car Co. and reorganized it as Reliance Motor Truck Co. Reliance truck production moved here from Detroit in 1909. In February 1912, the GMC brand replaced the Reliance brand as well as the Rapid brand. In 1913, production was consolidated at the Rapid Street plant of the former Rapid Motor Vehicle Co. in Pontiac, Michigan and the Owosso plant was sold. Plant was later used by American Malleables and later by Mid-West Abrasive Co., a maker of sandpaper. Plant was later extended to S. Washington St.
|-
| ||Saab [[w:Gothenburg|Gothenburg]] Transmission||[[w:Gothenburg|Gothenburg]]||[[w:Sweden|Sweden]]||Pre-GM era:<br />[[w:Saab two-stroke|Saab two-stroke]]<br />GM era:<br />Saab 99/900 manual transmission<br />[[w:F35 transmission|F35 transmission]]<br />[[w:GM F40 transmission|GM F40 transmission]] ||1989||2009||Saab plant. Opened in 1953. Engine production ended in 1968.
GM bought 50% of [[w:Saab Automobile|Saab Automobile]] in 1989 & the other 50% in 2000. Transmission production ended when the 1st gen. 9-5 ended production. GM sold [[w:Saab Automobile|Saab Automobile]] to [[w:Spyker Cars|Spyker Cars]] in February, 2010.
|-
| ||Saab [[w:Sodertalje|Sodertalje]] Engine||[[w:Sodertalje|Sodertalje]]||[[w:Sweden|Sweden]]||Pre-GM era:<br />[[w:Saab B engine|Saab B engine]]<br />GM era:<br />[[w:Saab H engine|Saab H engine]] ||1989||2007||Saab plant. Opened in 1972.
GM bought 50% of [[w:Saab Automobile|Saab Automobile]] in 1989 & the other 50% in 2000. Engine plant sold to [[w:Scania AB|Scania AB]] in 2007. GM sold [[w:Saab Automobile|Saab Automobile]] to [[w:Spyker Cars|Spyker Cars]] in February, 2010.
|-
|1,2,3,4,8||Saab [[w:Trollhättan Assembly|Trollhättan Assembly]]||[[w:Trollhättan|Trollhättan]]||[[w:Sweden|Sweden]]||Pre-GM era:<br />[[w:Saab 92|Saab 92]]<br />[[w:Saab 93|Saab 93]]<br />[[w:Saab 95|Saab 95]]<br />[[w:Saab 96|Saab 96]]<br />[[w:Saab 99|Saab 99]]<br />GM era:<br />[[w:Saab 900|Saab 900]]<br />[[w:Saab 9000|Saab 9000]]<br />[[w:Saab 9-3|Saab 9-3]]<br />[[w:Saab 9-5|Saab 9-5]]<br />[[w:Cadillac BLS|Cadillac BLS]]||1989||2010||Saab plant. Opened in 1947. Also did engine (Saab two-stroke) & transmission production until 1953 when it was relocated to the Gothenburg plant.
GM bought 50% of [[w:Saab Automobile|Saab Automobile]] in 1989 & the other 50% in 2000. Saab also built the 9-3 based BLS for Cadillac. The BLS was not sold in the US or Canada. GM sold [[w:Saab Automobile|Saab Automobile]] to [[w:Spyker Cars|Spyker Cars]] in February, 2010.
|-
| ||Saginaw Malleable Iron||[[w:Saginaw, Michigan|Saginaw, Michigan]]||United States|| ||1919||2007|| Located at 77 W. Center St. Iron castings. HQ of Central Foundry Division. In 1919, Saginaw Malleable Iron and Central Foundry merged with the Jacox division into GM's Saginaw Products Company. In 1928, became the Saginaw Malleable Iron division of GM. Closed in 2007, demolished in 2010. Converted into a park.
|-
| ||Saginaw Nodular Iron||[[w:Saginaw, Michigan|Saginaw, Michigan]]||United States||Steering knuckles, crankshafts, disc brake caliper housings, exhaust manifolds, flywheels, differential carriers, clutch pressure plates||1967||1988|| Located at 2100 Veterans Memorial Parkway. Straddles the City of Saginaw-Buena Vista Township border. Iron castings. Closed in 1988. Later demolished.
|-
| ||Saginaw Parts||[[w:Saginaw, Michigan|Saginaw, Michigan]]||United States|| ||1909||1983|| Located on corner of 6th & Washington Avenues. Opened in 1907 to build the 1908 Rainier. Bought by GM in 1909 as part of its purchase of [[w:Rainier Motor Car Company|Rainier Motor Car Company]]. Reorganized into the [[w:Marquette (automobile)#Company|Marquette Motor Co.]] which still made Rainier brand cars through 1911 as well as parts for Welch and Welch-Detroit cars. In 1912, the Rainier brand was replaced by the Marquette brand, which was said to be a combination of the previous Rainier and Welch-Detroit brands. In February 1912, the company was renamed Peninsular Motor Co. Some late production cars seem to have been badged as Peninsular. All of those activities ended at the end of 1912. In 1917, during World War I, the plant was reopened and used to manufacture mortar shells for the US Ordnance Corps. In 1919, became part of the Saginaw Products Company with this plant becoming the Saginaw Products Company Motor Plant. From 1919-1922, the plant made [[w:Chevrolet Inline-4 engine#224|OHV I4]] engines for [[w:Chevrolet Series FB|Chevrolet Series FB]] and [[w:Oldsmobile Model 43|Oldsmobile Model 43A]]. It was then used as a warehouse. From 1935, it made all different types of auto parts and service parts as Chevrolet Saginaw Service Parts Plant or from 1969, Chevrolet Saginaw Parts Plant. Closed in 1983, demolished in 1984.
|-
| ||Saginaw Steering Gear - Plant 1||[[w:Saginaw, Michigan|Saginaw, Michigan]]||United States||Steering components||1910||1984||Located on 628 North Hamilton St. Originally founded as the Jackson, Church and Wilcox Company (Jacox) in 1906. Bought by GM in 1910. Became the Jackson-Church-Wilcox or Jacox division of GM. In 1919, the Jacox division merged with Saginaw Malleable Iron and Central Foundry into GM's Saginaw Products Company. Became the Saginaw Steering Gear Division in 1928. Closed in 1984. Sold in 1987 to Thomson Industries. Still operates today as Thomson Aerospace & Defense, a brand of Linear Motion LLC, which is owned by the Umbra Group of Italy.
|-
| ||Saginaw Steering Gear - Plant 2||[[w:Saginaw, Michigan|Saginaw, Michigan]]||United States||Steering Gears, pump hoses||1941||2001||Located at 1400 Holmes Street. Affectionately known as "The Gun Plant", it was built in 1941 when the division was contracted to build M1919 machine guns, and M1-Carbines for World War II. After the war, normal steering gear production continued until its closure in 2001. It was demolished in 2002.
|-
| ||Saginaw Steering Gear complex||[[w:Buena Vista Township, Michigan|Buena Vista Township, Michigan]]||United States|| Complete Hydraulic and Electric Power Steering Systems, Halfshafts, Intermediate Drive Shafts||1953||2010||Located at 3900 E. Holland Road. Former Saginaw Steering Gear Division of GM. Saginaw Steering Gear Division renamed Saginaw Division in 1985. Grouped under Delphi Automotive Systems in 1995. Plant 3 opened in 1953, Plant 4 opened in 1956. The sprawling Five-Plant complex (Plants 3-7), division Headquarters and large engineering center, were spun off with Delphi in 1999. GM repurchased the Delphi Steering division from bankrupt Delphi in 2009, renaming it Nexteer Automotive, and then sold the division to [[w:Pacific Century Motors|Pacific Century Motors]] in 2010. The former GM Division now operates as "[[w:Nexteer Automotive|Nexteer Automotive]]", an independent company headquartered at the Saginaw site. Nexteer moved its headquarters to Auburn Hills in 2015.
|-
| ||Saginaw Steering Gear Overseas Corp.||[[w:Hendon|Hendon]], [[w:England|England]]||United Kingdom|| Steering columns, Steering column components (jacket & bracket assemblies), Vacuum pumps, EGR valves||1970 (auto parts)||?||Located on Capitol Way in The Capitol Industrial Park. Originally opened in 1924 as a vehicle assembly plant making Chevrolets (See listing for "GM Ltd."). When Chevrolet production was moved to Luton in 1930, Hendon was used for parts distribution. Later, Frigidaire made appliances at Hendon. In 1970, Hendon began producing steering columns. In 1971, more automotive components began to be produced in place of Frigidaire appliances. In 1979, Hendon became aligned with Saginaw Steering Gear in the US. In 1980, GM sold the Hendon site for redevelopment but leased back an area for construction of a new plant for Saginaw Steering Gear. The new plant opened in 1981. In 1982, GM Ltd. was dissolved and the Hendon plant became part of Saginaw Steering Gear Overseas Corp., part of GM Overseas Corp.
|-
| ||Saginaw Transmission||[[w:Saginaw, Michigan|Saginaw, Michigan]]||United States||Manual Transmissions, Brakes||1921||1999||Located at 2328 E. Genesee Ave. Built 1919–20 for the Michigan Crankshaft Company (originally founded as National Engineering Company), acquired by GM in 1921 and placed under Saginaw Products Company. In 1928, became the Saginaw Crankshaft Division of GM. Transferred to Chevrolet upon the dissolution of the Crankshaft Division in 1931 when crankshaft manufacturing was turned over to the car divisions. Made the "Saginaw" 3 and 4-Speed manual transmissions. It was spun off as part of Delphi in 1999. The plant was sold to [[w:TRW Automotive|TRW Automotive]] in 2007. TRW used the plant to produces brake and suspension components (known as TRW Braking and Suspension). TRW closed this plant in 2014.
|-
|4||[[w:Scarborough Van Assembly|Scarborough Van Plant]]||[[w:Scarborough, Toronto|Scarborough]], [[w:Ontario|Ontario]]||[[w:Canada|Canada]]||[[w:Chevrolet Van#Third generation (1971–1996)|Chevrolet Van]] (1974-1993)<br />[[w:GMC Vandura#Third generation (1971–1996)|GMC Vandura]] (1974-1993)<br />[[w:Chevrolet Sportvan#Third generation (1971–1996)|Chevrolet Sportvan]] (1974-1993)<br />[[w:GMC Vandura#Third generation (1971–1996)|GMC Rally Van]] (1974-1993)<br />||1952<br><br>1974 (Vehicle production)||1993||Located at 1901 Eglinton Avenue East. Originally a [[w:Frigidaire|Frigidaire]] home appliance plant through 1970. In 1960, production of automotive components was added. Production included radios, instrument clusters, horns, shock absorbers, and propshafts. After Frigidaire production ended in 1970, only auto parts were made and the plant name was changed from Frigidaire Products of Canada to Delco Canada. Auto parts production ended in 1973 and the plant was expanded and converted to build full-size vans and renamed Scarborough Van Plant. First van produced on May 23, 1974 (a 1974 Chevy Van 10). After van production began, plant was expanded 5 times over the years. Cutaway production was added for 1975, halted in 1978, and resumed in 1980. One millionth van produced in January 1986 (a GMC model). Closed on May 6, 1993 and operations moved to [[w:Flint Truck Assembly|Flint Truck Assembly]]. Scarborough produced 1,626,313 vans from 1974-1993. Plant demolished and now site of Eglinton Town Centre and Comstock Bus Garage at the southern end of the property.
|-
| ||[[w:Scripps-Booth|Scripps-Booth]]||[[w:Detroit, Michigan|Detroit]], [[w:Michigan|Michigan]]||United States||Scripps-Booth automobiles||1918||1922||Taken over by Chevrolet by the end of 1917 before Chevrolet was part of GM. When Chevrolet became part of GM, Scripps-Booth became part of GM as well. Scripps-Booth then adopted an Oakland chassis and a Northway six-cylinder engine, using parts from other GM divisions. However, a place could not be found for Scripps-Booth in GM's lineup, so GM closed it down in 1922.
|-
|8||[[w:Shreveport Operations|Shreveport Operations]]||[[w:Shreveport, Louisiana|Shreveport, Louisiana]]||United States||[[w:Chevrolet Colorado#First generation (2004)|Chevrolet Colorado]] (2004-2012)<br />[[w:Chevrolet Colorado#First generation (2004)|GMC Canyon]] (2004-2012)<br />[[w:Hummer H3|Hummer H3]] (2006-2010)<br />[[w:Hummer H3#H3T|Hummer H3T]] (2009-2010)<br />[[w:Chevrolet Colorado#Isuzu i-series|Isuzu i-series]] pickup (2006-2008)||1981||2012||Located at 7600 General Motors Blvd. General Motors Blvd. was renamed Antoine Blvd. in 2013. A portion of the complex is now used by Glovis America, a Hyundai Automotive Group subsidiary, for a vehicle logistics and processing center for Hyundai and Kia vehicles. <br />Past models: <br> [[w:Chevrolet S-10 |Chevrolet S-10]] (1982-03), [[w:Chevrolet S-10 EV|Chevrolet S-10 EV]] (1997-1998),<br /> [[w:Chevrolet S-10 Blazer#First generation (1983–1994)|Chevrolet S-10 Blazer]] (1983-1991 2-d),<br /> [[w:GMC S-15|GMC S-15]] (1982-1990), [[w:GMC Sonoma|GMC Sonoma]] (1991-03), [[w:GMC Syclone|GMC Syclone]] (1991),<br /> [[w:Chevrolet S-10 Blazer#First generation (1983–1994)|GMC S-15 Jimmy]] (1983-1991 2-d),<br /> [[w:Isuzu Hombre|Isuzu Hombre]] (1996-'00)
|-
|A||[[w:General Motors South Africa|General Motors South Africa]] Darling Street & Kempston Road plants||[[w:Port Elizabeth, South Africa|Port Elizabeth]]||[[w:South Africa|South Africa]]||[[w:Acadian (automobile)|Acadian]] (from CKD kits supplied from Oshawa and Willow Run)<br />[[w:Beaumont (automobile)|Acadian Beaumont & Beaumont]] (from CKD kits supplied from Oshawa 1966-69)<br />[[w:Chevrolet Series AA Capitol|Chevrolet Series AA Capitol]]<br />[[w:Chevrolet Series AB National|Chevrolet Series AB National]]<br />[[w:Chevrolet Series AC International|Chevrolet Series AC International]]<br />[[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]]<br />[[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]]<br />[[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]]<br />[[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]]<br />[[w:Chevrolet Master|Chevrolet Master]]<br />[[w:Opel Ascona#Export models|Chevrolet Ascona]]<br />[[w:Chevrolet Caprice|Chevrolet Caprice]]<br />[[w:Statesman (automobile)#HJ|Chevrolet Caprice Classic]]<br />[[w:Chevrolet Constantia|Chevrolet Constantia]]<br />[[w:Chevrolet Corvair|Chevrolet Corvair]] (from CKD kits supplied from Oshawa)<br />[[w:Chevrolet Chevair|Chevrolet Chevair]]<br />[[w:Chevrolet Chevelle|Chevrolet Chevelle]]/[[w:Chevrolet Malibu|Chevrolet Malibu]]<br />[[w:Chevrolet Chevy II/Nova|Chevrolet Chevy II/Nova]]<br /> [[w:Chevrolet Nomad#South Africa production (GMSA)|Chevrolet Nomad]]<br /> [[w:Statesman (automobile)#HQ|Chevrolet De Ville]]<br />[[w:Holden HK#South Africa|Chevrolet El Camino<br />Chevrolet El Toro]]<br />[[w:Chevrolet Impala|Chevrolet Impala]]<br />[[w:Holden HK#South Africa|Chevrolet Kommando]]<br />[[w:Chevrolet LUV|Chevrolet LUV]]<br />[[w:Holden EK|Holden EK]]<br />[[w:Holden EJ|Holden EJ]]<br />[[w:Holden EH|Holden EH]]<br />[[w:Holden HD|Holden HD]]<br />[[w:Holden HR|Holden HR]]<br />[[w:Holden Monaro#Export program|Holden Monaro (HT)/Chevrolet SS (HG)]]<br />[[w:Pontiac Parisienne|Pontiac Parisienne]]<br />[[w:Vauxhall Viva#South Africa|Chevrolet Firenza/1300/1900]]<br />[[w:Opel Rekord Series D#ZA|Chevrolet 2500, 3800, 4100]]<br />[[w:Opel Rekord Series E#Chevrolet Rekord|Chevrolet Rekord]]<br />[[w:Opel Ascona#Ascona C (1981–1988)|Opel Ascona C]]<br />[[w:Opel Kadett A|Opel Kadett A]]<br />[[w:Opel Kadett B|Opel Kadett B]]<br />[[w:Opel Kadett#Kadett D (1979–1984)|Opel Kadett D]]<br />[[w:Opel Kadett#Kadett E (1984–1995)|Opel Kadett E/Monza]]<br />[[w:Opel Astra#F|Opel Kadett F]]<br />[[w:Opel Astra#G|Opel Astra G]]<br />[[w:Opel Corsa#Corsa B (S93; 1993)|Opel Corsa B/Corsa Lite]]<br />[[w:Opel Rekord|Opel Rekord]]<br />[[w:Vauxhall Cresta|Vauxhall Cresta]]<br />[[w:Vauxhall Velox|Vauxhall Velox]]<br />[[w:Vauxhall Victor|Vauxhall Victor]]<br />[[w:Vauxhall Viscount|Vauxhall Viscount]]<br />[[w:Vauxhall Viva#Other markets|Vauxhall Viva]]<br />[[w:Isuzu F-Series|Isuzu F-Series]]<br />[[w:Isuzu N-Series|Isuzu N-Series]]<br /> [[w:Isuzu Faster|Isuzu KB]]<br />[[w:Isuzu D-Max|Isuzu KB (D-Max based)]]<br />||1926 (Darling Street)<br />1928 (Kempston Road)||1929 (Darling Street)<br />2017||Also assembled in the pre-WWII era: <br />[[w:Chevrolet|Chevrolet]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Oakland (automobile)|Oakland]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Buick|Buick]]<br />[[w:LaSalle (automobile)|LaSalle]]<br />[[w:Cadillac|Cadillac]]<br />[[w:GMC (automobile)|GMC]]<br />[[w:Vauxhall Motors|Vauxhall]]<br />[[w:Bedford Vehicles|Bedford]]<br />[[w:Opel|Opel]]<br />[[w:Frigidaire|Frigidaire]] appliances.
Also built the [[w:Ranger (automobile)#South Africa|Ranger]].
GM sold the factory to Isuzu in 2017 and left the South African market. Isuzu consolidated its commercial truck production in the Struandale plant which already built Isuzu pickups and the Kempston Road plant ended production on Nov. 30, 2018.
|-
|4||[[w:General Motors South Africa|General Motors South Africa]] Struandale plant||[[w:Port Elizabeth, South Africa|Port Elizabeth]]||[[w:South Africa|South Africa]]||[[w:Chevrolet Spark#Africa|Chevrolet Spark (M300)]]<br />[[w:Opel Corsa#Corsa C (X01; 2000)|Opel Corsa C]]<br />[[w:Chevrolet Montana#South Africa|Opel Corsa Utility/Chevrolet Utility]]<br />[[w:Hummer H3|Hummer H3]]<br />[[w:Isuzu D-Max#Second generation (RT; 2011)|Isuzu KB]]<br />||1996||2017||Struandale was originally a Ford plant opened in 1973 which GM South Africa bought during the time it was known as Delta Motor Corp. in 1994.
GM sold the factory to Isuzu in 2017 and left the South African market. Struandale absorbed Isuzu pickup production beginning with the 2nd generation D-Max around 2013 & Isuzu commercial truck ([[w:Isuzu F-Series|Isuzu F-Series]] & [[w:Isuzu N-Series|Isuzu N-Series]]) production in Jan. 2019. Isuzu KB was renamed D-Max in South Africa in 2018, aligning with the rest of the world.
|-
| ||[[w:General Motors South Africa|General Motors South Africa]] Engine plant - Aloes||[[w:Port Elizabeth, South Africa|Port Elizabeth]]||[[w:South Africa|South Africa]]||[[w:Chevrolet 153 4-cylinder engine|Chevrolet 153 4-cylinder engine]]<br />[[w:Chevrolet Turbo-Thrift engine|Chevrolet Turbo-Thrift inline-6]]<br />[[w:Vauxhall Viva|Vauxhall Viva]] inline-4||1966||1999?||
|-
|C (1965-1982)<br /><br /> U (1964 [[w:Chevrolet|Chevrolet]])<br /><br />S (1960-1964 [[w:Pontiac (automobile)|Pontiac]])<br /><br />C (1937-1964 [[w:Oldsmobile|Oldsmobile]] and 1936-1959 [[w:Pontiac (automobile)|Pontiac]])<br /><br />2 (1938-1964 <br> [[w:Buick|Buick]]) ||[[w:South Gate Assembly|South Gate Assembly]]||[[w:South Gate, California|South Gate, California]]||United States||[[w:Chevrolet Cavalier|Chevrolet Cavalier]] (1982) <br /> [[w:Cadillac Cimarron|Cadillac Cimarron]] (1982)||1936||1982|| Located at 2700 Tweedy Blvd. South Gate Assembly was the 1st GM multi-brand assembly plant, assembling Buick, Oldsmobile, and Pontiac models. The first finished cars were produced in May 1936. It was operated by GM's Southern California Division through 1943. Automobile production ended in Feb. 1942. During WWII, it produced the M5 and M5A1 Stuart tanks from July 1942-August 1943 in cooperation with Cadillac Division which held the contract to build the tank. It also provided a proof range for Army Ordnance to test various types of machine gun and cannon shells. Space was also provided for Army Ordnance to modify M4 medium tanks. Also built were gun shields and deck houses for the Navy. When M5A1 production ceased in August 1943, the plant was leased to Douglas Aircraft Co. until the end of the war for aircraft parts production. After the war ended, in 1945, Southgate & Linden were both placed in a new division called the [[w:Buick-Oldsmobile-Pontiac Assembly Division|Buick-Oldsmobile-Pontiac Assembly Division]]. South Gate began making Chevrolet full-size cars for 1964. BOP Assembly Division became GM Assembly Division in 1965. South Gate was converted to build H-body small cars like the Vega for 1975 but the plant was switched back to full-size cars for 1977, building Chevy, Oldsmobile, & Buick B-bodies. In 1979, South Gate Assembly became the second plant (the 1st was Linden, NJ in 1971) outside Cadillac's home plant in Detroit to assemble Cadillacs when it began to assemble C-body Cadillacs like the DeVille instead of Oldsmobile & Buick B-bodies. The plant was then idled in March 1980. It was again switched to build small cars for 1982, this time the J-body. Slow sales and efforts to reduce air quality issues resulted in plant closure, with production ending on March 23, 1982. Plant demolished and site used for 3 new schools for L.A. School District and the South Gate Industrial and Business Park at the southern end of the property.<br /> Unibody B-O-P "Y"-body [[w:Buick Special#1961–1963|Buick Special]]/[[w:Buick Skylark#First generation (1961–1963)|Buick Skylark]] (1962-1963), [[w:Oldsmobile F-85#First generation (1961)|Oldsmobile F-85/<br> Cutlass]] (1962-1963), [[w:Pontiac Tempest#First generation (1961–1963)|Pontiac Tempest]]/[[w:Pontiac LeMans#First generation (1961–1963)|Pontiac LeMans]] (1962-1963) added to B-& C-body mix 1961-63; replaced by [[w:General Motors B platform|Chevrolet B-body]] for 1964; [[w:GM H platform (RWD)|GM H platform (RWD)]]: [[w:Chevrolet Vega|Chevrolet Vega]] (1975), [[w:Chevrolet Monza|Chevrolet Monza]] (1975-1976), [[w:Pontiac Astre|Pontiac Astre]] (1975), [[w:Pontiac Sunbird#First generation (1976–1980)|Pontiac Sunbird]] (1976), [[w:Oldsmobile Starfire#Second generation (1975–1980)|Oldsmobile Starfire]] (H-body) (1976), [[w:Buick Skyhawk#First generation (1975–1980)|Buick Skyhawk]] (1976); [[w:Buick Centurion|Buick Centurion]] (1971-1973); [[w:Buick Century|Buick Century]] (1936-1942, 1954-1958); [[w:Buick Electra|Buick Electra]] (1959-1963); [[w:Buick Estate#1970|Buick Estate]] (1970-1973); [[w:Buick Invicta|Buick Invicta]] (1959-1962); [[w:Buick LeSabre|Buick LeSabre]] (1959-1974, 1977-1978); [[w:Buick Roadmaster|Buick Roadmaster]] (1947-1949, 1953-1958); [[w:Buick Special|Buick Special]] (1936-1958); [[w:Buick Super|Buick Super]] (1940-1958); [[w:Buick Wildcat|Buick Wildcat]] (1963-1970); [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1964-1974); [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-1974, 1977-80); [[w:Chevrolet Impala|Chevrolet Impala]] (1964-1974, 1977-1980); [[w:Oldsmobile 88|Oldsmobile 88]] (1949-1970, 1977-1978); [[w:Oldsmobile 98|Oldsmobile 98]] (1941-63); [[w:Oldsmobile Jetstar I|Oldsmobile Jetstar I]] (1964-1965); [[w:Oldsmobile Starfire#First generation (1961–1966)|Oldsmobile Starfire]] (1961-1966); [[w:Pontiac 2+2|Pontiac 2+2]] (1964-1967); [[w:Pontiac Bonneville|Pontiac Bonneville]] (1958-1970, 1972-1973); [[w:Pontiac Catalina|Pontiac Catalina]] (1959-1973); [[w:Pontiac Chieftain|Pontiac Chieftain]] (1949-1953, 1955-1958); [[w:Pontiac Executive|Pontiac Executive]] (1967-1968); [[w:Pontiac Grand Prix|Pontiac Grand Prix]] (1962-68); [[w:Pontiac Star Chief|Pontiac Star Chief]] (1955-1958, 1960, 1962, 1966); [[w:Pontiac Ventura#1960–1970|Pontiac Ventura]] (1960-1961); [[w:Cadillac Deville#Fifth generation (1977–1984)|Cadillac Deville]] (1979-1980).
|-
| ||[[w:St. Catharines Components Plant|St. Catharines Components Plant]]||[[w:St. Catharines, Ontario|St. Catharines, Ontario]]||[[w:Canada|Canada]]||Engine components<br />Transmissions<br />Transmission components<br />Starter motors<br />Alternators<br /> Final drive assemblies<br /> Axles<br />Steering wheels<br />Steering gear<br />Shock absorbers<br />Brakes<br />Bearings<br />Horns<br />Vehicle Radios<br />Fractional horsepower motors for appliances||1929||2010||Was located at 285 Ontario Street. Originally McKinnon Dash and Metal Work Ltd., which opened this site in 1900. In 1917, the company was renamed McKinnon Industries, Ltd. Taken over by GM on March 29, 1929. In 1963, fractional horsepower motors for appliances were moved to the GM Diesel plant in London, Ontario. In 1964, vehicle radios, horns, and shocks were moved to the Scarborough plant followed by propshafts in 1966. In 1969, McKinnon Industries Ltd. was integrated into GM Canada rather than being a separate subsidiary. In 1990, the Axle Plant is officially renamed Components Plant. Permanently closed in 2010 as part of GM's restructuring plans. All operations were transferred to [[w:St. Catharines Engine Plant|St. Catharines Engine Plant]]. Some of the Components Plant was demolished in 2016 and the site will be re-developed for mixed-use residential and commercial development.
|-
| ||St. Catharines Foundry||[[w:St. Catharines, Ontario|St. Catharines, Ontario]]||[[w:Canada|Canada]]||[[w:Casting|Iron casting]] of engine parts||1952||1995|| Was located at 285 Ontario Street. Operated as part of GM subsidiary McKinnon Industries, Ltd. until 1969 when it became "General Motors of Canada Limited, St. Catharines". Aligned with GM's Central Foundry Division in 1989.
|-
|S <br />(1952 [[w:GMC (automobile)|GMC]] and 1953-1987)<br /><br />3 <br />(1928-1952 [[w:Chevrolet|Chevrolet]])||[[w:St. Louis Truck Assembly|St. Louis Truck Assembly]]||[[w:St. Louis, Missouri|St. Louis, Missouri]]||United States ||[[w:Chevrolet C/K|Chevrolet C/K]] (1960-1986)<br />[[w:Chevrolet C/K (third generation)|GMC C/K (Rounded Line)]] (1973-1986)<br />[[w:Chevrolet C/K (third generation)#R/V-Series (1987–1991)|Chevrolet R/V]] (1987 only)<br />[[w:Chevrolet C/K (third generation)#R/V-Series (1987–1991)|GMC R/V]] (1987 only)||1920<ref>{{cite web|url=https://www.autonews.com/article/20111031/CHEVY100/310319998/built-across-the-nation|author=James B. Treece|title=Built across the nation|publisher=Autonews.com|date=October 31, 2011}}</ref>||1987||Located at 3809 N. Union Blvd. Chevrolet had previously licensed [[w:Gardner (automobile)|Gardner Buggy Co.]] to assemble its cars in St. Louis in 1915. That was replaced by Chevrolet's own St. Louis plant on Union Blvd. Built 149,135 [[w:GMC CCKW 2½-ton 6×6 truck|GMC CCKW 6x6 trucks]] & 6,748 [[w:DUKW|DUKW]] amphibious vehicles during WWII. Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. St. Louis Assembly joined the GM Assembly Division in 1971. Operated 3 assembly lines: car line, truck line, and the Corvette line. 695,214 Corvettes were built from 1954-1981 in the old Fisher Body Mill Building that had been used to assemble wooden bodies in earlier years and was converted to Corvette production. First 1954 Corvette was built in St. Louis on December 28, 1953. Last Corvette built in St. Louis was built July 31, 1981. Chevy Caprice & Impala production ended on August 1, 1980 and the main car line closed down. Was a Truck and Bus Group plant from 1982, only making full-size pickups. Closed August 7, 1987. The second-to-last vehicle produced was a GMC R1500 regular cab, long bed pickup while the last vehicle produced was a Chevy pickup. The old Fisher Body Mill Building where Corvettes were built was demolished in 1992. Some of the main assembly facility was demolished and the remainder was renovated to become the Union Seventy Center. The remainder of the site, roughly 118 acres, was demolished and replaced with trees, grass, a pond, & new access roads. Property is now the Union Seventy Center, an industrial warehouse and distribution campus used by several different tenants. <br />[[w:Chevrolet Series 490|Chevrolet Series 490]]<br /> [[w:Chevrolet Superior|Chevrolet Superior]]<br />[[w:Chevrolet Series AA Capitol|Chevrolet Series AA Capitol]]<br />[[w:Chevrolet Series AB National|Chevrolet Series AB National]]<br />[[w:Chevrolet Series AC International|Chevrolet Series AC International]]<br />[[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]]<br />[[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]]<br />[[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]]<br />[[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]]<br />[[w:Chevrolet Master|Chevrolet Master]], [[w:Chevrolet Deluxe|Chevrolet Deluxe]]<br />[[w:Chevrolet Stylemaster|Chevrolet Stylemaster]], [[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]], <br />[[w:Chevrolet 150|Chevrolet 150]] (1953-1957), [[w:Chevrolet 210|Chevrolet 210]] (1953-1957), [[w:Chevrolet AK Series|Chevrolet AK Series]], [[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1947-1955), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1970), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-1970), [[w:Chevrolet K5 Blazer#1969–1972|Chevrolet K5 Blazer]] (1969-1972), [[w:Chevrolet Corvair|Chevrolet Corvair Forward Control]] (1961-1965), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-1980), [[w:Chevrolet Corvette|Chevrolet Corvette]] (1954-1981), [[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958), [[w:Chevrolet El Camino#First generation (1959–1960)|Chevrolet El Camino]] (1959-1960), [[w:Chevrolet Impala|Chevrolet Impala]] (1958-1980), [[w:Chevrolet Nomad|Chevrolet Nomad]] (1955-1957), [[w:Chevrolet Suburban|Chevrolet Suburban]] (1956, 1959, 1963-1967), [[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959), [[w:Chevrolet C/K (second generation)|GMC C/K (Action Line)]] (1967-1972), [[w:Chevrolet K5 Blazer#1969–1972|GMC Jimmy]] (1970-1972), [[w:GMC New Design|GMC New Design]] (1953-1954), [[w:GMC Suburban|GMC Suburban]] (1947-1955, 1967-1972)
|-
|2||[[w:Sainte-Thérèse Assembly|Ste. Thérèse Assembly]]||[[w:Boisbriand, Quebec|Boisbriand, Quebec]]||[[w:Canada|Canada]]||[[w:Chevrolet Camaro (fourth generation)|Chevrolet Camaro]] (1993-2002)<br />[[w:Pontiac Firebird#Fourth generation (1993–2002)|Pontiac Firebird]] (1993-2002)||1966||2002||Located at 2500 Boulevard De la Grande-Allée. <br />Past models:<br> [[w:Chevrolet Celebrity|Chevrolet Celebrity]] (1987-90)<br />[[w:Oldsmobile Cutlass Ciera|Oldsmobile Cutlass Ciera]] (1988-1991)<br />[[w:Oldsmobile Cutlass#Fifth-generation (intermediate) 1978–1988|Oldsmobile Cutlass/Cutlass Supreme]] (1978-1987)<br />[[w:Oldsmobile 442|Oldsmobile Cutlass 442]] (1979)<br />[[w:Pontiac Bonneville#Seventh generation (1982–1986)|Pontiac Bonneville]] (1983-86)<br />[[w:Pontiac Grand Prix#Fifth generation (1978–1987)|Pontiac Grand Prix]] (1978-1981, 1983-1987)<br />[[w:Pontiac Grand Prix#1986|Pontiac Grand Prix 2+2]] (1986)<br />[[w:Chevrolet Vega|Chevrolet Vega]] (1973-1974)<br />[[w:Pontiac Astre|Pontiac Astre]] (1973-1974)<br />[[w:Chevrolet Monza|Chevrolet Monza]] (1975-1977)<br />[[w:Pontiac Sunbird#First generation (1976–1980)|Pontiac Sunbird]] (1977)<br />[[w:Oldsmobile Starfire#Second generation (1975–1980)|Oldsmobile Starfire]] (1975-77)<br />[[w:Buick Skyhawk#First generation (1975–1980)|Buick Skyhawk]] (1975-1977)<br />[[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1967-1970)<br />[[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1967-70)<br />[[w:Chevrolet Impala|Chevrolet Impala]] (1967-1970)<br />[[w:Chevrolet Caprice|Chevrolet Caprice]] (1967-1970)<br />[[w:Pontiac Catalina|Pontiac Catalina]] (1970-1972)<br /> [[w:Pontiac Grand Ville|Pontiac Grand Ville]] (1971).
Plant demolished and site re-developed as a commercial and residential site known as Faubourg Boisbriand and the Centre for Sports Excellence.
|-
| ||Strasbourg Transmission||[[w:Strasbourg|Strasbourg]]||[[w:France|France]]||[[w:GM 6L50 transmission|6L45/6L50]] 6-speed RWD automatic transmissions||1968||2013||Past products: [[w:GM 5L40-E transmission|5L40]], [[w:GM 4L30-E transmission|4L30]], [[w:Turbo-Hydramatic 180|TH180/3L30]] RWD automatic transmissions
Also supplied 4-, 5-, & 6-speed RWD auto. transmissions to [[w:BMW|BMW]].<br /> Also supplied 3-speed RWD auto. transmissions to Fiat, Peugeot ([[w:Peugeot 604|604]]), & Rover ([[w:Rover SD1|SD1]]).
Sold to Punch Metals International in 2013, which renamed the unit as Punch Powerglide Strasbourg.<ref>{{Cite web|url=https://gmauthority.com/blog/2012/12/general-motors-sells-strasbourg-plant-to-punch-metals-international/|title = General Motors Sells Strasbourg Plant to Punch Metals International|author=Alex Luft|publisher=GMAuthority.com|date = 22 December 2012}}</ref> In 2014, Punch Powerglide Strasbourg began producing [[w:ZF 8HP transmission|8HP 8-speed automatic transmissions]] for [[w:ZF Friedrichshafen|ZF Friedrichshafen]] in addition to the GM 6L50 6-speed automatic transmission. In 2023, Punch Powerglide Strasbourg was renamed Dumarey Powerglide Strasbourg.
|-
| ||General Motors Suisse AG||[[w:Biel|Biel]]||[[w:Switzerland|Switzerland]]||[[w:Chevrolet|Chevrolet]] 1936-1941, 1946-1968<ref>{{cite web|title=What's Wrong With This Picture? And What's Very Right With the Other Ones? They Do Things a Bit Differently In Switzerland|date=15 August 2020 |at=see 20th comment down from 8-15-20 5:59 pm|url=https://www.curbsideclassic.com/blog/qotd/whats-wrong-with-this-picture-and-whats-very-right-with-the-other-ones-they-do-things-a-bit-differently-in-switzerland/}}</ref><br />[[w:Pontiac (automobile)|Pontiac]] 1937-1939, 1946-1959 (None produced in 1955-1956)<br />[[w:Oldsmobile|Oldsmobile]] 1936-1940, 1947-1958<br />[[w:Buick|Buick]] 1936-1940, 1946-1958<br />[[w:LaSalle (automobile)|LaSalle]] 1936 <br />[[w:Cadillac|Cadillac]] 1938-1940<br />[[w:Opel|Opel]] 1936-1941, 1950-1975<br />[[w:Vauxhall Motors|Vauxhall]] 1936-1940, 1946-1971<br />[[w:Ranger (automobile)#Europe|Ranger]] 1970-1975 ||1936||1975|| First car off the line was a [[w:Buick Series 40|Buick Model 41]] on February 5, 1936. Other prewar cars built include the [[w:Buick Series 90|Buick Series 90]] & [[w:Opel P4|Opel P4]]. GM rented the factory from the city council until they bought it on Feb. 20, 1947. Closed August 14, 1975. Last car was an [[w:Opel Rekord D|Opel Rekord D]]. A total of 329,864 cars were assembled. Regular as well as customized vehicles in small series were made like drawing vehicles for the [[w:Swiss Armed Forces|Swiss Armed Forces]]: An open 6-seater [[w:Chevrolet|Chevrolet]] Platform combined with an Opel 2.5L I-6 cylinder; after World War II those "Swiss" cars were also offered to the public as limousines. As well, GM produced luxury upgraded vehicles for the European market like the [[w:Opel Kapitän|Opel Kapitän]], [[w:Opel Rekord P1#Swiss assembly|Rekord]] "Ascona Edition", and the Kadett-based [[w:Opel Kadett B#Opel Ascona (modified Kadett B assembled in Biel, Switzerland)|Opel Ascona 1700]] up to the early 1970s. The [[w:Ranger (automobile)#Europe|Ranger]] was invented by using [[w:Vauxhall Motors|Vauxhall]] structures on an [[w:Opel Rekord C|Opel Rekord C]] body. Also built the first generation [[w:Chevrolet Camaro (first generation)|Chevrolet Camaro]], [[w:Chevrolet Chevelle|Chevrolet Chevelle]], [[w:Chevrolet Chevy II / Nova|Chevrolet Chevy II / Nova]], & the [[w:Chevrolet Corvair|Chevrolet Corvair]] (from CKD kits supplied from Oshawa). Also built the [[w:Vauxhall Victor|Vauxhall Victor]] and the special Victor Riviera as well as the [[w:Vauxhall Cresta|Vauxhall Cresta]] and [[w:Vauxhall Viscount|Vauxhall Viscount]]. Afterwards the plant was used as GM's European central spare parts warehouse until 1992. Most buildings still exist, they now house a [[w:Coop (Switzerland)|Coop]] mall.
|-
| ||SynergyCells||[[w:New Carlisle, Indiana|New Carlisle, Indiana]]||United States||Was supposed to make NCA (Nickel Cobalt Aluminum Oxide) type lithium-ion battery cells for EV's||Was scheduled to open in 2027|| || Originally owned and constructed by SynergyCells, a 49.99/50.01 joint venture between General Motors and [[w:Samsung SDI|Samsung SDI]] established in 2024. GM sold its stake in the plant to partner Samsung SDI in 2026 before the plant opened. Located at 56115 Larrison Road (also referred to as 31949 SR 2)
|-
|T||[[w:General Motors India|Talegaon]]||[[w:Talegaon|Talegaon]], [[w:Pune district|Pune district]], [[w:Maharashtra|Maharashtra]]||[[w:India|India]]||[[w:Chevrolet Spark|Chevrolet Spark]]<br />[[w:Chevrolet Beat|Chevrolet Beat]]<br />[[w:Chevrolet Sail#Second generation (2010)|Chevrolet Sail U-VA]] (hatchback)<br />[[w:Chevrolet Sail|Chevrolet Sail]]||2008||2020||Part of [[w:General Motors India|GM India]]. Production began in September 2008. Closed December 24, 2020. [[w:Hyundai Motor India|Hyundai Motor India]] signed a deal to buy the Talegaon plant from GM in August 2023 and completed the deal to buy the plant in January 2024. After extensive renovations and upgrades, Hyundai reopened the plant in October 2026. The Hyundai plant now includes an engine plant in addition to the vehicle assembly plant.
|-
|T (1953-1996)<br /><br />2 (1928-1952 [[w:Chevrolet|Chevrolet]])||[[w:North Tarrytown Assembly|North Tarrytown Assembly]]||[[w:Sleepy Hollow, New York|North Tarrytown, New York]]||United States||Past models:<br />[[w:Chevrolet 490|Chevrolet 490]]<br />[[w:Chevrolet Superior|Chevrolet Superior]]<br />[[w:Chevrolet Series AA Capitol|Chevrolet Series AA Capitol]]<br />[[w:Chevrolet Series AB National|Chevrolet Series AB National]]<br />[[w:Chevrolet Series AC International|Chevrolet Series AC International]]<br />[[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]]<br />[[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]]<br />[[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]]<br />[[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]]<br />[[w:Chevrolet Master|Chevrolet Master]]<br />[[w:Chevrolet Deluxe|Chevrolet Deluxe]]<br />[[w:Chevrolet Stylemaster|Chevrolet Stylemaster]]<br /> [[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]]<br />[[w:Chevrolet AK Series|Chevrolet AK Series]]<br />[[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1947-1955)<br />[[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959) <br />[[w:Chevrolet C/K (first generation)|Chevrolet C/K (Gen.1)]] (1960-1966)<br />[[w:Chevrolet C/K (second generation)|Chevrolet C/K (Action Line)]] (1967-1972)<br />[[w:Chevrolet 150|Chevrolet 150]] (1953-1957)<br />[[w:Chevrolet 210|Chevrolet 210]] (1953-1957)<br /> [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1974)<br />[[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-1970)<br />[[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-1974)<br />[[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958)<br />[[w:Chevrolet Impala|Chevrolet Impala]] (1958-1974)<br />[[w:Chevrolet Nomad|Chevrolet Nomad]] (1955-1957)<br />[[w:Chevrolet Suburban|Chevrolet Suburban]] (1950, 1952, 1963-1964, 1966)<br />[[w:Chevrolet C/K (second generation)|GMC C/K (Action Line)]] (1967-1972)<br />[[w:Chevrolet Nova|Chevrolet Nova]] (1975-1979)<br />[[w:Chevrolet Citation|Chevrolet Citation]] (1980-1985)<br />[[w:Pontiac Ventura#1971–1977|Pontiac Ventura]] (1975-1977)<br />[[w:Pontiac Phoenix#First generation (1977–1979)|Pontiac Phoenix (rwd X-body)]] (1978-1979)<br />[[w:Pontiac Phoenix#Second generation (1980–1984)|Pontiac Phoenix (fwd X-body)]] (1980-1984)<br />[[w:Pontiac 6000|Pontiac 6000]] (1985-1989)<br />[[w:Buick Skylark#Fourth generation (1975–1979)|Buick Skylark (rwd X-body)]] (1976-1979)<br />[[w:Buick Skylark#Fifth generation (1980–1985)|Buick Skylark (fwd X-body)]] (1980-1983)<br />[[w:Buick Century#Fifth generation (1982–1996)|Buick Century]] (1985-1989)<br />[[w:Chevrolet Lumina APV|Chevrolet Lumina APV]] (1990-1993)<br />[[w:Chevrolet Lumina Minivan|Chevrolet Lumina Minivan]] (1994-1996)<br />[[w:Pontiac Trans Sport#First generation (1990-1996)|Pontiac Trans Sport]] (1990-1996)<br />[[w:Oldsmobile Silhouette#First generation (1990–1996)|Oldsmobile Silhouette]] (1990-1996) ||1918 (as part of GM)||1996|| Located at 199 Beekman Avenue. Originally built by [[w:Mobile Company of America|Mobile Company of America]]. In 1904, plant was sold to Maxwell-Briscoe, which later became [[w:Maxwell Motor Company|Maxwell Motor Company]]. Chevrolet bought the complex in 1914, before Chevrolet was part of GM. The first Chevrolet produced in Tarrytown was the [[w:Chevrolet 490|Chevrolet 490]]. The plant became part of GM when Chevrolet became part of GM in 1918. The Fisher Body side of the plant became part of GM's Eastern Aircraft Division during World War II and assembled the wings, center section, trailing edges, motor mount, cabin, windshield, & upholstery for Avenger bombers & Wildcat fighters. Built the 50 millionth Chevrolet, a white 1963 Impala SS on June 10, 1963. Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. Tarrytown Assembly joined the GM Assembly Division in 1968. Passenger car production ended on Feb. 3, 1989. Plant joined Truck and Bus Group for 1990 when it was converted to build GM's new trio of fwd minivans. Plant closed in June 1996. Minivan production moved to [[w:Doraville Assembly|Doraville Assembly]] for 1997. North Tarrytown changed its name to Sleepy Hollow in December 1996. Plant was demolished. Site being redeveloped as Edge-on-Hudson, a mixed use residential/retail/office/park space.
|-
|H||[[w:General Motors Thailand|General Motors Thailand]] Ltd.||Pluak Daeng, [[w:Rayong province|Rayong province]]||[[w:Thailand|Thailand]]||[[w:Chevrolet Colorado|Chevrolet/Holden Colorado]] (RC/RG) <br /> [[w:Chevrolet Trailblazer (SUV)#RG|Chevrolet/Holden Trailblazer & Holden Colorado 7]] (RG)<br />[[w:Chevrolet Cruze|Chevrolet Cruze]]<br />[[w:Daewoo Lacetti|Chevrolet Optra]]<br /> [[w:Daewoo Kalos|Chevrolet Aveo]]<br /> [[w:Daewoo Winstorm|Chevrolet/Holden Captiva]]||2000||2020||Past Models:<br /> [[w:Opel Zafira#Zafira A (1999)|Opel/Vauxhall/Chevrolet Zafira]]<br /> [[w:Opel Zafira#Zafira A (1999)|Holden Zafira (TT)]]<br /> [[w:Subaru Traviq|Subaru Traviq]], [[w:Isuzu D-Max#First generation (RA, RC; 2002)|Isuzu D-Max]],<br> [[w:Alfa Romeo 156|Alfa Romeo 156]] [https://www.just-auto.com/news/thailand-gm-to-make-alfa-156-in-thailand/]<br /> Sold to [[w:Great Wall Motors|Great Wall Motors]] in 2020.<ref>{{Cite web|url=https://gmauthority.com/blog/2020/09/sale-of-gm-rayong-plant-to-great-wall-motors-confirmed/|title=Sale of GM Rayong Plant to Great Wall Motors Confirmed|author=Sam McEachern|publisher=GMAuthority.com|date=30 September 2020}}</ref>
|-
| ||[[w:General Motors Thailand|General Motors Powertrain (Thailand) Ltd.]]||Pluak Daeng, [[w:Rayong province|Rayong province]]||[[w:Thailand|Thailand]]||2.5L ([[w:List of VM Motori engines#R 425 DOHC|R 425 DOHC]]) & 2.8L ([[w:List of VM Motori engines#R 428 DOHC|R 428 DOHC]] & [[w:List of VM Motori engines#A 428 DOHC|A 428 DOHC]]) turbodiesel I4 engines||2011||2020|| Sold to [[w:Great Wall Motors|Great Wall Motors]] in 2020.<ref>{{Cite web|url=https://gmauthority.com/blog/2020/09/sale-of-gm-rayong-plant-to-great-wall-motors-confirmed/|title=Sale of GM Rayong Plant to Great Wall Motors Confirmed|author=Sam McEachern|publisher=GMAuthority.com|date=30 September 2020}}</ref>
|-
| ||Three Rivers||[[w:Three Rivers, Michigan|Three Rivers]], [[w:Michigan|Michigan]]||United States||Rwd Automatic transmissions, propshafts||1979||1994||Located at 1 Manufacturing Way (formerly 1 Hydramatic Drive) off W. Hoffman St. GM bought the closed plant from Continental Can Co. Part of GM St. Joseph County Operations & GM Hydramatic Division. The Hydramatic Division merged with the GM Engine Division to form GM Powertrain in 1991-1992. Sold to [[w:American Axle|American Axle & Manufacturing Inc.]] in 1994.
|-
| ||[[w:Toledo Transmission|Toledo Transmission]]||[[w:Toledo, Ohio|Toledo, Ohio]]||United States||Transmissions, Gears||1916||1957||Located at 900 W. Central Ave. Acquired from Warner Gear Co. by Chevrolet in 1916 before Chevrolet was part of GM. The plant became part of GM when Chevrolet became part of GM in 1918. During WWII, produced truck transfer cases and transmissions for four- and six-wheel-drive military trucks. Replaced by the current Toledo Transmission plant on Alexis Road in 1956. A brick smokestack that says "CHEVROLET" on it is a remnant of this plant and can still be seen today at the intersection of Maplewood Ave. and Arcadia Ave. It is similar to the more famous smokestack that says "OVERLAND", a remnant of the old Willys-Overland Jeep plant, which is only a short distance away from the Chevrolet smokestack.
|-
|M||Toluca Assembly||[[w:Toluca|Toluca]]||[[w:Mexico|Mexico]]||[[w:Chevrolet Kodiak|Chevrolet Kodiak]]||1995<ref>{{cite news|author=Thomas H. Klier, James Rubenstein|title=Mexico’s Growing Role in the Auto Industry Under NAFTA: Who Makes What and What Goes Where|url=https://www.chicagofed.org/publications/economic-perspectives/2017/6.|publisher=Federal Reserve Bank of Chicago, Economic Perspectives, Vol. 41, No. 6|at=see table 11 and footnotes right under table 11|date=September 2017}}</ref>||2008||[[w:Chevrolet C/K|Chevrolet C/K]], [[w:Chevrolet C/K (fourth generation)#C3500HD (1991–2002)|Chevrolet/GMC C3500HD]] (US: 2001-2002), [[w:Chevrolet Silverado#First-generation Silverado / second-generation Sierra (GMT800; 1999)|Chevrolet Silverado]]
|-
| ||Tonawanda Forge||[[w:Tonawanda (town), New York|Tonawanda]], [[w:New York (state)|New York]]||United States||Forged metal components||c.1950||1994||Located at 2390-2392 Kenmore Ave. Sold to [[w:American Axle|American Axle & Manufacturing Inc.]] in 1994. Closed in 2008, subsequently demolished.
|-
| ||Tonawanda Foundry||[[w:Tonawanda (town), New York|Tonawanda]], [[w:New York (state)|New York]]||United States||[[w:Casting|Iron castings]] of engine parts, brake drums. ||1954||1984||Was located on River Road. Was a Chevrolet Foundry. Was part of GM's Central Foundry Division.
|-
|Z||General Motors Turkiye Ltd.||[[w:Torbali|Torbali]], [[w:Izmir Province|Izmir Province]]||[[w:Turkey|Turkey]]||[[w:Opel Vectra|Opel Vectra]] A & B||1990||2000||[[w:Adam Opel AG|Opel plant]]. Converted into a spare parts warehouse.
|-
| ||[[w:Ultium#Production|Ultium Cells LLC - Lansing]]||[[w:Delta Township, Michigan|Delta Township, Michigan]]||United States||Was supposed to make Ultium lithium-ion battery cells for EV's||Was scheduled to open in late 2024 or in 2025|| || Originally owned and constructed by Ultium Cells LLC, a 50/50 joint venture between General Motors and [[w:LG Energy Solution|LG Energy Solution]]. This was supposed to be Ultium Cells' third plant but GM sold its stake in the plant to partner LG Energy Solution in 2025 before the plant opened. Located at 7111 Davis Hwy. It is adjacent to GM's Lansing Delta Township Assembly plant.
|-
| ||General Motors Uruguaya SA||[[w:Sayago|Sayago]], [[w:Montevideo|Montevideo]]||[[w:Uruguay|Uruguay]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Opel Kadett|Opel Kadett]]<br />[[w:Opel Rekord|Opel Rekord]]<br />[[w:Bedford Vehicles|Bedford trucks]]||1962||1986||
|-
|L (1953-1992)<br /><br />20 (1947-1952 [[w:Chevrolet|Chevrolet]])||[[w:Van Nuys Assembly|Van Nuys Assembly]]||[[w:Van Nuys, California|Van Nuys, California]]||United States||[[w:Chevrolet Camaro|Chevrolet Camaro]] (1967-1971, 1978-1992)<br />[[w:Pontiac Firebird|Pontiac Firebird]] (1968-1971, 1978-1992) ||1947||1992||Located at 8000 Van Nuys Blvd. Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. Van Nuys Assembly joined the GM Assembly Division in 1968. Demolished in 1993. Redeveloped into "The Plant", a retail and industrial complex that also includes LAPD and LAFD stations.<br />Past models: [[w:Buick Apollo|Buick Apollo]] (1973-1975), [[w:Buick Skylark#Fourth generation (1975–1979)|Buick Skylark]] (1975-1977), [[w:Chevrolet 150|Chevrolet 150]] (1953-1957), [[w:Chevrolet 210|Chevrolet 210]] (1953-1957), [[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1948-1955), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1969), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-1969), [[w:Chevrolet C/K (first generation)|Chevrolet C/K]] (1960-1966), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-1969), [[w:Chevrolet Chevelle|Chevrolet Chevelle]] (1964, 1970-1972), [[w:Chevrolet Corvair|Chevrolet Corvair]] (1963, 1965-1966), [[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958), [[w:Chevrolet El Camino|Chevrolet El Camino]] (1959-1960, 1964, 1970-1972), [[w:Chevrolet Impala|Chevrolet Impala]] (1958-1969), [[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1970-1972), [[w:Chevrolet Nomad|Chevrolet Nomad]] (1955-1957), [[w:Chevrolet Nova|Chevrolet Nova]] (1972-1977), [[w:Chevrolet Suburban|Chevrolet Suburban]] (1952, 1955, 1959), [[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959), [[w:GMC Sprint|GMC Sprint]] (1971-1972), [[w:Oldsmobile Omega|Oldsmobile Omega]] (1973-1977), [[w:Pontiac GTO#Fourth generation|Pontiac GTO]] (1974), [[w:Pontiac Ventura#1971–1977 X-body compact|Pontiac Ventura]] (1972-1976)
|-
| ||Vauxhall - Bedford Die Plant||[[w:Bedford|Bedford]], [[w:Bedfordshire|Bedfordshire]]||[[w:United Kingdom|United Kingdom]]||Tools & Die Manufacturing||1969||1980's||Opened May 1969. Supplemented die-making at the Luton plant.
|-
|8 (since 1993)<br />E (before 1993)||[[w:Vauxhall Ellesmere Port|Vauxhall Ellesmere Port]]||[[w:Ellesmere Port|Ellesmere Port]], [[w:Cheshire|Cheshire]]||[[w:United Kingdom|United Kingdom]]||[[w:Opel Astra#K|Opel]]/[[w:Vauxhall Astra|Vauxhall Astra]] K (5-door, Sports Tourer)<br />[[w:Opel Astra#J|Opel]]/[[w:Vauxhall Astra|Vauxhall Astra]] J (5-door, Sports Tourer)<br />[[w:Opel Astra#H|Opel]]/[[w:Vauxhall Astra|Vauxhall Astra]] H<br />[[w:Opel Astra#G|Opel]]/[[w:Vauxhall Astra|Vauxhall Astra]] G<br />[[w:Opel Astra#F|Opel]]/[[w:Vauxhall Astra|Vauxhall Astra]] F<br />[[w:Opel Kadett E|Opel Kadett E]]/[[w:Vauxhall Astra#Second generation (1984–1991)|Vauxhall Astra Mk II]]<br />[[w:Vauxhall Belmont|Vauxhall Belmont]]<br />[[w:Opel Combo#Kadett Combo (Combo A; 1986)|Opel Kadett Combo/Bedford Astravan & Astramax]]<br />[[w:Vauxhall Astra#First generation (1980–1984)|Vauxhall Astra Mk I]]<br />[[w:Vauxhall Chevette|Vauxhall Chevette]]<br />[[w:Bedford Chevanne|Bedford Chevanne]]<br />[[w:Vauxhall Firenza|Vauxhall Firenza]]<br />[[w:Vauxhall Magnum|Vauxhall Magnum]]<br />[[w:Opel Vectra#Vectra C (2002–2010)|Opel/Vauxhall Vectra C]]<br />[[w:Vauxhall Viva|Vauxhall Viva]]<br />[[w:Holden Astra#Third generation (TR; 1995)|Holden Astra (TR)]]<br />[[w:Holden Astra#Seventh generation (BK, BL; 2016)|Holden Astra (BK)]] (wagon)<br />Vauxhall Viva OHV Inline-4<br />[[w:General Motors 54° V6 engine|General Motors 54° V6 engine]]||1962||2017|| [[w:Vauxhall Motors|Vauxhall plant]]. <br />Also made engines, transmissions, axles, & other components. Component production began in November 1962. Vehicle production began with the Viva on June 1, 1964. Engine production ended in 2004. Sold to [[w:PSA Group|PSA Group]] in 2017. Part of [[w:Stellantis|Stellantis]] since 2021. Absorbing production of electric midsize vans from Luton van plant following Luton's closure on March 28, 2025.
|-
|7 (since 1993)<br />V (before 1993)||Vauxhall Luton (car plant)||[[w:Luton|Luton]], [[w:Bedfordshire|Bedfordshire]]||[[w:United Kingdom|United Kingdom]]||[[w:Vauxhall Carlton|Vauxhall Carlton]]<br />[[w:Vauxhall Cavalier|Vauxhall Cavalier]]<br />[[w:Vauxhall Cresta|Vauxhall Cresta]]<br />[[w:Opel Vectra#Vectra A (1988–1995)|Opel Vectra A]]<br />[[w:Opel Vectra#Vectra B (1995–2002)|Opel/Vauxhall Vectra B]]<br />[[w:Vauxhall Velox|Vauxhall Velox]]<br />[[w:Vauxhall Ventora|Vauxhall Ventora]]<br />[[w:Vauxhall Victor|Vauxhall Victor]]<br />[[w:Vauxhall Viscount|Vauxhall Viscount]]<br />[[w:Vauxhall Viva|Vauxhall Viva]]<br />[[w:Vauxhall VX4/90|Vauxhall VX4/90]]<br />[[w:Vauxhall VX Series|Vauxhall VX Series]]<br />[[w:Vauxhall Wyvern|Vauxhall Wyvern]]<br />[[w:Envoy (automobile)#Vauxhall Victor based models|Envoy F/FB/FC/FD]]<br />Chevrolet Bedford AC/LQ<br />Bedford WHG/WLG/WS/VYC/AS/WT/BYC/K/[[w:Bedford M series|MS/ML]]/OS/OL/[[w:Bedford OB|OB]]<br />[[w:Bedford S type|Bedford S series]]<br />[[w:Bedford SB|Bedford SB]]<br />[[w:Bedford TA|Bedford TA]]<br />[[w:Bedford HC|Bedford HC/JC/PC]]<br />[[w:Bedford CA|Bedford CA/Envoy EA]]<br />[[w:Bedford CF|Bedford CF/CF1/Opel Bedford Blitz]]<br />[[w:Bedford HA|Bedford HA]]<br />[[w:Vauxhall Slant-4 engine|Vauxhall Slant-4 engine]]<br />Vauxhall OHV Inline-6<br />[[w:Churchill tank|Churchill tank]] ||1905 (operations began)<br><br>1925 (part of GM)||2002|| Vauxhall moved from London to Luton in 1905. GM bought Vauxhall in 1925. Chevrolet truck production was moved to Luton in 1930 from the Hendon plant and became known as Chevrolet Bedford. Chevrolet Bedford trucks were replaced by Vauxhall-developed Bedford trucks during 1931 though Chevrolet Bedford production continued through 1932. Bedford trucks and buses were built at Luton until production was moved to Dunstable in 1955. Subsequently, only Bedford vans and car-based light commercial vehicles were still made in Luton. Produced Churchill tanks during World War II. Production ended in 2002 with the [[w:Vauxhall Vectra|Vauxhall Vectra]]. Over 7.4 million vehicles had been produced. The Luton passenger car plant was next to the at the time still active van plant previously used by the IBC Vehicles joint venture. The plant has now been demolished and the site is now being redeveloped for housing.<ref>{{cite news|url=http://www.lutontoday.co.uk/news/politics/redevelopment-of-former-vauxhall-site-given-the-go-ahead-1-5795094|work=Luton Today|title=Redevelopment of former Vauxhall site given the go-ahead|date=8 Jan 2014|access-date=29 September 2014}}</ref> It is being redeveloped into a new Luton suburb called [[w:Napier Park|Napier Park]]. The van plant was closed in 2025 by Stellantis.
|-
| ||GM de Venezuela<br />Caracas||[[w:Antimano|Antimano]], [[w:Caracas|Caracas]]||[[w:Venezuela|Venezuela]]||[[w:Chevrolet Bel Air|Chevrolet Bel Air]]<br />[[w:Chevrolet C/K|Chevrolet C/K]] <br />[[w:Chevrolet Camaro|Chevrolet Camaro]]<br /> [[w:Chevrolet Caprice|Chevrolet Caprice]]<br />[[w:Chevrolet Chevelle|Chevrolet Chevelle]]<br />[[w:Chevrolet Corvair|Chevrolet Corvair]]<br />[[w:Chevrolet Deluxe|Chevrolet Deluxe]]<br />[[w:Chevrolet Impala|Chevrolet Impala]]<br />[[w:Chevrolet Malibu|Chevrolet Malibu]]<br /> [[w:Chevrolet Nova|Chevrolet Nova]]<br /> [[w:Chevrolet Advance Design|Chevrolet Thriftmaster/Loadmaster]]<br />[[w:Opel Kadett|Opel Kadett]]<br />[[w:Opel Rekord|Opel Rekord]] ||1948||1983||Plant closed in 1983 & GM moved to the newer Valencia plant that it bought from Chrysler in 1979.
|-
| ||GM Venezolana<br />Mariara||[[w:Mariara|Mariara]], [[w:Carabobo|Carabobo]]||[[w:Venezuela|Venezuela]]||[[w:Chevrolet Silverado#Second-generation Silverado / third-generation Sierra (GMT900; 2007)|Chevrolet C3500]]<br /> [[w:Isuzu Forward|Chevrolet F-Series]]<br />[[w:Isuzu Giga|Chevrolet E-Series]]<br />[[w:Chevrolet Kodiak|Chevrolet Kodiak]]<br />[[w:Isuzu Elf|Chevrolet N-Series]]<br />||2008||2015||Plant closed in 2015 & N-Series moved to Valencia plant.
|-
| ||GM Venezolana<br />Valencia||[[w:Valencia, Carabobo|Valencia]], [[w:Carabobo|Carabobo]]||[[w:Venezuela|Venezuela]]||[[w:Chevrolet Astra|Chevrolet Astra]]<br />[[w:Chevrolet Aveo (T200)|Chevrolet Aveo]]<br /> [[w:Chevrolet C/K|Chevrolet C/K]] <br />[[w:Chevrolet Celebrity|Chevrolet Celebrity]]<br />[[w:Buick Century#Fifth generation (1982–1996)|Chevrolet Century]]<br />[[w:Chevrolet Chevette#Latin America|Chevrolet Chevette]]<br />[[w:Chevrolet Corsa|Chevrolet Corsa]]<br /> [[w:Chevrolet Cruze#First generation (J300; 2008)|Chevrolet Cruze]]<br />[[w:Chevrolet Tahoe#First generation (1992)|Chevrolet Grand Blazer]]<br />[[w:Chevrolet Kodiak|Chevrolet Kodiak]]<br /> [[w:Chevrolet Malibu#Fourth generation (1978)|Chevrolet Malibu]]<br />[[w:Opel Ascona#Chevrolet Monza|Chevrolet Monza]]<br />[[w:Isuzu Elf|Chevrolet N-Series]]<br />[[w:Daewoo Lacetti|Chevrolet Optra]]<br />[[w:Chevrolet Orlando#First generation (J309; 2011)|Chevrolet Orlando]]<br />[[w:Chevrolet S-10 Blazer|Chevrolet S-10 Blazer]]<br />[[w:Chevrolet Silverado|Chevrolet Silverado]]<br /> [[w:Chevrolet Spark|Chevrolet Spark]]<br />[[w:Chevrolet Tahoe|Chevrolet Tahoe]]<br />[[w:Chevrolet TrailBlazer#First generation (KC; 2001)|Chevrolet TrailBlazer]] ||1979||2017||Originally built by Chrysler de Venezuela SA. GM bought the plant from Chrysler in 1979 and moved their entire operations there from the Caracas plant by 1983. <br />
There had already been production pauses because of part shortages between 2014 and 2016. On May 2, 2017 GM announced the total closure of the plant and deconsolidation of the Venezuelan unit from its accounts due to the illegal seizure of its factory by the Venezuelan government. The plant halted all of its operations of manufacturing vehicles and now only retains the GM brands representation.<ref>{{cite web|url=https://www.semana.com/internacional/articulo/general-motors-cierra-operaciones-en-venezuela/244829|title=General Motors concreta el cierre de sus operaciones en Venezuela|website=Semana.com|date=May 2, 2017}}</ref><ref>{{cite news|url=https://elpais.com/internacional/2017/04/20/actualidad/1492679446_631610.html|title=General Motors suspende operaciones en Venezuela tras el embargo de una planta|newspaper=El País|date=April 20, 2017|via=elpais.com}}</ref><ref>{{cite web|url=http://www.elcomercio.com/actualidad/generalmotors-cierre-operaciones-venezuela-negocios.html|title=General Motors inicia cierre de operaciones en Venezuela|website=El Comercio|date=May 2, 2017}}</ref>
|-
| ||[[w:GM Vietnam|GM Vietnam]]||[[w:Hanoi, Vietnam|Hanoi]]||[[w:Vietnam|Vietnam]]||[[w:Chevrolet Aveo|Chevrolet Aveo]]<br />[[w:Chevrolet Captiva#First generation (C100, C140; 2006)|Chevrolet Captiva]]<br />[[w:Chevrolet Cruze#First generation (J300; 2008)|Chevrolet Cruze]]<br />[[w:Chevrolet Lacetti|Chevrolet Lacetti]]<br />[[w:Chevrolet Spark#Second generation (M200, M250; 2005)|Chevrolet Spark Lite]]<br />[[w:Chevrolet Spark#Third generation (M300; 2009)|Chevrolet Spark]]<br />[[w:Chevrolet Orlando#First generation (J309; 2011)|Chevrolet Orlando]]<br />[[w:Chevrolet Vivant|Chevrolet Vivant]]<br>[[w:Daewoo Cielo|Daewoo Cielo]]<br>[[w:Daewoo Lacetti|Daewoo Lacetti]]<br />[[w:Daewoo Lanos|Daewoo Lanos]]<br>[[w:Daewoo Leganza|Daewoo Leganza]]<br>[[w:Daewoo Magnus|Daewoo Magnus]]<br>[[w:Daewoo Matiz|Daewoo Matiz]]<br>[[w:Daewoo Nubira|Daewoo Nubira]]<br>[[w:Daewoo Damas|Daewoo Damas]]||1995||2018||Originally established as VIDAMCO (a joint venture with a state owned co.) in 1993 by Daewoo Motor Co. Daewoo bought out its Vietnamese partner in April 2000, making VIDAMCO 100% owned by Daewoo Motor Co. Bought by GM in 2002 as part of the creation of [[w:GM Daewoo|GM Daewoo Auto & Technology Co.]] In July 2011, the name of the company was changed from VIDAMCO to GM Vietnam. Sold to [[w:VinFast|VinFast]] in 2018. [[w:VinFast Fadil|VinFast Fadil]] produced under license from GM; is a rebadged [[w:Chevrolet Spark#Fourth generation (M400; 2015)|Chevrolet Spark (M400)]]/[[w:Opel Karl|Opel Karl]].
|-
| ||[[w:Warren Transmission|Warren Transmission]]||[[w:Warren, Michigan|Warren, Michigan]]||United States||[[w:GM-Ford 6-speed automatic transmission|6T70, 6T75, 6T80]] ||1958||2020||Located at 23500 Mound Road. Past transmissions: [[w:GM 4T60-E transmission|4T65-E]], [[w:List of GM transmissions#Hybrid and PHEV|5ET50 EVT]]
Plant originally built in 1941 as a US Navy Ordnance facility operated by the Hudson Motor Car Co. building 20mm Oerlikon anti-aircraft guns. In 1943, the Navy moved the contract from Hudson to Westinghouse, which now operated the Warren plant for the Navy. Ford bought the plant in 1946 and used it to produce axles and ball joints. GM bought the plant in 1958.<ref>{{Cite web|url=https://gmauthority.com/blog/2022/01/old-gm-warren-transmission-plant-set-to-be-demolished/|title = Old GM Warren Transmission Plant Set To Be Demolished|author=Sam McEachern|publisher=GMAuthority.com|date=January 25, 2022}}</ref> The plant became a Chevrolet facility making auto parts. It also made artillery shells in the 1960's and 1970's. The factory was transferred to the Hydramatic Division in 1980, later becoming part of GM Powertrain. [https://nadc1.com/?portfolio=gm-paint-shop-strip-out] Ended production on August 1, 2019. Reopened for production of face masks during the COVID-19 pandemic beginning in March 2020<ref>{{Cite web|url=https://www.freep.com/story/money/cars/general-motors/2020/06/08/gm-warren-transmission-plant-coronavirus/3135789001/|title = GM revived Warren plant for face mask production. What happens when demand slows?|author=Jamie LaReau|publisher=Detroit Free Press|date=June 8, 2020}}</ref>. First face mask produced March 27, 2020. Sold to a developer in 2021.
|-
| ||[[w:Welch Motor Car Company|Welch]]||[[w:Pontiac, Michigan|Pontiac]], [[w:Michigan|Michigan]]||United States||Welch automobiles||1909||1911||Welch Motor Car Company became affiliated with GM in 1909 and GM officially took it over in 1910. Welch ended production in 1911. Welch was noted for having engines with a single overhead cam and hemispherical combustion chambers, unusual technology for its time.
|-
| ||[[w:Welch Motor Car Company|Welch-Detroit]]||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||Welch-Detroit automobiles||1910||1911||The Welch Company of Detroit was a separate company from the Welch Motor Car Company of Pontiac, Michigan and was set up in June 1909 to build a smaller, cheaper car than the Welch made in Pontiac, Michigan. Both Welch companies became affiliated with GM in 1909 and GM officially took over both companies in 1910. Both Welch and Welch-Detroit ended production in 1911. Equipment from the factory was moved to the also GM-owned, former Rainier Motor Car Company factory in Saginaw to make the 1912 Marquette, which was said to be a combination of the previous Rainier and Welch-Detroit brands.
|-
|W||[[w:Willow Run Assembly|Willow Run Assembly]]||[[w:Ypsilanti Township, Michigan|Ypsilanti Twp, Michigan]]||United States||[[w:Chevrolet Caprice#Fourth generation (1991–1996)|Chevrolet Caprice]] sedan & wagon (1991-1993) <br />[[w:Oldsmobile Custom Cruiser#Third generation (1991–1992)|Oldsmobile Custom Cruiser]] wagon (1991-1992)<br />[[w:Buick Roadmaster#1991–1996|Buick Roadmaster Estate wagon]] (1991-1993)||1956||1993||Located at 2625 Tyler Road, to the south of the former Willow Run Transmission plant. Initially opened in 1956 to exclusively build Chevrolet trucks in a 500,000 sq. ft. building that had been used as a warehouse by GM and was previously used by Kaiser-Frazer's engineering dept. [https://aadl.org/aa_news_19561208-chevrolet_willow_run_truck_plant_gains_momentum] In 1958-59, plant was expanded into a 2-part Chevrolet & Fisher Body passenger car assembly plant to make the Chevrolet Corvair. First completed 1960 Corvair rolls off the line on July 7, 1959 [https://www.facebook.com/photo/?fbid=792700342891740&set=a.453129043515540]. Added the Chevy II (Nova) for 1962. Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. Willow Run Assembly joined the GM Assembly Division in 1971. Idled in Nov. 1978. Converted in 1978-79 to build the fwd X-body compacts for 1980. Began building fwd X-cars on January 17, 1979. In 1984, joined the new BOC group in preparation for its conversion to build the new fwd H-body full-size cars for 1986. Final H-car built on May 19, 1989 and in September, moved to the CPC group. Converted to build the body-on-frame, rwd B-body for 1991. Chevy Caprice sedan production began in January 1990 followed by station wagons in July. Closed July 1993. B-body production consolidated in Arlington, TX. Assembly plant was 2.5 million sq. ft. when it closed. The Willow Run Assembly Plant is now the Willow Run Business Center, a multi-tenant warehouse and distribution facility, part of which is leased by GM to distribute automotive service parts, which is known as Ypsilanti #87 Processing Center, part of GM Customer Care and Aftersales. The nearby Willow Run Company Vehicle Operations site at 2901 Tyler Road was sold to International Turbine Industries in April 2013.<ref name=WR-Assembly-sold>{{cite news|author=Katrease Stafford|title=GM Willow Run plant redevelopment: Aircraft maintenance firm buys 1 building|url=https://www.annarbor.com/news/ypsilanti/gm-willow-run-plant-redevelopment-aircraft-maintenance-firm-purchases-facility-25-new-jobs-expected/|access-date=24 April 2013|newspaper=AnnArbor.com|date=April 2, 2013}}</ref>
Past models: [[w:Chevrolet Task Force|Chevrolet Task Force]] (1957-1958), [[w:Chevrolet Suburban#Fourth generation (1955)|Chevrolet Suburban]] (1958), [[w:Chevrolet Corvair|Chevrolet Corvair]] (1960-1969), [[w:Chevrolet Nova|Chevrolet Chevy II/Nova]] (1962-79), [[w:Acadian (automobile)|Acadian]] (Canada only: 1968-71), [[w:Pontiac Ventura#1971–1977 X-body compact|Pontiac <br> Ventura]] (1971-1977), [[w:Pontiac GTO#Fourth generation|Pontiac GTO]] (1974), [[w:Pontiac Phoenix#First generation (1977–1979)|Pontiac Phoenix (rwd <br> X-body)]] (1977-1979), [[w:Oldsmobile Omega|Oldsmobile Omega (rwd X-body)]] (1973-1979), [[w:Buick Skylark#Fourth generation (1975–1979)|Buick Skylark (rwd <br> X-body)]] (1977-1978), [[w:Chevrolet Citation|Chevrolet Citation]] (1980-1981, 1984-1985), [[w:Oldsmobile Omega#Third generation (1980–1984)|Oldsmobile Omega (fwd X-body)]] (1980-1984), [[w:Buick Skylark#Fifth generation (1980–1985)|Buick Skylark (fwd <br> X-body)]] (1980-1985), [[w:Oldsmobile 88#Ninth generation (1986–1991)|Oldsmobile 88]] (1986-89), [[w:Pontiac Bonneville#Eighth generation (1987–1991)|Pontiac Bonneville]] (1987-1989).
|-
| ||[[w:Willow Run Transmission|Willow Run Transmission]]||[[w:Ypsilanti, Michigan|Ypsilanti, Michigan]]||United States|| [[w:Hydramatic|Hydramatic]] automatic transmissions <br /> [[w:GM 4L80-E transmission|4L80-E transmission]]<br />[[w:GM 4L80-E transmission|4L85-E transmission]]<br />[[w:GM 4T60-E transmission|4T60-E transmission]]<br />[[w:GM 4T60-E transmission|4T65-E transmission]]<br />[[w:GM 4T80-E transmission|4T80-E transmission]]<br />[[w:GM 6L50 transmission|6L50-E transmission]]<br />[[w:GM 6L80 transmission|6L80-E transmission]]<br />[[w:GM 6L90 transmission|6L90-E transmission]]<br />||1953||2010||Began as the Ford [[w:B-24 Liberator|B-24 Liberator]] bomber plant in World War II which opened in 1941, grew from 3.5 million square feet to nearly 5 million square feet under GM. Ford built the factory and sold it to the US government, which leased it back to Ford for the duration of WWII. Ford Motor had first option on the plant after war production ended, an option it ultimately chose not to exercise. The factory was instead leased and then sold to [[w:Kaiser-Frazer|Kaiser-Frazer]] and was their main production site from 1946-1953, when they moved production to Toledo, OH following Kaiser-Frazer's acquisition of Toledo-based [[w:Willys-Overland|Willys-Overland]]. In addition to automobiles, [[w:Kaiser-Frazer|Kaiser-Frazer]] also built [[w:C-119 Flying Boxcar|C-119 Flying Boxcar]] cargo planes at Willow Run under license from [[w:Fairchild Aircraft|Fairchild Aircraft]], producing an estimated 88 C-119s between 1951 and 1953. In 1953, GM first leased then bought the plant to replace the Detroit Transmission Division factory in Livonia, Michigan that had burned down earlier in 1953. Whatever equipment could be salvaged was brought from the destroyed Detroit Transmission Division plant in Livonia to Willow Run in 1953. Also supplied Hydramatics to Lincoln, Nash, Hudson, Rambler, Kaiser, and Willys. It was also initially supplied to Rolls-Royce before Rolls-Royce set up their own Hydramatic production line in the UK building Hydramatics under license from GM. Rolls-Royce also supplied Armstrong-Siddeley and [[w: British Motor Corporation|BMC]], which in turn supplied other British automakers like Jensen that used BMC’s biggest engines. The Detroit Transmission Division became the Hydramatic Division in October 1963. The Hydramatic Division merged with the GM Engine Division to form GM Powertrain in 1991-1992. Over the years, GM expanded the plant to almost 5 million sq. ft. In addition to automatic transmissions, GM also produced the M16A1 rifle and the M39A1 20mm autocannon for the US military during the Vietnam War at Willow Run Transmission. GM Powertrain also had an on-site engineering center. The plant closed in December 2010. A small portion of the plant was saved by the [[w:Yankee Air Museum|Yankee Air Museum]] to be turned into the National Museum of Aviation and Technology at Historic Willow Run but more than 95% of the plant was demolished from 2013-2014. The rest of the site has been redeveloped into the [[w:American Center for Mobility|American Center for Mobility]], an autonomous- and connected-driving testing center which opened in December 2017.
|-
|Y (1964 [[w:Chevrolet|Chevrolet]] and 1965-2010) <br /><br /> W <br /> (Pre-1965 [[w:Oldsmobile|Oldsmobile]] & [[w:Pontiac (automobile)|Pontiac]])<br /><br /> 5 (Pre-1965 [[w:Buick|Buick]]) || [[w:Wilmington Assembly|Wilmington Assembly]] || [[w:Wilmington, Delaware|Wilmington, Delaware]]||United States||[[w:Pontiac Solstice|Pontiac Solstice]] (2006-2010)<br />[[w:Saturn Sky|Saturn Sky]] (2007-2010) <br />[[w:Opel GT#GT (roadster) (2007–2010)|Opel GT]] (Europe: 2007-2010) <br />[[w:Daewoo G2X#Daewoo G2X|Daewoo G2X]] (S. Korea: 2007-2009) ||1947||2009||Located at 801 Boxwood Road. Was originally part of the [[w:Buick-Oldsmobile-Pontiac Assembly Division|Buick-Oldsmobile-Pontiac Assembly Division]]. Wilmington began making Chevrolet passenger cars for 1964. BOP Assembly Division became GM Assembly Division in 1965. Converted to make the Chevette small car for 1976. Switched back to making B-body full-size cars for 1985. Converted to make the fwd Chevy Corsica & Beretta for 1987. Then built Corsica's replacement, Malibu, for 1997. Converted to build Saturn's 2nd model range, the Opel Vectra-based, plastic body paneled Saturn L-Series for 2000. Converted to build the rwd, Kappa platform small sports cars for 2006 beginning with the Pontiac Solstice. Final car produced was a Solstice roadster on July 28, 2009. The plant was sold to [[w:Fisker Automotive|Fisker Automotive]] in 2010, which had planned to build its [[w:Fisker Atlantic|2nd model line]] there. However, Fisker Automotive went bankrupt in Nov. 2013 before ever building any cars in Wilmington. Fisker Automotive's assets, including the Wilmington plant, were purchased out of bankruptcy by Wanxiang Group in February 2014. Wanxiang did not use the plant and sold it in 2017. Plant was demolished in 2019. A large part of the site is now an Amazon fulfillment center.<br />Past models: [[w:Chevrolet Corsica|Chevrolet Corsica]] (1987-1996), [[w:Chevrolet Beretta|Chevrolet Beretta]] (1987-1996), [[w:Pontiac Tempest#Fourth generation (1987–1991)|Pontiac Tempest (Canada only)]] (1988-91), [[w:Chevrolet Malibu#Fifth generation (1997)|Chevrolet Malibu]] (1997-1999), [[w:Saturn L-Series|Saturn L-Series]] (2000-2005), [[w:Chevrolet Chevette|Chevrolet Chevette]] (1976-1984), [[w:Pontiac 1000|Pontiac 1000]] (1981-1984), [[w:Pontiac Acadian|Pontiac Acadian]] (Canada only: 1976-1984), [[w:Buick Centurion|Buick Centurion]] (1971-1973), [[w:Buick Electra|Buick Electra]] (1959-1962, 1971-1974), [[w:Buick Estate#1971-1976|Buick Estate]] (1972-1973, 1975), [[w:Buick GS|Buick GS]] (1968-1969), [[w:Buick Invicta|Buick Invicta]] (1959-1962), [[w:Buick LeSabre|Buick LeSabre]] (1959-1975), [[w:Buick Limited#1958 Limited|Buick Limited]] (1958), [[w:Buick Roadmaster|Buick Roadmaster]] (1948-1950, 1955-1957), [[w:Buick Skylark#Third generation (1968–1972)|Buick Skylark]] (1968-1969), [[w:Buick Special|Buick Special]] (1950, 1953-1958), [[w:Buick Super|Buick Super]] (1954-1958), [[w:Buick Wildcat|Buick Wildcat]] (1963-1970), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1964), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1964-1968), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-1975, 1985-1986), [[w:Chevrolet Impala|Chevrolet Impala]] (1964-1975, 1985), [[w:Oldsmobile 88|Oldsmobile 88]] (1949-1963, 1985), [[w:Oldsmobile 98|Oldsmobile 98]] (1948-1963), [[w:Oldsmobile Starfire#First generation (1961–1966)|Oldsmobile Starfire]] (1961-1963), [[w:Pontiac Bonneville|Pontiac Bonneville]] (1958-1963), [[w:Pontiac Catalina|Pontiac Catalina]] (1959-1960, 1962-1963), [[w:Pontiac Chieftain|Pontiac Chieftain]] (1950-1951, 1954-1957), [[w:Pontiac Grand Prix#First generation (1962–1964)|Pontiac Grand Prix]] (1962-1963), [[w:Pontiac Star Chief|Pontiac Star Chief]] (1955-1958, 1960), [[w:Pontiac Ventura#1960–1970|Pontiac Ventura]] (1960-1961)
|-
| ||[[w:Windsor Transmission|Windsor Transmission]]||[[w:Windsor, Ontario|Windsor, Ontario]]||[[w:Canada|Canada]]||[[w:GM 4T40 transmission|4T40E/4T45E transmission]]<br />Transmission components||1920||2010||Plant was originally in [[w:Walkerville, Ontario|Walkerville]] until Walkerville was annexed by Windsor in 1935. Was located at 1550 Kildare Road. Walker Road is at the back of the property. Previous: 1920 - 1928 axles and parts, 1928 - 1963 engines (including the [[w:Chevrolet Stovebolt engine|Chevrolet Stovebolt OHV inline-6 engine]] and Buick engines from 1935-1942). The Windsor plant was taken over by McKinnon Industries Ltd., a GM subsidiary based in St. Catharines, Ontario, Canada in 1963. As a result, engine production in Windsor was moved to St. Catharines and transmission production in St. Catharines was moved to Windsor. At this point, the Windsor plant was renamed the Windsor Transmission Plant. In 1969, McKinnon Industries Ltd. was integrated into GM Canada rather than being a separate subsidiary. Windsor Transmission was closed on July 28, 2010. The 4-spd. automatics made in Windsor were discontinued and replaced by 6-spd. automatics made in St. Catharines. Sold in 2014 and completely demolished by 2017. Site now occupied by MotiPark Ltd.
|-
| ||Windsor Trim||[[w:Windsor, Ontario|Windsor, Ontario]]||[[w:Canada|Canada]]||Seat assemblies and door trim panels||1965||1996|| Located at 1600 Lauzon Rd. Sold to Peregrine, Inc. in 1996 and then sold to [[w:Lear Corp.|Lear Corp.]] in 1999. Closed by Lear in 2005. Demolished in 2009. Part of the property is now the [[w:WFCU Centre|WFCU Centre]] and part will be residential homes.
|-
| ||[[w:Wixom Performance Build Center|Wixom Performance Build Center]]||[[w:Wixom, Michigan|Wixom, Michigan]]||United States||[[w:GM LS engine|6.2L LS3 V8]] [[w:Chevrolet Corvette (C6)#Grand Sport|(C6 Corvette Grand Sport coupe w/manual transmission only)]]<br />[[w:GM LS engine|7.0L LS7 V8]]<br />[[w:GM LS engine|6.2L supercharged LS9 V8]]<br />[[w:Northstar engine series#LC3|4.4L supercharged LC3 Northstar V8]] ||2004||2013<ref>{{Cite web|url=https://www.torquenews.com/106/gm-closing-wixom-performance-engine-facility-build-your-own-engine-program-ends|title=GM Closing Wixom Performance Engine Facility, Build-Your-Own-Engine Program Ends|author=Patrick Rall|date=September 20, 2013|publisher=Torquenews.com}}</ref>||Located at 30240 Oak Creek Dr.<br> Performance Build Center relocated to <br> Bowling Green Assembly in 2014.
|-
| ||[[w:Detroit Assembly#LaSalle Factory/DeSoto Factory|Wyoming Assembly (LaSalle Wyoming Ave. plant)]]||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||[[w:LaSalle (automobile)|LaSalle]] 1927-1933||1926||1934||Located at 6000 Wyoming Avenue. Originally built to produce Liberty aircraft engines in World War I, opening in 1917. In 1919, was taken over by Saxon Motor Co., owned by Hugh Chalmers of Chalmers Motor Co. GM bought the plant in 1926 and built the LaSalle there from 1927. GM sold Wyoming Assembly to Chrysler in 1934, which then used it to build its DeSoto brand. After the DeSoto brand was discontinued in late 1960, became Wyoming Export plant which was used to prepare vehicles for export. Plant closed in 1980. Plant was demolished in 1992.
|-
| ||[[w:GMC (marque)#History|Yellow Truck & Coach Manufacturing Company]]||[[w:Chicago|Chicago]], [[w:Illinois|Illinois]]||United States||Yellow Cab taxis<br>Yellow Coach buses<br>Yellocab trucks (T-1, T-2, and T-3)||1925||1928||Located on West Dickens Ave. In 1925, General Motors Truck Corp., the parent of the GMC brand, merged with Yellow Cab Manufacturing Company (including its Yellow Coach Mfg. Co. bus-making subsidiary) to form Yellow Truck & Coach Manufacturing Company, in which GM owned a majority stake of 57%. Yellocab trucks were discontinued during 1927 and were replaced with new light-duty GMC trucks (T-10 & T-20). During 1928, bus and taxi production was consolidated at the GMC Pontiac Central plant in Pontiac, Michigan. The Chicago plant was closed and sold.
|-
| ||Yellow Sleeve-Valve Engine Works||[[w:East Moline|East Moline]], [[w:Illinois|Illinois]]||United States||Yellow-Knight engines||1925||1929||Production began in 1923. In 1925, General Motors Truck Corp., the parent of the GMC brand, merged with Yellow Cab Manufacturing Company (including its Yellow Coach Mfg. Co. bus-making subsidiary) to form Yellow Truck & Coach Manufacturing Company, in which GM owned a majority stake of 57%. The Northway Motor Division of Detroit was transferred to General Motors Truck Corp. as part of that merger but was liquidated in 1926. During 1929 and 1930, Yellow Sleeve Valve Engine production equipment was transferred from East Moline, Illinois to Pontiac West Plant 1 in Pontiac, Michigan. The East Moline plant was closed at the end of 1929 and was sold.
|-
| ||[[w:Yulon GM|Yulon GM]]||[[w:Miaoli|Miaoli]]||[[w:Taiwan|Taiwan]]||[[w:Buick Excelle#Taiwan|Buick Excelle]]<br />[[w:Buick LaCrosse#China|Buick LaCrosse]] ||2006||2012||A joint venture owned 49% by GM & 51% by [[w:Yulon|Yulon Motor Co]]. Yulon bought GM's stake in the venture in Dec. 2008. Production continued after the sale through licensing but cooperation between GM & Yulon ended in 2012.
|-
| ||General Motors Zaire||[[w:Kinshasa|Kinshasa]]||[[w:Zaire|Zaire]] (now [[w:Democratic Republic of the Congo|D.R. Congo]])||[[w:Chevrolet|Chevrolet]] trucks<br />[[w:Opel Kadett|Opel Kadett]]<br />[[w:Opel Rekord|Opel Rekord]]<br />[[w:Opel Commodore|Opel Commodore]]<br />[[w:Opel Ascona|Opel Ascona]]<br />[[w:Bedford Vehicles|Bedford Trucks]]||1975||1987||GM sold the plant in 1987 to local businessmen. Plant was looted bare in 1991.
|}
== Former partner factories ==
{| class="wikitable sortable" style="font-size:90%"
!VIN !! Name !! City/State !! Country !! class="unsortable" | Products !! Opened !! Idled !! class="unsortable" | Comments
|-
|H||[[w:AM General#Hummer brand|AM General]] Commercial plant||[[w:Mishawaka, Indiana|Mishawaka, Indiana]]||United States||[[w:Hummer H2|Hummer H2]] (2003-2009)||2002||2009||Located at 12900 McKinley Highway. Built under contract for GM by AM General. Plant later built the [[w:Mercedes-Benz R-Class|Mercedes-Benz R-Class]] under contract for Mercedes for export to China from 2015-2017 as well as the [[w:VPG MV-1|VPG MV-1]] under contract for VPG (later Mobility Ventures MV-1; Mobility Ventures being an AM General subsidiary that took over VPG's assets after VPG went bankrupt). MV-1 was made from 2011-2016.
|-
|E||[[w:AM General#Hummer brand|AM General]] Military plant||[[w:Mishawaka, Indiana|Mishawaka, Indiana]]||United States||[[w:Hummer H1|Hummer H1]] (2000-2006)||1992 (civilian production)||2006 (civilian production)||Located at 13200 McKinley Highway. This plant built the military [[w:Humvee|Humvee]] from fall 1984 and civilian Hummers from 1992. In Dec. 1999, GM bought the rights to the Hummer brand from AM General. AM General still handled manufacturing but GM handled marketing and distribution. At this point, the AM General Hummer was renamed Hummer H1. H1 built under contract for GM by AM General. Humvee production for military use continued after 2006.
|-
| ||Asoke Engineering (Asoke Motors)||Bangkok?||[[w:Thailand|Thailand]]||[[w:Bedford HA#The BTV|Plai Noi]]<br />[[w:Opel Rekord|Opel Rekord]]||Mid-1970s||Early-1980s||A version of GM's [[w:Bedford HA#The BTV|BTV]] called the Plai Noi was assembled in Thailand in 1974.
|-
| ||Associated Industries Ltd.||[[w:Georgetown, Guyana|Georgetown]]||[[w:Guyana|Guyana]]||[[w:Bedford HA#The BTV|Tapir]]||Mid-1970's||Late-1970's||A version of GM's [[w:Bedford HA#The BTV|BTV]] called the Tapir was assembled in Guyana.
|-
| ||Associated Motor Industries Ltd.||[[w:Jurong|Jurong]] (Jurong Industrial Estate)||[[w:Singapore|Singapore]]||[[w:Chevrolet Impala|Chevrolet Impala]]<br />[[w:Statesman (automobile)#HQ|Chevrolet 350]]<br />[[w:Vauxhall Motors|Vauxhall]] including: <br />[[w:Vauxhall Victor|Victor]]<br />[[w:Vauxhall Viva|Viva]]<br />[[w:Vauxhall VX4/90|VX4/90]]||1968||1975||Jointly owned by Wearne Brothers Limited & Motor Investments Bhd. Associated Motor Industries Ltd. assembled vehicles under license from GM beginning in 1968 as well as brands from other automakers (Austin, Morris, & Renault).
|-
| ||Associated Motor Industries Malaysia Sdn. Bhd.||[[w:Batu Tiga|Batu Tiga]], [[w:Selangor|Selangor]]||[[w:Malaysia|Malaysia]]||[[w:Holden|Holden]]<br />||1968||1971 (?)||Associated Motor Industries Malaysia assembled Holden vehicles under license from GM beginning in 1968 as well as brands from other automakers.
|-
|C||[[w:Automobilwerk Eisenach|Automobilwerk Eisenach]] (AWE)||[[w:Eisenach|Eisenach]]||[[w:Germany|Germany]]||[[w:Opel Vectra#Vectra A (1988–1995)|Opel Vectra]] A<br />||1990||1991|| The old [[w:Wartburg (marque)|Wartburg]] plant built vehicles for Opel for a short time before closing permanently.
|-
| ||[[w:Avtotor|Avtotor]]||[[w:Kaliningrad|Kaliningrad]]||[[w:Russia|Russia]]||[[w:Chevrolet Aveo (T200)|Chevrolet Aveo]], [[w:Chevrolet Captiva#First generation (C100, C140; 2006)|Chevrolet Captiva]], [[w:Chevrolet Epica|Chevrolet Epica]], [[w:Chevrolet Lacetti|Chevrolet Lacetti]], [[w:Chevrolet Malibu#Eighth generation (2013)|Chevrolet Malibu]], [[w:Chevrolet Orlando#First generation (J309; 2010)|Chevrolet Orlando]], [[w:Chevrolet Rezzo|Chevrolet Rezzo]], [[w:Chevrolet Tahoe#Second generation (2000) |Chevrolet Tahoe (GMT800)]], [[w:Chevrolet Tahoe#Third generation (2007)|Chevrolet Tahoe (GMT900)]], [[w:Chevrolet Trailblazer (SUV)#First generation (KC; 2001)|Chevrolet Trailblazer]], [[w:Cadillac BLS|Cadillac BLS]], [[w:Cadillac CTS|Cadillac CTS]], [[w:Cadillac Escalade#Second generation (2001)|Cadillac Escalade (GMT800)]], [[w:Cadillac Escalade#Third generation (2007)|Cadillac Escalade (GMT900)]], [[w:Cadillac SRX|Cadillac SRX]], [[w:Cadillac STS|Cadillac STS]], [[w:Hummer H2|Hummer H2]], [[w:Hummer H3|Hummer H3]], [[w:Opel Antara|Opel Antara]], [[w:Opel Astra|Opel Astra]], [[w:Opel Insignia|Opel Insignia]], [[w:Opel Mokka#First generation (J13; 2012)|Opel Mokka]], [[w:Opel Meriva|Opel Meriva]], [[w:Opel Zafira|Opel Zafira]]||2004||2015||Built under contract by [[w:Avtotor|Avtotor]] for GM. GM ended the contract in 2015.
|-
| ||Azia Avto||[[w:Ust-Kamenogorsk|Ust-Kamenogorsk]]||[[w:Kazakhstan|Kazakhstan]]||[[w:Chevrolet Aveo (T200)|Chevrolet Aveo]], [[w:Chevrolet Captiva#First generation (C100, C140; 2006)|Chevrolet Captiva]], [[w:Chevrolet Cruze|Chevrolet Cruze]], [[w:Chevrolet Epica|Chevrolet Epica]], [[w:Chevrolet Lacetti|Chevrolet Lacetti]], [[w:Chevrolet Malibu#Eighth generation (2013)|Chevrolet Malibu]], [[w:Chevrolet Orlando#First generation (J309; 2010)|Chevrolet Orlando]], [[w:Chevrolet Trax|Chevrolet Tracker]]||2007||2018||Built under contract by Azia Avto for GM.
|-
| ||[[w:Bangchan General Assembly|Bangchan General Assembly]] Co., Ltd.||[[w:Khan Na Yao district|Khan Na Yao district]], [[w:Bangkok|Bangkok]]||[[w:Thailand|Thailand]]||[[w:Opel Kadett|Opel Kadett]] <br />[[w:Opel Rekord|Opel Rekord]] <br />[[w:Holden Kingswood|Holden Monaro LS]]<br />[[w:Statesman (automobile)|Chevrolet De Ville]]||1970||1987 (?)||[[w:Isuzu|Isuzu]] invested in Bangchan in 1979 but then sold its stake to [[w:Honda|Honda]] in 1987. Phra Nakorn Automobile Group became sole owner of Bangchan in 2005.
|-
|B||[[w:Gruppo Bertone|Gruppo Bertone]]||[[w:Grugliasco|Grugliasco]]||[[w:Italy|Italy]]||[[w:Opel Kadett#Kadett E (1984–1995)|Opel Kadett E convertible]]<br />[[w:Vauxhall Astra#Second generation (1984–1993)|Vauxhall Astra Mark 2 convertible]]<br />[[w:Opel Astra#F|Opel/Vauxhall Astra F convertible]]<br />[[w:Opel Astra#G|Opel/Vauxhall Astra G coupe & convertible]]<br />[[w:Holden Astra#Fourth generation (TS; 1998)|Holden Astra convertible (TS)]] ||1987||2006||Built under contract by [[w:Gruppo Bertone|Gruppo Bertone]] for Opel/Vauxhall.
|-
| ||Central African Transport Company (CATCO)||?||[[w:Malawi|Malawi]]||[[w:Bedford HA#The BTV|Zonse]]||Mid-1970's||?||A version of GM's [[w:Bedford HA#The BTV|BTV]] called the Zonse was assembled in Malawi.
|-
| ||Centroamericana de Ensamblaje y Fabricación||(?)||[[w:Honduras|Honduras]]||[[w:El Compadre (car)|Compadre]]||1970s||(?)||A version of GM's [[w:Bedford HA#The BTV|BTV]] called the Compadre was assembled in Honduras.
|-
| ||Champion Motors||[[w:Shah Alam|Shah Alam]], [[w:Selangor|Selangor]]||[[w:Malaysia|Malaysia]]||[[w:Chevrolet Impala|Chevrolet Impala]]<br />[[w:Vauxhall Victor|Vauxhall Victor]]<br />[[w:Vauxhall Viva|Vauxhall Viva]]<br />[[w:Bedford Vehicles|Bedford trucks]] including [[w:Bedford TJ|Bedford TJ]]||1968||1982 (?)||Champion Motors assembled vehicles under license from GM beginning in 1968. Champion Motors was renamed Assembly Services Sdn. Bhd. (ASSB) in 1975. The last products still being built for GM were Bedford trucks. A joint venture of Toyota & [[w:UMW Holdings|UMW Holdings Bhd.]] called Sejati Motor took over ASSB in 1982. Sejati Motor was renamed UMW Toyota Motor in 1987. ASSB is a subsidiary of UMW Toyota Motor.
|-
| ||Chinese Automobile Co., Ltd.||[[w:Xinzhuang District|Xinzhuang District]], [[w:New Taipei City|New Taipei City]]||[[w:Taiwan|Taiwan]]||[[w:Opel Astra|Opel Astra]] F & G<br />[[w:Opel Vectra#Vectra B (1995–2002)|Opel Vectra]] B ||1993||2000||GM ended the assembly contract in 2001.
|-
| ||Fabrica Superior de Centro America S.A.||?||[[w:El Salvador|El Salvador]]||[[w:Bedford HA#The BTV|Cherito]]||1973||1975||A version of GM's [[w:Bedford HA#The BTV|BTV]] called the Cherito was assembled in El Salvador. It was distributed by Auto Palace.
|-
| ||Fernandes Autohandel||?||[[w:Suriname|Suriname]]||[[w:Bedford HA#The BTV|Moetete]]||1973||1975||A version of GM's [[w:Bedford HA#The BTV|BTV]] called the Moetete was assembled in Suriname.
|-
| ||[[w:GAZ|GAZ]]||[[w:Nizhny Novgorod|Nizhny Novgorod]]||[[w:Russia|Russia]]||[[w:Chevrolet Aveo#Second generation (T300; 2012)|Chevrolet Aveo]]||2013||2015||Built under contract by [[w:GAZ|GAZ]] for GM. GM ended the contract in 2015.
|-
| ||Genoto (General Otomotiv Sanayi ve Ticaret AS)||[[w:Kozyatağı|Kozyatağı]], [[w:Istanbul|Istanbul]]||[[w:Turkey|Turkey]]||[[w:Bedford Vehicles|Bedford trucks]] including [[w:Bedford TK|Bedford TK]] (KG EJR & KBC 10 & 570)||1965||1986||Built Bedford trucks under license from GM, sometimes rebadged as Genoto.
|-
|E||[[w:Heuliez|Heuliez]]||[[w:Cerizay|Cerizay]]||[[w:France|France]]||[[w:Opel Tigra#Tigra TwinTop B (2004–2009)|Opel/Vauxhall Tigra TwinTop B]]<br />[[w:Opel Tigra#Tigra TwinTop B (2004–2009)|Holden Tigra (XC)]]||2004||2009||Built under contract by [[w:Heuliez|Heuliez]] for Opel/Vauxhall.
|-
| ||[[w:Hindustan Motors|Hindustan Motors]]||[[w:Uttarpara|Uttarpara]], [[w:West Bengal|West Bengal]]||[[w:India|India]]||[[w:Vauxhall Motors|Vauxhall]] models under Hindustan name including [[w:Hindustan Contessa|Hindustan Contessa]] (based on [[w:Vauxhall Victor|Vauxhall Victor]])<br />[[w:Bedford Vehicles|Bedford]] models including [[w:Bedford TJ|Bedford TJ]]<br />[[w:Allison Transmission|Allison Transmission]]<br />[[w:Terex|Terex]]||1957 (?)||2004||Built under license by [[w:Hindustan Motors|Hindustan Motors]].
|-
| ||INDEVESA, S.A. (Industrias Nicaraguenses De Vehiculos SA)||(?)||[[w:Nicaragua|Nicaragua]]||[[w:Bedford HA#The BTV|Pinolero]]||1974||(?)||The Nicaraguan state-owned company produced a version of GM's BTV called the Pinolero.
|-
| ||Industrias Superior||[[w:Guatemala City|Guatemala City]]||[[w:Guatemala|Guatemala]]||[[w:Bedford HA#The BTV|Chato]]||1977||1970's||A version of GM's [[w:Bedford HA#The BTV|BTV]] called the Chato was assembled in Guatemala. It was distributed by CIDEA.
|-
|3||[[w:Isuzu|Isuzu]] Kawasaki plant||[[w:Kawasaki, Kanagawa|Kawasaki, Kanagawa]]||[[w:Japan|Japan]]||[[w:Chevrolet W-Series|Chevrolet W-Series]] (1984-1998)<br />[[w:GMC W-Series|GMC W-Series]] (1984-1998)<br />[[w:Isuzu N-Series|Isuzu N-Series]] (1987-1994)<br />[[w:Isuzu F-Series|Isuzu F-Series]] (1995-98 FRR, 1989-96 FSR, 1992-96 FTR/FVR)||1938||2005||[[w:Isuzu|Isuzu]] plant. Closed 2005.
|-
|H<br />(WMI: MPA)||[[w:Isuzu Motors (Thailand)|Isuzu Motors Co., (Thailand) Ltd.]] (IMCT)||Samrong Tai, [[w:Phra Pradaeng district|Phra Pradaeng district]], [[w:Samut Prakan province|Samut Prakan province]]||[[w:Thailand|Thailand]]||[[w:Holden Rodeo|Holden Rodeo (RA)]]||2003||2008||Rebadged Isuzu D-Max produced by Isuzu Thailand for GM Holden in Australia and New Zealand. Replaced by the updated and renamed Holden Colorado, which was made by GM Thailand rather than Isuzu Thailand. The model name was changed because after GM sold the last of its shares in Isuzu in 2006, GM Holden lost the right to use the Rodeo name, which was owned by Isuzu, during 2008.
|-
|9||[[w:KUKA|KUKA]]||[[w:Livonia, Michigan|Livonia]], [[w:Michigan|Michigan]]||United States||[[w:BrightDrop Zevo 600|BrightDrop Zevo 600]] (2022)||2021||2022||Produced under contract for GM in a limited run of less than 500 units. A temporary measure until GM's CAMI plant is ready to start building BrightDrop electric vans.
|-
| ||[[w:Lilpop, Rau i Loewenstein|Lilpop, Rau and Loewenstein (LRL)]]||[[w:Warsaw|Warsaw]]||[[w:Poland|Poland]]||[[w:Chevrolet|Chevrolet]] cars, trucks, and buses<br />[[w:Buick|Buick]]<br />[[w:Opel|Opel]]||1937||1939||Was located at Bema Street. Lilpop, Rau and Loewenstein was a GM distributor who also assembled vehicles from CKD kits under license from GM until the German invasion that began World War II interrupted production. The Germans took over the factory during the war and the company was nationalized by the Communist Polish govt. after the war.
|-
|N (Opel Speedster &<br />Vauxhall VX220)<br /><br />H (Lotus models)||[[w:Lotus Cars|Lotus Cars]]||[[w:RAF Hethel|RAF Hethel]], [[w: Hethel|Hethel]], [[w:Norfolk|Norfolk]], [[w:England|England]]||[[w:United Kingdom|United Kingdom]]||
[[w:Opel Speedster|Opel Speedster]]/[[w:Vauxhall VX220|Vauxhall VX220]] (2001-2006) 7,207 units
[[w:Lotus Elise|Lotus Elise]]<br />[[w:Lotus Exige|Lotus Exige]]
||2000||2005||GM owned Lotus from 1986-1993. GM sold Lotus in 1993 to A.C.B.N. Holdings S.A. of Luxembourg, a company controlled by Italian businessman Romano Artioli, who also owned Bugatti Automobili SpA. Artioli sold Lotus to Malaysian automaker [[w:Proton Holdings|Proton]] in 1996. The Opel Speedster & Vauxhall VX220 were built under contract for GM by Lotus after GM had sold Lotus. The Opel Speedster & Vauxhall VX220 were based on the Lotus Elise.
|-
|6||[[w:Magna Steyr|Magna Steyr]]||[[w:Graz|Graz]]||[[w:Austria|Austria]]||[[w:Saab 9-3#Second generation (2003–2014)|Saab 9-3 Convertible]] (2004-2010)||2003||2009||Built under contract by [[w:Magna Steyr|Magna Steyr]] for GM-owned Saab Automobile AB. 9-3 Convertible production was moved to Saab's own plant in Trollhattan, Sweden in January 2010.
|-
| ||[[w:de:McCairns Motors|McCairns Motors Ltd.]]||[[w:Dublin Docklands|Dublin Docklands]], [[w:Dublin|Dublin]] and [[w:Santry|Santry]]||[[w:Republic of Ireland|Republic of Ireland]]||[[w:Vauxhall Cresta|Vauxhall Cresta]]<br />[[w:Vauxhall Victor|Vauxhall Victor]]<br />[[w:Vauxhall Viva|Vauxhall Viva]]<br />[[w:Bedford Vehicles|Bedford trucks]]<br />[[w:Chevrolet Bel Air|Chevrolet Bel Air]]||1935||1975||McCairns Motors was the local assembler and distributor for Vauxhall and Bedford in Ireland. Assembly began at Dublin Port on Alexandra Road in November 1935. In 1951, car assembly moved to a larger plant in Santry. McCairns also assembled and sold other brands like Simca, Alfa Romeo, and Mitsubishi Fuso. Production ended due to Ireland joining the European Economic Community in 1973 and the end of tariffs on imports of completely built-up vehicles. This removed the need for local assembly in Ireland. McCairns Motors used the site in Santry until 1987. The Omni Park shopping center now stands where the assembly plant in Santry used to be.
|-
| ||[[w:Mercury Marine|Mercury Marine]]||[[w:Stillwater, Oklahoma|Stillwater, Oklahoma]]||United States||[[w:Chevrolet small-block engine (first and second generation)#LT5|5.7L LT5 DOHC V8 engine]] (For 1990-1995 C4 Chevrolet Corvette ZR-1)||1989||1993||Engine was built for GM by Mercury Marine at their existing MerCruiser marine engine plant in Stillwater. 21,000 square feet of the 650,000 square foot plant was partitioned from the rest of the plant for assembly of this engine. LT5 engine production actually ended in 1993. Extra engines were built to be sufficient for Corvette ZR-1 production through 1995. The extra engines were sealed and crated for long-term storage and were shipped to the Corvette plant in Bowling Green, Kentucky and stored there until they were needed for installation in a '94 or '95 Corvette ZR-1. <br> Plant was located at 3003 N Perkins Rd. Closed in December 2011. Sold in 2012 to Belgium-based aerospace supplier Asco Industries.
|-
|H||[[w:Navistar|Navistar]] - Springfield Assembly Plant (Main Line)||[[w:Springfield, Ohio|Springfield, Ohio]]||[[w:United States|United States]]||[[w:Chevrolet Silverado#Medium duty version (4500HD, 5500HD, 6500HD, and International CV)|Chevrolet Silverado Medium Duty (2019-2026)<br />International CV]] (2019-2026)||2019||2026||Located at 6125 Urbana Road. Jointly developed by GM & Navistar. Built under contract by [[w:Navistar|Navistar/International Motors]] for GM. Contract with GM ended Sept. 30, 2026. Both the Silverado Medium Duty & the International CV are discontinued. Plant sold to [[w:Roshel|Roshel]].
|-
|N||[[w:Navistar|Navistar]] - Springfield Assembly Plant (Secondary Line)||[[w:Springfield, Ohio|Springfield, Ohio]]||[[w:United States|United States]]||[[w:Chevrolet Express|Chevrolet Express]] cutaway (2017-2026),<br /> [[w:GMC Savana|GMC Savana]] cutaway (2017-2026) ||2017||2026||Located at 6125 Urbana Road. Built under contract by [[w:Navistar|Navistar/International Motors]] for GM. Contract with GM ended Sept. 30, 2026. For 2027, all Express and Savana production is at GM's own Wentzville Assembly Plant. Express/Savana 3500 series cutaway w/177-inch wheelbase and all Express/Savana 4500 series cutaways (159 & 177 inch wheelbases) are discontinued. Plant sold to [[w:Roshel|Roshel]].
|-
| ||Neal and Massy Industries Ltd.||[[w:Morvant|Morvant]]<br /> later moved to <br />[[w:Arima|Arima]]||[[w:Trinidad and Tobago|Trinidad and Tobago]]||[[w:Holden Commodore#First generation (1978–1988)|Holden Commodore]]<br />[[w:Holden Kingswood|Holden Kingswood]]<br />[[w:Statesman (automobile)|Chevrolet Caprice (rebadged Statesman DeVille)]]<br />[[w:Opel Rekord Series C|Opel Rekord]]<br />[[w:Vauxhall Cresta|Vauxhall Cresta]]<br />[[w:Vauxhall Victor|Vauxhall Victor]]<br />[[w:Vauxhall Viva|Vauxhall Viva]]<br />[[w:Bedford Vehicles|Bedford trucks]]||1966||1994 (Production for GM may have ended earlier)||Built under license by Neal and Massy for GM. Neal and Massy also assembled vehicles for Datsun (Nissan) and Mazda. Assembly operation closed in 1994. Neal and Massy (now called Massy Motors) still operates as an importer/distributor for several non-GM automotive brands.
|-
| ||[[w:Nexus Automotive|Nexus Automotive (Pvt.) Ltd.]]||[[w:Port Qasim|Port Qasim]], [[w:Karachi|Karachi]], [[w:Sindh|Sindh province]]||[[w:Pakistan|Pakistan]]||[[w:Chevrolet Spark#Asia|Chevrolet Joy]]||2005||2006||Nexus Automotive was a GM licensed assembler and distributor. Built under contract for [[w:Nexus Automotive|Nexus Automotive]] by [[w:Ghandhara Nissan|Ghandhara Nissan]] at a plant with spare capacity.
|-
|K||[[w:Nissan USA#Manufacturing|Nissan Mexicana]]||[[w:Cuernavaca|Cuernavaca]]||[[w:Mexico|Mexico]]||[[w:Chevrolet City Express|Chevrolet City Express]] (2015-2018)<br />[[w:Nissan NV200|Nissan NV200]] (2013-2021)||2014||2018||Nissan plant.
Chevrolet City Express is a rebadged Nissan NV200 made for GM by Nissan. Chevrolet <br> City Express discontinued after 2018. NV200 discontinued in North America after 2021.
|-
| ||[[w:Nissan Motor Australia|Nissan Motor Australia]] Clayton plant||[[w:Clayton South, Victoria|Clayton South]], [[w:Victoria (state)|Victoria]]||[[w:Australia|Australia]]||[[w:Holden Astra#First generation (LB, LC; 1984–1987)|Holden Astra (LB/LC)]]<br />[[w:Nissan Pulsar#N12 (1982)|Nissan Pulsar (N12)]]<br />[[w:Holden Astra#Second generation (LD; 1987–1989)|Holden Astra (LD)]]<br />[[w:Nissan Pulsar#N13 (1986)|Nissan Pulsar (N13)]]||1984 (GM prod.)||1989 (GM prod.)|| Production for GM Holden at Nissan's Australian plant was done as part of the Australian government's [[w:Button car plan|Button car plan]] for rationalization of local automotive production. The relationship ended in 1989 and GM Holden established a joint venture with Toyota called [[w:United Australian Automobile Industries|United Australian Automobile Industries]] to replace the Nissan relationship. The Nissan Pulsar-based Holden Astra was replaced by the Toyota Corolla-based Holden Nova. Nissan closed its Australian vehicle assembly plant in 1992. The Clayton plant was later taken over by HSV and the Walkinshaw Group.
|-
|Y||[[w:Nissan Motor Ibérica|Nissan Motor Ibérica]]||[[w:Barcelona|Barcelona]]||[[w:Spain|Spain]]||[[w:Opel Vivaro A|Opel/Vauxhall Vivaro A]] (high roof versions only)<br />[[w:Renault Trafic#Second generation (X83; 2001)|Renault Trafic]] (high roof versions only)<br />[[w:Renault Trafic#Second generation (X83; 2001)|Nissan Primastar]] (high roof versions only)||2001||2015||This is a Nissan plant that built high roof versions of Renault-designed midsize vans for Opel/Vauxhall as part of a supply deal between GM Europe & Renault as well as for Renault and Nissan. The low roof versions were made by Vauxhall at the IBC Vehicles/GMM Luton plant however that UK plant could not fit the high roof versions so they were built by Nissan in Spain. Van production in Barcelona ended in 2015 and high roof Opel/Vauxhall Vivaro production was moved to Renault's plant in Sandouville, France, which also handled all Renault Trafic and Nissan NV300 (Primastar replacement) production. Nissan closed this plant in Dec. 2021.
|-
| ||[[w:de:O’Shea’s Limited (Opel)|O’Shea’s Limited]]||[[w:Cork (city)|Cork]], [[w:Munster|Munster]]||[[w:Republic of Ireland|Republic of Ireland]]||[[w:Opel|Opel]] cars including [[w:Opel Rekord|Rekord]]||1937||1965|| Before 1962, O’Shea’s was the sole Opel assembler and distributor in Ireland. From 1962-1965, assembly and distribution of Opels in Ireland was split between Reg Armstrong Motors and O’Shea’s Limited. After 1965, Reg Armstrong Motors was the sole Opel assembler and distributor in Ireland.
|-
| ||PT. Pantja Motor||[[w:Sunter, Jakarta|Sunter]], [[w:North Jakarta|North Jakarta]], [[w:Jakarta|Jakarta]]||[[w:Indonesia|Indonesia]]||[[w:Chevrolet Tavera|Chevrolet Tavera]]||2001||2005||Isuzu's Indonesian assembler, now known as [[w:Isuzu Astra Motor Indonesia|Isuzu Astra Motor Indonesia]]. Built the Isuzu Panther-based Tavera for GM Indonesia.
|-
| ||[[w:Pininfarina|Pininfarina]]||[[w:Grugliasco|Grugliasco]]||[[w:Italy|Italy]]||[[w:Cadillac Eldorado#1959–60 Eldorado Brougham|Cadillac Eldorado Brougham (Series 6900)]] (1959-1960) painted bodies||1959||1960||Bodies were built by [[w:Pininfarina|Pininfarina]] and mated with chassis shipped to Italy by Cadillac and then shipped back to the US.
|-
| ||[[w:Pininfarina|Pininfarina]]||[[w:San Giorgio Canavese|San Giorgio Canavese]]||[[w:Italy|Italy]]||[[w:Cadillac Allanté|Cadillac Allanté]] (1987-1993) painted bodies||1986||1993||Bodies were designed and manufactured under contract by [[w:Pininfarina|Pininfarina]] for Cadillac. Plant was built specially for the Allanté. Bodies were then flown from Turin, Italy to Detroit on specially equipped Boeing 747s and then trucked to GM's Detroit/Hamtramck Assembly Plant for final assembly. The assembly process was known as the "Allanté Air Bridge". It was also referred to as "the world's longest assembly line."
|-
| ||[[w:Pragoti|Pragoti Industries Ltd.]]||[[w:Sitakunda|Sitakunda]], [[w:Chittagong Division|Chittagong Division]]||[[w:Bangladesh|Bangladesh]]||[[w:Vauxhall Viva|Vauxhall Viva]]<br />[[w:Bedford Vehicles|Bedford trucks and buses]]<br />[[w:Bedford HA#The BTV|BTV]]||1966||1970's||Began as part of [[w:Ghandhara Industries|Ghandhara Industries]] Ltd. in 1966 when Bangladesh was still [[w:East Pakistan|East Pakistan]] and assembled GM vehicles like the Ghandhara plant in Karachi did. After Bangladesh became independent in 1971, the operation was nationalized by the new government and became Pragoti Industries Ltd.
|-
| ||[[w:de:Reg. Armstrong Motors|Reg Armstrong Motors Ltd.]]||[[w:Ringsend|Ringsend]], [[w:Dublin|Dublin]]||[[w:Republic of Ireland|Republic of Ireland]]||[[w:Opel|Opel]] cars including [[w:Opel Kadett|Kadett]], [[w:Opel Rekord|Rekord]], and [[w:Opel Commodore|Commodore]]||1962||1974||From 1962-1965, assembly and distribution of Opels in Ireland was split between Reg Armstrong Motors and O’Shea’s Limited. After 1965, Reg Armstrong Motors was the sole Opel assembler and distributor in Ireland. Reg Armstrong Motors also assembled the [[w:NSU Prinz|NSU Prinz]], [[w:Honda motorcycles|Honda motorcycles]], and from 1976-1978, the original [[w:Mini|Mini]] at the Ringsend plant. Production ended due to Ireland joining the European Economic Community in 1973 and the end of tariffs on imports of completely built-up vehicles. This removed the need for local assembly in Ireland.
|-
|B (GM)||[[w:Société de Véhicules Automobiles de Batilly|Renault Batilly]]||[[w:Batilly, Meurthe-et-Moselle|Batilly]]||[[w:France|France]]||[[w:Renault Trafic#First generation (1980)|Opel/Vauxhall Arena]]<br />[[w:Renault Trafic#First generation (1980)|Renault Trafic]]<br />[[w:Renault Master#Second generation (1997)|Opel/Vauxhall Movano A]]<br />[[w:Renault Master#Third generation (2010)|Opel/Vauxhall Movano B]]<br />[[w:Renault Master|Renault Master]]<br />[[w:Renault Master#Renault Mascott|Renault Trucks Mascott]]<br />[[w:Nissan Interstar|Nissan Interstar]]<br />[[w:Nissan NV400|Nissan NV400]]||1997||2017||Renault-[[w:Société de Véhicules Automobiles de Batilly|SOVAB]] plant. Opel/Vauxhall was sold to [[w:PSA Group|PSA Group]] in 2017. As part of PSA Group, Opel/Vauxhall became part of [[w:Stellantis|Stellantis]] in 2021. Movano switched to being PSA/Fiat-based instead of Renault-based in 2021.
|-
|S (GM)||[[w:Sandouville Renault Factory|Renault Sandouville]]||[[w:Sandouville|Sandouville]]||[[w:France|France]]||[[w:Renault Trafic#Third generation (X82; 2014)|Opel/Vauxhall Vivaro]] B (high roof versions only) <br />[[w:Renault Trafic#Third generation (X82; 2014)|Renault Trafic]]<br />[[w:Nissan NV300|Nissan NV300]]<br />[[w:Renault Trafic#Third generation (X82; 2014)|Nissan Primastar]]<br />[[w:Renault Trafic#Third generation (X82; 2014)|Fiat Talento]]||2014||2017||Renault plant. Opel/Vauxhall was sold to [[w:PSA Group|PSA Group]] in 2017. Vivaro switched to being PSA-based instead of Renault-based in 2018. As part of PSA Group, Opel/Vauxhall became part of [[w:Stellantis|Stellantis]] in 2021.
|-
| ||[[w:Renault Argentina|Renault Santa Isabel]]||[[w:Santa Isabel, Córdoba|Santa Isabel]], [[w:Córdoba Province, Argentina|Cordoba]]||[[w:Argentina|Argentina]]||[[w:Chevrolet D-20|Chevrolet C-20 & D-20]]<br />[[w:Chevrolet Tahoe#First generation (1992)|Chevrolet Grand Blazer]] (GMT400)<br />[[w:Chevrolet C/K#1997–2001|Chevrolet Silverado]] (GMT400)<br />[[w:Renault Trafic#South America|Chevrolet Trafic/SpaceVan]] ||1991||2002||[[w:Renault Argentina|Renault Argentina]]-CIADEA plant. Built Chevrolets under license for GM.
|-
| ||[[w:Sevel Argentina|Sevel Argentina]]||[[w:Córdoba, Argentina|Estación Ferreyra, Córdoba]], [[w:Córdoba Province, Argentina|Cordoba]]||[[w:Argentina|Argentina]]||[[w:Chevrolet D-20|Chevrolet C-20/D-20]]||1985||1991||Fiat - PSA jointly owned plant. Built Chevrolets under license for GM.
|-
|For Saab<br> 9-2X:<br> G (w/man. trans.),<br> H (w/auto. trans.)||[[w:Subaru#Manufacturing facilities|Subaru Main Plant]]||[[w:Ōta, Gunma|Ōta, Gunma]]||[[w:Japan|Japan]]||[[w:Saab 9-2X|Saab 9-2X]] (2005-2006)<br />[[w:Subaru Forester#Second generation (SG; 2002)|Chevrolet Forester (India)]] (2003-2007)||2003 (GM prod.)||2007 (GM prod.)||[[w:Subaru|Subaru]] plant
|-
|4||[[w:Subaru-Isuzu Automotive|Subaru-Isuzu Automotive]] (S.I.A.)||[[w:Lafayette, Indiana|Lafayette, Indiana]]||United States||[[w:Holden Frontera#Second generation (1998)|Holden Frontera]] (UE/MX)||1999 (GM prod.)||2003 (GM prod.)||Subaru & Isuzu joint venture plant. Isuzu built a rebadged, rhd version of the 2nd generation US market Isuzu Rodeo & Amigo SUVs for export to GM Holden in Australia and New Zealand.
|-
|W (GM),<br />4 (Suzuki)||Suzuki Iwata Assembly||[[w:Iwata, Shizuoka|Iwata, Shizuoka]]||[[w:Japan|Japan]]||[[w:Chevrolet Tracker (Americas)#First generation|Geo Tracker]] (US: 1989-1990)<br />[[w:Suzuki Sidekick|Suzuki Sidekick]] (US: 1989-1995, 1997-98)<br />[[w:Suzuki Sidekick|Suzuki Sidekick Sport]] (US: 1996-1998)<br />[[w:Suzuki Grand Vitara|Suzuki Grand Vitara]] (1999-2013)<br />[[w:Suzuki XL-7#First generation (XL-7; 1998)|Suzuki XL-7]] (2001-2006)<br />[[w:Holden Drover#Second generation (1981)|Holden Drover (QB)]]<br />[[w:Holden Scurry#Eighth generation (DA71/DB71/DA81/DA41/DB41/DA51/DB51; 1985)|Holden Scurry (NB)]]||1985 (GM prod.)||1990 (GM prod.)||[[w:Suzuki|Suzuki]] plant
|-
|K (GM),<br />5 (Suzuki)||Suzuki Kosai Assembly||[[w:Kosai, Shizuoka|Kosai, Shizuoka]]||[[w:Japan|Japan]]||[[w:Chevrolet Sprint|Chevrolet Sprint]] (US: 1985-1988)<br />[[w:Geo Metro|Geo Metro]] (US: 1989-1993)<br />[[w:Pontiac Firefly|Pontiac Firefly]] (Canada)<br />[[w:Holden Barina#First generation (MB, ML; 1985–1988)|Holden Barina (MB/ML)]]<br />[[w:Holden Barina#Second generation (MF, MH; 1989–1994|Holden Barina (MF/MH)]]<br />[[w:Suzuki Cultus|Suzuki Swift]] (US: 1989-1994)<br />[[w:Suzuki Ignis#Chevrolet Cruze|Chevrolet/Holden Cruze (YGM1)]] (YG) ||1984 (GM prod.)||2008 (GM prod.)||[[w:Suzuki|Suzuki]] plant
|-
|M (GM),<br />0 (Suzuki/Fiat/Subaru)||[[w:Magyar Suzuki Corporation|Magyar Suzuki Corporation]]||[[w:Esztergom|Esztergom]]||[[w:Hungary|Hungary]]||[[w:Opel Agila#Second generation (H08; 2007)|Opel/Vauxhall Agila B]]<br />[[w:Suzuki Splash|Suzuki Splash]]<br />[[w:Suzuki Swift|Suzuki Swift]]<br />[[w:Suzuki Cultus#Second generation (1988)|Subaru Justy]]<br />[[w:Suzuki SX4|Suzuki SX4]]<br />[[w:Fiat Sedici|Fiat Sedici]]<br />[[w:Suzuki Ignis#Suzuki Ignis (2003 facelift)|Suzuki Ignis]]<br />[[w:Suzuki Ignis#Suzuki Ignis (2003 facelift)|Subaru G3X Justy]]||1992<br /><br />2007 (GM prod.)||2014 (GM prod.)||[[w:Suzuki|Suzuki]] plant
|-
| ||Suzuki Sagara Assembly & Engine||[[w:Makinohara|Makinohara]], [[w:Shizuoka Prefecture|Shizuoka Prefecture]]||[[w:Japan|Japan]]||[[w:Chevrolet MW|Chevrolet MW]] (sold in Japan)<br />||2000||2010||[[w:Suzuki|Suzuki]] plant.<br /> Also built the 3.6-liter GM High Feature V6 engine ([[w:GM High Feature engine#LY7|Suzuki N36A]]) to power the [[w:Suzuki XL-7#Second generation (XL7; 2006)|2nd generation Suzuki XL7]] under license from GM. (Note: Dates reflect beginning & end dates of production for GM.)
|-
| ||Tecna SA||[[w:Arica, Chile|Arica]]||[[w:Chile|Chile]]||[[w:Acadian (automobile)|Acadian]] (1962-71 from CKD kits supplied by GM Oshawa and Willow Run)<br />[[w:Beaumont (automobile)|Acadian Beaumont]] (1964-71 from CKD kits supplied by GM Oshawa)<br />[[w:Vauxhall Victor|Vauxhall Victor]]||1962||1971||
|-
| ||Tecno S.A.||[[w:Uruca|La Uruca]], [[w:San José, Costa Rica|San José]]||[[w:Costa Rica|Costa Rica]]||[[w:Bedford HA#The BTV|GM Amigo]]||1970s||(?)||A version of GM's [[w:Bedford HA#The BTV|BTV]] called the Amigo was assembled in Costa Rica.
|-
| ||Tecnomotor S.A.||(?)||[[w:Paraguay|Paraguay]]||[[w:Bedford HA#The BTV|GM Mitai]]||1970s||(?)||A version of GM's [[w:Bedford HA#The BTV|BTV]] called the Mitai was assembled in Paraguay.
|-
|9 (GM),<br />6 (Fiat & Ram)||[[w:Tofaş|Tofaş]]||[[w:Bursa|Bursa]]||[[w:Turkey|Turkey]]||[[w:Opel Combo#Combo D (2012-2018)|Opel/Vauxhall Combo D]]<br />[[w:Fiat Doblo|Fiat Doblo]]<br />[[w:Ram ProMaster City|Ram ProMaster City]]||2011||2017||[[w:Fiat|Fiat]] plant (joint venture with Koç Holding of Turkey). Opel/Vauxhall was sold to PSA Group in 2017. Combo switched to being PSA-based instead of Fiat-based in 2019. As part of PSA Group, Opel/Vauxhall became part of Stellantis in 2021. Fiat and Tofaş also became part of Stellantis in 2021.
|-
| ||[[w:Toyota Australia|Toyota Australia]] [[w:Toyota Australia Altona Plant|Altona plant]]||[[w:Altona North|Altona North]], [[w:Victoria (state)|Victoria]]||[[w:Australia|Australia]]||[[w:Holden Nova#Second generation (LG; 1994–1996)|Holden Nova (LG)]]<br />[[w:Toyota Corolla (E100)|Toyota Corolla (E100)]]<br />[[w:Holden Apollo|Holden Apollo (JM/JP)]]<br />[[w:Toyota Camry (XV10)|Toyota Camry (XV10)]]||1994||1996 (GM prod.)|| Production for GM Holden at Toyota's Australian plant was done as part of [[w:United Australian Automobile Industries|United Australian Automobile Industries]], a model sharing joint venture in Australia between Holden and Toyota from 1987-1996. This was created as part of the Australian government's [[w:Button car plan|Button car plan]] for rationalization of local automotive production. Toyota consolidated its Australian production at the new Altona plant in 1994-1995. The joint venture dissolved in 1996 and Holden's rebadged Toyotas were replaced with rebadged Opel models (Astra and Vectra) from GM Europe. Corolla production in Australia ended in 1999. Toyota closed the Altona plant in 2017.
|-
| ||[[w:Toyota Australia|Toyota Australia]] Port Melbourne plant||[[w:Port Melbourne|Port Melbourne]], [[w:Victoria (state)|Victoria]]||[[w:Australia|Australia]]||[[w:Holden Apollo|Holden Apollo (JK/JL)]]<br />[[w:Toyota Camry#V20 (1986–1992)|Toyota Camry (V20)]]<br />[[w:Holden Apollo|Holden Apollo (JM)]]<br />[[w:Toyota Camry (XV10)|Toyota Camry (XV10)]]||1989 (GM prod.)||1994 (GM prod.)|| Production for GM Holden at Toyota's Australian plant was done as part of [[w:United Australian Automobile Industries|United Australian Automobile Industries]], a model sharing joint venture in Australia between Holden and Toyota from 1987-1996. This was created as part of the Australian government's [[w:Button car plan|Button car plan]] for rationalization of local automotive production. Toyota consolidated its Australian production at the new Altona plant in 1994-1995 and production ended at the older Port Melbourne plant in late 1994. The joint venture would later dissolve in 1996 and Holden's rebadged Toyota Camry was replaced with a rebadged Opel Vectra from GM Europe.
|-
| ||PT. Udatin (Usaha Dagang Teknik Indonesia)||[[w:Surabaya|Surabaya]], [[w:East Java|East Java]]||[[w:Indonesia|Indonesia]]||[[w:Holden FC|Holden FC]]<br />[[w:Holden FB|Holden FB]]<br />[[w:Holden EK|Holden EK]]<br />[[w:Holden EJ|Holden EJ]]<br />[[w:Holden EH|Holden EH]]<br />[[w:Holden HQ|Holden HQ]]<br />[[w:Holden HJ|Holden HJ]]<br />[[w:Holden HX|Holden HX]]<br />[[w:Holden HZ|Holden HZ]]<br />[[w:Statesman (automobile)|Statesman brand HQ-HZ]]<br />[[w:Holden Monaro|Holden Monaro]] HQ<br />[[w:Holden Torana|Holden Torana]] LJ, LH, LX<br /> [[w:Holden Gemini#First generation|Holden Gemini TX, TC, TD, TE, TF, TG]]<br />[[w:Holden Camira|Holden Camira]] JB<br />[[w:Isuzu Aska#South-East Asia and New Zealand|Holden Aska]]<br />[[w:Holden Gemini#Second generation|Holden Gemini (RB)]]<br />[[w:Holden Commodore (VB)|Holden Commodore (VB)]]<br />[[w:Holden Commodore (VC)|Holden Commodore (VC)]]<br />[[w:Holden Commodore (VH)|Holden Commodore (VH)]]<br />[[w:Holden Commodore (VK)|Holden Commodore (VK)]]<br />[[w:Holden Commodore (VL)|Holden Calais (VL)]]<br />[[w:Isuzu Faster#Second generation (1980–1988)|Holden Lincah/Raider]]<br />[[w:GMC (automobile)|GMC trucks]]||1959||1988||Built vehicles under contract for GM. During the 1960's, production was off and on due to Indonesian government policies and the economic situation. Production ended in 1988.
|-
| ||Unison||[[w:Minsk|Minsk]]||[[w:Belarus|Belarus]]||[[w:Chevrolet Tahoe#Fourth generation (2015)|Chevrolet Tahoe]] K2XX, [[w:Chevrolet Trax|Chevrolet Tracker]], [[w:Cadillac Escalade#Fourth generation (2015)|Cadillac Escalade]] K2XX, [[w:Opel Mokka#First generation (J13; 2012)|Opel Mokka]]||2015||2018||Built under contract by Unison for GM. Production ended in 2018.
|-
|6,7 (Saab)<br />9 (Opel/Vauxhall)||[[w:Valmet Automotive|Valmet Automotive]]||[[w:Uusikaupunki|Uusikaupunki]]||[[w:Finland|Finland]]||[[w:Saab 9-3#First generation (1998–2003)|Saab 9-3 Convertible & 9-3 Viggen]]<br />[[w:Saab 900|Saab 900]] (including 900 Convertible)<br />[[w:Opel Calibra|Opel/Vauxhall Calibra]]||1969||2003||Built under contract by [[w:Valmet Automotive|Valmet Automotive]] for Saab & for Opel/Vauxhall. Saab-Valmet was established in 1968 as a joint venture between Valmet and Saab-Scania. In 1992, Valmet became the sole owner, and the company was renamed Valmet Automotive in 1995.
|-
|X||[[w:ZAZ|ZAZ]]||[[w:Zaporizhia|Zaporizhia]] & [[w:Illichivsk|Illichivsk]]||[[w:Ukraine|Ukraine]]||[[w:Chevrolet Aveo (T200)|Chevrolet Aveo]], [[w:Chevrolet Lacetti|Chevrolet Lacetti]], [[w:Chevrolet Lanos|Chevrolet Lanos]], [[w:Opel Astra#G|Opel Astra Classic]], [[w:Opel Astra#H|Opel Astra]], [[w:Opel Corsa|Opel Corsa]], [[w:Opel Combo|Opel Combo]], [[w:Opel Meriva|Opel Meriva]], [[w:Opel Vectra|Opel Vectra]], [[w:Opel Zafira|Opel Zafira]]||2003||2012||Built under contract by [[w:ZAZ|ZAZ]] for GM.
|-
|}
rjff6itjvicve10w7igltoiemdff6l3
4676285
4676284
2026-10-15T17:35:26Z
JustTheFacts33
3434282
/* Former factories */
4676285
wikitext
text/x-wiki
This is a '''history of [[w:General Motors|General Motors]] factories''' that are being or have been used to produce cars, vans, SUVs, trucks, buses, and automobile components.<ref name=GMfacilities>[https://web.archive.org/web/20080614231130/http://www.gm.com/corporate/responsibility/environment/plants/index.jsp GM facilities map]. Retrieved on July 8, 2009.</ref> The factories are sometimes idled for re-tooling.
Originally, GM's different divisions each had their own serial number formats and plant codes. Chevrolet cars, Pontiac, Oldsmobile, and Buick unified their serial number formats and plant codes in 1965. Cadillac adopted the same unified format in 1971. Chevrolet trucks and GMC trucks unified their serial number formats in 1972. Chevrolet trucks and GMC trucks were already using the same plant codes from 1964 and those were unified with the car divisions (other than Cadillac) in 1965. Cadillac did not use plant codes before 1971 as all Cadillacs were made at Cadillac's home plant in Detroit until 1971. In 1971, Cadillacs began to be made in more than one plant so they started using plant codes, using the same codes that the other GM car divisions were using since 1965. GM Canada used the same format as GM USA from 1967.
For US-built models:
For '''Chevrolet cars including El Camino''': Plant code was the 1st or 1st 2 digits of the serial number from 1928-1952. Plant code was the 4th position of the serial number from 1953-1957 6-cylinder models. Plant code was the 5th position of the serial number from 1955-1957 V8 models. Plant code was the 4th position of the serial number from 1958-1959. Plant code was the 6th position of the serial number from 1960-1964. Plant code was the letter or number in the 7th position of the serial number from 1965-1980.
For '''Chevrolet trucks''': Plant code was the 1st or 1st 2 digits of the serial number from 1947-1952. Plant code was the 4th position of the serial number from 1953-1954 & for the 1955 1st Series models. Plant code was the 5th position of the serial number for 1955 2nd Series models and 1956-1959 models with 6-cylinder engines. Plant code was the 6th position of the serial number for 1955 2nd Series models and 1956-1959 models with V8 engines. Plant code was the 6th position of the serial number from 1960-1971. Plant code was the letter or number in the 7th position of the serial number from 1972-1980 (including Chevy LUV).
For '''Pontiac''': Plant code was the 1st letter in the serial number from 1936-1938 for plants other than Pontiac, MI (Pontiac, MI omitted the 1st letter so the 1st position was a number rather than a letter for Pontiac, MI as Pontiac, MI didn't use a specific plant code). Plant code was the 1st position of the serial number from 1939-1958. Plant code was the 4th position of the serial number from 1959-1964. Plant code was the letter or number in the 7th position of the serial number from 1965-1980.
For '''Oldsmobile''': Plant code was the 1st of 2 letters in the serial number from 1937-1940 for plants other than Lansing (Lansing omitted the 1st letter so there was only 1 letter before the numbers rather than 2 letters for Linden & Southgate as Lansing didn't have a specific plant code). Plant code was the letter in the 3rd position of the serial number from 1941-1948 for plants other than Lansing (Lansing omitted the letter and didn't have a specific plant code). Plant code was the 4th position of the serial number from 1949-1964. Plant code was the letter or number in the 7th position of the serial number from 1965-1980.
For '''Buick''': Plant code was the number in the 1st position of the serial number from 1938-1953. Plant code was the number in the 3rd position of the serial number from 1954-1964. Plant code was the letter or number in the 7th position of the serial number from 1965-1980 (including '76-'79 Buick Opel by Isuzu).
For '''Cadillac''': Plant code was the letter or number in the 7th position of the serial number from 1971-1980. (Cadillac did not use plant codes before 1971 as all Cadillacs were made at Cadillac's home plant in Detroit until 1971.)
For '''GMC Sprint & Caballero''': Plant code was the letter or number in the 7th position of the serial number from 1971-1980.
For '''GMC trucks''': Plant code was the 6th position of the serial number from 1952-1954 & for 1955 1st Series models with manual transmission. Plant code was the 7th position of the serial number from 1952-1954 & for 1955 1st Series models with automatic transmission. Plant code was the 4th position of the serial number for 1955 2nd Series models and 1956-1959 models with 6-cylinder engines. Plant code was the 5th position of the serial number for 1955 2nd Series models and 1956-1959 models with V8 engines. Plant code was the 5th position of the serial number for 1960-1966 models with 2wd and V6 or V8 engines. Plant code was the 6th position of the serial number for 1960-1966 models with inline-6 engines or with 4wd. Plant code was the 7th position of the serial number from 1967-1971 (most models had a dash in the 6th position except for some models that had a special designation indicated in the 6th position). Plant code was the letter or number in the 7th position of the serial number from 1972-1980.
All models from 1981 on have the plant code in the 11th position as per standardized VIN regulations.
The above applies to Canadian-built models from 1967 on.
==Current factories==
{| class="wikitable sortable" style="font-size:90%"
!VIN !! Name !! City/State !! Country !! class="unsortable" | Products !! Opened !! Idled !! class="unsortable" | Comments
|-
|R (1963-1964 [[w:Chevrolet|Chevrolet]] and 1965-present)<br /><br />T (Pre-1965 [[w:Oldsmobile|Oldsmobile]] and Pre-1960 [[w:Pontiac (automobile)|Pontiac]])<br /><br />A (1960-1964 [[w:Pontiac (automobile)|Pontiac]])<br /><br />8 (Pre-1964 [[w:Buick|Buick]])||[[w:Arlington Assembly|Arlington Assembly]]||[[w:Arlington, Texas|Arlington, Texas]]||[[w:United States|United States]]||[[w:GMT T1XX|T1XX]] SUVs (2021-):<br />
[[w:Chevrolet Tahoe#Fifth generation (2021)|Chevrolet Tahoe]]<br />[[w:Chevrolet Suburban#Twelfth generation (2021)|Chevrolet Suburban]]<br />[[w:Chevrolet Tahoe#Yukon|GMC Yukon]]<br />[[w:Chevrolet Suburban#Yukon XL|GMC Yukon XL]]<br />[[w:Cadillac Escalade#Fifth generation (2021)|Cadillac Escalade]]<br />[[w:Cadillac Escalade#Fifth generation (2021)|Cadillac Escalade ESV]]
||1954|| ||Located at 2525 E Abram St.<br />Was originally part of the [[w:Buick-Oldsmobile-Pontiac Assembly Division|Buick-Oldsmobile-Pontiac Assembly Division]]. Production began on January 6, 1954. The first vehicle produced was a 1954 Pontiac Chieftain 4-door. Arlington began making Chevrolet passenger cars for 1963. BOP Assembly Division became GM Assembly Division in 1965. Arlington began making midsize cars for 1968 but focused exclusively on midsize cars from 1971-1987. Arlington resumed making full-size cars for 1988 for the first time since 1970. Arlington focused exclusively on rwd, full-size cars from 1988-1996. When Willow Run Assembly closed in 1993, Arlington became GM's only factory still building traditional body-on-frame, rwd, full-size cars. Passenger car production ended in 1996. It's interesting to note that Arlington has never built any fwd vehicles or any unibody vehicles. Arlington was then converted to build full-size SUVs. SUV production began for 1998. Full-size pickups were also built for 1998-2000. Arlington Assembly has produced models for all of GM's primary American brands: Chevrolet, Pontiac, Oldsmobile, Buick, Cadillac, and GMC. Arlington Assembly has produced over 13 million vehicles. A new 129,250-square-foot body shop on the plant's west side was announced in 2011 as part of retooling for the K2XX generation SUVs launched in 2014. A new stamping plant was announced in 2012 and opened in 2013 at Arlington Assembly, replacing stampings previously sourced from GM stamping plants elsewhere in the US.<br /> A $1.4 billion plant upgrade was completed to build the <br /> T1XX generation SUVs beginning in 2020. It included a new <br /> 1 million sq. ft. body shop & a 600,000-sq. ft. extension to the paint shop. The general assembly area was also upgraded. <br /> Past models:<br /> [[w:GM A platform (RWD)|GM A platform (RWD)]] (intermediate): [[w:Chevrolet Chevelle|Chevrolet Chevelle]] (1970-1977), [[w:Chevrolet El Camino|Chevrolet El Camino]] (1974-1981), [[w:Chevrolet Malibu|Chevrolet Malibu]] (1978-1981), [[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1970-1981), [[w:GMC Sprint|GMC Sprint]] (1974-1977), [[w:GMC Caballero|GMC Caballero]] (1978-1981), [[w:Oldsmobile Cutlass|Oldsmobile Cutlass]] (1971-1981), [[w:Oldsmobile Cutlass Supreme|Oldsmobile Cutlass Supreme]] (1971-1981), [[w:Oldsmobile 442|Oldsmobile 442]] (1971-1977), [[w:Pontiac GTO|Pontiac GTO]] (1968-1970), [[w:Pontiac LeMans|Pontiac LeMans]] (1968-1970), [[w:Pontiac Tempest|Pontiac Tempest]] (1968-1970)<br /> [[w:General Motors G platform (1969)|GM G platform (RWD) 1982-1988]]: [[w:Buick Regal|Buick Regal]] (1982-1983), [[w:Chevrolet El Camino|Chevrolet El Camino]] (1982-1984), [[w:Chevrolet Malibu|Chevrolet Malibu]] (1982-1983), [[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1982-1987), [[w:GMC Caballero|GMC Caballero]] (1982-1984), [[w:Oldsmobile Cutlass Supreme|Oldsmobile Cutlass Supreme]] (1982-1987), [[w:Oldsmobile 442|Oldsmobile 442]] (1985).<br /> [[w:General Motors A platform (1925)|GM full-size A platform]]: [[w:Pontiac Chieftain|Pontiac Chieftain]] (1954-1957), [[w:Pontiac Star Chief|Pontiac Star Chief]] (1954-1957)<br /> [[w:GM B platform|GM B platform]]: [[w:Buick Century#Second generation (1954–1958)|Buick Century]] (1954-1958), [[w:Buick Invicta|Buick Invicta]] (1959-1963), [[w:Buick LeSabre|Buick LeSabre]] (1959-1960), [[w:Buick Roadmaster#1991–1996|Buick Roadmaster sedan]] (1992-1996), [[w:Buick Estate#1991–1996|Buick Roadmaster Estate wagon]] (1994-1996), [[w:Buick Special#1949–1958|Buick Special]] (1954-1958), [[w:Buick Wildcat|Buick Wildcat]] (1963), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1963-1970), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1963-1970), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-1970, 1988-1996), [[w:Chevrolet Impala|Chevrolet Impala]] (1963-1970), [[w:Chevrolet Impala#Seventh generation (Impala SS, 1994–1996)|Chevrolet Impala SS]] (1994-1996), [[w:Oldsmobile 88|Oldsmobile 88]] (1955-1964), [[w:Oldsmobile Custom Cruiser#Second generation (1977–1990)|Oldsmobile Custom Cruiser]] (1988-1990), [[w:Oldsmobile Starfire#First generation (1961–1966)|Oldsmobile Starfire]] (1961-1966), [[w:Pontiac 2+2|Pontiac 2+2]] (1964-1967), [[w:Pontiac Bonneville|Pontiac Bonneville]] (1959-1968), [[w:Pontiac Catalina|Pontiac Catalina]] (1959-1970), [[w:Pontiac Grand Prix|Pontiac Grand Prix]] (1962-65, 1967-68), [[w:Pontiac Star Chief|Pontiac Star Chief]] (1963, 1966), [[w:Pontiac Ventura#1960–1970|Pontiac Ventura]] (1960-1961).<br />[[w:General Motors C platform (RWD)|GM C platform (RWD)]]: [[w:Buick Electra|Buick Electra]] (1959-1963), [[w:Buick Limited#1958 Limited|Buick Limited]] (1958), [[w:Buick Roadmaster|Buick Roadmaster]] (1955-1958), [[w:Buick Super|Buick Super]] (1955-1958), [[w:Oldsmobile 98|Oldsmobile 98]] (1954-1964) <br /> [[w:GM D platform|GM D platform]]: [[w:Cadillac Brougham|Cadillac Brougham]] (1988-1992), [[w:Cadillac Fleetwood#Rear-wheel drive 1993–1996|Cadillac Fleetwood]] (1993-1996) <br />[[w:GMT400|GMT400]] pickups: [[w:Chevrolet C/K (fourth generation)|Chevrolet C/K]] (1998-2000), [[w:Chevrolet C/K (fourth generation)|GMC Sierra]] (1998-2000).<br /> [[w:GMT400|GMT400]] SUVs: [[w:Chevrolet Tahoe#First generation (1992)|Chevrolet Tahoe]] (1998-1999), [[w:Chevrolet Tahoe#Tahoe Limited and Tahoe Z71|Chevrolet Tahoe Limited and Z71]] (2000), [[w:Chevrolet Tahoe#First generation (1992)|GMC Yukon]] (1998-1999), [[w:Chevrolet Tahoe#GMC Yukon Denali|GMC Yukon Denali]] (1999-2000), [[w:Cadillac Escalade#First generation (1999)|Cadillac Escalade]] (1999-2000)<br /> [[w:GMT800|GMT800]] SUVs: [[w:Chevrolet Tahoe#Second generation (2000)|Chevrolet Tahoe]] (2001-2006), [[w:Chevrolet Tahoe#Second generation (2000)|GMC Yukon]] (2001-2006), [[w:Cadillac Escalade#Second generation (2002)|Cadillac Escalade]] (2002-2006), [[w:Chevrolet Suburban#Ninth generation (2000)|Chevrolet Suburban]] (2001-2005), [[w:Chevrolet Suburban#Ninth generation (2000)|GMC Yukon XL]] (2001-2005).<br /> [[w:GMT900|GMT900]] SUVs: [[w:Chevrolet Tahoe#Third generation (2007)|Chevrolet Tahoe]] (2007-2014), [[w:Chevrolet Tahoe#Third generation (2007)|GMC Yukon]] (2007-2014), [[w:Chevrolet Tahoe#Third generation (2007)|GMC Yukon Denali]] (2009-2014), [[w:Cadillac Escalade#Third generation (2007)|Cadillac Escalade]] (2007-2014), [[w:Chevrolet Suburban#Tenth generation (2007)|Chevrolet Suburban]] (2007-2014), [[w:Chevrolet Suburban#Tenth generation (2007)|GMC Yukon XL]] (2007-2014), [[w:Chevrolet Suburban#Tenth generation (2007)|GMC Yukon XL Denali]] (2009-2014), [[w:Cadillac Escalade#Third generation (2007)|Cadillac Escalade ESV]] (2007-2014)<br /> [[w:GMT K2XX|K2XX]] SUVs (2015-2020): [[w:Chevrolet Tahoe#Fourth generation (2015)|Chevrolet Tahoe]], [[w:Chevrolet Tahoe#Fourth generation (2015)|GMC Yukon]], [[w:Cadillac Escalade#Fourth generation (2015)|Cadillac Escalade]], [[w:Chevrolet Suburban#Eleventh generation (2015)|Chevrolet Suburban]], [[w:Chevrolet Suburban#Eleventh generation (2015)|GMC Yukon XL]], [[w:Cadillac Escalade#Fourth generation (2015)|Cadillac Escalade ESV]]
|-
|U (Celestiq),<br> A ("Curated" models),<br> 0 (CT5-V Blackwing 20th Anniv. Ed.)||[[Artisan Center]]||[[w:Warren, Michigan|Warren, Michigan]]||United States||[[w:Cadillac Celestiq|Cadillac Celestiq]] (2025-),<br> [[w:Cadillac Escalade IQ|Cadillac Escalade IQ]] "Curated by Cadillac" program only (2027-)||2024|| ||Located at the [[w:General Motors Technical Center|GM Global Technical Center]] in Warren, Michigan. The Celestiq will be the first production vehicle sold to the public to be built at the GM Tech Center. The Celestiq will be built by hand on a special, low-volume production line and will be highly customizable. The Celestiq will be built to order and each one will be unique.<br/>
Past models: <br /> 2024 [[w:Cadillac CT5#CT5-V Blackwing|Cadillac CT5-V Blackwing 20th Anniversary Edition]] where the final 8 digits of the VIN are R0912004 through R0912024 or R0962004 through R0962024,<br> [[w:Cadillac CT5#CT5-V Blackwing|Cadillac CT5-V Blackwing]] "Curated by Cadillac" program only (2026)
|-
| ||[[Bay City Powertrain]]||[[w:Bay City, Michigan|Bay City, Michigan]]||United States||Engine components including connecting rods & camshafts||1916|| ||Located at 1001 Woodside Ave. Originally opened as National Cycle Manufacturing Co. in 1892 to make bicycles. Bought by Chevrolet in 1916 and joined GM along with Chevrolet in 1918.
|-
| ||[[Bedford Casting]]||[[w:Bedford, Indiana|Bedford, Indiana]]||United States||Cylinder heads, cylinder blocks, transmission cases, EV drive unit housings, structural components, Aluminum die casting||1942|| ||Located at 105 GM Drive.
|-
|5||[[w:Bowling Green Assembly Plant|Bowling Green Assembly Plant]]||[[w:Bowling Green, Kentucky|Bowling Green, Kentucky]]||United States||[[w:Chevrolet Corvette (C8)|Chevrolet Corvette (C8)]] (2020-)<br />
[[w:General Motors LS-based small-block engine#LT4|LT4 supercharged V8 engine]] for:<br> Cadillac Escalade-V '23-<br />
[[w:Chevrolet Gemini small-block engine|LT6 V8 engine]] ('23- Corvette Z06)
[[w:Chevrolet Gemini small-block engine#LT7|LT7 twin-turbo V8 engine]] ('25- Corvette ZR1, '26- Corvette ZR1X)
||1981|| ||Located at 600 Corvette Drive. Originally built by Chrysler's Airtemp division in 1969-1970 and used to build non-automotive A/C units, the plant closed in 1976 following Chrysler's sale of Airtemp to Fedders and was sold to GM in 1980. GM converted the facility into an automotive assembly plant and began building Corvettes in Bowling Green during June 1981, taking over production from the St. Louis plant.<br/>
Past models: <br />
[[w:Chevrolet Corvette (C3)|Chevrolet Corvette (C3)]] (1981-1982)<br />[[w:Chevrolet Corvette (C4)|Chevrolet Corvette (C4)]] (1984-1996)<br />[[w:Chevrolet Corvette (C5)|Chevrolet Corvette (C5)]] (1997-2004)<br />[[w:Chevrolet Corvette (C6)|Chevrolet Corvette (C6)]] (2005-2013)<br />[[w:Chevrolet Corvette (C7)|Chevrolet Corvette (C7)]] (2014-2019)
[[w:Cadillac XLR|Cadillac XLR]] (2004-2009)<br />
Performance Build Center relocated from Wixom, MI to Bowling Green Assembly in 2014.<br/> Past engines: [[w:Cadillac twin-turbo V8|Cadillac Blackwing 4.2L LTA twin-turbo V8]],<br />[[w:General Motors LS-based small-block engine#LT4|LT4 supercharged V8 engine]] for: Chevrolet Corvette Z06 (C7) (2015-2016 models with Z07 package or build your own engine option, 2017-2019 all Z06 models) &<br /> Chevrolet Camaro ZL1 (Gen 6) (phased in during 2020, all '21-'24), Cadillac CT5-V Blackwing '22-'26,<br />[[w:General Motors LS-based small-block engine#LT5|LT5 supercharged 6.2L Gen V Small Block V8]] ('19 Corvette ZR1)
|-
| ||[[Brownstown Battery Assembly Plant]]||[[w:Brownstown Charter Township, Michigan|Brownstown Charter Township, Michigan]]||United States||Battery packs for [[w:Chevrolet Corvette (C8)|Chevrolet Corvette <br> E-Ray]] & [[w:Cadillac Celestiq|Cadillac Celestiq]]<br />Electric drive units for Chevrolet Corvette <br> E-Ray<br />Assembles prototype battery packs||2009|| ||Located at 20001 Brownstown Center Dr.<br /> Battery packs for [[w:Chevrolet Volt|Chevrolet Volt]], [[w:Holden Volt|Holden Volt]], [[w:Opel Ampera|Opel/Vauxhall Ampera]], [[w:Cadillac ELR|Cadillac ELR]], [[w:Chevrolet Spark#Spark EV|Chevrolet Spark EV (2015-2016 only - LG Chem cells)]], [[w:GMC Hummer EV|GMC Hummer EV]], & [[w:Cadillac Lyriq|Cadillac Lyriq]] <br /> Roof module for [[w:Cruise AV|Cruise AV]]
|-
|6<br />9 (BrightDrop)||[[w:CAMI Automotive|CAMI Automotive]]||[[w:Ingersoll, Ontario|Ingersoll, Ontario]]||[[w:Canada|Canada]]|| ||1989||2025||Located at 300 Ingersoll St. S. Originally, a 50/50 joint venture with [[w:Suzuki|Suzuki]] called Canadian Automotive Manufacturing Inc. or CAMI until December 2009 when GM bought Suzuki's share. Production for Suzuki ended in June 2009. Chevy Equinox production ended April 29, 2022. After being retooled, CAMI reopened December 5, 2022 building the BrightDrop Zevo 600. In July 2023, GM announced a 400,000 square-foot expansion to assemble battery modules and packs. Plant idled in October 2023 and restarted in April 2024. Production was suspended in May 2025. Battery pack assembly also ended in May 2025. On October 21, 2025, GM announced that the BrightDrop van was discontinued and would not resume production anywhere.
Past models: [[w:BrightDrop Zevo 600|BrightDrop Zevo 600]] (2023-2024)<ref>{{Cite news |author=Tom Venetis |date=4 April 2022 |title=GM Canada Electric Vehicle Production in Ontario by the End of 2022 |work=Metroland Media Group |url=http://www.canadianautoworld.ca/industry-news/gm-canada-electric-vehicle-production-in-ontario-by-the-end-of-2022 |access-date=24 April 2022}}</ref>,<br> [[w:BrightDrop Zevo 400|BrightDrop Zevo 400]] (2024),<br>[[w:Chevrolet BrightDrop|Chevrolet BrightDrop 400]] (2025-2026),<br />[[w:Chevrolet BrightDrop|Chevrolet BrightDrop 600]] (2025-2026),<br /> [[w:Chevrolet Equinox|Chevrolet Equinox]] (2005-2022)<ref>{{Cite news |author=Bryan Bicknell |date=3 March 2022 |title=The finish line draws closer for gas powered vehicles at Ontario CAMI plant |work=CTV News |url=https://london.ctvnews.ca/the-finish-line-draws-closer-for-gas-powered-vehicles-at-ontario-cami-plant-1.5804523 |access-date=17 May 2022}}</ref>, [[w:Pontiac Torrent|Pontiac Torrent]] (2006-09), [[w:GMC Terrain#First generation (2010)|GMC Terrain]] (2010-2017), [[w:Suzuki XL-7#Second generation (XL7; 2006)|Suzuki XL7]] (2007-2009), [[w:Geo Tracker|Geo/Chevrolet Tracker]] (1990-2004),<br> [[w:Chevrolet Tracker (Americas)#Canada|Asuna/Pontiac Sunrunner]] (Canada only) (1992-1998),<br> [[w:Suzuki Vitara#First generation (ET/TA; 1988)|Suzuki Sidekick]] (1990-1998), [[w:Suzuki Grand Vitara|Suzuki Vitara]] (1999-2004), [[w:Geo Metro|Geo/Chevrolet Metro]] (1990-2001), [[w:Geo Metro|Suzuki Swift]] (1991-2001), [[w:Geo Metro|Pontiac Firefly]] (Canada only) (1991, 1994-2001).<br> Also assembled Ultium battery cells into modules and packs for BrightDrop Zevo & other vehicles made elsewhere from 2024-2025.
|-
|B||[[w:GM Defense|GM Defense]] Manufacturing Customer Innovation Center (MCIC)||[[w:Concord, North Carolina|Concord, North Carolina]]||United States|| [[w:M1301 Infantry Squad Vehicle|M1301 Infantry Squad Vehicle]] (ISV),<br />[[w:Chevrolet Suburban#HD SUV|Chevrolet Suburban Shield]] (a.k.a. HD SUV) (2024-) ||2021|| ||Located at 4280 Defender Way. Located next to Hendrick Motorsports, a partner in the ISV program. The ISV program for the US Army is based on the Chevrolet Colorado ZR2. The HD SUV program for the US State Dept. Diplomatic Security Service is based on the T1XX-generation Chevrolet Suburban but with a different chassis and frame to support higher vehicle weight, payload, and GVWR than civilian Suburbans. The Suburban Shield has also been supplied to Qatar for diplomatic security and VIP transport.
|-
| ||[[Defiance Foundry]]||[[w:Defiance, Ohio|Defiance, Ohio]]||United States||Aluminum engine blocks & heads||1948|| ||Located at 26427 State Route 281. Was part of GM's Central Foundry Division. Iron pouring ended in 2017. The plant now pours only aluminum blocks and heads. Defiance made the aluminum blocks and heads for the Buick 215 V8. Defiance has also supplied [[w:Toyota|Toyota]] with 4-cylinder engine blocks and [[w:Nissan|Nissan]] with V6 engine blocks.
|-
|U||[[w:Detroit/Hamtramck Assembly|Detroit/Hamtramck Assembly]]<br /> "Factory ZERO"||[[w:Hamtramck, Michigan|Hamtramck, Michigan]] & [[w:Detroit, Michigan|Detroit, Michigan]]||United States||[[w:GMC Hummer EV|GMC Hummer EV]] pickup (2022-)<br />[[w:GMC Hummer EV|GMC Hummer EV]] SUV (2024-)<br />[[w:Chevrolet Silverado EV|Chevrolet Silverado EV]] (2024-)<br />[[w:GMC Sierra EV|GMC Sierra EV]] (2024-)<br />[[w:Cadillac Escalade IQ|Cadillac Escalade IQ]] (2025-)<br />[[w:Cadillac Escalade IQ|Cadillac Escalade IQL]] (2026-)<br />Assembles Ultium battery cells into modules and packs for a variety of vehicles||1985|| ||Located at 2500 East Grand Blvd. Sometimes called the "Poletown" plant after the Detroit neighborhood where the plant is located. Part of the site was previously the "Dodge Main" plant which opened in 1911 before Dodge was part of the Chrysler Corp. and closed on January 4, 1980. GM bought the closed plant in 1981. Additional land including residential neighborhoods was acquired through the use of eminent domain. The plant straddles the line between 2 cities: Detroit & Hamtramck. The body shop is in Hamtramck while the general assembly area is in Detroit.<ref>{{Cite web|url=https://www.freep.com/story/money/cars/general-motors/2020/10/16/gm-detroit-hamtramck-assembly-plant-renamed-factory-zero/3665925001/|title = GM's Detroit-Hamtramck Assembly plant renamed 'Factory ZERO' amid shift to all-electric|author=Jamie LaReau|publisher=Detroit Free Press|date=October 16, 2020}}</ref> The current site includes a 16.5-acre wildlife habitat. Originally built E/K models. First vehicle produced was a 1986 Cadillac Eldorado on February 4, 1985. Also did final assembly on the Cadillac Allante, whose bodies were made in Italy by Pininfarina and were flown to Detroit and then trucked to Detroit/Hamtramck Assembly for final assembly. Started building fwd G-bodies for 1998. The last <br> E-body, the Cadillac Eldorado, was moved to the Lansing Craft Center during 2000. Started building EREVs based on Delta II for 2011. This was followed by the 2nd gen. Volt based on D2XX for 2016. Started building Epsilon-based cars for 2013. Also built the Omega-based Cadillac CT6 flagship, starting with 2016. The last gas-powered vehicles made at this plant were the Cadillac CT6 on January 24, 2020 & the Chevrolet Impala on February 27, 2020. Renamed "Factory ZERO" on October 16, 2020 to reflect its conversion into an electric vehicle assembly plant (zero for zero emissions). First vehicle produced following the conversion was a 2022 GMC Hummer EV pickup on December 17, 2021. Over 4 million vehicles have been built so far since opening in 1985. <br /> Past models:<br> [[w:Oldsmobile Toronado#Fourth generation (1986–1992)|Oldsmobile Toronado]] (1986-1992), [[w:Buick Riviera#Seventh generation (1986–1993)|Buick Riviera]] (1986-1993), [[w:Cadillac Eldorado|Cadillac Eldorado]] (1986-2000), [[w:Cadillac Seville|Cadillac Seville]] (1986-2004), [[w:Cadillac Allanté|Cadillac Allanté]] (1987-1993) (final assembly),<br> [[w:Cadillac Deville|Cadillac Deville]] (1994-2005), [[w:Cadillac DTS|Cadillac DTS]] (2006-2011),<br> [[w:Buick Park Avenue#Second generation (1997–2005)|Buick Park Avenue]] (1998-2000), [[w:Buick LeSabre#Eighth generation (2000–2005)|Buick LeSabre]] (2000-2005), [[w:Buick Lucerne|Buick Lucerne]] (2006-2011), [[w:Pontiac Bonneville#Tenth generation (2000–2005)|Pontiac Bonneville]] (2004-2005), [[w:Chevrolet Volt|Chevrolet Volt]] (2011-2019), [[w:Chevrolet Volt#Other markets|Holden Volt (RE)]] (2012-2015), [[w:Chevrolet Volt#Opel Ampera (Europe)|Opel/Vauxhall Ampera]] (2012-15), [[w:Cadillac ELR|Cadillac ELR]] (2014, 2016), [[w:Chevrolet Malibu#Eighth generation (2013)|Chevrolet Malibu (2013-2015)/Malibu Limited (2016)]], [[w:Chevrolet Impala#Tenth generation (2014-2020)|Chevrolet Impala]] (2014-2020), [[w:Buick LaCrosse#Third generation (2017)|Buick Lacrosse]] (2017-2019), [[w:Cadillac CT6|Cadillac CT6]] (2016-2020)
|-
| ||[[w:DMAX (engines)|DMAX Ltd.]]<br> Moraine Plant||[[w:Moraine, Ohio|Moraine, Ohio]]||United States||[[w:Duramax V8 engine|Duramax 6.6L V8 engine]]||2000|| ||Located on 3100 Dryden Rd. Was a joint venture with [[w:Isuzu|Isuzu]]. Originally, was 40% owned by GM & 60% owned by Isuzu. From 2002, 60% owned by GM & 40% owned by Isuzu. GM bought Isuzu's remaining stake in DMAX Ltd. at the end of March 2022 and DMAX Ltd. became a wholly owned subsidiary of GM in May 2022.
|-
| ||[[w:DMAX (engines)|DMAX Ltd.]] Brookville Plant||[[w:Brookville, Ohio|Brookville, Ohio]]||United States||[[w:Duramax V8 engine#8.3L Mongoose|8.3L Mongoose Duramax V8]] ||2021|| || Located at 101 W. Campus Blvd. In June 2023, GM announced a $920 million investment to build a 1.1 million square foot building next to the current 251,000 square foot facility in Brookville to take over Duramax V8 engine production from the original plant in Moraine in 2025.<br> Previously:<br> Machined engine components for [[w:Duramax V8 engine|Duramax 6.6L V8 engine]]
|-
| ||[[w:GM Egypt|GM Egypt]]||[[w:6th of October City|6th of October City]]|| [[w:Egypt|Egypt]]||[[w:Isuzu N-Series|Chevrolet N-Series]]<br/>[[w:Isuzu D-Max#Second generation (RT; 2011)|Chevrolet T-Series]]<br/>[[w:Chevrolet Move#Chevrolet N300/Move|Chevrolet Move]]<br/>[[w:Chevrolet Aveo#Third generation (310C; 2023)|Chevrolet Optra]] (2025-)||1985|| ||Partially owned by GM (46.5%). Produced its 1 millionth vehicle, a Chevrolet T-Series pickup truck, on September 22, 2024. GM Egypt is the first automaker in Egypt to produce <br> 1 million vehicles. <br /> Past models: [[w:Chevrolet Aveo (T200)|Chevrolet Aveo]], [[w:Chevrolet Captiva#First generation (C100, C140; 2006)|Chevrolet Captiva]], [[w:Chevrolet Frontera|Chevrolet Frontera]], [[w:Chevrolet Lanos|Chevrolet Lanos]], [[w:Baojun 630|Chevrolet Optra]] (2016-2023), [[w:Isuzu D-Max#First generation (RA, RC; 2002)|Chevrolet T-Series]], [[w:Isuzu MU#First generation (UCS55/UCS69GW; 1989–1998)|Isuzu Rodeo]], [[w:Isuzu TF|Isuzu TF-Series]], [[w:Opel Astra|Opel Astra]], [[w:Opel Corsa|Opel Corsa]], [[w:Opel Vectra|Opel Vectra]]
|-
|F||[[w:Fairfax II|Fairfax II]]||[[w:Kansas City, Kansas|Kansas City, Kansas]]||United States||[[w:Chevrolet Bolt#Second generation (2026)|Chevrolet Bolt]] (2027)
<br /> [[w:Chevrolet Equinox#Fourth generation (2025)|Chevrolet Equinox]] (Starting Mid-2027)
||1987|| ||Located at 3201 Fairfax Trafficway. Replaced original Fairfax Assembly Plant (Fairfax I) for 1988 model year production. Built on the site of the old Fairfax Municipal Airport. Originally built W-body cars. Switched to Epsilon-based cars for 2004. Chevy Malibu ended production in November 2024. Cadillac XT4 ended production in January 2025. Fairfax was then idled for retooling. Production of the updated Bolt electric car began in late 2025. The 2027 Bolt is an updated version of the old Bolt EUV. <br />Past models: [[w:Pontiac Grand Prix|Pontiac Grand Prix]] (1988-2003), [[w:Oldsmobile Cutlass Supreme#Fifth generation (1988–1997)|Oldsmobile Cutlass Supreme]] (1995-1997), [[w:Oldsmobile Intrigue|Oldsmobile Intrigue]] (1998-'02), [[w:Chevrolet Malibu#Sixth generation (2004)|Chevrolet Malibu (2004-2007)/Malibu Classic (2008)]], [[w:Chevrolet Malibu#Seventh generation (2008)|Chevrolet Malibu (2008-2012)]],<br> [[w:Chevrolet Malibu#Eighth generation (2013)|Chevrolet Malibu (2013-2015)/Malibu Limited (2016)]], [[w:Chevrolet Malibu#Ninth generation (2016)|Chevrolet Malibu (2016-2025)]], <br /> [[w:Saturn Aura|Saturn Aura]] (2007-2009), [[w:Buick LaCrosse#Second generation (2010)|Buick Lacrosse/Allure]] (2010-2016), [[w:Cadillac XT4|Cadillac XT4]] (2019-2025)
|-
| ||[[w:Flint Engine South|Flint Engine South/Flint Engine Operations]]||[[w:Flint, Michigan|Flint, Michigan]]||United States|| 3.0 [[w:Duramax I6 engine|Duramax I6 engine]], [[w:Generation VI (2027–present)|Gen VI Small-Block V8]]: [[w:#LS6_3|LS6 6.7L V8]], [[w:L76_3|L76 5.7L V8]], [[w:L78|L78 6.6L V8]] ||2000|| ||Located at 2100 Bristol Road. Located just to the south of Flint Truck Assembly and on the east side of Flint Metal Center. <br />Past engines: [[w:GM Atlas engine|4.2 Atlas I6]], 3.6 [[w:GM High Feature engine|High Feature V6 engine]],<br /> 1.4 [[w:GM Family 0 engine#Generation III|Family 0 I4]] (Cruze, Sonic, Volt/Ampera/ELR generator), [[w:GM small gasoline engine#LFV|GM Small Gasoline Engine]] (LFV 1.5 Turbo I4 - Malibu)
|-
| ||[[Flint Metal Center]]||[[w:Flint, Michigan|Flint, Michigan]]||United States|| Sheetmetal stampings for various GM models||1954|| ||Located at G-2238 Bristol Road. Located just to the south of Flint Truck Assembly and on the west side of Flint Engine South. Metal fabricating plant.
|-
| ||[[Flint Tool & Die]] (North American Engineering and Tooling Center)||[[w:Flint, Michigan|Flint, Michigan]]||United States||Tools & Dies for fabrication & assembly of sheetmetal body parts||1967|| ||Located at 425 Stevenson St. Was Plant 38 of the "Chevy in the Hole" complex. Last remaining manufacturing plant of the old "Chevy in the Hole" complex.
|-
|F <br/>(1953-present)<br/><br/> 1 (1947-1952)||[[w:Flint Truck Assembly|Flint Truck Assembly]]||[[w:Flint, Michigan|Flint, Michigan]]||United States||[[w:Chevrolet Silverado|Chevrolet Silverado]] (2001-)<br /> [[w:Chevrolet Silverado|GMC Sierra]] (2001-)||1947|| ||Located at G 3100 Van Slyke Road. This plant replaced vehicle production at the older "Chevy in the Hole" complex elsewhere in Flint, Michigan and became Chevrolet's new home plant. Began production in June 1947. This is GM's oldest, still active assembly plant in North America. Built all 300 1953 Corvettes on a small makeshift line (1 line for body & 1 for frame/chassis) from June 30 through December 24 in 1953. Built the 50 millionth car built by GM in the US on November 23, 1954. The car was a special gold painted '55 Chevy Bel Air 2-door Sport Coupe with a gold-painted chassis and 716 interior and exterior trim parts plated with 24-carat gold. Last built Chevy full-size cars in 1969. Last built passenger cars in 1970 (the midsize Chevelle & Monte Carlo). The last passenger car built at Flint Assembly was a Monte Carlo on June 24, 1970. At that point, the separate onsite Fisher Body operation (Flint #2) was merged into the Chevrolet operation (the rest of the plant) and the entire plant joined the GM Assembly Division. Since 1971, has only built full-size pickups, full-size SUV's, full-size vans, and medium duty commercial trucks. A new paint shop (Flint Assembly Paint Operations) was announced in December 2013 and opened in 2016, replacing the previous paint shop located inside the assembly plant. The new paint shop is further down Van Slyke Road from the assembly plant at 3848 Van Slyke Road, on the site of the former V8 engine plant that closed in 1999 and was subsequently demolished. Flint Truck Assembly has produced over 15 million vehicles. <br />Past models: [[w:Chevrolet Deluxe|Chevrolet Deluxe]], [[w:Chevrolet Stylemaster|Chevrolet Stylemaster]], [[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]], [[w:Chevrolet 150|Chevrolet 150]] (1953-1957),<br> [[w:Chevrolet 210|Chevrolet 210]] (1953-1957), [[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1969), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-69), [[w:Chevrolet Impala|Chevrolet Impala]] (1958-1969), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-69), [[w:Chevrolet Nomad|Chevrolet Nomad]] (1955-1957), [[w:Chevrolet Corvette (C1)|Chevrolet Corvette (1953 only)]]<br> [[w:Chevrolet El Camino#First generation (1959–1960)|Chevrolet El Camino]] (1959-1960),<br> [[w:Chevrolet Chevelle|Chevrolet Chevelle]] (1966, 1970),<br> [[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1970 only),<br> [[w:Chevrolet K5 Blazer|Chevrolet K5 Blazer]] (1969-1991), [[w:Chevrolet K5 Blazer|GMC K15 Jimmy]] (1970-91), [[w:Chevrolet Suburban|Chevrolet Suburban]] (1960-1991), [[w:GMC Suburban|GMC Suburban]] (1967-91),<br> [[w:Chevrolet Corvair|Chevrolet Corvair Forward Control]] (1961-1964), <br> [[w:Chevrolet van#Third generation (1971-1996)|Chevrolet Van/Sportvan]] (1993-1995),<br> [[w:Chevrolet van#1992-1996|Chevrolet Van/Sportvan G-Classic]] (1996),<br> [[w:Chevrolet van#Third generation (1971-1996)|GMC Vandura/Rally Van]] (1993-1995),<br> [[w:Chevrolet van#1992-1996|GMC Vandura/Rally Van G-Classic]] (1996),<br> [[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1947-1955), [[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959), [[w:Chevrolet C/K|Chevrolet C/K]] (1960-1986), [[w:Chevrolet C/K (second generation)|GMC C/K (Action Line)]] (1967-1972), [[w:Chevrolet C/K (third generation)|GMC C/K (Rounded Line)]] (1973-1986), [[w:Chevrolet C/K (third generation)#R/V-Series (1987–1991)|Chevrolet R/V]] (1987-1991), [[w:Chevrolet C/K (third generation)#R/V-Series (1987–1991)|GMC R/V]] (1987-1991), [[w:Chevrolet C/K (fourth generation)|Chevrolet C/K (GMT400)]] (1995-2000), [[w:Chevrolet C/K (fourth generation)|GMC Sierra (GMT400)]] (1995-98), [[w:Chevrolet C/K (fourth generation)|GMC Sierra Classic (GMT400)]] (1999-2000), [[w:Chevrolet C/K (fourth generation)#C3500HD (1991–2002)|Chevrolet/GMC C3500HD]] (1998-00), [[w:Chevrolet Kodiak#Third generation (2003–2009)|Chevrolet Kodiak/GMC Topkick]] ('03-'09), [[w:Chevrolet Kodiak#Isuzu H-Series|Isuzu H-Series]] (2005-2007), [[w:Isuzu Forward|Chevrolet T-Series]] (2004-2009), [[w:GMC T-Series|GMC T-Series]] (2004-2009), [[w:Isuzu F-Series|Isuzu F-Series]] (2004-2009) <br />
|-
|Z||[[w:Fort Wayne Assembly|Fort Wayne Assembly]]||[[w:Roanoke, Indiana|Roanoke, Indiana]]||United States||[[w:Chevrolet Silverado|Chevrolet Silverado]] (1999-)<br />[[w:Chevrolet Silverado|GMC Sierra]] (1988-)||1986|| ||Located at 12200 Lafayette Center Rd.<br /> Past models: [[w:Chevrolet C/K (fourth generation)|Chevrolet C/K]] (1988-1998)
|-
| ||[[Fuel Cell System Manufacturing LLC]]||[[w:Brownstown Charter Township, Michigan|Brownstown Charter Township, Michigan]]||United States||Fuel Cell Systems for [[w:Honda CR-V#CR-V e:FCEV|Honda CR-V e:FCEV]] & various other applications by GM & Honda & to outside companies||2024|| ||Located at 20001 Brownstown Center Dr. Located next to GM's Brownstown Battery Assembly Plant.<br /> A 50/50 joint venture with [[w:Honda|Honda]]. GM & Honda have been co-developing fuel cells since 2013. The manufacturing joint venture was established in January 2017. Production began in January 2024. Production is scheduled to end by the end of 2026.
|-
| ||Grand Rapids Operations||[[w:Wyoming, Michigan|Wyoming, Michigan]]||United States||Valvetrain products <br /> Axles for full-size trucks ||1943|| ||Located at 2100 Burlingame Avenue SW. Originally established as Diesel Equipment Division of GM. Spun off with Delphi Automotive Systems in 1999 (Delphi Powertrain Systems Grand Rapids); taken back under [[w:Delphi Corporation|Delphi Corporation]] bankruptcy and made part of [[w:General Motors Components Holdings|General Motors Components Holdings]] in 1999.
|-
|G||[[w:General Motors do Brasil|Gravatai Automotive Industrial Complex]]||[[w:Gravatai|Gravatai]], [[w:Rio Grande do Sul|Rio Grande do Sul]]||[[w:Brazil|Brazil]]||[[w:Chevrolet Onix|Chevrolet Onix]]<br /> ||2000|| ||Past models: [[w:Chevrolet Celta|Chevrolet Celta]]<br />[[w:Chevrolet Prisma (disambiguation)|Chevrolet Prisma]]<ref>{{cite web|url=http://www.autointell.com/nao_companies/general_motors/gm-manufacturing/blue-macaw-01.htm|title=General Motors: Gravatai Automotive Complex|access-date=2021-09-14 }}</ref><ref>[https://www.reuters.com/article/idUSN1533675720090715 UPDATE 2-GM to spend $1 bln in Brazil on new family of cars] Retrieved 14 September 2021</ref><br /> [[w:Suzuki Fun|Suzuki Fun]]
|-
| ||[[Joinville]]||[[w:Joinville|Joinville]], [[w:Santa Catarina (state)|Santa Catarina]]||[[w:Brazil|Brazil]]||[[w:GM E-Turbo engine|1.0 & 1.0 Turbo 3-cylinder engine]]<br />[[w:GM E-Turbo engine|1.2 & 1.2 Turbo 3-cylinder engine]] ||2013|| ||Past engines: [[w:GM Family 1 engine#SPE / 4|1.0L & 1.4L SPE / 4<br /> 4-cylinder engines]]
|-
| ||Kokomo Operations<ref>{{Cite web|url=https://plants.gm.com/media/us/en/gm/company_info/facilities/component-fac/kokomo.html|title=GM Corporate Newsroom - United States - Company}}</ref>||[[w:Kokomo, Indiana|Kokomo, Indiana]]||United States||Automotive Electronic Components including Engine Control Modules, Transmission Control Modules, Body Control Modules, & Airbag Sensing Diagnostic Modules||1936|| ||Located at 2603 South Goyer Rd. The site was first used in the 1890's to make cars by [[w:Haynes-Apperson|Haynes-Apperson]] and later by [[w:Haynes Automobile Company|Haynes]] until the company went out of business in 1925. Purchased by GM in 1936 from Crosley Radio Corp., which used the site to make radios for Chevrolet briefly during 1936. Initially run by Delco Remy, the site became a separate GM division called Delco Radio Division in June 1936. Delco Radio made radios for all GM cars as well as other electronic equipment. During WWII, Delco Radio made electronic equipment for the war effort. In 1970, Delco Radio merged with AC Electronics Division of Milwaukee to form [[w:Delco Electronics|Delco Electronics Division]]. On December 31, 1985, General Motors merged Hughes Aircraft, which it had acquired on December 20, 1985, with its Delco Electronics unit to form Hughes Electronics Corporation, an independent subsidiary. The group then consisted of Delco Electronics Corporation and Hughes Aircraft Company. In 1997, GM transferred Delco Electronics to its Delphi Automotive Systems business. Spun off with Delphi Automotive Systems in 1999 (Delco Electronics and Safety); taken back under [[w:Delphi Corporation|Delphi Corporation]] bankruptcy and made part of [[w:General Motors Components Holdings|General Motors Components Holdings]] in 2009.
|-
| ||[[w:GM Korea|GM Korea]]||[[w:Boryeong|Boryeong]], [[w:South Chungcheong Province|South Chungcheong Province]]||[[w:South Korea|South Korea]]||Automatic Transmissions||2008|| ||[[w:GM 6T40 transmission|GM 6T40 transmission]] (GF6)
|-
|B<br /><br />0 ('07-'08 Antara)||[[w:GM Korea|GM Korea]]||[[w:Bupyeong-gu|Bupyeong District]], [[w:Incheon|Incheon]]||[[w:South Korea|South Korea]]||[[w:Chevrolet Trailblazer (crossover)|Chevrolet Trailblazer]]<br/>[[w:Buick Encore GX|Buick Encore GX]]<br/>[[w:Buick Envista|Buick Envista]]
Engines: [[w:GM Family 0 engine|GM Family 0 engine]]<br />[[w:GM E-Turbo engine|1.3L Turbo 3-cylinder engine]]
|1962<br /><br/>1971 (engine plant)|| ||Bupyeong has 2 vehicle assembly plants and a powertrain plant. The Bupyeong 2 Assembly Plant ended production on November 26, 2022. Bupyeong 2 was last producing the Chevrolet Malibu and Trax and Buick Encore.<br />Past models : [[w:Chevrolet Aveo|Chevrolet Aveo]], [[w:Chevrolet Sonic|Chevrolet Sonic]], [[w:Chevrolet Captiva|Chevrolet Captiva]], [[w:Chevrolet Epica|Chevrolet Epica]], [[w:Chevrolet Evanda|Chevrolet Evanda]], [[w:Chevrolet Malibu|Chevrolet Malibu]], [[w:Chevrolet Trax#First generation (U200; 2013)|Chevrolet Trax]]<br />
[[w:Buick Encore#First generation (2013)|Buick Encore]]<br />
[[w:Buick LaCrosse#Korean market: Alpheon|Alpheon]]
[[w:Daewoo LeMans|Daewoo LeMans]], [[w:Daewoo Cielo|Daewoo Cielo]], [[w:Daewoo Espero|Daewoo Espero]], [[w:Daewoo Lanos|Daewoo Lanos]], [[w:Daewoo Leganza|Daewoo Leganza]], [[w:Daewoo Magnus|Daewoo Magnus]], [[w:Daewoo Tosca|Daewoo Tosca]], [[w:Daewoo Kalos|Daewoo Kalos]], [[w:Chevrolet Aveo (T200)#T250|Daewoo Gentra]], [[w:Daewoo Winstorm|Daewoo Winstorm]]
[[w:Holden Barina#Fifth generation (TK; 2005–2011)|Holden Barina (TK)]], [[w:Holden Barina#Sixth generation (TM; 2011–2018)|Holden Barina (TM)]], [[w:Opel Antara|Holden Captiva MaXX/Captiva 5]], [[w:Chevrolet Captiva#First generation (C100, C140; 2006)|Holden Captiva/Captiva 7]], [[w:Holden Epica|Holden Epica (EP)]], [[w:Chevrolet Malibu#Eighth generation (2013)|Holden Malibu (EM)]], [[w:Chevrolet Trax#First generation (U200; 2013)|Holden Trax (TJ)]] <br />
[[w:Opel Antara|GMC Terrain (Middle East only)]] <br />
[[w:Opel Mokka#First generation (J13; 2012)|Opel/Vauxhall Mokka]], [[w:Opel Antara|Opel/Vauxhall Antara]]<br />
[[w:Pontiac LeMans#Sixth generation (1988–1993)|Pontiac LeMans]], [[w:Pontiac Wave|Pontiac Wave]], [[w:Pontiac G3|Pontiac G3]] <br />
[[w:Suzuki Swift+|Suzuki Swift+]] (Canada only), [[w:Suzuki Verona|Suzuki Verona]]
Past engines: [[w:GM Family 1 engine|GM Family 1 engine]]
|-
|C||[[w:GM Korea|GM Korea]]||[[w:Changwon|Changwon]], [[w:Gyeongsang Province|Gyeongsang Province]]||[[w:South Korea|South Korea]]||[[w:Chevrolet Trax#Second generation (2023)|Chevrolet Trax]]<br/>[[w:GM small gasoline engine|GM small gasoline engine]] LV7, LE2<br/>Manual transmissions
|1991|| ||Past models: [[w:Daewoo Damas|Damas]], [[w:Daewoo Labo|Labo]]<br />[[w:Daewoo Matiz|Daewoo Matiz]], [[w:Daewoo Tico|Daewoo Tico]]<br />[[w:Opel Karl|Opel Karl]]/[[w:Vauxhall Viva#Name revival|Vauxhall Viva]]<br />[[w:Pontiac G2#Second generation (M200, M250; 2005)|Pontiac G2]], [[w:Pontiac Matiz#M150 (2000–2005)|Pontiac Matiz]],<br /> [[w:Chevrolet Spark|Chevrolet Spark]], [[w:Chevrolet Spark#Spark EV|Chevrolet Spark EV]]<br />[[w:Holden Spark#Australasia|Holden Barina Spark (MJ)]]<br>[[w:Holden Spark|Holden Spark (MP)]]
Past engines: [[w:Daewoo S-TEC engine#S-TEC II|Daewoo S-TEC II]]
|-
|J||[[w:Lansing Delta Township Assembly|Lansing Delta Township Assembly]]||[[w:Delta Township, Michigan|Delta Township, Michigan]]||United States||[[w:Chevrolet Traverse|Chevrolet Traverse]] (2010-)<br />[[w:Buick Enclave|Buick Enclave]] (2008-)<br />[[w:GMC Acadia#Third generation (2024)|GMC Acadia]] (2024-)||2006|| ||Located at 8175 Millett Hwy. Originally opened to build Lambda-based crossovers. Switched to C1XX-based models for 2018. <br /> Past models: [[w:Saturn Outlook|Saturn Outlook]] (2007-2010),<br>[[w:GMC Acadia#First generation (2007)|GMC Acadia]] (2007-2016), [[w:GMC Acadia#Acadia Limited|GMC Acadia Limited]] (2017), <br>[[w:Chevrolet Traverse#Second generation (2018)|Chevrolet Traverse Limited]] (2024)
|-
|0||[[w:Lansing Grand River Assembly|Lansing Grand River Assembly]]/Stamping||[[w:Lansing, Michigan|Lansing, Michigan]]||United States||[[w:Cadillac CT4|Cadillac CT4]] (2020-)<br />[[w:Cadillac CT5|Cadillac CT5]] (2020-)||2001|| ||Located at 920 Townsend Street. Stamping plant added in 2016. This newly constructed plant was built on the grounds of the former Oldsmobile home plant complex in Lansing. The former Oldsmobile HQ building ("Building 70") is still standing and still has "Oldsmobile Administration Center" carved into the marble barrier in front of the flagpole between the 2 stairways. Building 70 was Oldsmobile HQ from 1966-1996, when Oldsmobile HQ moved to Detroit. Building 70 is now vacant but the exterior is often used by GM for large ads that are wrapped around the side of the building on the corner of Townsend St. and William St. Originally opened to build vehicles on the Sigma platform. Started building vehicles on the Alpha platform for 2013.<br /> Past models: [[w:Cadillac CTS|Cadillac CTS]] (2003-2019), [[w:Cadillac SRX#First generation (2004)|Cadillac SRX]] (2004-2009), [[w:Cadillac STS|Cadillac STS]] (2005-2011), [[w:Cadillac ATS|Cadillac ATS]] (2013-2019), [[w:Chevrolet Camaro (sixth generation)|Chevrolet Camaro]] (2016-2024)
|-
| ||[[Lansing Regional Stamping]] (LRS)||[[w:Delta Township, Michigan|Delta Township, Michigan]]||United States|| ||2004|| ||Located within the Lansing Delta Assembly complex.
|-
|||[[w:Lansing Service Parts Operation|Lansing Redistribution Center]] (SPO)||[[w:Delta Township, Michigan|Delta Township, Michigan]]||United States|| ||1960|| ||Located at 4400 West Mount Hope Road. Previously Lansing Plant 4. Now called Lansing Redistribution Center, part of GM Customer Care and Aftersales.
|-
| ||[[Lockport Operations]]||[[w:Lockport, NY|Lockport, NY]]||United States||Thermal products (climate control systems, powertrain cooling systems) and stators for EV motors.||1914|| ||Located at 200 Upper Mountain Road. Founded in 1910 as the Harrison Radiator Company. Acquired by United Motors in 1916 which was then acquired by GM in 1918. Spun off with Delphi Automotive Systems in 1999 (Harrison Thermal Systems); taken back under [[w:Delphi Corporation|Delphi Corporation]] bankruptcy and made part of [[w:General Motors Components Holdings|General Motors Components Holdings]] in 2009.
|-
| ||[[Marion Metal Center]]||[[w:Marion, Indiana|Marion, Indiana]]||United States||Sheetmetal stamped parts & blanks for various GM models||1956|| ||Located at 2400 West Second St. Metal fabricating. Originally a Fisher Body division plant.
|-
| ||[[Mogi das Cruzes]]||[[w:Mogi das Cruzes|Mogi das Cruzes]], [[w:São Paulo (state)|São Paulo state]]||[[w:Brazil|Brazil]]||Stampings for new & replacement parts||1999|| ||Stamping plant
|-
|4||[[w:Orion Assembly|Orion Assembly]]||[[w:Orion Township, Michigan|Orion Township, Michigan]]||United States||Assembly of Battery packs for EVs:<br> Silverado EV, Sierra EV, Hummer EV, and Escalade IQ<br><br>Scheduled for Early 2027:
[[w:Chevrolet Silverado#Fifth-generation Silverado / sixth-generation Sierra (2026)|Chevrolet Silverado]] 1500 (2027-)<br />[[w:GMC Sierra#Fifth-generation Silverado / sixth-generation Sierra (2026)|GMC Sierra]] 1500 (2027-)
||1983||idled 2009; reopened 2011; idled 2023||Located at 4555 Giddings Road. Originally opened to build the 1985 Fwd C-bodies. Began building Fwd H-bodies for 1994. Began building Fwd G-bodies for 1995. On June 18, 2004, production of the Buick LeSabre & Park Ave., the last 2 models built at Orion Assembly, ended. Plant was then converted from building full-size cars to midsize cars for 2005, beginning with the Pontiac G6. Idled during 2009 as part of GM's bankruptcy. Reopened in 2011 with the help of govt. incentives & special agreement with the UAW to build the Chevy Sonic subcompact. Later added the Buick Verano compact car. In 2016, began building the Chevy Bolt EV, which was joined in 2021 by the slightly larger Bolt EUV. Idled in 2023 when both Bolts were discontinued. In late summer 2024, Orion Assembly began assembling battery cells supplied by Ultium Cells LLC in Warren, OH into packs which are then supplied to the Factory Zero plant for installation into the electric trucks & SUVs made there. Orion was going to be converted to building electric trucks, supplementing Factory Zero's production of Silverado EV & Sierra EV but that plan was postponed and later cancelled. In 2025, a new plan was announced for Orion to build fuel-powered Silverado & Sierra 1500 pickups & Escalade SUVs beginning in 2027.<br> Past models: [[w:Chevrolet Bolt EV|Chevrolet Bolt EV]] (2017-2023), [[w:Chevrolet Bolt EUV|Chevrolet <br> Bolt EUV]] (2022-2023), [[w:Cruise AV|Cruise AV]], [[w:Chevrolet Bolt#European countries|Opel Ampera-e]] (2017-19),<br> [[w:Chevrolet Sonic|Chevrolet Sonic]] (2012-2020), [[w:Buick Verano#First generation (2011)|Buick Verano]] (2012-2017), [[w:Chevrolet Malibu#Seventh generation (2008)|Chevrolet Malibu]] (2008-2010), [[w:Pontiac G6|Pontiac G6]] (2005-2010),<br> [[w:Buick Riviera#Eighth generation (1995–1999)|Buick Riviera]] (1995-1999), [[w:Oldsmobile Aurora|Oldsmobile Aurora]] (1995-2003),<br> [[w:Buick Park Avenue#Second generation (1997-2005)|Buick Park Avenue]] (1997-2005), [[w:Buick LeSabre#Eighth generation (2000–2005)|Buick LeSabre]] (2000-2005), [[w:Cadillac de Ville series#Sixth generation (1985–1993)|Cadillac DeVille]] (1985-1993), [[w:Cadillac Fleetwood#Front-wheel drive: 1985–1993|Cadillac Fleetwood]] (1985-1992), [[w:Cadillac Sixty Special#1987–1993|Cadillac Sixty Special]] (1989-1993), [[w:Oldsmobile 88#Tenth generation (1992–1999)|Oldsmobile 88]] (1994-99), [[w:Oldsmobile LSS|Oldsmobile LSS]] (1996-1999), [[w:Oldsmobile Regency|Oldsmobile Regency]] (1997-98), [[w:Oldsmobile 98#Eleventh generation (1985–1990)|Oldsmobile 98]] (1985-1990), [[w:Oldsmobile 98#Twelfth generation (1991–1996)|Oldsmobile 98]] (1991-1996), [[w:Oldsmobile Touring Sedan|Oldsmobile Touring Sedan]] (1988-1990),<br> [[w:Pontiac Bonneville#Ninth generation (1992–1999)|Pontiac Bonneville]] (1994-1998), [[w:Pontiac Bonneville#Tenth generation (2000–2005)|Pontiac Bonneville]] (2000-03)
|-
|1 (2022-)<br /><br />1 (Line 2 a.k.a. Consolidated Line)<br> (1984-2019)<br>/<br />9 (Line 1 a.k.a. Flex Line)<br> (1984-2020)<br /><br />1 (1967-1983)||[[w:Oshawa Car Assembly|Oshawa Car Assembly]]||[[w:Oshawa, Ontario|Oshawa, Ontario]]||[[w:Canada|Canada]]||[[w:Chevrolet Silverado#Fourth-generation Silverado / fifth-generation Sierra (T1XX; 2019)|Chevrolet Silverado 1500]] (2022-)<br />[[w:Chevrolet Silverado#Fourth-generation Silverado / fifth-generation Sierra (T1XX; 2019)|Chevrolet Silverado HD]] (2022-)||1953|| ||Located at 900 Park Rd South.<br />
Past models: [[w:Cadillac XTS|Cadillac XTS]] (2013-2019), [[w:Chevrolet Impala|Chevrolet Impala]] (1958-1985, 2000-2020), [[w:Chevrolet Impala#Impala Limited (2014–2016)|Chevrolet Impala Limited]] (2014-2016), [[w:Chevrolet Lumina|Chevrolet Lumina]] (1990-2001), [[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1995-2007), [[w:Buick Century#Sixth generation (1997–2005)|Buick Century]] (1997-2005), [[w:Buick Regal|Buick Regal]] (1988-2004, 2011-2017), [[w:Buick LaCrosse#First generation (2005)|Buick LaCrosse/Allure]] (2005-2009), [[w:Buick Special#1949–1958|Buick Special]] (1954-1958), [[w:Buick LeSabre|Buick LeSabre]] (1959-1966), [[w:Buick Century#Second generation (1954–1958)|Buick Century]] (1954-1958), [[w:Buick Invicta|Buick Invicta]] (1959-1962), [[w:Buick Wildcat|Buick Wildcat]] (1963-1966), [[w:Oldsmobile 88|Oldsmobile 88]] (1954-1966), [[w:Chevrolet 150|Chevrolet 150]] (1954-1957), [[w:Chevrolet 210|Chevrolet 210]] (1954-1957), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1955-1981), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-1975), [[w:Chevrolet Camaro (fifth generation)|Chevrolet Camaro]] (2010-2015), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-1985), [[w:Chevrolet Corvair|Chevrolet Corvair]] (1960-1966), [[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958), [[w:Chevrolet Equinox#Second generation (2010)|Chevrolet Equinox]] (2011-2017), [[w:Chevrolet Nova|Chevrolet Nova]] (1962-1967),<br> [[w:General Motors A platform (1925)#1964|A-body (rwd) cars]]: [[w:Chevrolet Chevelle|Chevrolet Chevelle]] (1964-1977)/[[w:Chevrolet Malibu|Chevrolet Malibu]] (1978-1983)/[[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1971-1981)/ [[w:Oldsmobile Cutlass|Oldsmobile Cutlass]]/[[w:Oldsmobile 442|Oldsmobile 442]]/[[w:Pontiac LeMans|Pontiac LeMans]] (1971, 1973-1981)/[[w:Pontiac GTO|Pontiac GTO]] (1970)/[[w:Buick Special|Buick Special]]/[[w:Buick Skylark|Buick Skylark]],<br> [[w:General Motors A platform (1982)|A-body (fwd) cars]]: [[w:Chevrolet Celebrity|Chevrolet Celebrity]] (1982-1987)/[[w:Pontiac 6000|Pontiac 6000]] (1982-1988)/[[w:Oldsmobile Cutlass Ciera|Oldsmobile Cutlass Ciera]] (1985-1988),<br> [[w:Pontiac Bonneville#Sixth generation (1977–1981)|Pontiac Bonneville]] (1977-1981), [[w:Pontiac Catalina#1977–1981|Pontiac Catalina]] (1977-1981), [[w:Pontiac Grand Prix#Eighth generation (2004–2008)|Pontiac Grand Prix]] (2004-2008), [[w:Pontiac Catalina#Canada and Canadian exports|Pontiac Laurentian]] (1954-1981), [[w:Pontiac Parisienne|Pontiac Parisienne]] (1958-1984, US: 1983-1984), [[w:Pontiac Pathfinder|Pontiac Pathfinder]] (1954-1958), [[w:Pontiac Catalina#Canada and Canadian exports|Pontiac Strato Chief]] (1958-1970), [[w:Acadian (automobile)|Acadian]] (1962-1967), [[w:Beaumont (automobile)|Beaumont]] (1966-1969), [[w:Chevrolet Silverado#Third-generation Silverado / fourth-generation Sierra (K2XX; 2014)|Chevrolet Silverado 1500 LD/2500HD]] (2019), [[w:Chevrolet Silverado#Third-generation Silverado / fourth-generation Sierra (K2XX; 2014)|GMC Sierra 1500 Limited/2500HD]] (2019). <br />
VIN code 1 (1984-2019): Chevrolet Celebrity (1984-1987), Pontiac 6000 (1984-1985), Buick Regal (1988-2004), Chevrolet Lumina 4-d (1990-2001), Buick Century (1997-05), Pontiac Grand Prix (2004-2008), Buick LaCrosse/Allure (2005-2009), Chevrolet Impala (2008-2013), Chevrolet<br /> Impala Limited (2014-2016), Chevrolet Equinox (2011-2017), Chevrolet Silverado 1500 LD/2500HD (2019),<br /> GMC Sierra 1500 Limited/2500HD (2019)
VIN code 9: Chevrolet Impala (1984-1985), Chevrolet Caprice (1984-1985), Pontiac Parisienne (1984), Pontiac 6000 (1985-1988), Oldsmobile Cutlass Ciera (1985-1988), Chevrolet Lumina 4-d (1990-1999), Chevrolet Lumina 2-d (1990-1994), Chevrolet Monte Carlo (1995-07), Chevrolet Impala (2000-08), Chevrolet Camaro (2010-2015), Buick Regal (2011-2017), Cadillac XTS (2013-2019), Chevrolet Impala (2014-2020)
The current Oshawa complex (South plant; also known as Autoplex beginning in the 1980's) opened on November 7, 1953. The passenger car assembly plant had 2 assembly lines. Operations were gradually moved from the older North plant to the newer South plant. Originally built Chevrolet, Pontiac, Oldsmobile, and Buick models. However, Oldsmobile production ended in 1969 and Buick production ended in 1971. Oldsmobile production resumed with the '85 Cutlass Ciera while Buick production resumed with the '88 Regal. Oldsmobile production again ended in 1988 while Buick production continued through 2017 with a temporary hiatus in 2009-2010 calendar years. Pontiac production at Oshawa ended after 1988; only resuming in 2003 for the '04 Grand Prix. Pontiac production at Oshawa ended for good in 2008. Cadillac production began at the Oshawa South plant for the first time in 2012 with the 2013 XTS. Full-size pickups were built on Line 2 for 2019. This was the first time that pickups were built on one of Oshawa's passenger car assembly lines and the first time that pickups were made in Oshawa since Oshawa Truck closed in 2009. The last XTS was built on Sept. 10, 2019, the last Oshawa-built Impala on Oct. 25, 2019, & the last pickups on Dec. 18, 2019. Vehicle production at the South plant ended in 2019; plant will be transformed for stamping and production of body panels and subassemblies. Restart of vehicle production announced in Nov. 2020 - Truck production started in late 2021 with Silverado HD followed by the Silverado 1500 in 2022. Oshawa is now the only plant producing both Silverado 1500 & Silverado HD.
Oshawa also produced face masks during the COVID-19 pandemic starting in 2020.
|-
| ||[[w:Oshawa Metal|Oshawa Metal]]||[[w:Oshawa, Ontario|Oshawa, Ontario]]||[[w:Canada|Canada]]||Stamped metal parts for new production and for service parts||1986|| ||Part of the overall Oshawa Assembly complex (Autoplex) on Park Road South. Located at 1000 Park Road South.
|-
| ||[[w:Parma Metal Center|Parma Metal Center]]||[[w:Parma, Ohio|Parma, Ohio]]||United States||Sheetmetal stampings & assemblies for various GM models||1948|| ||Located at 5400 Chevrolet Blvd.<br /> Metal fabricating
|-
| ||[[Pontiac Metal Center]]||[[w:Pontiac, Michigan|Pontiac, Michigan]]||United States||Sheetmetal stampings & assemblies for various GM models||1926|| ||Located at 260 E. Beverly Ave.<br />Metal fabricating<br />Originally, an [[w:Oakland Motor Car Company|Oakland Motor Car]] plant. Last remaining manufacturing plant of the original Pontiac Assembly complex, which was Pontiac's home plant.
|-
|S||[[w:Ramos Arizpe Assembly|Ramos Arizpe Assembly]]||[[w:Ramos Arizpe|Ramos Arizpe]]||[[w:Mexico|Mexico]]||[[w:Chevrolet Blazer EV|Chevrolet Blazer EV]] (2024-) <br /> [[w:Chevrolet Equinox EV|Chevrolet Equinox EV]] (2024-) <br />[[w:Cadillac Optiq|Cadillac Optiq EV]] (2025-) ||1981|| ||Ramos Arizpe opened building 4 Chevrolet models for the Mexican market: Citation, Celebrity, Malibu, and Monte Carlo. The 1985 El Camino & Caballero were the first Mexican-built GM models to be sold in the US. GM began exporting the Celebrity to the US for 1987 followed by the Buick Century for 1989. GM began exporting the Chevy Cavalier to the US for 1991 followed by the Pontiac Sunbird for 1993, which was replaced by the Sunfire for 1995. Stamping plant added in 1995 and a paint shop added in 1997. The plant was expanded to add a 2nd assembly line to build the Pontiac Aztek for 2001, followed by the Buick Rendezvous for 2002. The 2nd line was also used to build the Chevy HHR, Saturn Vue, Chevy Captiva Sport, Cadillac SRX, & Saab 9-4X. Some 2nd gen. Chevy Cruze sedans made at Ramos Arizpe were sold in the US for the '16-'17 model years. All 2nd gen. Chevy Cruze 5-d hatchbacks ('17-'19) were made in Ramos Arizpe. All Chevy Cruze production at Ramos Arizpe ended in <br> Dec. 2018. The Cruze was the last passenger car made at Ramos Arizpe. A new paint shop was added in 2021, replacing the original from 1997. EV production began in 2023.<br />Past Models: <br> Mexico or Latin America only: [[w:Chevrolet Citation|Chevrolet Citation]] (1982-1986), [[w:Chevrolet Celebrity|Chevrolet Celebrity]] (1982-1986), [[w:Chevrolet Malibu#Fourth generation (1978)|Chevrolet Malibu]] (1981), [[w:Chevrolet Monte Carlo#Fourth generation (1981–1988)|Chevrolet Monte Carlo]] (1981-1984), [[w:Oldsmobile Cutlass Ciera|Chevrolet Cutlass (Mexico only)]], [[w:Buick Century#Fifth generation (1982–1996)|Chevrolet Century (Mexico only)]], [[w:Chevrolet Chevy|Chevrolet Chevy]] (Mexico: 1995-2012), [[w:Chevrolet Captiva Sport|Chevrolet Captiva Sport]] (2008-2017), [[w:Chevrolet Sonic|Chevrolet Sonic]] (Mexico: 2012-2017).<br> Export to US: [[w:Chevrolet El Camino|Chevrolet El Camino]] (1985-1987), [[w:GMC Caballero|GMC Caballero]] (1985-1987), [[w:Chevrolet Celebrity|Chevrolet Celebrity]] (US: 1987-1989), [[w:Buick Century#Fifth generation (1982–1996)|Buick Century]] (1989-1994), [[w:Chevrolet Cavalier|Chevrolet Cavalier]] (1991-2004), [[w:Pontiac Sunbird#Second generation (1982–1988)|Pontiac Sunbird]] (1993-1994), [[w:Pontiac Sunfire|Pontiac Sunfire]] (1995-2005), [[w:Pontiac Aztek|Pontiac Aztek]] (2001-2005), [[w:Buick Rendezvous|Buick Rendezvous]] (2002-2007), [[w:Chevrolet HHR|Chevrolet HHR]] (2006-2011), [[w:Saturn Vue#Second generation (2008)|Saturn Vue]] (2008-2010), [[w:Chevrolet Captiva Sport|Chevrolet Captiva Sport]] (US: 2012-2015),<br> [[w:Cadillac SRX#Second generation (2010)|Cadillac SRX]] (2010-2016), [[w:Saab 9-4X|Saab 9-4X]] (2011),<br> [[w:Chevrolet Cruze#Second generation (J400)|Chevrolet Cruze]] (2016-2019), [[w:Chevrolet Equinox#Third generation (2018)|Chevrolet Equinox]] (2018-2024), [[w:Chevrolet Blazer (crossover)|Chevrolet Blazer]] (2019-2026), [[w:Honda Prologue|Honda Prologue EV]] (2024-26).<br> Export to Australia/New Zealand:<br> [[w:Holden Equinox|Holden Equinox (EQ)]] (2018-2020)
|-
| ||Ramos Arizpe Engine||[[w:Ramos Arizpe|Ramos Arizpe]]||[[w:Mexico|Mexico]]||[[w:GM E-Turbo engine|1.2L Turbo 3-cylinder engine]]<br />[[w:General Motors LS-based small-block engine#Generation V (2013–present)|Gen V Small Block V8 & V6]]||1982|| ||Past engines: [[w:General Motors 60° V6 engine|Chevrolet 60° V6 engine]]<br />[[w:GM High Value engine|GM High Value V6]]<br />[[w:GM High Feature engine|GM High Feature V6]]
|-
| ||Ramos Arizpe Transmission||[[w:Ramos Arizpe|Ramos Arizpe]]||[[w:Mexico|Mexico]]||VT40 (CVT250) [[w:Continuously variable transmission|CVT]] transmission ||1999|| ||Past transmissions: [[w:GM 4L60-E transmission|4L60-E/4L65-E 4-speed automatic]]<br />[[w:GM-Ford 6-speed automatic transmission|6T70/6T75 6-speed automatic (GF6)]]<br />4ET50 EVT (for [[w:Chevrolet Volt|Chevrolet Volt]])<br />4ET55 EVT (for [[w:Cadillac ELR|Cadillac ELR]])
|-
| ||[[w:Rochester Products Division|Rochester Operations]]||[[w:Rochester, NY|Rochester, NY]]||United States||Chevrolet, GMC, Cadillac, and Buick Components - Engine management systems, fuel injection systems, and related products. ||1939|| ||Located at 1000 Lexington Avenue. Founded in 1908 as the Rochester Coil Company. Renamed North East Electric Company in 1909. Acquired by GM in 1929. In 1930, merged with Delco-Light Co. to become Delco Appliance. A planned, second Delco Appliance plant on Lexington Ave. in Rochester instead became the Rochester Products Division of GM in 1939. This division made carburetors, fuel injection systems, & other fuel system equipment. During WWII, it made warplane and tank electrical accessories. In 1981, Rochester Products Division merged with GM's Diesel Equipment Division of Grand Rapids, Michigan retaining the Rochester Products Division name. On August 30, 1988, Rochester Products Division merged with GM's AC Spark Plug Division to form the AC Rochester Division. The Grand Rapids-based diesel fuel-injection business of the former Diesel Equipment Division was sold on August 26 to a joint venture of G.M. and the Penske Corporation called Diesel Technology Corporation (80% Penske, 20% Detroit Diesel, itself a joint venture between Penske & GM). Robert Bosch invested in Diesel Technology Corporation in 1992, eventually taking over the whole company by 2002. AC Rochester merged with parts of Delco Remy (the parts not spun off into Remy International) in 1994 to form AC Delco Systems. AC Delco Systems became part of GM's Delphi Automotive Systems subsidiary in 1995. Spun off with Delphi Automotive Systems in 1999 (Rochester Powertrain); taken back under [[w:Delphi Corporation|Delphi Corporation]] bankruptcy and made part of [[w:General Motors Components Holdings|General Motors Components Holdings]] in 2009.
|-
| ||[[w:Romulus Engine|Romulus Engine]]||[[w:Romulus, Michigan|Romulus, Michigan]]||United States||[[w:GM High Feature engine#Fourth generation|Gen4 High Feature V6]]
||1976|| ||Located at 36880 Ecorse Road. Originally part of GM's Detroit Diesel Allison Division where it built diesel engines and components. Switched to gasoline engines in the 1980's.<br /> Past engines: [[w:Chevrolet 90° V6 engine|Chevrolet 90° V6 engine]]<br />[[w:General Motors LS-based small-block engine#Generation III (1997–2007)|Gen III Small Block V8]]<br />[[w:GM LS engine#Generation IV (2005–2020)|Gen IV Small Block V8]]
|-
| ||[[w:Romulus Engine|Romulus Transmission]]||[[w:Romulus, Michigan|Romulus, Michigan]]||United States||[[w:"Ford-GM 10-speed automatic transmission#General Motors|10L80/90 Transmission]]||1995|| ||Located at 36880 Ecorse Road.<br />Past transmissions: [[w:GM 4L60-E transmission|GM 4L60-E transmission]]
|-
|R||Rosario||[[w:Alvear, Santa Fe|Alvear]], [[w:Rosario Department|Rosario Department]], [[w:Santa Fe Province|Santa Fe Province]]||[[w:Argentina|Argentina]]||<br/>[[w:Chevrolet Tracker (2019)|Chevrolet Tracker]]
Engines: [[w:GM small gasoline engine#LE2|1.4L Turbo I4 LE2]]
||1997|| ||Engine plant added in 2016.
Past Models:
[[w:Chevrolet Cruze#Second generation (J400)|Chevrolet Cruze]], [[w:Opel Corsa#Corsa C (X01; 2000)|Chevrolet Corsa C]], [[w:Opel Corsa#Corsa B|Chevrolet Corsa B/Corsa Classic/Classic]], [[w:Chevrolet Agile|Chevrolet Agile]]<br /> and [[w:Chevrolet Tracker (Americas)#Second generation|Suzuki Grand Vitara/Chevrolet Tracker]]
|-
| ||[[w:Saginaw Metal Casting Operations|Saginaw Metal Casting Operations]]||[[w:Saginaw, Michigan|Saginaw, Michigan]]||United States||Metal casting for powertrains (High Feature V6 engine): engine blocks, heads, and crankshafts<br/>Front 4WD axle assembly castings||1919|| ||Located at 1629 N. Washington Avenue. Originally the Grey Iron Foundry, a part of General Motors Saginaw Products Co. and renamed as Chevrolet Saginaw Grey Iron Foundry when transferred to Chevrolet Motor Division in 1927. Moved to Central Foundry Division in 1983. Joins GM Powertrain Division in 1991. Renamed Saginaw Metal Casting Operations in 1994 to reflect that it now pours aluminum. First production aluminum heads produced in 1995. Over the years, it has produced both cast iron and cast aluminum engine blocks for the Chevy Small-Block V8.
|-
|L||[[w:San Luis Potosí Assembly|San Luis Potosí Assembly]]||[[w:San Luis Potosí, San Luis Potosí|San Luis Potosí]]||[[w:Mexico|Mexico]]||[[w:Chevrolet Equinox#Fourth generation (2025)|Chevrolet Equinox]] (2025-)<br />[[w:GMC Terrain#Third generation (2025)|GMC Terrain]] (2025-)||2008|| ||Note: Aveo & G3 made in San Luis Potosi were not sold in the US but they were sold in Canada. Onix was not sold in the US or Canada. 2013-2014 Trax was sold in Canada & Mexico but not in the US.<br> Past models: [[w:Chevrolet Aveo (T200)|Chevrolet Aveo (T250)]] (2009-2018)<br />[[w:Pontiac G3|Pontiac G3/G3 Wave]] (2009-2010)<br />[[w:Chevrolet Onix#Second generation (2019)|Chevrolet Onix]] (2020-2022)<br />[[w:Chevrolet Trax#First generation (U200; 2013)|Chevrolet Trax]] (2013-2020)<br />[[w:Chevrolet Equinox#Third generation (2018)|Chevrolet Equinox]] (2018-2024)<ref>{{Cite web|url=https://vpic.nhtsa.dot.gov/mid/home/displayfile/7c659360-416a-4e96-ae38-0b69d916c106|title=GM Vehicle Identification Numbering Standard - 2021 - United States and Canada|date=August 14, 2020}}</ref><br />[[w:GMC Terrain#Second generation (2018)|GMC Terrain]] (2018-2024)
|-
| ||San Luis Potosí Transmission||[[w:San Luis Potosí, San Luis Potosí|San Luis Potosí]]||[[w:Mexico|Mexico]]||FWD GF9 9 Speed Transmissions||2009|| ||[[w:GM-Ford 6-speed automatic transmission|GM-Ford 6-speed automatic transmission]] 6T40/45 (GF6)
|-
|B||[[w:General Motors do Brasil|São Caetano do Sul Assembly]]||[[w:São Caetano do Sul|São Caetano do Sul]], [[w:São Paulo (state)|São Paulo]]||[[w:Brazil|Brazil]]|| [[w:Chevrolet Montana#Third generation (2022)|Chevrolet Montana]] <br /> [[w:Chevrolet Spin|Chevrolet Spin]]<br />[[w:Chevrolet Tracker (2019)|Chevrolet Tracker]]<br /> ||1930|| ||Past Models: [[w:Opel Astra#G|Chevrolet Astra]], [[w:Opel Astra#H |Chevrolet Vectra/Vectra GT]] (both until 2011), [[w:Chevrolet C/K#1985–1996|Chevrolet Bonanza]], [[w:Chevrolet C/K#1964–1984|Chevrolet C-10/C-14/C-15/Chevy 4/D-10/A-10]], [[w:Chevrolet D-20|Chevrolet A-10/C-10/A-20/C-20/D-20]], Chevrolet A40/D40, [[w:Chevrolet Cobalt#Second generation (2011)|Chevrolet Cobalt]], [[w:Chevrolet Comodoro|Chevrolet Comodoro]], [[w:Opel Corsa#Corsa B (S93; 1993)|Chevrolet Corsa B]], [[w:Chevrolet Corsa|Chevrolet Corsa Classic]], [[w:Chevrolet Cruze#First generation (J300; 2008)|Chevrolet Cruze]], [[w:Chevrolet Diplomata|Chevrolet Diplomata]], [[w:Chevrolet Onix|Chevrolet Joy]], [[w:Chevrolet Kadett|Chevrolet Kadett]] 1996-1998, [[w:Chevrolet Montana#Second generation (2011–2021)|Chevrolet Montana]], [[w:Opel Ascona#Chevrolet Monza|Chevrolet Monza]], [[w:Chevrolet Omega#Omega A|Chevrolet Omega A]], [[w:Chevrolet Opala|Chevrolet Opala]], [[w:Opel Vectra#Vectra A (1988–1995)|Chevrolet Vectra A]], [[w:Opel Vectra#Vectra B (1995–2002)|Chevrolet Vectra B]], [[w:Chevrolet Veraneio|Chevrolet C-1416/Veraneio]], Chevrolet 3100/Brasil/Amazona/Alvorada/Corisco, Chevrolet 6500, Chevrolet C64/C65/C68/D64/D65/D68/D74/D75/D78,<br> Bus bodies, Frigidaire appliances
|-
|C||[[w:General Motors do Brasil|São José dos Campos Assembly]]||[[w:São José dos Campos|São José dos Campos]], [[w:São Paulo (state)|São Paulo]]||[[w:Brazil|Brazil]]||
[[w:Chevrolet S-10#Third generation (2012)|Chevrolet S-10]]<br/>[[w:Chevrolet Trailblazer (SUV)#Second generation (RG; 2011)|Chevrolet Trailblazer]]
Engines:<br/> 2.8L turbodiesel <br> 4-cylinder engines<br />
Transmissions
|1959|| ||Supplied 1.8L & 2.0L SOHC Family II I4 engines to the US from 1982-1994. <br />Past Models: [[w:Chevrolet Montana#First generation (2003–2010)|Chevrolet Montana]]<br /> [[w:Chevrolet S-10 Blazer#Second generation (1995)|Chevrolet Blazer]], [[w:Opel Corsa#Corsa C (X01; 2000)|Chevrolet Corsa C]], [[w:Opel Corsa#Corsa C (X01; 2000)|Chevrolet Corsa Sedan C]], [[w:Opel Meriva#First generation (2003)|Chevrolet Meriva]], [[w:Opel Zafira#Zafira A (1999–2006)|Chevrolet Zafira]] (all until 2012)<br />[[w:Chevrolet Chevette|Chevrolet Chevette]], [[w:Chevrolet Chevette#Chevy 500|Chevrolet Chevy 500]], [[w:Chevrolet Kadett|Chevrolet Kadett]] 1989-1996, [[w:Chevrolet S-10#Second generation (1994)|Chevrolet S-10]], [[w:Chevrolet C/K#1997–2002|Chevrolet Silverado D20]], Chevrolet 11000/12000/14000/22000, [[w:GMC Chevette|GMC Chevette]], [[w:GMC Chevette|GMC 500]], [[w:Chevrolet C/K#1997–2002|GMC 6-100/6-150/3500HD]], [[w:Chevrolet Kodiak#Second generation (1990–2002)|GMC 12-170/14-190/16-220]], [[w:Isuzu Forward|GMC 15-190]]
Engines including: [[w:Chevrolet Stovebolt engine#261|Chevrolet Jobmaster 261 I6]], [[w:Chevrolet 153 4-cylinder engine#Brazil|Chevrolet 153 4-cylinder]], [[w:Chevrolet Turbo-Thrift engine|Chevrolet Turbo-Thrift engine]], [[w:GM Family 1 engine|GM Family 1 engine]], [[w:GM Family II engine|GM Family II engine]]<br />Detroit Diesel Series 53<br />Transmissions
|-
|G||[[Silao Assembly]]||[[w:Silao, Mexico|Silao]]||[[w:Mexico|Mexico]]||[[w:Chevrolet Silverado|Chevrolet Silverado]] (2006-)<br />[[w:Chevrolet Silverado|GMC Sierra]] (2006-), Chevrolet Cheyenne (Mexico)||1995|| || Stamping plant added in 1997. Began by building full-size SUVs for 1995. Was the sole assembler of GM's full-size SUTs. Began building full-size pickups for 2006. Full-size SUV production moved entirely to Arlington Assembly after the 2009 model year.<br> Past production models: [[w:Chevrolet Suburban|Chevrolet Suburban]] (1995-2009), [[w:Chevrolet Suburban#Eighth generation (1992)|GMC Suburban]] (1995-1999), [[w:GMC Yukon XL|GMC Yukon XL]] (2000-2006), [[w:Cadillac Escalade#Second generation (2002)|Cadillac Escalade ESV]] (2003-2006),<br> [[w:Chevrolet Suburban (eighth generation)#Holden Suburban|Holden Suburban (K8)]] (1998-2001),<br> [[w:Chevrolet Avalanche|Chevrolet Avalanche]] (2002-2013),<br> [[w:Cadillac Escalade EXT|Cadillac Escalade EXT]] (2002-2013)
|-
| ||Silao Engine||[[w:Silao, Mexico|Silao]]||[[w:Mexico|Mexico]]||[[w:General Motors LS-based small-block engine#Generation V (2013–present)|Gen V Small Block V8]]||2001|| ||[[w:General Motors LS-based small-block engine#Generation IV (2005–2020)|Gen IV Small Block V8]]
|-
| ||Silao Transmission||[[w:Silao, Mexico|Silao]]||[[w:Mexico|Mexico]]||[[w:GM 8L45 transmission|8L45]], [[w:GM 8L90 transmission|8L90]], [[w:Ford-GM 10-speed automatic transmission|10L80]]||2008|| ||[[w:GM 6L50 transmission|6L50]], [[w:GM 6L80 transmission|6L80/90]]
|-
|Z,<br />S (Traverse & Vue)||[[w:Spring Hill Manufacturing|Spring Hill Manufacturing]]||[[w:Spring Hill, Tennessee|Spring Hill, Tennessee]]||United States||<br /> [[w:Cadillac XT5|Cadillac XT5]]<br> (2017-2026)<br />[[w:Cadillac Lyriq|Cadillac Lyriq]] (2023-) <br />[[w:Cadillac Vistiq|Cadillac Vistiq]] (2026-) <br /><br /> [[w:Chevrolet Blazer (crossover)|Chevrolet Blazer]] (Starting 2027) <br /> <br />[[w:GM small gasoline engine#1.5|1.5L Turbo I4]]<br />[[w:GM Ecotec engine#Generation III|Ecotec Gen III 2.0L Turbo I4]]<br />[[w:GM L3B engine|2.7L L3B turbo I4]]<br />5.3 & 6.2 [[w:LS based GM small-block engine#Generation V (2013–present)|Gen V <br />Small-Block V8 Engine]]<br /><br />Stamping<br />Components||1990||2009-2012||Located at 100 Saturn Parkway. The original home of the [[w:Saturn Corporation|Saturn]] brand. Originally, Saturn built everything here - all its vehicles, engines, transmissions, stampings, and components. But, gradually, Saturn production was broadened to other plants and by 2007, Saturn production in Spring Hill had ended. Spring Hill made products for other GM brands and has continued to do so since Saturn was closed down during GM's bankruptcy. <br />
Past models: [[w:Saturn S-Series|Saturn S-Series]] (1991-2002), [[w:Saturn Ion|Saturn Ion]] (2003-2007), [[w:Saturn Vue#First generation (2002)|Saturn Vue]] (2002-2007), [[w:Chevrolet Traverse#First generation (2009)|Chevrolet Traverse]] (2009-2010), [[w:Chevrolet Equinox#Second generation (2010)|Chevrolet Equinox]] (2013-2016), [[w:GMC Acadia#Second generation (2017)|GMC Acadia]] (2017-2023), [[w:Holden Acadia|Holden Acadia (AC)]], [[w:Cadillac XT6|Cadillac XT6]] (2020-2025),<br /> [[w:Acura ZDX#Second generation (2024)|Acura ZDX EV]] (2024).<br />
Past Engines: [[w:Saturn I4 engine|Saturn I4 engine]], [[w:GM Ecotec engine#2.4|Ecotec Gen II 2.4L I4]],<br> [[w:GM Ecotec engine#LHU (A20NFT Opel)|Ecotec Gen II LHU 2.0L Turbo I4]], [[w:GM Ecotec engine#Generation III|Ecotec Gen III 2.5L I4]] <br />
[[w:Saturn MP transmission|Saturn MP series manual and automatic transmissions]] Transmission production in Spring Hill ended in 2002.
Ion production ended March 28, 2007 and was replaced by the Belgian-built Astra for the 2008 model year. Vue production ended March 30, 2007 and moved to Mexico for the 2008 model year. Assembly was idled for more than a year beginning April 1, 2007 for conversion to Chevy Traverse production. Traverse production began September 2, 2008. Assembly idled in November 2009 when Chevy Traverse production was moved to Lansing Delta Township Assembly. Assembly reopened in September 2012<ref>{{cite news| url=https://www.nytimes.com/2011/09/18/business/general-motors-said-to-offer-bonuses-in-new-deal-with-workers.html | work=The New York Times | author1=Bill Vlasic | author2=Nick Bunkley | title=G.M. Will Offer Bonuses in New Deal With Workers | date=September 17, 2011}}</ref> to produce the [[w:Chevrolet Equinox#Second generation (2010)|Chevrolet Equinox]].
Spring Hill also includes a plastic injection molding operation that produce various plastic components. Plastic components have also been produced for models not built in Spring Hill such as [[w:Chevrolet Traverse|Chevrolet Traverse]] and the [[w:Chevrolet Corvette (C7)|Chevrolet Corvette (C7)]].
|-
| ||[[w:St. Catharines Engine Plant|St. Catharines Propulsion Plant]]||[[w:St. Catharines, Ontario|St. Catharines, Ontario]]||[[w:Canada|Canada]]||[[w:General Motors LS-based small-block engine#Generation V (2013–present)|Gen V Small Block V8]]<br />[[w:Tremec|Tremec]] TR-9080 8-speed dual clutch transmission<br />Engine components||1954|| ||Located at 570 Glendale Avenue. Operated as part of GM subsidiary McKinnon Industries, Ltd. until 1969 when it became "General Motors of Canada Limited, St. Catharines".<br />Previously:<br />[[w:Chevrolet Turbo-Thrift engine|Chevrolet Turbo-Thrift I6 engine]] (1963-1967)<br />[[w:Oldsmobile V8 engine|Oldsmobile Rocket V8 engine]] (through 1966)<br />[[w:Buick V6 engine#225|Buick 225 V6 engine]] (through 1966)<br />[[w:Buick V8 engine|Buick V8 engine]] (300, 340, 401) (through 1966)<br /> [[w:General Motors 60° V6 engine|Chevrolet 60° OHV V6 engine]] (2.8, 3.1)<br />[[w:General Motors 60° V6 engine#LQ1|Chevrolet 3.4L DOHC LQ1 V6 engine]]<br />[[w:GM High Feature engine|High Feature V6 engine]] (2.8, 3.6)<br />[[w:Chevrolet small-block engine (first and second generation)|Chevrolet Small-Block V8]] (265/267/283/305/307/327/350)<br />[[w:General Motors LS-based small-block engine#Generation III (1997–2007)|Gen III Small Block V8]]<br />[[w:GM LS engine#Generation IV (2005–2020)|Gen IV Small Block V8]]<br />[[w:GM 6T40 transmission|(GF6) 6T45 6-speed automatic]]
|-
| ||[[w:Toledo Transmission|Toledo Transmission]]||[[w:Toledo, Ohio|Toledo, Ohio]]||United States||Transmissions:<br /> RWD GM-Allison 10-speed (10L1000) (AB1V) / 8-speed ([[w:GM 8L45 transmission|8L45]] & [[w:GM 8L90 transmission|8L90]]) <br /> FWD GF9 9 Speed Transmissions||1956|| ||Located at 1455 West Alexis Road. Acquired from the former Martin-Parry Corporation in 1955. Replaced the older Toledo plant on Central Ave. <br />Previously:<br /> [[w:Turbo-Hydramatic#THM350|THM350 3-speed automatic]]<br />[[w:Turbo-Hydramatic#THM700R4 / 4L60 / 4L60E / 4L65E / 4L70E|THM700R4/4L60 4-speed automatic]]<br />[[w:GM 4L60-E transmission|4L60-E/4L65-E/4L70-E 4-speed automatic]]<br />[[w:GM 6T40 transmission|(GF6) 6T30/35/40/45/50 6-speed automatic]] <br /> ([[w:GM 6L50 transmission|6L45/6L50]] & [[w:GM 6L80 transmission|6L80/6L90]]) 6-speed automatics
|-
|| ||Toluca Engine||[[w:Toluca|Toluca]], [[w:State of Mexico|State of Mexico]]
|[[w:Mexico|Mexico]]
|[[w:GM small gasoline engine|GM Small Gasoline Engine 1.4L/1.5L I4]] (including 1.5 turbo LSD I4 for Equinox/Terrain)
[[w:Chevrolet 153 4-cylinder engine#Vortec 3000|Vortec 3000 Marine & Industrial 4-cyl. engine]]<br />
5.0 & 5.7 Marine & Industrial V8 engines<br />
Small-Block V8 engines for the aftermarket<br />
Aluminum Foundry<br />
|1965
|
|Past engines:
[[w:GM Family 1 engine|GM Family 1 I4 engine]] <br />[[w:Chevrolet Turbo-Thrift engine#292|Chevrolet 292 (4.8L) Inline-6]]
|-
| ||[[w:Tonawanda Engine|Tonawanda Engine]]||[[w:Buffalo, New York|Buffalo, New York]]||United States||[[w:LS based GM small-block engine#LV1|LV1]] 4.3L V6
[[w:LS based GM small-block engine#L84|L84]] 5.3L V8
[[w:LS based GM small-block engine#L86/L87|L87]] 6.2L V8
[[w:General Motors LS-based small-block engine#LT2|LT2]] 6.2L V8
[[w:LS based GM small-block engine#L8T|L8T]] 6.6L V8
[[w:GM Ecotec engine#LSY|LSY]] 2.0T I4
|1938
| ||Located at 2995 River Rd. Includes 3 plants. Plant #1 opened in 1938. Plant #4 opened in 1941. Plant #5 opened in 2001.
Past engines:
Built the [[w:Pratt & Whitney R-1830 Twin Wasp|Pratt & Whitney R-1830 Twin Wasp]] radial engine used in the [[w:B-24 Liberator|B-24 Liberator]] bomber during WW-2
Built the [[w:Pratt & Whitney R-2800 Double Wasp|Pratt & Whitney R-2800 Double Wasp]] radial engine used in the [[w:P-61 Black Widow|P-61 Black Widow]] & [[w:P-47 Thunderbolt|P-47 Thunderbolt]] fighters during WW-2
[[w:Chevrolet 2300 engine|Chevrolet 2300 engine]] (Vega I4)
[[w:General Motors 122 engine|Chevrolet 122 engine]] (1.8/2.0/2.2L OHV I4)
[[w:GM Ecotec engine#2.2|Ecotec 2.2L Gen I]] (L850)
[[w:GM Ecotec engine#2.2_2|Ecotec 2.2L Gen II]], [[w:GM Ecotec engine#2.4|Ecotec 2.4L Gen II]]
[[w:GM Ecotec engine#LTG|Ecotec Gen III LTG 2.0T I-4]], [[w:GM Ecotec engine#2.5|Ecotec 2.5L Gen III]]
[[w:General Motors Atlas engine#LK5 (Vortec 2800)|Atlas 2.8/2.9 I4]]<br />[[w:General Motors Atlas engine#L52 (Vortec 3500)|Atlas 3.5/3.7 I5]]
[[w:Chevrolet Turbo-Air 6 engine|Corvair Flat-6 (all)]]
[[w:Chevrolet Stovebolt engine#Second generation: 1937–1962|Chevrolet Stovebolt / Blue Flame I6]]
[[w:Chevrolet 90° V6 engine|Chevrolet 3.3L/3.8L/4.3L 90° V6]]
[[w:General Motors 60° V6 engine|Chevrolet 60° V6 engine]], [[w:GM High Value engine|High Value 3.9L V6]]
[[w:Chevrolet small-block engine (first and second generation)|Chevrolet Small-Block V8]]
[[w:Chevrolet Big-Block engine|Chevrolet Big-Block V8]]
Gen V Small-Block 90° V6/V8: [[w:LS based GM small-block engine#LV3|LV3]] 4.3L V6, [[w:LS based GM small-block engine#L82|L82]] 5.3L V8, [[w:LS based GM small-block engine#L83|L83]] 5.3L V8, [[w:LS based GM small-block engine#L86|L86]] 6.2L V8, [[w:LS based GM small-block engine#LT1|LT1]] 6.2L V8, [[w:LS based GM small-block engine#LT4|LT4 6.2L Supercharged V8]]
|-
| ||[[w:Ultium#Production|Ultium Cells LLC - Spring Hill]]||[[w:Spring Hill, Tennessee|Spring Hill, Tennessee]]||United States||Ultium lithium-ion battery cells for EV's,<br> LFP batteries for energy storage systems||2024|| || Owned by Ultium Cells LLC, a 50/50 joint venture between General Motors and [[w:LG Energy Solution|LG Energy Solution]]. This is Ultium Cells' second plant. Located at 301 Donald F Ephlin Pkwy.
|-
| ||[[w:Ultium#Production|Ultium Cells LLC - Warren]]||[[w:Warren, Ohio|Warren, Ohio]]||United States||Ultium lithium-ion battery cells for EV's||2022|| || Owned by Ultium Cells LLC, a 50/50 joint venture between General Motors and [[w:LG Energy Solution|LG Energy Solution]]. This is Ultium Cells' first plant. Located at 7400 Tod Ave SW.
|-
|1||[[w:Wentzville Assembly|Wentzville Assembly]]||[[w:Wentzville, Missouri|Wentzville, Missouri]]||United States||[[w:Chevrolet Express|Chevrolet Express]] (1996-)<br />[[w:GMC Savana|GMC Savana]] (1996-)<br />[[w:Chevrolet Colorado|Chevrolet Colorado]] (2015-)<br />[[w:GMC Canyon|GMC Canyon]] (2015-)||1983|| ||Located at 1500 E. Rte. A. Originally opened to build the 1985 Fwd C-bodies. Began building Fwd H-bodies for 1986. On Oct. 29, 1991, Wentzville built the 30 millionth Pontiac, a white 1992 Bonneville SSEi. Ended passenger car production in 1994. Converted to truck production. Began building full-size vans in 1996. Added midsize pickups in 2014. <br />Past models: [[w:Buick Electra#Sixth generation (1985–1990)|Buick Electra]] (1985-1990), [[w:Buick Park Avenue#First generation (1991–1996)|Buick Park Avenue]] (1991-1994), [[w:Oldsmobile 88#Ninth generation (1986–1991)|Oldsmobile Delta 88/88]] (1986-1991),<br> [[w:Oldsmobile 88#Tenth generation (1992–1999)|Oldsmobile 88]] (1992-1993), [[w:Oldsmobile 98#Eleventh generation (1985–1990)|Oldsmobile 98]] (1985-1989), [[w:Oldsmobile Touring Sedan|Oldsmobile Touring Sedan]] (1989),<br> [[w:Pontiac Bonneville#Eighth generation (1987–1991)|Pontiac Bonneville]] (1989-1991), [[w:Pontiac Bonneville#Ninth generation (1992–1999)|Pontiac Bonneville]] (1992-93)
|-
|A||[[w:SAIC-GM|SAIC-GM]] Shanghai plant||[[w:Jinqiao|Jinqiao]], [[w:Pudong|Pudong]] district, [[w:Shanghai|Shanghai]]||[[w:China|China]]||[[w:Cadillac CT4|Cadillac CT4]]<br />[[w:Cadillac CT5|Cadillac CT5]]<br />[[w:Cadillac CT6|Cadillac CT6]]<br />[[w:Cadillac Lyriq|Cadillac Lyriq]]<br />[[w:Cadillac Vistiq|Cadillac Vistiq]]<br>[[w:Cadillac XT4|Cadillac XT4]]<br />[[w:Cadillac XT5|Cadillac XT5]]<br />[[w:Cadillac XT6|Cadillac XT6]]<br />[[w:Buick Enclave#China (2020)|Buick Enclave]]<br />[[w:Buick GL8#Third generation (2017–present)|Buick GL8 ES/Avenir/PHEV (Mk III)]]<br />[[w:Buick GL8#Fourth generation (2022)|Buick GL8 Century (Mk IV)]]<br />[[w:Buick GL8#Electra Encasa (2025)|Buick Electra Encasa (Mk V)]]<br />[[w:Buick LaCrosse|Buick LaCrosse]]<br />[[w:Buick Regal#Sixth generation (2018)|Buick Regal]] (E2XX)<br />Engines<br />Engine components<br />Transmissions<br />Ultium batteries||1998|| ||Operated by [[w:SAIC-GM|SAIC-GM]]. There are 3 vehicle production plants (North, South, & East). North was the original plant. South began production in 2005. The East or "Cadillac" plant began production in 2016. On October 28, 2025, the Shanghai plant produced its 4 millionth vehicle, a 2026 Cadillac XT5.
Past models: [[w:Buick Century#Sixth generation (1997–2005)|Buick New Century]] (W-body)<br />[[w:Buick Excelle#First generation (J200; 2003)|Buick Excelle]]<br />[[w:Buick GL8#First generation (2000–2016)|Buick GL8 Mk I (1999-2004)]]<br />[[w:Buick Park Avenue#Third generation (2007–2012)|Buick Park Avenue (WM)]] (CKD)<br />[[w:Buick Regal#China|Buick Regal]] (W-body)<br />[[w:Buick Regal#Fifth generation (2008)|Buick Regal]] (Epsilon II)<br />[[w:Buick Sail|Buick Sail]]<br />[[w:Buick Velite 5|Buick Velite 5]]<br />[[w:Buick Velite 7|Buick Velite 7]]<br />[[w:Chevrolet Malibu#Eighth generation (2013)|Chevrolet Malibu]]<br />[[w:Chevrolet Malibu#Ninth generation (2016)|Chevrolet Malibu XL]]<br />[[w:Chevrolet Blazer (crossover)#Chinese version|Chevrolet Blazer]]<br />[[w:Cadillac ATS#ATS-L|Cadillac ATS-L]]<br />[[w:Cadillac CTS#First generation (2003)|Cadillac CTS]]<br />[[w:Cadillac STS#Chinese Cadillac SLS|Cadillac SLS]]<br />[[w:Cadillac XTS|Cadillac XTS]]<br />
Past Engines: [[w:General Motors 60° V6 engine#Production in China by SAIC-GM|Chevrolet 60° OHV V6]]
|-
|D||[[w:SAIC-GM|SAIC-GM]] Dongyue Motors||[[w:Yantai|Yantai]], [[w:Shandong|Shandong]]||[[w:China|China]]||[[w:Buick Envision|Buick Envision]]<br />[[w:Cadillac GT4|Cadillac GT4]]||2001|| ||Operated by [[w:SAIC-GM|SAIC-GM]]. Originally founded in 2001 as Yantai Bodyshop Corp. which built Daewoo vehicles ([[w:Daewoo Lanos|Daewoo Lanos]]) under license from Daewoo Motor Co. SAIC-GM took over the plant in 2002. There are 2 vehicle production plants (North & South). SAIC-GM Dongyue Motors joint venture is owned 50% by SAIC-GM, 25% by GM China, & 25% by SAIC. <br />
Past models: [[w:Buick Encore#First generation (2013)|Buick Encore]]<br />[[w:Buick Encore GX|Buick Encore GX]]<br />[[w:Buick Encore GX|Buick Encore Plus]]<br />[[w:Buick Excelle#Second generation (2018)|Buick Excelle]]<br />[[w:Buick Excelle GT#First generation (2009)|Buick Excelle GT/XT]]<br />[[w:Chevrolet Sail#Buick Sail|Buick Sail]]<br />[[w:Chevrolet Aveo#Second generation (T300; 2012)|Chevrolet Aveo (T300)]]<br />[[w:Chevrolet Sail#Third generation (2014)|Chevrolet Aveo (Mex.)]]<br />[[w:Chevrolet Sail#Chevrolet Sail|Chevrolet Corsa Plus (Chile)]]<br />[[w:Daewoo Magnus|Chevrolet Epica (V200)]]<br />[[w:Daewoo Tosca|Chevrolet Epica]] (V250)<br />[[w:Chevrolet Aveo (T200)|Chevrolet Lova]]<br />[[w:Chevrolet Lova RV|Chevrolet Lova RV]]<br />[[w:Chevrolet Onix#Second generation (2019)|Chevrolet Onix]]<br />[[w:Chevrolet Orlando#Second generation (2018)|Chevrolet Orlando]]<br />[[w:Chevrolet Sail|Chevrolet Sail]]<br />[[w:Chevrolet Trailblazer (crossover)|Chevrolet Trailblazer]]<br />[[w:Chevrolet Trax|Chevrolet Trax]]
|-
| ||[[w:SAIC-GM|SAIC-GM]] Dongyue Powertrain||[[w:Yantai|Yantai]], [[w:Shandong|Shandong]]||[[w:China|China]]||Engines<br />Transmissions including: [[w:GM 6T40 transmission|6T30/6T40/6T45/6T50]], [[w:Continuously variable transmission|CVT]]||1999|| ||Operated by [[w:SAIC-GM|SAIC-GM]]. Originally founded in 1999 as Shandong Daewoo Automotive Engine Co., Ltd., a 50/50 joint venture between Daewoo Motor Co. & Chinese partners owned by the Shandong provincial govt. SAIC-GM took over the plant in 2005. SAIC-GM Dongyue Powertrain joint venture is owned 50% by SAIC-GM, 25% by GM China, & 25% by SAIC. <br />
Past Engines: [[w:GM Family 1 engine#Generation III|Family I, Gen 3 engine]]
|-
| ||[[w:SAIC-GM|SAIC-GM]] Norsom Motors||[[w:Shenyang|Shenyang]], [[w:Liaoning|Liaoning]]||[[w:China|China]]|| ||1992||2025||Operated by [[w:SAIC-GM|SAIC-GM]]. Originally founded in 1992 as Jinbei GM Automotive Co. Ltd., a 30/70 joint venture between GM & Shenyang Jinbei Automotive. Restructured into a 50/50 joint venture between GM & Jinbei in 1998. SAIC-GM took over the joint venture in 2004, buying out Jinbei. The new SAIC-GM Norsom Motors joint venture is owned 50% by SAIC-GM, 25% by GM China, & 25% by SAIC. Plant closed in February 2025 due to declining sales in China by SAIC-GM.
Past models:<br /> Jinbei GM:<br />[[w:Chevrolet S-10 Blazer#Second generation (1995–2005)|Chevrolet Blazer]]<br />[[w:Chevrolet S-10#Second generation (1994)|Chevrolet S-10 Crew Cab]]<br />SAIC-GM:<br />[[w:Chevrolet Cruze|Chevrolet Cruze]]<br />[[w:Chevrolet Captiva#First generation (C100, C140; 2006)|Chevrolet Captiva]]<br />[[w:Chevrolet Tracker (2019)|Chevrolet Tracker]] <br />[[w:Chevrolet Seeker|Chevrolet Seeker]]<br/> [[w:Buick Encore#Second generation (2020)|Buick Encore]]<br />[[w:Buick Envista|Buick Envista]]<br />[[w:Buick GL8#First generation (2000–2016)|Buick GL8 Mk I (2004-2016)]]<br />[[w:Buick GL8#Second generation (2010-present)|Buick GL8 Land Business Class (Mk II) (2010-2025)]]<br />[[w:Buick Verano#Second generation (2016)|Buick Verano]] <br/> Engines
|-
|V||[[w:SAIC-GM|SAIC-GM]] Wuhan Branch||[[w:Wuhan|Wuhan]], [[w:Hubei|Hubei]]||[[w:China|China]]||[[w:Buick Verano#Third generation (Pro, 2021)|Buick Verano Pro]]<br />[[w:Buick Velite 6|Buick Velite 6]]<br />[[w:Buick Electra E5|Buick Electra E5]]<br />[[w:Buick Electra L7|Buick Electra L7]]<br />[[w:Buick Electra E7|Buick Electra E7]]<br />[[w:Cadillac Optiq|Cadillac Optiq]]<br /> Engines||2015<ref>{{Cite news |author=Joseph Szczesny |date=30 January 2015 |title=Ford, GM Implement Expansion Plans in China |work=The Detroit Bureau |url=https://www.thedetroitbureau.com/2015/01/ford-gm-implement-expansion-plans-in-china/ |access-date=19 June 2022}}</ref>|| ||Operated by [[w:SAIC-GM|SAIC-GM]].<ref>{{Cite news |author=Jamie L. LaReau |date=27 February 2020 |title=Restart of GM's plant in China stalls due to coronavirus crisis |work=Detroit Free Press |url=https://www.freep.com/story/money/cars/general-motors/2020/02/27/gm-delays-start-production-china-plant-due-coronavirus-crisis/4884203002/ |access-date=19 June 2022}}</ref>
Past models: [[w:Chevrolet Cavalier#China|Chevrolet Cavalier]] <br />[[w:Chevrolet Monza (China)|Chevrolet Monza]]<br />[[w:Chevrolet Menlo|Chevrolet Menlo]]<br />[[w:Chevrolet Equinox#Third generation (2018)|Chevrolet Equinox]]<br />[[w:Chevrolet Equinox#Fourth generation (2025)|Chevrolet Equinox Plus]]<br />[[w:Buick Electra E4|Buick Electra E4]]<br />[[w:Buick Excelle GT#Second generation (2015)|Buick Excelle GT/GX]]<ref>{{Cite news |author=Sam McEachern|date=28 February 2020 |title=GM Delays Production Restart At Wuhan Plant As Coronavirus Crisis Continues |work=GM Authority |url=https://gmauthority.com/blog/2020/02/gm-delays-production-restart-at-wuhan-plant-as-coronavirus-crisis-continues/ |access-date=19 June 2022}}</ref><br />[[w:Buick GL6|Buick GL6]]
|-
| ||[[w:SAIC-GM-Wuling|SAIC-GM-Wuling]] (HQ plant)||[[w:Liuzhou|Liuzhou]], [[w:Guangxi Zhuang Autonomous Region|Guangxi Zhuang Autonomous Region]]||[[w:China|China]]|| [[w:SAIC-GM-Wuling|Wuling]] models<br />Engines||1982|| ||Operated by [[w:SAIC-GM-Wuling|SAIC-GM-Wuling]]. There are 2 vehicle production plants (East & West). SAIC & GM jointly created the joint venture with Wuling in 2002. The SAIC-GM-Wuling joint venture was originally owned 50.1% by SAIC, 34% by GM China, & 15.9% by Liuzhou Wuling Automobile Industry Co., Ltd. Since 2011, SAIC-GM-Wuling is now owned 50.1% by SAIC, 44% by GM China, & 5.9% by Liuzhou Wuling Motors Co., Ltd. Engine plant added in 2007.
Past models: [[w:Chevrolet Spark#Lechi (China)|Chevrolet Lechi (Spark)]], [[w:Baojun 630|Baojun 630]]
|-
| ||[[w:SAIC-GM-Wuling|SAIC-GM-Wuling]] [[w:Baojun|Baojun]] Base||Liudong New District, [[w:Liuzhou|Liuzhou]], [[w:Guangxi Zhuang Autonomous Region|Guangxi Zhuang Autonomous Region]]||[[w:China|China]]|| [[w:Baojun|Baojun]] models<br />Engines||2012|| ||Operated by [[w:SAIC-GM-Wuling|SAIC-GM-Wuling]]. SAIC & GM jointly created the joint venture with Wuling in 2002. The SAIC-GM-Wuling joint venture was originally owned 50.1% by SAIC, 34% by GM China, & 15.9% by Liuzhou Wuling Automobile Industry Co., Ltd. Since 2011, SAIC-GM-Wuling is now owned 50.1% by SAIC, 44% by GM China, & 5.9% by Liuzhou Wuling Motors Co., Ltd. Engine plant added in 2015.
Past models: [[w:Chevrolet Spark#Lechi (China)|Baojun Lechi]], [[w:Baojun 610|Baojun 610]], [[w:Baojun 630|Baojun 630]]
|-
| ||[[w:SAIC-GM-Wuling|SAIC-GM-Wuling]] Chongqing Branch||[[w:Chongqing|Chongqing]]||[[w:China|China]]|| [[w:SAIC-GM-Wuling|Wuling]] models<br />Engines||2014|| ||Operated by [[w:SAIC-GM-Wuling|SAIC-GM-Wuling]]. Since 2011, SAIC-GM-Wuling is owned 50.1% by SAIC, 44% by GM China, & 5.9% by Liuzhou Wuling Motors Co., Ltd.
|-
| ||[[w:SAIC-GM-Wuling|SAIC-GM-Wuling]] Qingdao Branch||[[w:Qingdao|Qingdao]], [[w:Shandong|Shandong]]||[[w:China|China]]|| [[w:SAIC-GM-Wuling|Wuling]] models<br />Engines||2000|| ||Operated by [[w:SAIC-GM-Wuling|SAIC-GM-Wuling]]. Originally founded in 1997 as [[w:Etsong Vehicle Manufacturing|Etsong Vehicle Manufacturing]]. SAIC-GM-Wuling took over the plant in 2005. Since 2011, SAIC-GM-Wuling is owned 50.1% by SAIC, 44% by GM China, & 5.9% by Liuzhou Wuling Motors Co., Ltd. Engine plant added in 2009.
|-
|J||[[w:SGMW Motor Indonesia|SGMW Motor Indonesia]]||[[w:Cikarang|Cikarang]], [[w:West Java|West Java]]||[[w:Indonesia|Indonesia]]|| [[w:Wuling Air EV|Wuling Air EV]]<br />[[w:Wuling Aira EV|Wuling Aira EV]]<br>[[w:Wuling Binguo|Wuling Binguo EV]]<br />[[w:Wuling Cloud EV|Wuling Cloud EV ]]<br />[[w:Wuling Almaz|Wuling Almaz]]<br />[[w:Wuling Alvez|Wuling Alvez]]<br />[[w:Wuling Eksion|Wuling Eksion]]<br>[[w:Wuling Confero|Wuling Confero]]<br />[[w:Wuling Cortez|Wuling Cortez]]<br />[[w:Wuling Darion|Wuling Darion]]<br>[[w:Wuling Formo|Wuling Formo]]<br />[[w:Wuling Mitra EV|Wuling Mitra EV]]<br>[[w:MG4 EV|MG4 EV]], [[w:MG ZS (crossover)|MG ZS EV]], [[w:MGS5 EV|MGS5 EV]]<br>Battery packs||2017|| ||100% owned and operated by [[w:SAIC-GM-Wuling|SAIC-GM-Wuling]]. Since 2011, SAIC-GM-Wuling is owned 50.1% by SAIC, 44% by GM China, & 5.9% by Liuzhou Wuling Motors Co., Ltd. In 2024, SGMW Motor Indonesia began producing MG models on behalf of PT SAIC Motor Indonesia. MG is owned by SAIC, a shareholder of SGMW.
Past models: [[w:Chevrolet Captiva#Second generation (CN202S; 2019)|Chevrolet Captiva]]
|}
== Current partner factories ==
{| class="wikitable sortable" style="font-size:90%"
!VIN !! Name !! City/State !! Country !! class="unsortable" | Products !! Opened !! Idled !! class="unsortable" | Comments
|-
| ||[[Azermash CP LLC]]||[[w:Hajiqabul|Hajiqabul]]||[[w:Azerbaijan|Azerbaijan]]||[[w:Chevrolet Cobalt#Second generation (2011)|Chevrolet Cobalt]], [[w:Chevrolet Lacetti|Chevrolet Lacetti]], [[w:Chevrolet Malibu#Ninth generation (2016)|Chevrolet Malibu]], [[w:Chevrolet Onix#Second generation (2019)|Chevrolet Onix]], [[w:Chevrolet Aveo (T200)|Chevrolet Nexia (T250)]], [[w:Chevrolet Tracker (2019)|Chevrolet Tracker]], [[w:Suzuki Carry#Daewoo Damas|Chevrolet Damas/Labo]] ||2017|| ||Built under contract by Azermash CP LLC for GM & UzAuto Motors.
|-
|A||[[w:GM Uzbekistan|GM Uzbekistan]]/[[w:UzAuto Motors|UzAuto Motors]]||[[w:Asaka, Uzbekistan|Asaka]], [[w:Andijan Region|Andijan Region]]||[[w:Uzbekistan|Uzbekistan]]||[[w:Chevrolet Cobalt#Second generation (2011)|Chevrolet Cobalt]], [[w:Chevrolet Lacetti|Chevrolet Lacetti]], [[w:Chevrolet Onix#Second generation (2019)|Chevrolet Onix]], [[w:Chevrolet Tracker (2019)|Chevrolet Tracker (2022-)]]||1996|| ||Originally established as Uz-DaewooAuto, a 50/50 joint venture between Daewoo Motor & the Uzbek government. Became GM Uzbekistan, a 25/75 joint venture between GM & state owned UzAvtosanoat in 2008. GM was bought out by the Uzbek govt. in 2019 & the company was renamed UzAuto Motors. Vehicles now built under license from GM by UzAuto Motors.
Previous models: [[w:Daewoo Tico|Daewoo Tico]], [[w:Chevrolet Spark#First generation (M100, M150; 1998)|Daewoo Matiz (M150)]], [[w:Daewoo Nexia|Daewoo Nexia]], [[w:Daewoo Nexia|Chevrolet Nexia]], [[w:Daewoo Gentra#Uzbekistan (2013–2015)|Daewoo Gentra]], [[w:Daewoo Damas|Daewoo Damas]], [[w:Daewoo Labo|Daewoo Labo]], [[w:Chevrolet Captiva#First generation (C100, C140; 2006)|Chevrolet Captiva]], [[w:Chevrolet Epica|Chevrolet Epica]], [[w:Chevrolet Aveo (T200)|Chevrolet Nexia 3]], [[w:Chevrolet Spark#Third generation (M300; 2009)|Chevrolet Spark (M300)]], [[w:Chevrolet Tacuma|Chevrolet Tacuma]], [[w:Chevrolet Trax|Chevrolet Tracker]], [[w:Chevrolet Spark#First generation (M100, M150; 1998)|Ravon Matiz]], [[w:Chevrolet Spark#Third generation (M300; 2009)|Ravon R2]], [[w:Chevrolet Aveo#Ravon Nexia R3|Ravon Nexia R3]], [[w:Chevrolet Cobalt#Second generation (2011)|Ravon R4]], [[w:Daewoo Gentra|Ravon Gentra R5]]
|-
| ||[[w:GM Uzbekistan|GM Uzbekistan]]/[[w:UzAuto Motors|UzAuto Motors]]||[[w:Pitnak|Pitnak]], [[w:Khorezm Region|Khorezm Region]]||[[w:Uzbekistan|Uzbekistan]]||[[w:Chevrolet Damas|Chevrolet Damas]]<br> [[w:Chevrolet Labo|Chevrolet Labo]] ||2014|| ||Was part of GM Uzbekistan, a 25/75 joint venture between GM & state owned UzAvtosanoat formed in 2008. GM was bought out by the Uzbek govt. in 2019 & the company was renamed UzAuto Motors. Vehicles now built under license from GM by UzAuto Motors. In 2021, a new press shop opened at the Pitnak plant.
Previous models: [[w:Chevrolet Orlando#First generation (J309; 2010)|Chevrolet Orlando]], [[w:Daewoo Damas|Daewoo Damas]], [[w:Daewoo Labo|Daewoo Labo]]
|-
| ||[[w:GM Uzbekistan|GM Uzbekistan]]/[[w:UzAuto Motors|UzAuto Motors]]||[[w:Tashkent|Tashkent]]||[[w:Uzbekistan|Uzbekistan]]||Repair of used cars ||2009||2019||Was part of GM Uzbekistan, a 25/75 joint venture between GM & state owned UzAvtosanoat formed in 2008. GM was bought out by the Uzbek govt. in 2019 & the company was renamed UzAuto Motors. Vehicles now built under license from GM by UzAuto Motors. Plant assembled SKD vehicles. SKD production ended in 2019. Plant is now used to repair & overhaul used cars acquired as trade-ins for new cars, which are then resold by UzAuto.
Previous models: [[w:Chevrolet Captiva#First generation (C100, C140; 2006)|Chevrolet Captiva]], [[w:Chevrolet Malibu#Eighth generation (2013)|Chevrolet Malibu]], [[w:Chevrolet Malibu#Ninth generation (2016)|Chevrolet Malibu]], [[w:Chevrolet Trax|Chevrolet Tracker (initial production from SKD)]]
|-
| ||[[w:GM Uzbekistan|GM Powertrain Uzbekistan]]/[[w:GM Uzbekistan|UzAuto Motors Powertrain]]||[[w:Tashkent|Tashkent]]||[[w:Uzbekistan|Uzbekistan]]||[[w:Daewoo S-TEC engine|1.2L & 1.5L DOHC I4 engines]]<br />[[w:GM E-Turbo engine|1.2L GM E-Turbo I3 engine]]<br />Engine components (crankshaft, block, heads)<br />Aluminum Foundry ||2011|| ||GM Powertrain Uzbekistan is a 52/48 joint venture between GM & state owned UzAvtosanoat. In 2019, the company was renamed UzAuto Motors Powertrain after UzAvtosanoat bought out GM's share of the joint venture. It now builds engines & components under license from GM.
|-
|0,4,7,8,9||[[w:Isuzu|Isuzu]] Fujisawa plant||[[w:Fujisawa, Kanagawa|Fujisawa, Kanagawa]]||[[w:Japan|Japan]]||[[w:Isuzu Elf|Chevrolet Low Cab Forward 4500 & 5500 diesel]] (2016-)<br />[[w:Isuzu N-Series|Isuzu N-Series]]<br />[[w:Isuzu F-Series|Isuzu F-Series]]||1961|| ||[[w:Isuzu|Isuzu]] plant. <br /> Previous models:<br /> [[w:Isuzu Gemini#In other markets|Buick Opel]] (1976-1979) [Plant Code: 8]<br />[[w:Chevrolet LUV|Chevrolet LUV]] (1972-1982) [Plant Code: 8]<br />[[w:Chevrolet Spectrum|Chevrolet Spectrum]] (1985-1988)<br> [Plant Code: 8 ('85-'87), 7 ('88)]<br />[[w:Chevrolet W-Series|Chevrolet W-Series]] (1986-2009)<br> [Plant Code: 8 ('86-'87), 7 ('88-'09)]<br />[[w:Geo Spectrum|Geo Spectrum]] (1989) [Plant Code: 7]<br />[[w:Geo Storm|Geo Storm]] (1990-1993) [Plant Code: 7]<br />[[w:GMC W-Series|GMC W-Series]] (1986-2009)<br> [Plant Code: 8 ('86-'87), 7 ('88-'09)]<br />[[w:Isuzu Faster#First generation (1972–1980)|Bedford KB25]]<br />[[w:Isuzu Faster#Second generation (1980–1988)|Bedford KB26/41]]<br />[[w:Opel Campo#Third generation (TF; 1988–2002)|Opel Campo/Bedford Brava/Vauxhall Brava]]<br />[[w:Holden Jackaroo#First generation (1981)|Holden Jackaroo (Gen 1)]]<br />[[w:Opel Monterey#Second generation (1991)|Opel/Vauxhall Monterey/Holden Jackaroo (Gen 2)/Monterey]]<br />[[w:Holden Rodeo|Holden Rodeo]] (1981-2002) (KB/TF)<br />[[w:Holden Piazza#First generation (JR120/130; 1980)|Holden Piazza]]<br />[[w:Holden Shuttle|Holden Shuttle]]<br />[[w:Isuzu I-Mark|Isuzu I-Mark]], [[w:Isuzu Impulse|Isuzu Impulse]], [[w:Isuzu Stylus|Isuzu Stylus]]
|-
| ||PACE (Planta Automotiva do Ceará=Ceará Automotive Plant)||[[w:Horizonte, Ceará|Horizonte, Ceará]]||[[w:Brazil|Brazil]]||[[w:Chevrolet Spark EUV|Chevrolet Spark EUV]] (2026-),<br /> [[w:Wuling Starlight S|Chevrolet Captiva EV]]||2025|| ||Assembled from semi-knockdown kits imported from China under contract for GM. Production for GM began on December 3, 2025 with the Spark EUV. Production for non-GM brands is also expected. The plant is the former [[w:Troller|Troller]] plant that was bought by Ford in 2007 and closed in 2021. The plant is now operated by Comexport.
|-
| ||[[SaryarkaAvtoProm]]/<br>Allur Automobile Plant||[[w:Kostanay|Kostanay]]||[[w:Kazakhstan|Kazakhstan]]||[[w:Chevrolet Cobalt#Second generation (2011)|Chevrolet Cobalt]], [[w:Chevrolet Onix#Second generation (2019)|Chevrolet Onix]], [[w:Chevrolet Tracker (2019)|Chevrolet Tracker]]||2017|| ||Built under contract by SaryarkaAvtoProm for GM & UzAuto Motors.
Past models: [[w:Chevrolet Malibu#Ninth generation (2016)|Chevrolet Malibu]], [[w:Chevrolet Aveo (T200)|Chevrolet Nexia]], [[w:Chevrolet Niva|Chevrolet Niva]], [[w:Suzuki Carry#Daewoo Damas|Chevrolet Damas/Labo]], [[w:Chevrolet Aveo (T200)|Ravon Nexia R3]]
|-
|S||[[w:Shyft Group|Shyft Group]] - Charlotte plant||[[w:Charlotte, Michigan|Charlotte, Michigan]]||[[w:United States|United States]]||[[w:Isuzu Elf|Chevrolet Low Cab Forward 3500/4500/5500 gas]] (2016-)<br />[[w:Isuzu F-Series|Chevrolet Low Cab Forward 6500XD & 7500XD]] (2018- & 2023-)<br />[[w:Isuzu N-Series|Isuzu N-Series gas]] (2012-)<br />[[w:Isuzu F-Series|Isuzu FTR/FVR]] (2018- & 2023-)||1961|| ||[[w:Shyft Group|Shyft Group]] plant. Built under contract for Isuzu and GM.
|}
== Former factories ==
{| class="wikitable sortable" style="font-size:90%"
! style="width:20px;"|VIN
! style="width:60px;"| Name
! style="width:20px;"| City/State
! style="width:20px;"| Country
! style="width:90px;" class="unsortable" | Products
! style="width:10px;"| Opened
! style="width:10px;"| Idled
! style="width:190px;" class="unsortable" |Comments
|-
| ||AC Electronics||[[w:Oak Creek, Wisconsin|Oak Creek, Wisconsin]]||[[w:United States|United States]]||Automotive Electronics; Avionics, precision guidance systems, & electro-mechanical devices for military use and space exploration (Apollo program) ||1948||1999||Located at 7929 S. Howell Ave. First known as GM's Electronics Division. In 1965, the Milwaukee Operations became known as AC Electronics Division of GM. In 1970, the division merged with Delco Radio and became known as Delco Electronics Division. Spun off with Delphi Automotive Systems (Delphi Electronics & Safety) in 1999. Closed by Delphi in 2008. Is now Drexel Town Square, a retail, commercial, residential and civic development.
|-
| ||[[w:ACDelco#AC Spark Plug Division|AC Spark Plug Division]]||[[w:Flint, Michigan|Flint, Michigan]]||United States||AC Spark Plugs||1929||1975||Located on Industrial Ave at Harriet St. Built in 1909. Champion Ignition Co. moved here from their original location on the 3rd floor of a Buick building on Hamilton Ave. that they used from 1908. This complex was expanded multiple times and was on both sides of Industrial Ave. with 2 overhead walkways connecting the 2 sides. Champion Ignition Co. changed its name to AC Spark Plug in 1922. After founder Albert Champion died in 1927, GM took over AC Spark Plug in 1929. It became a GM division in 1933. Production gradually moved to the Flint East complex until the Industrial Ave. complex closed in 1975. Demolished in 1975-76. Site later used by Buick for parking as it was next to the Buick City complex.
|-
| ||[[w:Flint East|AC Spark Plug Flint East]]||[[w:Flint, Michigan|Flint, Michigan]]||United States||Components (spark plugs, dashboard components such as instrument clusters, fuel system components, air/oil/fuel filters, and fuel pumps)||1929||1999||Located at 1300 North Dort Highway. (Now referred to as 2926 Davison Road, which is the north side instead of the west side of the property.) Purchased by AC Spark Plug in 1925. Plant previously belonged to [[w:Dort Motor Car Company|Dort Motor Car Company]], which went out of business in 1924. Initially produced all products other than spark plugs that were made by AC Spark Plug Co. After founder Albert Champion died in 1927, GM took over AC Spark Plug in 1929. It became a GM division in 1933. Production gradually moved from the old Industrial Ave. complex to the Flint East complex until the Industrial Ave. complex closed in 1975. Became known as Flint East in 1987, when AC took over the "Chevy in the Hole" complex from Chevrolet on Flint's west side, which became known as Flint West. Became AC Rochester in 1988 when AC Spark Plug Division merged with Rochester Products Division. AC Rochester initially had its world headquarters here, just as AC Spark Plug had before the merger. Subsequently, AC Rochester headquarters moved to the Great Lakes Technology Center in the old Flint Fisher Body plant. In 1994, AC Rochester merged with Delco Remy and became AC Delco Systems. Grouped under GM's Delphi Automotive Systems subsidiary in 1995. Spun off with [[w:Delphi Corporation|Delphi Corporation]] in 1999. GM supplied the UAW workers from 2007 under agreement with Delphi and the UAW. Closed by Delphi in 2013.
|-
| ||[[w:ACDelco#AC Spark Plug Division|AC Spark Plug]]||[[w:Sioux City, Iowa|Sioux City, Iowa]]||[[w:United States|United States]]||[[w:Throttle#Throttle body|Throttle Body Fuel Injection Systems]]||1981||1993||Located at 1805 Zenith Drive. Formerly a Zenith Radio Factory. Now the headquarters of Bomgaars Supply, Inc.
|-
| ||[[w:ACDelco#AC Spark Plug Division|AC Spark Plug]]||[[w:Wichita Falls, Texas|Wichita Falls, Texas]]||United States||AC Air Filters||1972||1999||Located at 8600 Interstate 44 Service Rd. Spun off with Delphi Automotive Systems in 1999. Closed by Delphi in 2008. Now owned by Panda Biotech.
|-
| ||[[w:ACDelco#AC Spark Plug Division|AC Spark Plug Overseas Corp. - Kirkby plant]]||[[w:Kirkby|Kirkby]], [[w:Merseyside|Merseyside]], [[w:England|England]]||[[w:United Kingdom|United Kingdom]]||Instrument panels, Gauges, Fuel pumps, Fuel/temperature senders, Oil pressure switches, Radiator caps, Thermostats||1958||?||Plant is near Liverpool. Located on Moorgate Road. Kirkby was originally part of the AC-Delco division of GM Ltd. When the Kirkby plant opened in 1958, production of fuel pumps, thermostats, and instruments was moved there from the Dunstable components plant. In 1979, Kirkby became aligned with AC Spark Plug in the US. In 1982, GM Ltd. was dissolved and the Kirkby plant became part of AC Spark Plug Overseas Corp., part of GM Overseas Corp.
|-
| ||[[w:ACDelco#AC Spark Plug Division|AC Spark Plug Overseas Corp. - Southampton plant]]||[[w:Southampton|Southampton]], [[w:Hampshire|Hampshire]], [[w:England|England]]||[[w:United Kingdom|United Kingdom]]||Air filter elements, Oil filters, Fuel filters, Catalytic converters||1952||?|| Located on West Bay Road in the New Dock area of Southampton. Originally opened in 1938 as a vehicle assembly plant making Chevrolets (See listing for "GM Ltd."). Plant acquired by GM Ltd. in 1951. Southampton was originally part of AC-Sphinx Plug Co., a division of GM Ltd. In 1952, AC-Sphinx Plug Co. was renamed AC-Delco division of GM Ltd. When the Southampton plant opened in 1952, production of automotive filters (air filters, fuel filters) was moved there from the Dunstable components plant. In 1979, Southampton became aligned with AC Spark Plug in the US. In 1982, GM Ltd. was dissolved and the Southampton plant became part of AC Spark Plug Overseas Corp., part of GM Overseas Corp.
|-
| ||Allison,<br> [[w:Allison Transmission|Allison Transmission]], Allison Gas Turbine||[[w:Indianapolis|Indianapolis]], Indiana||United States||Allison Transmissions,<br> Engines for airplanes & helicopters,<br> Bearings and Gears||1929||2007||Located at 4700 W. 10th St. Founded in 1915 as Speedway Team Co. In 1920, it was renamed Allison Engineering Co. Acquired by GM in 1929, it became the Allison Division of GM. GM began designing the CD-850 transmission for tracked military vehicles in 1941; the design was completed in 1944 and Allison was awarded the contract to manufacture the prototypes. In February 1945, General Motors formed the Allison Transmission Engineering Section. In 1946, GM divided the division into 2 sections: Aircraft Operations and Transmission Operations. In 1970, Allison Division merged with the Detroit Diesel Engine Division to become the Detroit Diesel-Allison Division. In 1983, the aviation turbine engine operations were separated out to form a separate division called the Allison Gas Turbine Division. In 1987, the transmission operations are separated out to form the Allison Transmission Division. Allison Gas Turbine was sold in a management buyout in 1993 becoming the Allison Engine Company. [[w:Allison Engine Company|Allison Engine Company]] was then sold in 1995 to [[w:Rolls-Royce Holdings|Rolls-Royce PLC]]. GM sold Allison Transmission in 2007 to private equity groups Carlyle Group & Onex Corp., becoming Allison Transmission Inc. Allison went public as Allison Transmission Holdings Inc. in 2012, trading on the New York Stock Exchange.
|-
| ||Cadillac Amsterdam Street plant||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||[[w:Cadillac|Cadillac]]s||1903||1920||Cadillac's first volume production plant. Located at 450 Amsterdam Street, at the intersection with Cass Avenue. Rebuilt in 1904 after a fire destroyed the original plant. This plant predated Cadillac being part of GM. Replaced by the Clark Street plant in 1921.
|-
|5 (Plant 2)<br /><br /> 6 (Plant 1)<br /><br />9 (Pre-1976)||Antwerp||[[w:Antwerp|Antwerp]]||[[w:Belgium|Belgium]]||[[w:Opel Astra|Opel Astra]]/[[w:Vauxhall Astra|Vauxhall Astra]]<br />[[w:Opel Astra#Astra H (A04; 2004)|Opel/Vauxhall Astra GTC & OPC/VXR (H)]]<br />[[w:Opel Astra#TwinTop|Opel/Vauxhall Astra TwinTop]]<br />[[w:Opel Astra#Saturn Astra|Saturn Astra]] (2008 & in Canada '09)<br />[[w:Holden Astra#Fourth generation (TS; 1998)|Holden Astra (TS)]]<br />[[w:Holden Astra#Fifth generation (AH; 2004)|Holden Astra (AH)]] ||1925||2010||Originally known as GM Continental SA, then as Opel Antwerp from 1994-2004, & finally as GM Belgium from 2004 on. The original plant was an ex-abbey on Fortuinstraat. In 1926, production moved to an old velodrome on the corner of St. Laureystraat & Haantjeslei. In 1929, production moved to a site in the port of Antwerp near the Albert dock. The site at the port was destroyed by bombing raids in World War II. Production temporarily moved back to the velodrome from 1946-1953. In 1953, a new plant opened on the Noorderlaan which would later come to be known as Plant 1. In 1967, a second plant opened about 6.2 miles (10 km) north of the Noorderlaan plant near the Churchill dock. This was called Plant 2. In August 1988, production was consolidated in Plant 2 and Plant 1 was used as a parts warehouse until 1992 and the property was then sold. Plant 2 ended production in December 2010. First vehicle off the line was a Chevrolet. Assembled Opel & Vauxhall cars, Bedford trucks and American GM brands (Chevrolet, Pontiac, Oldsmobile, Buick, & Cadillac) from CKD kits. Also built the [[w:Ranger (automobile)#Europe|Ranger]]. The plant finally closed its doors on December 17, 2010, about two days after last Opel car rolled off the assembly line. <br />Past models: [[w:Chevrolet Camaro (first generation)|Chevrolet Camaro]] (first generation from CKD kits)<br />[[w:Chevrolet Corvair|Chevrolet Corvair]] (from CKD kits supplied from Oshawa)<br />[[w:Opel Ascona|Opel Ascona]]<br />[[w:Opel Kadett|Opel Kadett]]<br />[[w:Opel Manta|Opel Manta]]<br />[[w:Opel Olympia|Opel Olympia]]<br />[[w:Opel Rekord|Opel Rekord]]<br />[[w:Opel Vectra|Opel Vectra]]<br />[[w:Vauxhall Cresta|Vauxhall Cresta]]<br />[[w:Vauxhall Velox|Vauxhall Velox]]<br />[[w:Vauxhall Victor|Vauxhall Victor]]
|-
| ||[[w:General Motors de Argentina|General Motors de Argentina]]||[[w:San Telmo, Buenos Aires|San Telmo]] and [[w:Barracas, Buenos Aires|Barracas]] in [[w:Buenos Aires|Buenos Aires]] & [[w:San Martín, Buenos Aires|San Martin]]||[[w:Argentina|Argentina]]||Chevrolet (cars and trucks) including [[w:Chevrolet 400|Chevrolet 400]], [[w:Chevrolet Chevy Malibu|Chevrolet Chevy]], & [[w:Chevrolet C/K|Chevrolet C/K]] <br />[[w:Chevrolet C/K (second generation)#Medium-duty trucks|Chevrolet C-50/C-60/C-70]]<br />[[w:Chevrolet/GMC B series|Chevrolet B-60 bus chassis]]<br /> Oldsmobile <br />[[w:Opel K 180|Opel K 180]]<br />[[w:Bedford TJ|Bedford TJ]]<br />[[w:Chevrolet 153 4-cylinder engine#Argentina|Chevrolet 153 4-cylinder]]<br />[[w:Chevrolet Turbo-Thrift engine|Chevrolet Turbo-Thrift engine]]<br />Bedford diesel engines||1925 (San Telmo)<br />1928 (Barracas)<br />1940 (San Martin plant)||1978 (San Martin plant)||Other GM brands manufactured included GMC, Opel, and Bedford trucks along with Pontiac, Oakland, Marquette, Buick, LaSalle, Cadillac, Opel, and Vauxhall passenger cars.<ref>{{cite web|url=https://history.gmheritagecenter.com/wiki/index.php/GM_Argentina|title=GM Argentina}}</ref> Also Frigidaire refrigerators.
|-
| ||[[w:Aymesa|Aymesa]]||[[w:Quito, Ecuador|Quito]]||[[w:Ecuador|Ecuador]]|| ||1973||1999 (Last GM production)|| First automotive assembler in Ecuador. GM bought 36.95% of AYMESA in 1982 & increased its stake to 45.9% in 1984. GM sold off its stake in 1999 and switched to using OBB as its Ecuadorian partner. Aymesa now assembles vehicles for Kia and Hyundai.
Past models: [[w:Opel Corsa#Corsa B (S93; 1993)|Chevrolet Corsa]]<br />[[w:Suzuki Cultus#First generation (1983)|Suzuki Forsa]]<br />[[w:Suzuki Cultus#Second generation (1988)|Suzuki Forsa II/Chevrolet Swift]]<br />[[w:General Motors T platform (1973)|Chevrolet San Remo]]<br />Aymesa Gacela<br />Aymesa Condor<br />[[w:Bedford HA#The BTV|Aymesa Andino]]<br />Aymesa Amigo
|-
|3 (since 1993)<br />A (before 1993)||Azambuja||[[w:Azambuja|Azambuja]]||[[w:Portugal|Portugal]]||[[w:Opel Combo#Kadett Combo (Combo A; 1986)|Opel Kadett Combo A/Bedford & Vauxhall Astravan & Astramax]]<br />[[w:Opel Combo#Combo B (1993-2001)|Opel/Vauxhall/Holden Combo]] B<br />[[w:Opel Combo#Combo C (2001-2012)|Opel/Vauxhall/Holden Combo]] C||1963||2006||Past models:<br />[[w:Opel Corsa#Corsa Van|Opel Corsavan]]<br /> [[w:Opel Kadett|Opel Kadett]]<br />[[w:Opel Rekord|Opel Rekord]]<br />[[w:Vauxhall Victor|Vauxhall Victor]]<br />[[w:Vauxhall Viva|Vauxhall Viva]]<br />[[w:Bedford HA#The BTV|Amigo]]<br />[[w:Bedford CF|Bedford CF]]<br />[[w:Bedford TJ|Bedford TJ]]<br />[[w:Bedford TK|Bedford TK]]<br />Various Opel, Vauxhall, & Bedford models.
|-
|B <br />(1953-1964 [[w:Chevrolet|Chevrolet]]<br />and 1964 [[w:Pontiac (automobile)|Pontiac]]<br /> and 1965-2005)<br /><br />14 (1935-1952 [[w:Chevrolet|Chevrolet]]) <br /><br /> 7 (1964 [[w:Buick|Buick]])||[[w:Baltimore Assembly|Baltimore Assembly]]||[[w:Baltimore|Baltimore]], [[w:Maryland|Maryland]]||United States||[[w:Chevrolet Astro|Chevrolet Astro]] (1985-2005)<br />[[w:Chevrolet Astro|GMC Safari]] (1985-2005) ||1935||2005||Located at 2122 Broening Highway. Production began in March 1935 (March 11 for trucks and March 26 for cars). Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Baltimore Assembly began making Pontiac and Buick passenger cars for 1964. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. Baltimore Assembly joined the GM Assembly Division in 1968. During WWII, the Chevrolet side of the plant operated as a military parts depot where parts were received, processed, and packaged for shipment around the world. It also built 2,650 [[w:GMC CCKW 2½-ton 6×6 truck|GMC CCKW 6x6 trucks]]. The Fisher Body side of the plant became part of GM's Eastern Aircraft Division and assembled the rear fuselage, tail assembly, & all control surfaces for Grumman carrier-based aircraft. Car production ended on March 31, 1984. Converted to a Truck and Bus Group assembly plant for 1985. Production restarted in August 1984. Closed on May 13, 2005. Baltimore Assembly produced over 12 million vehicles. Demolished. Now the Chesapeake Commerce Center and an Amazon distribution center.<br />
Past models:<br /> [[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Master|Chevrolet Master]]<br />[[w:Chevrolet Deluxe|Chevrolet Deluxe]]<br />[[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]]<br />[[w:Buick Gran Sport|Buick GS]] (1965-1968),<br /> [[w:Buick Skylark|Buick Skylark]] (1964-68),<br /> [[w:Buick Special|Buick Special]] (1964-67), [[w:Chevrolet 150|Chevrolet 150]] (1953-57), [[w:Chevrolet 210|Chevrolet 210]] (1953-57), [[w:Chevrolet AK Series|Chevrolet AK Series]], [[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1947-1955), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1963), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-1963), [[w:Chevrolet C/K|Chevrolet C/K]] (1960-1980), [[w:Chevrolet Chevelle|Chevrolet Chevelle]] (1964-1977), [[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958), [[w:Chevrolet El Camino|Chevrolet El Camino]] (1959-1960, 1964-1977), [[w:Chevrolet Impala|Chevrolet Impala]] (1958-1963), [[w:Chevrolet Malibu#Fourth generation (1978)|Chevrolet Malibu]] (1978-1983), [[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1970-1984), [[w:Chevrolet Nomad|Chevrolet Nomad]] (1955-1957), [[w:Chevrolet Suburban|Chevrolet Suburban]] (1957, 1962, 1964-1966), [[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959), [[w:Chevrolet C/K (second generation)|GMC C/K (Action Line)]] (1967-1972), [[w:Chevrolet C/K (third generation)|GMC C/K (Rounded Line)]] (1973-1980), [[w:GMC Sprint|GMC Sprint]] (1971-1977), [[w:Pontiac Bonneville#Seventh generation (1982–1986)|Pontiac Bonneville]] (1983-1984), [[w:Pontiac Grand Prix#Fifth generation (1978–1987)|Pontiac Grand Prix]] (1983-1984), [[w:Pontiac GTO|Pontiac GTO]] (1964-1970), [[w:Pontiac LeMans|Pontiac LeMans]] (1964-1970, 1978-1981), [[w:Pontiac Tempest|Pontiac Tempest]] (1964-1970)
|-
| ||[[w:Baltimore Transmission|Baltimore Transmission]]||[[w:White Marsh, Maryland|White Marsh]], [[w:Maryland|Maryland]]||United States||Allison 1000 Series transmissions: [[w:Chevrolet Silverado|Silverado HD]], [[w:GMC Sierra|Sierra HD]]<br />Hybrid 2-mode transmissions ([[w:Global Hybrid Cooperation|2ML70]]): [[w:Chevrolet Tahoe#Third generation (2007)|Chevrolet Tahoe Hybrid]], [[w:Chevrolet Tahoe#Third generation (2007)|GMC Yukon Hybrid]], [[w:Cadillac Escalade#Hybrid|Cadillac Escalade Hybrid]], [[w:Chevrolet Silverado#Second-generation Silverado / third-generation Sierra (GMT900; 2007)|Chevrolet Silverado Hybrid]], [[w:Chevrolet Silverado#Second-generation Silverado / third-generation Sierra (GMT900; 2007)|GMC Sierra Hybrid]]<br />Electric motor (MME) & final-drive unit (1ET35) for [[w:Chevrolet Spark#Spark EV|Chevy Spark EV]]<br />Torque converters for 6-speed rwd automatic transmissions||2000||2019||Located at 10301 Philadelphia Road. Originally part of Allison Transmission. Became a GM Powertrain facility in 2004. Name changed to Baltimore Operations in 2012 with the addition of the Electric Motor Plant built next to the existing Transmission Plant. Closed in 2019.<ref>{{Cite web|url=https://gmauthority.com/blog/2019/04/gm-baltimore-employees-irate-over-plant-closure/|title = GM Baltimore Employees Irate over Plant Closure|author=Anthony Alaniz|publisher=GMAuthority.com|date = 19 April 2019}}</ref> Now called White Marsh Interchange Park, a complex of 9 new one-story buildings of office and warehouse space that replaces the previous GM plant which has been demolished.
|-
|T||[[w:Bedford Dunstable plant|Bedford Dunstable plant]]||[[w:Dunstable|Dunstable]], [[w:Bedfordshire|Bedfordshire]], [[w:England|England]]||[[w:United Kingdom|United Kingdom]]||[[w:Bedford Vehicles|Bedford trucks and buses]] including:<br> [[w:Bedford S type|Bedford S series]]<br />[[w:Bedford TA|Bedford TA/TD]]<br />[[w:Bedford TJ|Bedford TJ]]<br />[[w:Bedford TK|Bedford TK/KM]]<br />[[w:Bedford TL|Bedford TL]]<br />[[w:Bedford TM|Bedford TM]]<br />[[w:Bedford SB|Bedford SB]]<br />[[w:Bedford VAL|Bedford VAL]]<br />[[w:Bedford VAM|Bedford VAM]]<br />[[w:Bedford VAS|Bedford VAS]]<br />[[w:Bedford Y series|Bedford Y series]]<br />Bedford gas & diesel engines||1942 (for wartime production)<br><br> 1955 (for civilian production)||1987||Was located on Boscombe Road. Bedford truck and bus production was moved to Dunstable from Luton in 1955. GM sold the Bedford heavy truck business to AWD Trucks in 1987. AWD Trucks went bankrupt in 1992. Parts of the site were demolished in 1993. More was demolished in 1997. The remainder was demolished in 2005. The [[w:Commer|Commer]] plant was located across Boscombe Road in Dunstable from the 1960's.
|-
| ||Bombay||[[w:Bombay|Bombay]], [[w:Maharashtra|Maharashtra]]||[[w:India|India]]||[[w:Chevrolet|Chevrolet]] cars, trucks, & buses||1928||1954||The first automobile assembly plant in India. The original GM India Ltd. was closed in 1954.
|-
|12 (Buffalo Assembly from 1928)||[[w:Buffalo Assembly|Buffalo Assembly]]/<br />Buffalo Gear & Axle||[[w:Buffalo, New York|Buffalo, New York]]||United States||[[w:Chevrolet Superior|Chevrolet Superior]]<br />[[w:Chevrolet Series AA Capitol|Chevrolet Series AA Capitol]]<br />[[w:Chevrolet Series AB National|Chevrolet Series AB National]]<br />[[w:Chevrolet Series AC International|Chevrolet Series AC International]]<br />[[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]]<br />[[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]]<br />[[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]]<br />[[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]]<br />[[w:Chevrolet Master|Chevrolet Master]]<br />[[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Suburban|Chevrolet Suburban]]<br /> Axles, drivetrain components||1923||1994||Located at 1001 E. Delavan Ave. Built cars until World War II & was then converted to make axles. Operation was renamed Saginaw Gear and Axle in 1984. Sold to [[w:American Axle|American Axle]] in 1994. All operations ended in 2007 & the factory closed. Called the Historic American Axle Building. Purchased by Viridi in 2018.
|-
|H (1965-1999)<br /><br /> 1 (1938-1964 [[w:Buick|Buick]])||[[w:Buick City|Buick City]]||[[w:Flint, Michigan|Flint, Michigan]]||United States||[[w:Buick LeSabre|Buick LeSabre]] (1959-1999)<br />[[w:Buick Park Avenue|Buick Park Avenue]] (1994-1996)<br />[[w:Oldsmobile 88|Oldsmobile 88]] (1987, 1989-1995)<br />[[w:Pontiac Bonneville#Ninth generation (1992–1999)|Pontiac Bonneville]] (1996-1999)||1904||1999||This was Buick's home plant. It predated the founding of GM in 1908. This is the part of the Buick factory complex south of Leith St. stretching south to E. Hamilton Ave. The complete complex, including both North and South portions totals 412,947 acres. The original factory was at one time the largest in the world and was completely vertically integrated, making nearly every component within the complex. During WWII, Buick built [[w:M18 Hellcat|M18 Hellcat]] tanks & [[w:M39 armored utility vehicle|M39 armored utility vehicles]] here. The plant was converted to build unibody, fwd cars for 1986 instead of the previous body-on-frame, rwd cars. The modernized plant was renamed Buick City. The factory closed in June 1999. Last car built was a 1999 Buick LeSabre. Demolished by 2002. The site of Buick's administration building, 902 E. Hamilton Ave., is now a seating plant owned by Lear Corp., which opened in 2018. It supplies seats to GM's nearby Flint Truck Assembly Plant as well as GM's Fort Wayne Assembly Plant in Indiana. A large piece of the property is now being redeveloped as Flint Commerce Center.<br> Past models: [[w:Buick Centurion|Buick Centurion]] (1971–1973),<br> [[w:Buick Century|Buick Century]] (1936-42, 1954-1958, 1973-1981), [[w:Buick Electra|Buick Electra]] (1959-1984), [[w:Buick Estate|Buick Estate]] (1940-64, 1970-76), [[w:Buick GS|Buick GS]] (1965-1972), [[w:Buick Invicta|Buick Invicta]] (1959-1963), [[w:Buick Limited|Buick Limited]] (1936-42, 1958), [[w:Buick Regal|Buick Regal]] (1973-1985), [[w:Buick Riviera|Buick Riviera]] (1963-1978), [[w:Buick Roadmaster|Buick Roadmaster]] (1936-58), [[w:Buick Skylark#1953–1954|Buick Skylark]] (1953-1954), [[w:Buick Skylark|Buick Skylark]] (1961-72), [[w:Buick Special|Buick Special]] (1936-58, 1961-69), [[w:Buick Sport Wagon|Buick Sport Wagon]] (1964-1971), [[w:Buick Super|Buick Super]] (1940-1958), [[w:Buick Wildcat|Buick Wildcat]] (1963-1970) [[w:Marquette (automobile)#Buick brand|Marquette]] (1930), [[w:Chevrolet Caprice#Third generation (1977–1990)|Chevrolet Caprice]] (1984-1985), [[w:Chevrolet Impala#Sixth generation (1977–1985)|Chevrolet Impala]] (1984-1985),<br> [[w:Oldsmobile Cutlass Supreme#Fourth generation (1978–1988)|Oldsmobile Cutlass Supreme]] (1985).
|-
| ||Cadillac Stamping||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||Stamped body parts for Cadillac||1956||1987||Located at 9501 Conner St. Originally built by Clayton & Lambert Manufacturing Company for their Knodell Division. Sold to Hudson Motor Car Company in 1925. Made bodies for Hudson. Bought by GM in 1956. Demolished in 2021. Site used by [[w:Lear Corp.|Lear Corp.]] to make seats to supply GM's Factory Zero plant.
|-
| ||[[w:Cartercar|Cartercar]]||[[w:Pontiac, Michigan|Pontiac]], [[w:Michigan|Michigan]]||United States||Cartercar automobiles||1909||1915||Located on Franklin Rd. where Franklin turns into Linfere St. which then intersects with Brush St. This factory previously belonged to Pontiac Spring & Wagon Works. Cartercar moved into this factory in 1908. Cartercar was purchased by GM on October 26, 1909. Cartercar was known for its [[w:Friction drive|friction drive transmission]]. GM closed Cartercar in 1915. There was then talk that GM would build a 6-cylinder Oakland model at this factory but it doesn't seem to have ever happened. GM sold the factory to Olympian Motors Company in 1917, which built Olympian cars there from 1917-1919. In 1920, the factory was sold to Friend Motors Corporation. Initially, Friend Motors Corporation continued production of Olympian cars and then switched to production of new Friend cars in 1921 but production ended with less than 50 cars built and Friend Motors went out of business. In 1922, Friend Motors owner Otis Friend filed for bankruptcy and factory ownership was transferred to Gotham National Bank in a foreclosure sale. The next occupant of the plant was the Wolverine Manufacturing Company which built furniture. Later, it was used as an agricultural supply warehouse. Most of the complex is gone but one building remains at 20 Franklin Rd. It was last occupied by House of Bedrooms, a furniture store. One side of the building still says "The Wolverine" at the top. The other side that faces Brush St. still says "Pontiac Spring & Wagon Works" right under what were the highest row of windows.
|-
| ||Chevrolet Gear & Axle||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||Axles, gears, other components||1919||1994||Located at 1840 Holbrook Ave. Absorbed the former Northway engine plant on Holbrook Ave. in 1926 when Northway was liquidated by GM. Straddles the border of [[w:Detroit|Detroit]] and [[w:Hamtramck, Michigan|Hamtramck, Michigan]]. Sold to [[w:American Axle|American Axle]] & Manufacturing Inc. in 1994. Closed in 2012, demolished in 2013.
|-
| ||Fisher Body - Chicago Metal Fabrication||[[w:Willow Springs, Illinois|Willow Springs, Illinois]]||United States||Stampings (such as floorpans) for GM vehicles||1953||1989||Located at 79th Street and Willow Springs Road. Buick produced J65-B-3 jet engines here for the [[w:Republic F-84F Thunderstreak|Republic F-84F Thunderstreak]]/RF84-F Thunderflash for use in the Korean War. Plant was associated with Buick-Oldsmobile-Cadillac Group but made body parts for all 5 of GM's passenger car divisions. Sold to [[w:United Parcel Service|UPS]].
|-
| ||[[w:General Motors de Chile|General Motors de Chile]]||[[w:Arica|Arica]]||[[w:Chile|Chile]]||[[w:Isuzu Faster#Second generation (1980–1988)|Chevrolet LUV]]<br />[[w:Isuzu Faster#Third generation (TF; 1988–2002)|Chevrolet LUV (TF)]]<br />[[w:Isuzu Faster#South America 2|Chevrolet Grand LUV (TF)]]<br />[[w:Isuzu D-Max#First generation (RA, RC; 2002)|Chevrolet D-Max]]||1968<br>1974||1971<br>2008||Originally belonged to Alberto Avayú y Cía. S.A.I.C. (part of Empresas Indumotora) which built vehicles under license for GM beginning in 1960. Avayú built the [[w:Chevrolet Chevy II / Nova|Chevrolet Chevy II / Nova]], [[w:Chevrolet C/K (first generation)|Chevrolet C-1434]], [[w:Opel Rekord|Opel Rekord]], [[w:Opel Rekord|Opel Furgón (van)]]. GM bought the plant in 1968. Built [[w:Chevrolet Chevy II / Nova|Chevrolet Chevy II / Nova]] & [[w:Chevrolet C/K (second generation)|Chevrolet C10]]. GM left Chile at the end of 1971 but returned in 1974. Past models: [[w:Chevrolet C/K (third generation)|Chevrolet C-10 and C-30]], [[w:Chevrolet C/K|Chevrolet C/K]] medium duty truck, [[w:Chevrolet Chevette#Latin America|Brazilian Chevrolet Chevette]], and Japanese [[w:Isuzu Aska#South America (Chile, Ecuador)|Chevrolet Aska]]
|-
| ||Fisher Body - Cleveland Division||[[w:Cleveland|Cleveland]], [[w:Ohio|Ohio]]||United States||Bodies for GM vehicles||1921||1983||Located at Coit Road and E. 140th Street. Founded as Fisher Body Ohio Co. GM bought 60% of Fisher Body in 1919 and the remaining 40% in 1926. Began by building bodies for Chandler, Cleveland (a subsidiary of Chandler), Chrysler, and the Oakland & Chevrolet divisions of GM. After 1926, it only made bodies for GM. In 1936, the plant switched from making whole bodies to doing metal trim and fabrication due to a decrease in demand for cars due to the Depression. Production of auto bodies resumed after World War II. Built bodies for low-volume models like the 55-57 Chevy Nomad and convertible models. In the 1970's, it built large stamping dies and upholstery & trim sets. Closed in August 1983 as a metal fabrication plant.
|-
| ||[[w:Cleveland Diesel Engine Division|Cleveland Diesel Engine Division]]||[[w:Cleveland|Cleveland]], [[w:Ohio|Ohio]]||United States||Heavy-duty diesel engines for locomotives, marine use (ships and submarines), and stationary use||1930||1962||Founded by Alexander Winton, company began operation in Nov. 1912 as the Winton Gas Engine & Mfg. Co. at 2116 W. 106th St. Renamed the Winton Engine Works in 1916 and later as the Winton Engine Company. GM bought Winton Engine Co. on June 20, 1930 and renamed it Winton Engine Corp. on June 30, 1930. In 1938, it was renamed Cleveland Diesel Engine Division. In January 1941, locomotive engine development and production was transferred to GM's Electro-Motive Division. Marine and stationary diesel engines were still handled by Cleveland Diesel Engine Division. In the 1950s, Cleveland Diesel Engine expanded with the acquisition of plants at 2160 W. 106th St. and 8200 Clinton Rd. The advent of nuclear-powered submarines in the 1950's reduced the US Navy's need for the large diesel engines produced by Cleveland Diesel and in 1962, GM closed down the division and transferred any remaining engine production to Electro-Motive Division's La Grange plant in McCook, Illinois.
|-
| ||[[w:GM Colmotores|GM Colmotores]]||[[w:Bogotá|Bogotá]]||[[w:Colombia|Colombia]]||Products from [[w:GM do Brasil|GM do Brasil]]: [[w:Chevrolet Onix#First generation (2013)|Chevrolet Joy]]
<br />Products from [[w:Isuzu|Isuzu]]: [[w:Isuzu Forward|Chevrolet F-Series Bus]], [[w:Isuzu Forward|Chevrolet F-Series truck]], [[w:Isuzu Elf|Chevrolet N-Series Bus]], [[w:Isuzu Elf|Chevrolet N-Series truck]], Chevrolet LV-series Bus
||1979||2024||Founded in 1956 as Colmotores, production began in 1962 with the [[w:Austin Motor Company|Austin]] brand, then switched to the [[w:Dodge|Dodge]] brand in 1965 when Chrysler took a 60% stake in what was now Colmotores-Chrysler. GM took over Colmotores in 1979 (Chrysler was dropped from the company name at this point). Chevrolet truck production began in 1980. Chevrolet car production began in 1982. Colmotores became GM Colmotores in 1991. Closed in April 2024.<ref>{{Cite web|url=https://gmauthority.com/blog/2024/04/gm-shutting-down-manufacturing-operations-in-colombia-and-ecuador/|title = GM Shutting Down Manufacturing Operations In Colombia And Ecuador|author=Deivis Centeno|publisher=GMAuthority.com|date = April 29, 2024}}</ref><ref>{{Cite web|url=https://www.americaeconomia.com/en/business-industries/general-motors-announces-end-car-manufacturing-operations-colombia-and-ecuador/|title = General Motors announces the end of car manufacturing operations in Colombia and Ecuador|publisher=AmericaEconomia.com|date = April 26, 2024}}</ref>
Past products from [[w:Chevrolet|Chevrolet]]: [[w:Chevrolet C/K#Third generation (1973–1991)|Chevrolet C-10]], [[w:Chevrolet C/K#Third generation (1973–1991)|Chevrolet C-30]], [[w:Chevrolet Celebrity|Chevrolet Celebrity]], [[w:Chevrolet Cruze#First generation (J300; 2008)|Chevrolet Cruze]], [[w:Chevrolet Kodiak|Chevrolet Kodiak]], [[w:GMC Brigadier|Chevrolet Brigadier/Super Brigadier]]<br />Past products from [[w:GM do Brasil|GM do Brasil]]: [[w:Chevrolet Chevette#Latin America|Chevrolet Chevette]], [[w:Chevrolet Cobalt#Second generation (2011)|Chevrolet Cobalt]], [[w:Opel Ascona#Chevrolet Monza|Chevrolet Monza]]<br />Past products from [[w:Isuzu|Isuzu]]: [[w:Isuzu Faster|Chevrolet LUV]], [[w:Isuzu Trooper#First generation (1981–1991)|Chevrolet Trooper]]<br />Past products from [[w:Suzuki|Suzuki]]: [[w:Suzuki Cultus#First generation (1983)|Chevrolet Sprint]] (note: this is the same name as the one that was sold in the U.S. and Canada in the 80's), [[w:Suzuki Cultus#Second generation (1988)|Chevrolet Swift]], [[w:Suzuki Alto#Fifth generation (1998)|Chevrolet Alto]], [[w:Suzuki Cultus Crescent|Chevrolet Esteem]], [[w:Suzuki Jimny#Third generation (1998)|Chevrolet Jimny]], [[w:Suzuki Jimny#Second generation (1981)|Chevrolet Samurai]], [[w:Suzuki Solio#Predecessor: Wagon R-Wide (MA61S/MB61S; 1997)|Chevrolet Wagon R+]]<br />Past products from [[w:Opel|Opel]]: [[w:Opel Corsa|Chevrolet Corsa]]<br />Past products from [[w:GM Korea|Daewoo/GM Korea]]: [[w:Daewoo Matiz#Second generation (M200, M250; 2005)|Chevrolet Spark]], [[w:Daewoo Matiz#Third generation (M300; 2009)|Chevrolet Spark GT]], [[w:Daewoo Lacetti|Chevrolet Optra]], [[w:Daewoo Kalos|Chevrolet Aveo]]<br />Products from [[w:SAIC-GM|SAIC-GM]]: [[w:Chevrolet Sail#Second generation (2010)|Chevrolet Sail]]
|-
| ||Constantine Transmission||[[w:Constantine, Michigan|Constantine, Michigan]]||United States||Automatic Transmissions||Between 1977 and 1980||Between 1987 and 1994|| Part of GM St. Joseph County Operations & GM Hydramatic Division.
|-
| ||Danville Foundry||[[w:Danville, Illinois|Danville, Illinois]]||United States||[[w:Casting|Iron castings]]||1943||1995|| Was part of GM's Central Foundry Division. Leased by [[w:Defense Plant Corporation|Defense Plant Corporation]] to pour castings for military equipment during [[w:World War II|World War II]]. Also supplied castings to Ford, Chrysler, and AMC.
|-
| ||Delco Chassis||[[w:Livonia, Michigan|Livonia, Michigan]]||United States||Bumpers||1953||1998||Site bought by GM in 1953. Located at 12950 and 13000 Eckles Road. Buildings demolished in 2001. Redeveloped into multi-tenant commercial use. One of the tenants is Amazon.
|-
| ||[[Delco Moraine NDH]] Dayton North (NDH=New Departure Hyatt)||[[w:Dayton, Ohio|Dayton, Ohio]] (Needmore Rd.)||United States||Master Cylinders/Brake Pads/Brake Calipers/ABS Assemblies||1965||1999||Located at 3100 Needmore Road. Spun off with [[w:Delphi Automotive|Delphi]] in 1999. Closed by Delphi in 2008. Demolished.
|-
| ||[[Delco Moraine NDH]] Dayton South (NDH=New Departure Hyatt)||[[w:Dayton, Ohio|Dayton, Ohio]] (Wisconsin Blvd.)||United States||Engine Bearings/Master Cylinders/Brake Pads/Brake Calipers/ABS Assemblies||1936||1999||Located at 1420 Wisconsin Boulevard. Delphi Chassis Systems. Spun off with [[w:Delphi Automotive|Delphi]] in 1999. Demolished in 2003.
|-
| ||[[Delco Moraine NDH]] (NDH=New Departure Hyatt)||[[w:Sandusky, Ohio|Sandusky, Ohio]]||United States||Wheel Bearings & Wheel Bearing Assemblies||1946||1999||Located at 2509 Hayes Ave. Transferred to Delphi in 1995 which was then spun off in 1999, later sold to Hephaestus Holdings Inc. (HHI, Inc.), through its subsidiary Kyklos Bearing International (KBI) in 2008. HHI's parent, KPS Capital Partners, sold HHI to American Securities LLC in 2012. American Securities combined HHI with Metaldyne, which it also acquired in 2012, to form Metaldyne Performance Group (MPG) in 2014. Metaldyne closed the plant in 2017 when it exited the wheel bearing business.
|-
| ||[[Delco Products]]||[[w:Kettering, Ohio|Kettering, Ohio]]||United States||Shock Absorbers, Struts, Impact Absorbers, Electric Motors, Windshield Wiper Assemblies||1957||1999||Located at 2555 Woodman Dr. (Administrative offices were at 2000 Forrer Blvd.) Spun off with Delphi Automotive Systems in 1999. A large portion of the site has been used by [[w:Tenneco|Tenneco Inc.]] since 2008.
|-
| ||[[Delco Products Overseas Corp.]]||[[w:Dunstable|Dunstable]], [[w:Bedfordshire|Bedfordshire]], [[w:England|England]]||[[w:United Kingdom|United Kingdom]]||Windshield wiper motors, Wiper/washer units, Heater blower motors, Cooling fan motors, Ignition coils, Distributors, etc.||1934|| ?||Located on High Street North. In 1923, AC Sphinx Sparking Plug Co., Ltd. was created by a 50/50 merger of the British branch of AC Spark Plug Co. and the Sphinx Manufacturing Co., a British spark plug manufacturer based in Birmingham. When AC Spark Plug founder Albert Champion died in 1927, AC Sphinx became wholly owned by AC Spark Plug Co. of Flint, MI. GM was already the major shareholder in AC Spark Plug and took it over completely in 1933, including AC Sphinx in the UK. AC Sphinx Sparking Plug Co., Ltd. moved to Dunstable from their original site in Birmingham beginning in 1934. The transfer to Dunstable was completed in 1936 and the Birmingham plant was relinquished. Dunstable made spark plugs as well as many other automotive components. In 1946, GM Ltd. acquired AC Sphinx as well as Delco-Remy and Hyatt Ltd. from parent GM in the US. In 1947, AC Sphinx was renamed AC-Sphinx Plug Co., a division of GM Ltd. In 1952, AC-Sphinx Plug Co. was renamed AC-Delco division of GM Ltd. When the Southampton plant was added in 1952, production of automotive filters (air filters, fuel filters) was moved there from Dunstable. When the Kirkby plant was added in 1958, production of fuel pumps, thermostats, and instruments was moved there from Dunstable. In 1979, Dunstable became aligned with Delco Products in the US. In 1982, GM Ltd. was dissolved and Dunstable became Delco Products Overseas Corp., part of GM Overseas Corp.
|-
| ||[[w:Delco Remy|Delco Remy]]||[[w:Anaheim, California|Anaheim, California]]||United States||Batteries||1954||1999||Known as Plant 13. Located at 1201 N. Magnolia St. Supplied batteries to GM's California assembly plants like Fremont, Southgate and Van Nuys and to the West Coast aftermarket. Spun off with Delphi Automotive Systems in 1999. Closed by Delphi in 2005. Demolished. Is now Northgate Gonzalez Market.
|-
| ||[[w:Delco Remy|Delco Remy]]||[[w:Anderson, Indiana|Anderson, Indiana]]||United States||Starters, Generators, HEI Ignition, DIS Ignition, Switches, Magnets||1906||1994/1999|| The Heavy Duty Systems unit and a portion of the Automotive Systems unit (passenger car cranking motors) were spun off as [[w:Remy International|Delco Remy International]] in 1994, which was renamed [[w:Remy International|Remy International]] in 2004. Delco Remy International closed all manufacturing in Anderson in 2003. These parts of Delco Remy (the parts not spun off into Remy International) - Ignition (Plant 20) and Generator (Plant 11) products along with the Engineering Center (Plant 18) and Tooling (Plant 16) - merged with AC Rochester in 1994 to form AC Delco Systems. AC Delco Systems became part of GM's Delphi Automotive Systems subsidiary in 1995. Spun off with Delphi Automotive Systems in 1999. Delphi has since closed all 4 facilities in Anderson. Plant 11 closed in 2005 & was demolished in 2006. Plant 16 (2316 Jefferson St.) was sold in 2011 ERTL Enterprises & is now used by multiple businesses. Plant 18 (2900 South Scatterfield Road) closed in 2003 & was turned over to the city Of Anderson in 2006. Plant 20 (2812 E 38th St.) closed in 2007 & is now a distribution center for Sutong Tire Resources, a Chinese tire importer. Plant 45, at 6435 South Scatterfield Road, was the Magnequench plant that produced rare earth neodymium magnets. That business is now owned by NEO Material Technologies of Toronto, Ontario, Canada but the plant itself is now owned by Home Design Products, which makes plastic chairs and other products.
|-
| ||[[w:Delco Remy|Delco Remy]]||[[w:Bloomfield, New Jersey|Bloomfield, New Jersey]]||United States||Batteries||1936||1945||Located on 55 La France Ave. During WWII, became part of GM's Eastern Aircraft Division from 1942 making wiring harnesses, hydraulic tubing and assemblies, and ammunition boxes for the Avenger bombers & Wildcat fighters made by Eastern Aircraft. After WWII, it was replaced by the New Brunswick Battery Plant as it wasn't considered economically practical to convert back to battery production. Bloomfield produced 8 million batteries for Delco Remy. In 1950, the plant was sold to General Plastics for doing fluoropolymer coating. General Plastics and the building still exist today.
|-
| ||[[w:Delco Remy|Delco Remy]]||[[w:Fitzgerald, Georgia|Fitzgerald, Georgia]]||United States||Batteries||1973||1999||Known as Plant 22. Located at 342 Perry House Road. Supplied batteries to GM's Georgia assembly plants like Lakewood and Doraville and to the regional aftermarket. Spun off with Delphi Automotive Systems in 1999. Delphi sold its battery business to Johnson Controls in in July 2005 but the Fitzgerald plant continued supplying batteries to Johnson Controls through 2007. Closed by Delphi in 2007. Demolished.
|-
| ||[[w:Delco Remy|Delco Remy]]||[[w:Meridian, Mississippi|Meridian, Mississippi]]||United States||Starting motors, permanent magnet gear reduction cranking motors, powdered metal forge||1976||1994||Plant was originally built for National Homes Corp. Known as Plant 25. Spun off with [[w:Remy International|Delco Remy International]] in 1994. Closed by Delco Remy International in 1998. Production consolidated in Anderson, Indiana.
|-
| ||[[w:Delco Remy|Delco Remy]]/<br>[[w:Sheridan (automobile)|Sheridan]]||[[w:Muncie, Indiana|Muncie, Indiana]]||United States||Sheridan automobiles <br>Batteries||1919<br>1928||1921<br>1978||Located on West Willard Street. Originally built in 1908 by [[w:Inter-State Automobile Company|Inter-State Automobile Company]] which went bankrupt in 1913 and was renamed Inter-State Motor Company, resuming production in 1914. Built tractors for the military in WWI but did not resume civilian production in 1918 and the factory was idled. GM owned the plant from 1919-1921 to build the [[w:Sheridan (automobile)|Sheridan]] brand. Sold to [[w:Durant Motors|Durant Motors]] in 1921. Bought by Delco Remy division of GM in 1928. Known as Plant 9. Replaced by more modern Plant 26 in 1978. Plant 9 was demolished in 1978-79.
|-
| ||[[w:Delco Remy|Delco Remy]]||[[w:Muncie, Indiana|Muncie, Indiana]]||United States||Batteries||1977||1994|| Located at 4500 S. Delaware Dr. Known as Plant 26. Replaced Plant 9 in 1978. Plant 26 closed and was demolished in 1998.
|-
| ||[[w:Delco Remy|Delco Remy]]||[[w:New Brunswick, New Jersey|New Brunswick, New Jersey]]||United States||Batteries||1946||1999||Known as Plant 12. Located at 167 Jersey Ave. Replaced the pre-war Bloomfield plant. Supplied batteries to GM's East Coast assembly plants like Tarrytown, Wilmington, and Baltimore and to the East Coast aftermarket. Started making Freedom batteries in 1973 for Chevy Vega. Spun off with Delphi Automotive Systems in 1999. Delphi sold to Johnson Controls in August 2006. Closed by Johnson Controls in 2007. Partly demolished in 2014 (the south half of the building along with the guard shack in front of the plant). The remaining facility at the north end of the property is now the Cal-Chlor Corp. East Packaging and Distribution Facility. The former south end of the plant is now used for storage by Cal-Chlor.
|-
| ||[[w:Delco Remy|Delco Remy]]||[[w:Olathe, Kansas|Olathe, Kansas]]||United States||Batteries||1956||1999||Known as Plant 14. Located at 400 W. Dennis Ave. Supplied batteries to GM's Midwest assembly plants like Fairfax, Oklahoma City and Wentzville. Olathe was the first plant to produce the maintenance-free battery in 1970-1971 employing what was described as wire wound grid technology. The product was sold exclusively to JC Penny. Spun off with Delphi Automotive Systems in 1999. Last product produced was a heavy duty battery for Caterpillar. Closed by Delphi in 2005. Demolished. Site being redeveloped as Olathe Commerce Park. Some of the site is now a Jett Trucking terminal.
|-
|9 (1979-1988)<br /><br /> Q (1971-1978)||[[w:Detroit Assembly|Detroit Assembly]] (Cadillac Clark Street plant)||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||[[w:Cadillac|Cadillac]]s including <br> [[w:Cadillac Series 62|Cadillac Series 62]] (1940-1942, 1946-1964),<br> [[w:Cadillac Calais|Cadillac Calais]] (1965-1976), <br> [[w:Cadillac DeVille|Cadillac DeVille]] (1949-1984),<br> [[w:Cadillac Sixty Special|Cadillac Sixty Special]] (1938-1942, 1946-1976),<br> [[w:Cadillac Fleetwood Brougham|Cadillac Fleetwood Brougham]] (1977-1986),<br> [[w:Cadillac Brougham|Cadillac Brougham]] (1987-1988),<br> [[w:Cadillac Eldorado|Cadillac Eldorado]] (1953-1978),<br> [[w:Cadillac Eldorado#1957–1958 Eldorado Brougham|Cadillac Eldorado Brougham (Series 70)]] (1957-1958),<br> [[w:Cadillac Eldorado#1959–60 Eldorado Brougham|Cadillac Eldorado Brougham (Series 6900)]] (1959-1960) (chassis & final finishing),<br> [[w:Cadillac Seville#First generation (1976–1979)|Cadillac Seville]] (1976-1979), <br />[[w:LaSalle (automobile)|LaSalle]] (1934-1940)<br />[[w:Chevrolet Caprice#Third generation (1977–1990)|Chevrolet Caprice]] (1986-1987)<br />[[w:Oldsmobile Custom Cruiser#Second generation (1977–1990)|Oldsmobile Custom Cruiser]] (1985-1987)<br />[[w:Oldsmobile 88#Eighth generation (1977–1985)|Oldsmobile Delta 88]] (1984-1985) <br />Cadillac engines (V8, V12, V16) <br /> LaSalle straight-8 (1934-1936) (based on Oldsmobile straight-8 but assembled by Cadillac from Oldsmobile supplied components)||1921||1987||Located at 2860 Clark St. This was Cadillac's home plant and built all Cadillacs until 1971. During WWII, it built M5 & M5A1 Stuart tanks and M24 Chaffee tanks. Cadillac also built the V8 engines that powered these tanks & it also supplied engines to power these tank models made by other GM divisions and other companies as well as to power other types of armored vehicles. Cadillac also made components for aircraft engines made by GM's Allison Division. Cadillac also made M8 75mm howitzer motor carriages & M19 Twin 40mm anti-aircraft carriages. Factory closed December 1987. Chrome plating operation closed in March 1993. Engineering building (including tool room) closed in March 1994. Demolished entirely. Redeveloped into Clark Street Technology Park in 1997.
|-
| ||[[w:Fleetwood Metal Body#Purchase by Fisher|Fleetwood - Detroit Body Assembly]] (Fisher Body No. 18)||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||Bodies for [[w:Cadillac|Cadillac]] & [[w:LaSalle (automobile)|LaSalle]]||1917||1987||Originally built to build aircraft for World War I. Taken over by Fisher Body in 1919 & given to Fleetwood Metal Body after Fisher Body took over Fleetwood in 1925. Fleetwood Metal Body plant. Also known as Fisher Body Plant #18. Supplied bodies to Cadillac's Clark St. plant in Detroit. Located at 261 West End Ave in the [[w:Delray, Detroit|Delray]] neighborhood of Detroit. Redeveloped into Container Port Group's Detroit facility.
|-
| ||[[w:Detroit Diesel|Detroit Diesel]]||[[w:Redford, Michigan|Redford, Michigan]]||United States||Diesel engines for commercial vehicles||1938||1994||Located at 13400 W. Outer Drive. Was the Detroit Diesel-Allison Division from 1970 through 1987 when it again became the the Detroit Diesel Division. Spun off in 1988 as the Detroit Diesel Corp., a joint venture with Penske Corp., which had a majority stake of 60%. Penske increased its stake to 80% later in 1988 and then to 100% in 1994. Penske sold Detroit Diesel to DaimlerChrysler in 2000. DaimlerChrysler became Daimler AG in 2007. In 2019, Daimler AG spun off its truck and bus operations including Detroit Diesel into a separate company called Daimler Truck Holding AG.
|-
| ||Detroit Forge||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||Forged metal components||c.1919||1994||Located at 8435 St Aubin St. Straddles the border of [[w:Detroit|Detroit]] and [[w:Hamtramck|Hamtramck]]. Sold to [[w:American Axle|American Axle]] & Manufacturing Inc. in 1994. Closed in 2008, subsequently demolished around 2014.
|-
|3||Chevrolet-Detroit Truck & Bus Plant||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||[[w:Chevrolet Step-Van|Chevrolet Step-Van]]<br />[[w:Chevrolet Step-Van|GMC Value-Van]]<br />Chevrolet & GMC P-Series motorhome & commercial chassis<br />[[w:Chevrolet van#1992–1996|Chevrolet Van G30 HD/ GMC Vandura G3500 HD cutaway]] (Based on P-series P30 chassis with extended front end & forward-tilting hood) 1993-1996||1974||1999||Located at 601 Piquette Ave. in Detroit (Formerly Fisher Body No. 23). P-Series motorhome & stepvan chassis business (Commercial and Motorhome Chassis Division) was sold to investors (not including the Detroit plant) and became Workhorse Custom Chassis in 1999. Workhorse was later acquired by Navistar International in 2005, which later closed the Workhorse business in 2012 and sold the assets to AMP Electric Vehicles in 2013.
|-
| ||Detroit Transmission Division - Detroit||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||[[w:Hydramatic|Hydramatic]] automatic transmissions||1939||1949||Was located at 5140 Riopelle St. (between Farnsworth St. & Theodore St.) in what had been Fisher Body Plant #10. Original assembly site for the world's first production, fully automatic transmission and the headquarters of the new GM division created to produce it - the Detroit Transmission Division. First production Hydramatic shipped to Oldsmobile in October 1939. Debuted on the 1940 Oldsmobile. A heavier-duty version then launched on the 1941 Cadillac. Hydramatics continued to be produced during World War II for use in M5/M5A1 Stuart and M24 Chafee tanks (mated to Cadillac V8s), T17E1 Staghound and T18E2 Boarhound armored cars (mated to GMC inline-6's), M8 75mm howitzer motor carriages (mated to Cadillac V8s), LVT-3 Bushmaster amphibious landing vehicles (mated to Cadillac V8s), & Mark 1 Armored Snowmobiles made by Bombardier of Canada (mated to a Cadillac V8). Hydramatic became optional on Pontiacs in 1948. Hydramatic also became optional on Lincolns in 1949. The 1 millionth Hydramatic was built in January 1949. Needing more production capacity than the original factory in Detroit could handle, the Detroit Transmission Division relocated to a newer and much bigger plant in Livonia, Michigan in September 1949. Was later used by Cadillac as a parts warehouse supplying its Clark St. plant in Detroit. Closed by GM in the early 1980's and sold. Was subsequently used by Total Foods. Last occupied by Palmer Promotional Products. Heavily damaged by a fire in February 2014. The remains of the building were then demolished by summer 2014.
|-
| ||Detroit Transmission Division - Livonia||[[w:Livonia, Michigan|Livonia]], [[w:Michigan|Michigan]]||United States||[[w:Hydramatic|Hydramatic]] automatic transmissions||1949||1953||The Detroit Transmission Division moved from Detroit to a newer and larger factory in Livonia in 1949. In addition to Pontiac, Oldsmobile, & Cadillac, Livonia also supplied Hydramatics to Lincoln, Nash, Hudson, Kaiser, and Fraser. However, the factory burned down in August 1953 causing 6 deaths and more than $80 million in damage. GM quickly arranged to lease Kaiser’s Willow Run factory to replace the destroyed Livonia plant and GM then bought the plant outright in November 1953 for $26 million. Salvaged equipment from Livonia was taken to [[w:Willow Run#General Motors operations|Willow Run]]; see [[w:Willow Run Transmission|Willow Run Transmission]].
|-
|5<br /><br />C (1962-1978)||[[w:General Motors Diesel|General Motors Diesel]]||[[w:London, Ontario|London, Ontario]]||[[w:Canada|Canada]]||[[w:List of GM-EMD locomotives|EMD Locomotives]]<br />[[w:GM New Look (Fishbowl) Bus|GM New Look bus]] (1961-1978)<br />Terex earthmovers (1965-1980)<br />Military vehicles including:<br />[[w:AVGP|Grizzly/Cougar/Husky LAV I]]<br />[[w:LAV II|LAV II (LAV-25/Bison/Coyote)]]<br />[[w:LAV III|LAV III]]<br />[[w:Stryker|Stryker]]||1950 (GM Electro-Motive Division)<br /><br />1961 (Transit bus)||1979 (Transit bus)<br /><br />2003 (GM Defense)<br /><br />2005 (GM Electro-Motive Division)||Transit bus production began in London, Ontario in late 1961. Transit bus production moved to Saint-Eustache factory in 1979. The part of the property making military vehicles (armored fighting vehicles like the [[w:Stryker|Stryker]]) as GM Defense was sold in 2003 to [[w:General Dynamics Land Systems|General Dynamics Land Systems]], becoming [[w:General Dynamics Land Systems#General Dynamics Land Systems Canada|General Dynamics Land Systems – Canada (GDLS-C)]]. Located at 1991 Oxford St E. Interestingly, General Dynamics Land Systems was originally formed in 1982 when General Dynamics bought Chrysler Defense, Chrysler's tank division in the US, which was then renamed General Dynamics Land Systems. The locomotive operations were sold in 2005 and renamed [[w:Electro-Motive Diesel|Electro-Motive Diesel]], Inc. Electro-Motive was then sold to [[w:Caterpillar Inc.|Caterpillar's]] [[w:Progress Rail|Progress Rail]] subsidiary in 2010. The London, ON plant was then shuttered in 2012 & operations moved to a new plant in Muncie, Indiana. This part of the plant is now used by HCL Logistics, which provides logistics services to next door General Dynamics Land Systems – Canada. Located at 2021 Oxford St. E.
|-
|3 (1981-1987)<br /><br />M (1979-1980)||[[w:General Motors Diesel|General Motors Diesel]] Saint-Eustache Bus Plant||[[w:Saint-Eustache, Quebec|Saint-Eustache, Quebec]]||[[w:Canada|Canada]]||[[w:GM New Look (Fishbowl) Bus|GM New Look bus]] (1979-1986)<br />[[w:Classic (transit bus)|GM Classic bus]] (1983-1987)||1979||1987||Located at 1000 Industriel Blvd. Manufactures [[w:transit bus|transit bus]]es. GM consolidated Canadian transit bus production here from the London, Ontario and St. Laurent, Quebec plants in 1979. New Look transit bus production ended in 1986. Sold to [[w:Motor Coach Industries|Motor Coach Industries]], along with the designs for the [[w:Classic (transit bus)|Classic]] bus models this factory still produced in 1987. Later sold to [[w:Nova Bus|Nova Bus]] in 1993. Production of the Classic model bus ended in 1997. Still owned by [[w:Nova Bus|Nova Bus]], which is owned by [[w:Volvo AB|Volvo AB]] through [[w:Prevost (bus manufacturer)|Prevost Car]]. Prevost bought 51% of Nova Bus in 1998 and bought the remaining 49% from Henlys Group in 2004.
|-
|M|| [[w:General Motors Diesel|General Motors Diesel]] Saint Laurent Bus Plant || [[w:Saint Laurent, Quebec|Saint Laurent, Quebec]] || Canada || [[w:GM New Look bus|GM New Look bus]] (1975-1979)
|| 1974 || 1979 || Bus operations moved to [[w:Saint-Eustache, Quebec|Saint-Eustache, Quebec]].
|-
|D <br />(1960-1964 [[w:Pontiac (automobile)|Pontiac]] and 1965-2009)<br /><br /> C (1964 [[w:Chevrolet|Chevrolet]])<br /><br />A (Pre-1965 [[w:Oldsmobile|Oldsmobile]] and Pre-1960 [[w:Pontiac (automobile)|Pontiac]])<br /><br />6 (Pre-1964 [[w:Buick|Buick]])||[[w:Doraville Assembly|Doraville Assembly]]||[[w:Doraville, Georgia|Doraville, Georgia]]||United States||[[w:Chevrolet Uplander|Chevrolet Uplander]] (2005-2008 & '09 in Canada)<br />[[w:Pontiac Montana#Second generation (2005)|Pontiac Montana SV6]] (2005-2006 & '07-'09 in Canada)<br />[[w:Buick Terraza|Buick Terraza]] (2005-2007)<br />[[w:Saturn Relay|Saturn Relay]] (2005-2007)||1947||2008||Located at 3900 Motors Industrial Way. Was originally part of the [[w:Buick-Oldsmobile-Pontiac Assembly Division|Buick-Oldsmobile-Pontiac Assembly Division]]. First vehicle built in Nov. 1947 was an Oldsmobile. Some of the original property bought by GM for the Doraville plant in 1945 was deemed as excess and was sold off. One of the parts that was sold (82 acres) was sold to Chevrolet to build a parts warehouse. Doraville began making Chevrolet passenger cars for 1964. BOP Assembly Division became GM Assembly Division in 1965. Oldsmobile and Pontiac production ended in Dec. 1965, leaving just Chevrolet and Buick. Oldsmobile production resumed in Aug. 1967 for the 1968 model year. Oldsmobile production again ended in April 1970 followed by Buick production in July 1970. Pontiac production resumed in Aug. 1970 for the 1971 model year. B-body full-size Chevrolet and Pontiac production ended in Dec. 1973 and midsize A-body Chevrolet and Oldsmobile production began in Jan. 1974.[https://dekalbhistory.org/wp-content/uploads/2020/04/history-of-doraville-gm-plant.pdf] Doraville switched to building fwd A-body Oldsmobiles and Buicks for 1982. Doraville then switched to building W-body Oldsmobiles for 1988. Passenger car production ended in 1995 and the Cutlass Supreme coupe & sedan were moved to Fairfax II during 1995 while the convertible was discontinued. Doraville was converted to build minivans for 1997. Production ended in September 2008. Last vehicle built was a Chevy Uplander. Demolished in 2014-2015. Site is being redeveloped. Parts of the site are now occupied by Nalley Automotive Group (Infiniti dealership & a Collision Center), Mike Rezi Nissan (formerly Nalley Nissan), Assembly Studios Atlanta, Third Rail Studios at Assembly Atlanta, and Serta Simmons Bedding.<br />Past models: [[w:Chevrolet Venture|Chevrolet Venture]] (1997-2005), [[w:Oldsmobile Silhouette#Second generation (1997–2004)|Oldsmobile Silhouette]] (1997-2004), [[w:Pontiac Trans Sport#Second generation (1997-1999)|Pontiac Trans Sport]] (1997-1998), [[w:Pontiac Montana|Pontiac Montana]] (1999-2005), [[w:Pontiac Trans Sport#Second generation (Chevrolet)|Chevrolet Trans Sport]] (Europe: '97-'04), [[w:Buick Century#Second generation (1954–1958)|Buick Century]] (1954-1958), [[w:Buick Century#Fifth generation (1982–1996)|Buick Century]] (1982-1987), [[w:Buick Electra|Buick Electra]] (1959-1962), [[w:Buick Invicta|Buick Invicta]] (1959-1962), [[w:Buick LeSabre|Buick Lesabre]] (1959-1970), [[w:Buick Roadmaster|Buick Roadmaster]] (1951-1952, 1954-1958), [[w:Buick Special|Buick Special]] (1950-1958), [[w:Buick Super|Buick Super]] (1955, 1957-1958), [[w:Buick Wildcat|Buick Wildcat]] (1963, 1965-1970), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1964-1970), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1964-70), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-74), [[w:Chevrolet Chevelle#Third generation (1973–1977)|Chevrolet Chevelle]] (1974-77), [[w:Chevrolet Impala|Chevrolet Impala]] (1964-1974), [[w:Chevrolet Malibu#Fourth generation (1978)|Chevrolet Malibu]] (1978-1981), [[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1975-1980), [[w:Oldsmobile Cutlass#Fourth generation (intermediate) 1973–1977|Oldsmobile Cutlass]] (Gen 4) (1974-1977), [[w:Oldsmobile Cutlass#Fifth-generation (intermediate) 1978–1988|Oldsmobile Cutlass]] (Gen 5) (1978-1981), [[w:Oldsmobile Cutlass Ciera|Oldsmobile Cutlass Ciera]] (1982-1987), [[w:Oldsmobile Cutlass Supreme#Fifth generation (1988–1997)|Oldsmobile Cutlass Supreme]] (1988-1995), [[w:Oldsmobile 88|Oldsmobile 88]] (1949-1966, 1968-1970), [[w:Oldsmobile 98|Oldsmobile 98]] (1948-1963), [[w:Oldsmobile Starfire#First generation (1961–1966)|Oldsmobile Starfire]] (1961-1966), [[w:Pontiac 2+2|Pontiac 2+2]] (1964-1966), [[w:Pontiac Bonneville|Pontiac Bonneville]] (1958, 1960-1966), [[w:Pontiac Grand Prix#First generation (1962–1964)|Pontiac Grand Prix]] (1962-1964), [[w:Pontiac Catalina|Pontiac Catalina]] (1960-1966, 1971-1974), [[w:Pontiac Chieftain|Pontiac Chieftain]] (1951, 1953, 1955, 1958), [[w:Pontiac Grand Ville|Pontiac Grand Ville]] (1973-1974), [[w:Pontiac Star Chief|Pontiac Star Chief]] (1955-1958, 1964), [[w:Pontiac Ventura#1960–1970|Pontiac Ventura]] (1961),<br> [[w:Chevrolet El Camino|Chevrolet El Camino]] (1974-1981), [[w:GMC Sprint |GMC Sprint]] (1974-77), [[w:GMC Caballero|GMC Caballero]] (1978-1981),<br> [[w:Opel Sintra|Opel Sintra]]/[[w:Vauxhall Sintra|Vauxhall Sintra]] (1997-1999).
|-
| ||General Motors East Africa||[[w:Nairobi|Nairobi]]||[[w:Kenya|Kenya]]||[[w:Isuzu F-Series|Isuzu F-Series]]<br />[[w:Isuzu N-Series|Isuzu N-Series]]<br />Isuzu buses<br /><br />||1977||2017||Originally established in 1975 as GM Kenya, a joint venture with the Kenyan govt. Renamed GM East Africa in 2003. Other shareholders are Kenya’s Industrial and Commercial Development Corporation (ICDC): 20%, Centum Investment Co. Ltd.: 17.8%, & Itochu Corporation: 4.5%.
Isuzu moved pickup production to South Africa in 2012 so it could focus on trucks & buses at the Nairobi plant. <br />
GM sold its 57.7% stake in the factory to Isuzu in 2017 and left the Kenyan market. Now known as Isuzu East Africa. <br />
Past models: [[w:Isuzu D-Max|Isuzu D-Max]], [[w:Bedford Vehicles|Bedford trucks]], [[w:Bedford HA#The BTV|BTV]]
|-
| ||ELAZ-GM||[[w:Yelabuga|Yelabuga]], [[w:Tatarstan|Tatarstan]]||[[w:Russia|Russia]]||[[w:Chevrolet S-10 Blazer#Second generation (1995)|Chevrolet Blazer]]||1996||2001||GM owned about 25% & ELAZ owned the other 75%. Joint venture dissolved in 2001.
|-
| ||[[w:Electro Motive Division|Electro Motive Division]] - [[w:Electro-Motive Diesel#EMD La Grange (McCook)|La Grange Operations]]||[[w:McCook, Illinois|McCook, Illinois]]||United States||[[w:List of GM-EMD locomotives|Locomotives]]<br />Engines<br />Components||1936|| ||Located at 9301 W. 55th St.<br /> Electro-Motive headquarters and R&D operations. Locomotive production ended in 1991 and was moved to London, ON, Canada. Sold in 2005, renamed [[w:Electro-Motive Diesel|Electro-Motive Diesel]], bought by Caterpillar's Progress Rail subsidiary in 2010.
|-
| ||[[w:Elmore Manufacturing Company|Elmore]]||[[w:Clyde, Ohio|Clyde]], [[w:Ohio|Ohio]]||United States||Elmore automobiles||1909||1912|| Factory was located on Amanda St. Bought by GM in November 1909. Elmore was known for its two-stroke engines. GM closed it down in the fall of 1912. GM sold the factory to a truckmaker named Krebs Commercial Car Company in 1912. In 1917, Krebs Commercial Car Company merged with Clyde Cars Company and Lincoln Motor Truck Company to form what became Clydesdale Motor Truck Company in 1919. Clydesdale Motor Truck Company closed in 1939 and the factory was then used by Clyde Porcelain Steel Company until the factory burned down November 11, 1945. The factory would be rebuilt and used for making washing machines by various companies, most recently, Whirlpool Corp.
|-
| ||Ewing||[[w:Geneva, Ohio|Geneva]], [[w:Ohio|Ohio]]||United States||Ewing automobiles||1909||1911||Bought by GM in October 1909. Made taxis. GM closed it down in 1911.
|-
|X (1965–1987)<br /><br />K (Pre-1965 [[w:Oldsmobile|Oldsmobile]] & [[w:Pontiac (automobile)|Pontiac]])<br /><br />4 (Pre-1965 [[w:Buick|Buick]])||[[w:Fairfax Assembly|Fairfax Assembly]] (Fairfax I)||[[w:Kansas City, Kansas|Kansas City, Kansas]]||United States||[[w:Buick Centurion|Buick Centurion]] (1971-1973), [[w:Buick Century#Second generation (1954–1958)|Buick Century]] (1954-1958), [[w:Buick Electra|Buick Electra]] (1959-1963, 1971-1974), [[w:Buick Estate|Buick Estate]] (1970-1979), [[w:Buick Estate#1977–1990|Buick Electra Estate]] (1980-1987), [[w:Buick Invicta|Buick Invicta]] (1959-1962), [[w:Buick LeSabre|Buick LeSabre]] (1959-1985), [[w:Buick Estate#1977–1990|Buick LeSabre Estate]] (1980-1987), [[w:Buick Limited|Buick Limited]] (1958), [[w:Buick Roadmaster|Buick Roadmaster]] (1948-1949, 1951, 1953, 1956-1958), [[w:Buick Skylark#First generation (1961–1963)|Buick Skylark]] (1962-1963), [[w:Buick Special|Buick Special (B-body)]] (1947-1950, 1952-1958), [[w:Buick Special#1961–1963|Buick Special (Y-body)]] (1962-1963), [[w:Buick Super|Buick Super]] (1954-1958), [[w:Buick Wildcat|Buick Wildcat]] (1963-1970), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1982-1987), [[w:Chevrolet Impala|Chevrolet Impala]] (1982-1985), [[w:Oldsmobile 88|Oldsmobile 88]] (1949-1984), [[w:Oldsmobile 98|Oldsmobile 98]] (1948-1963), [[w:Oldsmobile F-85|Oldsmobile F-85/<br>Cutlass]] (1962-1963), [[w:Oldsmobile Custom Cruiser|Oldsmobile Custom Cruiser]] (1974-1984), [[w:Oldsmobile Jetstar I|Oldsmobile Jetstar I]] (1964-1965), [[w:Oldsmobile Starfire#First generation (1961–1966)|Oldsmobile Starfire]] (1961-1966), [[w:Pontiac 2+2|Pontiac 2+2]] (1964-1967), [[w:Pontiac Bonneville#Sixth generation (1977–1981)|Pontiac Bonneville]] (1958-70, 1975-1981), [[w:Pontiac Catalina|Pontiac Catalina]] (1959-1981), [[w:Pontiac Chieftain|Pontiac Chieftain]] (1950-1958), [[w:Pontiac Executive|Pontiac Executive]] (1967-1968), [[w:Pontiac Grand Prix|Pontiac Grand Prix]] (1962-1968), [[w:Pontiac Grand Ville|Pontiac Grand Ville]] (1971-1975), [[w:Pontiac LeMans#First generation (1961–1963)|Pontiac LeMans]] (1962-1963), [[w:Pontiac Parisienne#Fifth generation: 1977–1986|Pontiac Parisienne]] (1984-1986), [[w:Pontiac Safari|Pontiac Safari]] (1987), [[w:Pontiac Star Chief|Pontiac Star Chief]] (1954-1959, 1964, 1966), [[w:Pontiac Tempest#First generation (1961–1963)|Pontiac Tempest]] (1962-1963), [[w:Pontiac Ventura#1960–1970|Pontiac Ventura]] (1960-1961) ||1946||1987||Located at 100 Kindelberger Road. Originally, the location of the [[w:North American Aviation|North American Aviation]] Bomber Production Plant (built in 1940) where the [[w:B-25 Mitchell|B-25 Mitchell]] was manufactured during World War II. After the war, GM leased it in 1945 and converted the plant to auto production. Automotive production began in June 1946. GM later bought the plant in 1960. Was originally part of the [[w:Buick-Oldsmobile-Pontiac Assembly Division|Buick-Oldsmobile-Pontiac Assembly Division]]. BOP Assembly Division became GM Assembly Division in 1965. Fairfax mostly focused on full-size cars ([[w:General Motors A platform (RWD)#1926-1959|A-]], B-, & C-body) but it also built B-O-P Y-body compact cars for 1962-1963. Fairfax only began making Chevrolet passenger cars for 1982. Also built [[w:F-84F Thunderstreak|F-84F Thunderstreak]] fighter jets alongside cars beginning in 1952 and ending in May 1955 when the contract ended. Plant closed May 1987. Production moved to new building on adjacent site (Fairfax II) for 1988 model year production.
|-
| ||[[w:History of General Motors#Corporate restructuring and operating losses|Fiat-GM Powertrain Polska]]||[[w:Bielsko-Biala|Bielsko-Biala]]||[[w:Poland|Poland]]||[[w:Fiat JTD engine#1.3 JTDm/Multijet/CDTI/D/DDiS/HDi|GM Small Diesel Engine]] ||2003||2010|| Engine began production here in 2003 as part of Fiat-GM Powertrain, a 50/50 joint venture between GM & Fiat involving joint development and production of engines and transmissions. The joint venture was disbanded in 2005. As part of the dissolution, GM took a 50% stake in the Bielsko-Biala engine plant and the intellectual property of the 1.3 liter diesel engine produced there. In 2010, GM sold its half of the Bielsko-Biala engine plant back to Fiat. However, GM kept its half of the intellectual property of the 1.3 liter diesel engine produced there and continued to source the 1.3 liter diesel engine from the Bielsko-Biala engine plant. Chevrolet stopped using this engine around 2015. Opel was still using this engine when it was sold by GM to PSA in 2017. Opel last used this engine in 2019. This plant became part of [[w:Fiat Chrysler Automobiles|FCA]] in 2014 when Fiat and Chrysler Group merged. This plant became part of [[w:Stellantis|Stellantis]] in 2021 when FCA merged with PSA Group. Stellantis has announced that the Bielsko-Biala engine plant will close by the end of 2024.
|-
| ||Fisher Body No. 10||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||Auto bodies ||1917-<br />1919||1939||Was located at 5140 Riopelle St. (between Farnsworth St. & Theodore St.).GM bought 60% of Fisher Body in 1919 and bought the remainder in 1926. From 1926, Fisher Body only supplied bodies to GM brands. In 1939, became headquarters and manufacturing site of GM's new Detroit Transmission Division, which manufactured Hydramatic fully automatic transmissions that first appeared on the 1940 Oldsmobile.
|-
| ||[[w:Fisher Body#Fisher Body Corporation and General Motors|Fisher Body No. 12]]||[[w:Detroit|Detroit]], Michigan||United States|| ||1916||1942||Located at 1961 E. Milwaukee Ave. Previously used by Metzger Motor Car Company from 1910-1913 and [[w:Maxwell Motor Company|Maxwell Motor Company]] from 1913-1916. Owned by Fisher from 1916-1942 then sold to J. Lee Hackett Co. which owned it until 1973. Used for warehousing from 1973-1981 and then demolished.
|-
| ||[[w:Fisher Body#Fisher Body Corporation and General Motors|Fisher Body No. 21]]||[[w:Detroit|Detroit]], Michigan||United States||Bodies for Buick & Cadillac<br />Engineering and Tool & Die operations<br />Bodies for Cadillac limousines<br />Pre-production Pilot bodies||1919||1984||Located at 700 Piquette Ave. In 1999, was re-addressed as 6051 Hastings Street. Made bodies for Buick through 1926 when Buick body production moved to Fisher Body Plant No. 1 - Flint on S. Saginaw St. Made bodies for Cadillac through 1929 when Cadillac body production moved to the Fisher Body Plant No. 18/Fleetwood Body plant. Became an engineering facility from 1930-1955. Produced parts for B-25 & B-29 bombers in World War II (Aircraft Unit). Also did product development and engineering during World War II (Central Development and Experimental Unit). In 1955, GM transferred production of Cadillac limousine bodies from the Fleetwood plant in Detroit to Fisher #21 plant due to it being a low-volume operation. Closed April 1984. Sold to Cameo Color Coat in 1985 which transferred it to Carter Color Coat in 1990. Carter Color Coat then went bankrupt and the property was abandoned in 1993. GM removed some paints and other hazardous materials in the early 1990s. It's been owned by the city of Detroit since 2000. Now being converted into Fisher 21 Lofts, a mixed residential and commercial development scheduled to open in 2027.
|-
| ||[[w:Fisher Body#Fisher Body Corporation and General Motors|Fisher Body No. 23/23B]]||[[w:Detroit|Detroit]], Michigan||United States||Tool & Die plant through 1972.||1921||1972||Located at 601 Piquette Ave. #23 was the six story portion while #23B was the one story portion. Known as the Detroit Die and Machine Plant. In WWII, made B-25, B-29, P-80 aircraft tools and fixtures; M4, M10, M36, M26, M18 tank parts; 3-inch and 5-inch Naval Gun Breech Housings, 155mm and 8-in. gun parts, Diesel Engine parts and Torqmatic Transmission parts. Became Chevrolet's Detroit Truck & Bus plant in 1974.
|-
| ||[[w:Fisher Body#Fisher Body Corporation and General Motors|Fisher Body No. 37]]||[[w:Detroit|Detroit]], Michigan||United States||Large bodyside stampings||1919||1985||Located at 950 E Milwaukee Ave. Produced aircraft and tank assemblies, 90 mm AA guns, 5” naval gun housings and Lockheed missile parts during World War II. In 1989, bought by Lakeside Stamping which was renamed New Center Stamping in 1994. In 2019, New Center Stamping Inc. was taken over by Soave Enterprises and still stamps parts for automakers including GM, Ford, and Stellantis.
|-
| ||Fisher Body No. 40||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||Tooling ||1928||1983-1984||Was located at 1500 E. Ferry St. Plant 41 was next door and was used for storage.
|-
| ||Fisher Body Overseas Corp. - Dundonald plant||[[w:Dundonald, County Down|Dundonald]], [[w:Northern Ireland|Northern Ireland]]||[[w:United Kingdom|United Kingdom]] ||Seat Belts, window regulators, door locks, door switches, & other automotive hardware||1980||1988||Located at 770 Upper Newtownards Road at the corner of Carrowreagh Road. Dundonald is an eastern suburb of Belfast. From 1966-1977, was a Rolls-Royce plant making aircraft engine parts. GM's Fisher Body division bought the plant in 1978 and reopened it in 1979. Production began in 1980. In 1982, the Dundonald plant became part of Fisher Body Overseas Corp., part of GM Overseas Corp. Sold to Takata Corp. in 1988. Operated as European Components Corp. (ECC) and later as TK-ECC, still making seat belts, until it was closed in 2004. Plant was later demolished.
|-
| ||Fisher Body Overseas Corp. - Kennedy Way plant||[[w:Belfast|Belfast]], [[w:Northern Ireland|Northern Ireland]]||[[w:United Kingdom|United Kingdom]] ||Seat Belt Buckles, Door switches, & other automotive hardware||1982||?||Located in Kennedy Way Industrial Estate on Blackstaff Road in western Belfast. The Kennedy Way plant was part of Fisher Body Overseas Corp., part of GM Overseas Corp.
|-
| ||[[w:Flint, Michigan auto industry#Flint Plant #1|Flint Body Assembly]] (Fisher Body Flint Plant #1)||[[w:Flint, Michigan|Flint]], Michigan||United States||Bodies for Buick and later also Chevrolet & Oldsmobile<br />||1923||1987||Located at 4000-4500 S. Saginaw St. Originally a [[w:Durant Motors|Durant Motors]] plant. Bought by GM in 1926. Became Fisher Body Plant No. 1 - Flint. Supplied bodies to the Buick plant in Flint (later known as Buick City). After Buick City switched to unibody, fwd cars for 1986, Flint Body began supplying bodies for G-cars built at the Pontiac Assembly plant in Pontiac, MI. Closed in Dec. 1987 when G-body production at Pontiac Assembly ended. Last body built was a Buick Regal Grand National to be completed at Pontiac Assembly. Most of the site was demolished and the remainder was converted into the Great Lakes Technology Center. GM leased space there for R&D and offices (including AC Rochester world headquarters) until 2009. Various medical-related companies now occupy much of the property. The original administration building at 4300 S. Saginaw St. still stands as of 2022 and still has a Fisher Body logo at the top of the front of the building in the center.
|-
| ||[[w:Flint, Michigan auto industry#Flint V8 Engine Plant/Flint Engine South|Chevrolet-Flint (V8) Engine Plant]] (Van Slyke Road)||[[w:Flint, Michigan|Flint, Michigan]]||United States||[[w:Chevrolet small-block engine (first and second generation)|Chevrolet Small-Block V8]]<br />[[w:Chevrolet Turbo-Thrift engine|Chevrolet Turbo-Thrift I6]]<br />[[w:Chevrolet 153 4-cylinder engine|Chevrolet 153 4-cylinder engine]]<br />[[w:List of Isuzu engines#Isuzu G engine|Isuzu G140 & G161Z SOHC gas<br> 4-cylinder engine for Chevy Chevette & Pontiac 1000/Acadian]]<ref>{{cite news| title = 1975, Chevrolet Turns to Opel for the New Fuel-Saving Chevette| url = https://web.archive.org/web/20180116081057/https://history.gmheritagecenter.com/wiki/index.php/1975%2C_Chevrolet_Turns_to_Opel_for_the_New_Fuel-Saving_Chevette| archive-date = 2018-01-16| publisher = General Motors| access-date = 2014-06-05| url-status = dead}}</ref>||1954||1999||Located at 3848 Van Slyke Road, down the block from the Flint Truck Assembly Plant. Chevy Small-Block V8 engine production began here on July 9, 1954. Only V8 engines were made until 1961, when 4 & 6 cylinder engines began to be made for the 1962 Chevy II. Around 45 million Chevy small-block V8 engines were built at this plant. Plant closed in 1999 and was demolished. Land is now used by a new paint shop for the [[w:Flint Truck Assembly|Flint Truck Assembly Plant]]. The new paint shop (Flint Assembly Paint Operations) was announced in December 2013 and opened in 2016, replacing the previous paint shop inside the assembly plant.
|-
|1 (1928-1947)||[[w:Flint, Michigan auto industry#Flint Manufacturing Div./Delphi Flint West/Flint Tool and Die|Chevrolet-Flint Manufacturing Complex]] ("Chevy in the Hole") /<br /> Flint West||[[w:Flint, Michigan|Flint, Michigan]]||United States||[[w:Chevrolet|Chevrolet]] vehicles including [[w:Chevrolet Series 490|Chevrolet Series 490]]<br />[[w:Chevrolet Superior|Chevrolet Superior]]<br />[[w:Chevrolet Series AA Capitol|Chevrolet Series AA Capitol]]<br />[[w:Chevrolet Series AB National|Chevrolet Series AB National]]<br />[[w:Chevrolet Series AC International|Chevrolet Series AC International]]<br />[[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]]<br />[[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]]<br />[[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]]<br />[[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]]<br />[[w:Chevrolet Master|Chevrolet Master]]<br />[[w:Chevrolet Deluxe|Chevrolet Deluxe]]<br />[[w:Chevrolet Stylemaster|Chevrolet Stylemaster]]<br />[[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]]<br />[[w:Chevrolet AK Series|Chevrolet AK Series]]<br />[[w:Chevrolet Suburban|Chevrolet Suburban]] (Gen 1 & 2)<br /><br />[[w:Chevrolet|Chevrolet]] engines including [[w:Chevrolet Inline-4 engine#171|Chevrolet Inline-4 engine]]<br />[[w:Chevrolet Stovebolt engine|Chevrolet Stovebolt / Blue Flame I6]]<br />||1913||2004||Located at 300 N. Chevrolet Ave. (formerly known as Wilcox Street). This was Chevrolet's home plant. It predated Chevrolet becoming part of GM in 1918. The complex originally included metal stamping, body assembly, vehicle assembly, engine assembly, and various component manufacturing plants. On January 11, 1940, the 25 millionth GM vehicle built in the US, a 1940 Chevrolet Special Deluxe Sedan, was built here. Plant 2 (vehicle assembly) & 2A (Fisher Body) were replaced by new plants on Van Slyke Road elsewhere in Flint in 1947 (now the [[w:Flint Truck Assembly|Flint Truck Assembly Plant]]). Plant 4 was the engine plant. It closed in 1984 but was ultimately reopened later. In 1987, the complex was taken over by the AC Spark Plug division and became AC Spark Plug Flint West. In 1988, it became AC Rochester Flint West, and in 1994 AC Delco Systems Flint West following further consolidations. In early 1995, it was renamed Delphi Flint West. Around this time, plants in the complex began to be demolished until Plant 4 closed in 2004 and was subsequently demolished. Plant 4 last made generators and fuel filters. Building 35 still exists as part of [[w:Kettering University|Kettering University]]. It is now the C.S. Mott Science and Engineering Building after the addition of another floor and a new façade. Plant 38 still exists as GM's Flint Tool & Die plant. All the other buildings are gone. Much of the property is being redeveloped into a park called [[w:Chevy Commons|Chevy Commons]].
|-
| ||[[w:Flint North|Flint North]] Powertrain||[[w:Flint, Michigan|Flint, Michigan]]||United States||[[w:Buick V8 engine|Buick V8 engine]]<br />[[w:Buick V6 engine|Buick V6 engine]]<br />Engine Components<br />[[w:Dynaflow|Dynaflow]] transmissions<br />transmission components<br /> torque converters<br />coil springs||1905||2010||Complex was made up of several factories. Flint North is the part of the Buick City factory complex north of Leith St. stretching north to E. Pierson Rd. [[w:Liberty L-12|Liberty aircraft engines]] were made here during WWI. Factory 36 was the engine plant. Factory 36 opened in 1952 and closed in 2008. The remainder of the complex closed by December 2010. Demolished by 2012. Part of the site (1225 E. Marengo Ave.) is now occupied by American SpiralWeld Pipe Co.
|-
||7||[[w:Arlington Assembly#History|Fort Worth Assembly]]||[[w:Fort Worth, TX|Fort Worth, Texas]]||United States||[[w:Chevrolet Series 490|Chevrolet Series 490]]||1917||1924
|Built by Chevrolet before it became part of GM. Located at 2601 W. 7th St. (then known as Arlington Heights Blvd.). Is across the street from what is now Montgomery Plaza. A 3rd story was added to the building in 1920. Closed due to flood damage from the April 1922 flooding of the Trinity River and the subsequent imposition of flood-control taxes.<ref>https://books.google.com/books?id=mTvuAwAAQBAJ&dq=1920+fort+worth+chevrolet+factory&pg=PA52 Lost Fort Worth, page 52</ref> Montgomery Ward leased the empty Chevy plant between 1924 and 1928 to house a temporary store while its main Fort Worth facility was built across what is now West Seventh Street. That building is now Montgomery Plaza. The Chevy plant was later used by various different companies including GM's Frigidaire division as a sales and warehouse facility and later by Tandy Corp., first for its Radio Shack division and later for its corporate HQ. Demolished in 1986. Site is now Olympus 7th Street Station, a luxury apartment building.
|-
|G <br />(1960-1964 [[w:Chevrolet|Chevrolet]] and 1965-1989)<br /><br /> B (Pre-1960 [[w:Oldsmobile|Oldsmobile]])<br /><br /> F (Pre-1960 [[w:Pontiac (automobile)|Pontiac)]]<br /><br /> 7 (Pre-1960 [[w:Buick|Buick]])||[[w:Framingham Assembly|Framingham Assembly]]||[[w:Framingham, Massachusetts|Framingham, Massachusetts]]||United States||[[w:General Motors A platform (1925)#1964|GM rwd A-bodies]]: [[w:Chevrolet Chevelle|Chevrolet Chevelle]] (1965-1969), [[w:Pontiac Tempest|Pontiac Tempest]] (1967-1970), [[w:Pontiac LeMans|Pontiac LeMans]] (1967-1972, 1974-1976), [[w:Pontiac GTO|Pontiac GTO]] (1966-1969, 1971-1972), [[w:Oldsmobile Cutlass|Oldsmobile Cutlass]] (1967-1981), [[w:Oldsmobile Cutlass Supreme|Oldsmobile Cutlass Supreme]] (1967-1981), [[w:Oldsmobile 442|Oldsmobile 442]] (1967-1977), [[w:Oldsmobile Vista Cruiser|Oldsmobile Vista Cruiser]] (1968-1977), [[w:Buick Skylark#Third generation (1968–1972)|Buick Skylark]] (1970-1972), [[w:Buick GS|Buick GS]] (1970-1972), [[w:Buick Century|Buick Century]] (1973-1981), [[w:Buick Regal|Buick Regal]] (1973-1981)
[[w:General Motors A platform (1982)|GM fwd A-bodies]]: [[w:Chevrolet Celebrity|Chevrolet Celebrity]] (1982-1988), [[w:Pontiac 6000|Pontiac 6000]] (1982), [[w:Oldsmobile Cutlass Ciera|Oldsmobile Cutlass Ciera]] (1983-1989), [[w:Buick Century#Fifth generation (1982–1996)|Buick Century]] (1989)
||1948||1989|| Located at 63 Western Ave. First vehicle produced was a 1948 Buick on February 26, 1948. Was originally part of the [[w:Buick-Oldsmobile-Pontiac Assembly Division|Buick-Oldsmobile-Pontiac Assembly Division]]. Framingham is the only BOP Assembly Division plant to switch to the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Framingham switched to Chevrolet Assembly Division in August 1959 [https://www.worthpoint.com/worthopedia/gm-framingham-ma-canada-pontiac-buick-olds-plant]. Framingham began making Chevrolet passenger cars for 1960. BOP Assembly Division became GM Assembly Division in 1965. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were then gradually transferred to the GM Assembly Division. Framingham Assembly joined the GM Assembly Division in 1968. Idled October 1, 1982 but reopened March 14, 1983. Closed August 1, 1989. Sold to ADESA to use as a vehicle auction site. <br/>Past models: <br/> [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1960-1966), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1960-1966), [[w:Chevrolet Impala|Chevrolet Impala]] (1960-1966), [[w:Chevrolet Chevy II / Nova#First generation (1962–1965)|Chevrolet Chevy II/Nova]] (1962-1963), [[w:Buick Century#Second generation (1954–1958)|Buick Century]] (B-body), [[w:Buick Roadmaster|Buick Roadmaster]] (1949-1950, 1955, 1958), [[w:Buick Special#1949–1958|Buick Special]] (1952-1953, 1955-1958), [[w:Buick Super|Buick Super]] (1954), [[w:Oldsmobile 88|Oldsmobile 88]], [[w:Oldsmobile 98|Oldsmobile 98]], [[w:Pontiac Bonneville|Pontiac Bonneville]] (1958), [[w:Pontiac Chieftain|Pontiac Chieftain]] (1951, 1954, 1956), [[w:Pontiac Star Chief|Pontiac Star Chief]] (1955, 1957, 1959)
|-
| ||General Motors France S.A.||[[w:Gennevilliers|Gennevilliers]]||[[w:France|France]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Buick|Buick]]||1939||1940||Operations interrupted by German invasion of France and seizure of the plant in 1940 during WWII.
|-
|Z (1965-1982)<br /><br />H (1963-1964 [[w:Chevrolet|Chevrolet]] and [[w:GMC (automobile)|GMC]])<br /><br />F (1964 [[w:Pontiac (automobile)|Pontiac]] and [[w:Oldsmobile|Oldsmobile]])<br /><br />3 (1964 [[w:Buick|Buick]])||[[w:Fremont Assembly|Fremont Assembly]]||[[w:Fremont, California|Fremont, California]]||United States||[[w:Buick Century|Buick Century]] (1973-1981)<br />[[w:Buick GS|Buick GS]] (1965-1972)<br />[[w:Buick Regal|Buick Regal]] (1973-1981)<br />[[w:Buick Skylark|Buick Skylark]] (1964-1972)<br />[[w:Buick Special|Buick Special]] (1964-1969)<br />[[w:Buick Sport Wagon|Buick Sport Wagon]] (1965)<br />[[w:Chevrolet K5 Blazer#1973–1991|Chevrolet K5 Blazer]] (1977-1979)<br />[[w:Chevrolet C/K|Chevrolet C/K]] (1963-1982)<br />[[w:Chevrolet Celebrity|Chevrolet Celebrity]] (1982)<br />[[w:Chevrolet Chevelle|Chevrolet Chevelle]] (1964-1969, 1973-1977)<br />[[w:Chevrolet El Camino|Chevrolet El Camino]] (1964-1969, 1973-1981)<br />[[w:Chevrolet Malibu|Chevrolet Malibu]] (1978-1981)<br />[[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1973-1981)<br />[[w:Chevrolet Suburban|Chevrolet Suburban]] (1964-1971)<br />[[w:GMC C/K|GMC C/K]] (1963-1982)<br />[[w:GMC Caballero|GMC Caballero]] (1978-1981)<br />[[w:Chevrolet K5 Blazer#1973–1991|GMC Jimmy]] (1977-1979)<br />[[w:GMC Sprint|GMC Sprint]] (1973-1977)<br />[[w:GMC Suburban|GMC Suburban]] (1964-1971)<br />[[w:Oldsmobile Cutlass|Oldsmobile Cutlass]] (1964-1972)<br />[[w:Oldsmobile Cutlass Ciera|Oldsmobile Cutlass Ciera]] (1982)<br />[[w:Oldsmobile Cutlass Supreme|Oldsmobile Cutlass Supreme]] (1966-1972)<br />[[w:Oldsmobile 442|Oldsmobile 442]] (1964-1972)<br />[[w:Oldsmobile Vista Cruiser|Oldsmobile Vista Cruiser]] (1965-1966)<br />[[w:Pontiac Grand Prix#Third generation (1969–1972)|Pontiac Grand Prix]] (1970)<br />[[w:Pontiac LeMans|Pontiac LeMans]] (1964-1974)<br />[[w:Pontiac GTO|Pontiac GTO]] (1964-1973)<br />[[w:Pontiac Tempest|Pontiac Tempest]] (1964-1969)||1963||1982||Located at 45500 Fremont Blvd.<br />
Operated from 1963-1982 as a GM factory. Was originally part of the [[w:Buick-Oldsmobile-Pontiac Assembly Division|Buick-Oldsmobile-Pontiac Assembly Division]] though it also built Chevrolet passenger cars from the beginning. Fremont built GM's midsize A-bodies. Was the first BOP Assembly Division plant to also build Chevrolet and GMC trucks. Regular truck production began June 10, 1963. First production car built September 3, 1963. BOP Assembly Division became GM Assembly Division in 1965. Plant was idled March 1982.<br />
From 1984-2010, operated as [[w:NUMMI|New United Motor Manufacturing Inc. (NUMMI)]], which was a 50/50 joint venture between GM and [[w:Toyota|Toyota]] and assembled both GM and Toyota vehicles.<br />
Sold to [[w:Tesla Motors|Tesla, Inc.]] in May 2010.<ref>{{cite news|author=Sam Abuelsamid|title=Tesla to buy old resources from GM, Toyota for NUMMI plant|url=http://www.autoblog.com/2010/08/22/tesla-to-buy-old-resources-from-gm-toyota/|access-date=20 August 2015|publisher=Autoblog.com|date=August 22, 2010}}</ref> Tesla began production at Fremont in 2012.
|-
|P||[[w:Fabryka Samochodów Osobowych|FSO]]||[[w:Warsaw|Warsaw]]||[[w:Poland|Poland]]||[[w:Opel Astra#F|Opel Astra]]<br />[[w:Opel Vectra#Vectra B (1995–2002)|Opel Vectra]]||1994||2000||Built by an [[w:Fabryka Samochodów Osobowych|FSO]] - GM joint venture operating out of a converted old FSO warehouse.
|-
|W||[[w:Fabryka Samochodów Osobowych|FSO]]||[[w:Warsaw|Warsaw]]||[[w:Poland|Poland]]||[[w:Chevrolet Aveo (T200)|Chevrolet Aveo]]||2007||2011||Built by [[w:Fabryka Samochodów Osobowych|FSO]] for GM as part of a joint venture between [[w:Ukrainian Automobile Corporation|UkrAvto]] (parent of FSO) & GM. [[w:Ukrainian Automobile Corporation|Ukravto]] owned 60% & [[w:GM Daewoo|GM Daewoo]] owned 40%. The production license ended in 2011 & was not renewed.
|-
| ||[[General Motors Gmbh]]||[[w:Berlin|Berlin]]||Germany||[[w:Chevrolet|Chevrolet]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Oakland (automobile)|Oakland]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Buick|Buick]]<br />[[w:Cadillac|Cadillac]]||1927||1932||Replaced Hamburg plant. Located in Borsigwalde area of Berlin. Also predates the acquisition of [[w:Opel|Opel]] by GM.
|-
| ||[[General Motors Gmbh]]||[[w:Hamburg|Hamburg]]||Germany||[[w:Chevrolet|Chevrolet]] trucks||1926||1927||GM's first German plant predating the acquisition of [[w:Opel|Opel]]. Located in a leased warehouse.
|-
| ||[[General Motors Ltd.]]||[[w:Hendon|Hendon]], [[w:England|England]]||United Kingdom||[[w:Chevrolet|Chevrolet]] <br /> [[w:GMC (automobile)|GMC]] ||1924||1930||GM's first British plant predating the acquisition of [[w:Vauxhall Motors|Vauxhall]]. Operated out of a leased plant. When Chevrolet production was moved to Luton in 1930, Hendon was used for parts distribution. Later, Frigidaire made appliances at Hendon. In 1970, Hendon began producing steering columns. In 1971, more automotive components began to be produced in place of Frigidaire appliances. In 1980, GM sold the Hendon site for redevelopment but leased back an area for construction of a new plant for Saginaw Steering Gear. The new plant opened in 1981. See listing for "Saginaw Steering Gear Overseas Corp. - Southampton plant" for more details.
|-
| ||[[General Motors Ltd.]]||[[w:Southampton|Southampton]], [[w:Hampshire|Hampshire]], [[w:England|England]]||United Kingdom||[[w:Chevrolet|Chevrolet]]||1938||1946||Located on West Bay Road in the New Dock area of Southampton. Operations interrupted by German bombing of the UK during WWII. Plant was bombed in 1940 & 1941. Plant was reoccupied in 1946. Plant acquired by GM Ltd. in 1951 and converted to produce automotive components in 1952. See listing for "AC Spark Plug Overseas Corp. - Southampton plant" for more details.
|-
| ||[[w:Ghandhara Industries|Ghandhara Industries]]||[[w:Karachi|Karachi]], [[w:Sindh|Sindh]]||[[w:Pakistan|Pakistan]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Vauxhall Motors|Vauxhall]]<br />[[w:Bedford Vehicles|Bedford trucks and buses]] including [[w:Bedford TJ|Bedford TJ]]<br />[[w:Holden|Holden]]||1953||1970's||Originally a GM owned plant (General Motors Overseas Distribution Corporation). Sold to [[w:Ghandhara Industries|Ghandhara Industries]] Ltd. in 1963. Nationalized in 1972, it then became National Motors Ltd. Privatized to the [[w:Bibojee Group|Bibojee Group]] in 1992 who reverted back to the previous name, Ghandhara Industries. Ghandara Industries assembles Isuzu vehicles today.
|-
| ||[[GM-Auto]]||[[w:Saint-Petersburg|Saint-Petersburg]]||[[w:Russia|Russia]]||[[w:Chevrolet Cruze|Chevrolet Cruze]]<br />[[w:Opel Astra|Opel Astra]]
[[w:Chevrolet Trailblazer (SUV)#Second generation (RG; 2011)|Chevrolet Trailblazer]]
[[w:Chevrolet Captiva#First generation (C100, C140; 2006)|Chevrolet Captiva]]<br />[[w:Opel Antara|Opel Antara]]
||2007||2015||Includes operations at the temporary "Arsenal plant" & the permanent plant in [[w:Shushary, Saint Petersburg|Shushary]]. GM ceased most operations in Russia back in 2015 and the GM-Auto plant closed. Sold to Hyundai Motor in 2020.
|-
| ||[[w:GM-AvtoVAZ|GM-AvtoVAZ]]||[[w:Tolyatti|Togliatti]]||[[w:Russia|Russia]]||[[w:Chevrolet Niva|Chevrolet Niva]]<br />[[w:Chevrolet Viva|Chevrolet Viva]]||2002||2019||Was originally owned 41.5% by GM, 41.5% by AvtoVAZ, & 17% by [[w:EBRD|EBRD]]. In 2012, [[w:EBRD|EBRD]] was bought out & GM-AvtoVAZ became 50/50 owned by GM & AvtoVAZ. The GM-AvtoVAZ joint venture was dissolved in 2019 when AvtoVAZ bought out GM. The Chevrolet Niva was renamed Lada Niva Travel during 2020. AvtoVAZ was a part of [[w:Renault Group|Renault Group]] from 2016 until 2022.
|-
|4||GM España S.A.||[[w:Figueruelas|Figueruelas]], [[w: Zaragoza (province)| Zaragoza (province)]]||[[w:Spain|Spain]]||[[w:Opel Corsa|Opel/Vauxhall Corsa]] A, B, C, D, E (5 door, van)<br />[[w:Opel Meriva|Opel/Vauxhall Meriva]] A, B<br />[[w:Opel Combo#Combo C (2001-2012)|Opel/Vauxhall/Holden Combo]] C<br />[[w:Opel Tigra#Tigra A (1994–2000)|Opel/Vauxhall Tigra A]]<br />[[w:Vauxhall Nova|Vauxhall Nova]]<br />[[w:Holden Barina#Third generation (SB; 1994–2000)|Holden Barina (SB)]]<br />[[w:Holden Barina#Fourth generation (XC; 2001–2005)|Holden Barina (XC)]]||1982||2017|| [[w:Adam Opel AG|Opel plant]]. Sold to [[w:PSA Group|PSA Group]] in 2017. Part of [[w:Stellantis|Stellantis]] since 2021.
|-
| ||GM Indonesia||Pondok Ungu, [[w:Bekasi|Bekasi]], [[w:West Java|West Java]]||[[w:Indonesia|Indonesia]]||After reopening:<br /> [[w:Chevrolet Spin|Chevrolet Spin]]<br /><br />Before temporary closure in 2005:<br /> [[w:Chevrolet S-10 Blazer#Second generation (1995)|Chevrolet Blazer]]<br />[[w:Opel Blazer|Opel Blazer]]<br />[[w:Opel Astra#F|Opel Optima]]<br />[[w:Opel Vectra#Vectra A (1988–1995)|Opel Vectra]]||1995||2015||PT Garmak Motor assembled models under license from GM beginning in 1976, before the establishment of their joint venture with GM in 1993. These license built models include: [[w:Bedford Vehicles|Bedford]] trucks, [[w:Bedford HA#The BTV|Morina]], [[w:Opel Rekord Series E|Opel Rekord E 3-d panel van]], [[w:Opel Kadett#Kadett D (1979–1984)|Opel Kadett D]], [[w:Isuzu Faster#First generation (1972–1980)|Chevrolet LUV (Mk 1)]], [[w:Isuzu Faster#Second generation (1980–1988)|Chevrolet LUV (Mk II)]], & [[w:Isuzu Trooper#First generation (1981–1991)|Chevrolet Trooper/Stallion]].
Originally established as PT General Motors Buana Indonesia, which was owned 60% by GM and 40% by PT Garmak Motor. GM bought out Garmak in 1997 taking 100% of the shares. The assembly plant was closed from 2005-2011 and reopened in 2012 to make the Chevy Spin. Closed again in June 2015.
|-
| ||GM Java||[[w:Tanjung Priok|Tanjung Priok]], [[w:North Jakarta|North Jakarta]], [[w:Jakarta|Jakarta]]||[[w:Indonesia|Indonesia]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Opel|Opel]] ([[w:Opel 1.2 Liter|1.2 Liter]])<br />[[w:Vauxhall Motors|Vauxhall]] ([[w:Vauxhall 10-4|10-4]])||1927||1953||First Car Factory in what is now Indonesia (at the time, it was the Dutch East Indies). GM pulled out of Indonesia in 1954 and liquidated the company by 1956. Sold to P.N. Gaja Motors, which assembled the Opel Rekord and Kadett in the 1960's. Eventually became part of Astra International and its joint ventures with Toyota/Daihatsu.
|-
| ||GM Malaysia Sdn. Bhd.||[[w:Tampoi, Johor|Tampoi]], [[w:Johor|Johor]]||[[w:Malaysia|Malaysia]]||[[w:Opel Ascona|Opel Ascona]]<br />[[w:Opel Commodore|Opel Commodore]]<br />[[w:Opel Gemini|Opel Gemini]]<br />[[w:Opel Kadett|Opel Kadett]]<br />[[w:Opel Manta|Opel Manta]]<br />[[w:Opel Rekord|Opel Rekord]]<br />[[w:Bedford HA#The BTV|Bedford Harimau]]<br />[[w:Holden|Holden]]||1968||1982||Originally Capital Motor Assembly Corp., which assembled Opel models under license from GM beginning in 1968. These license built models include: [[w:Opel Commodore|Opel Commodore]] A, [[w:Opel Kadett|Opel Kadett B]], [[w:Opel Rekord Series C|Opel Rekord C]], & components. Capital Motor also assembled cars for Honda and Datsun (Nissan). GM bought Capital Motor Assembly in 1971 and renamed it GM Malaysia. Malaysian government policies that said Malaysians had to own a majority of local auto assembly plants forced GM to sell GM Malaysia to Oriental Holdings in 1980 which then renamed the unit Oriental Assemblers. Assembly of GM vehicles ended in 1982. Oriental Assemblers continued making Honda cars at this plant until around 2004.
|-
| ||GM Philippines, Inc.||[[w:Paco, Manila|Paco district]], [[w:Manila|Manila]]||[[w:Philippines|Philippines]]||[[w:Buick Electra|Buick Electra]]<br />[[w:Chevrolet Bel Air|Chevrolet Bel Air]]<br />[[w:Chevrolet Camaro (first generation)|Chevrolet Camaro]]<br />[[w:Chevrolet Impala|Chevrolet Impala]]<br />[[w:Chevrolet Malibu|Chevrolet Malibu]]<br />Chevrolet trucks<br />[[w:Holden EH|Holden EH]]<br />[[w:Holden HD|Holden HD]]<br />[[w:Holden HR|Holden HR]]<br />[[w:Holden HK|Holden HK]]<br />[[w:Holden HT|Holden HT]]<br />[[w:Holden HG|Holden HG]]<br />[[w:Holden HQ|Holden HQ]]<br />[[w:Holden Torana|Holden Torana]]<br />[[w:Isuzu Gemini|Isuzu Gemini]]<br />[[w:Opel Ascona|Opel Ascona]]<br />[[w:Opel Kadett|Opel Kadett]]<br />[[w:Opel Manta|Opel Manta]]<br />[[w:Opel Rekord|Opel Rekord]]<br />[[w:Pontiac Parisienne#Philippines|Pontiac Parisienne]]<br />[[w:Vauxhall Victor|Vauxhall Victor]]<br />[[w:Vauxhall Viva|Vauxhall Viva]]<br />[[w:Vauxhall VX4/90|Vauxhall VX4/90]]<br />[[w:Bedford HA#The BTV|GM Amigo/Tiger/Harabas]]<br />[[w:Bedford Vehicles|Bedford trucks]] ||1953||1985||Originally Yutivo Sons Hardware Co. Yutivo assembled various models under license from GM beginning in 1953. GM bought a 49% stake in Yutivo in 1972 and renamed it GM Philippines. Isuzu invested in the company in 1979 and it was renamed GM Pilipinas, Inc. Assembly of GM vehicles ended in 1985 and GM sold the plant to Isuzu in 1994. Isuzu closed this plant and company in 1995 and replaced it with a new plant in Biñan, Laguna owned by a new subsidiary (Isuzu Philippines Corporation).
|-
|G||[[w:GM Manufacturing Poland|GM Manufacturing Poland Sp. z o.o.]]||[[w:Gliwice|Gliwice]]||[[w:Poland|Poland]]||[[w:Opel Astra#Astra K (B16; 2015)|Opel Astra]] K (5-door)<br />[[w:Holden Astra#Seventh generation (BK, BL; 2016)|Holden Astra (BK)]] (5-door)<br />[[w:Opel Astra#Astra J (P10; 2009)|Opel/Vauxhall Astra J]] (3-door, 4-door sedan, 5-door)<br />[[w:Opel Astra#Astra H (A04; 2004)|Opel Astra Classic III]] sedan<br />[[w:Holden Astra#Sixth generation (PJ; 2015)|Holden Astra (PJ)]] (GTC, VXR)<br />[[w:Opel Astra#Astra H (A04; 2004)|Opel Astra H]] sedan<br />[[w:Opel Astra#Astra G (T98; 1998)|Opel Astra Classic II]]<br />[[w:Holden Astra#Fourth generation (TS; 1998)|Holden Astra Classic (TS)]]<br />[[w:Opel Astra#Astra F (T92; 1992)|Opel Astra Classic I]]<br />[[w:Opel Agila#First generation (H00; 2000)|Opel/Vauxhall Agila A]]<br />[[w:Suzuki Solio#First generation (MA63S/MA64S/MA32S; 1999)|Suzuki Wagon R+ (2005-2007)]]<br />[[w:Opel Cascada|Opel/Vauxhall Cascada]]<br />[[w:Buick Cascada|Buick Cascada]]<br />[[w:Holden Cascada|Holden Cascada (CJ)]]<br />[[w:Opel Zafira#Zafira B (2005)|Opel/Vauxhall Zafira B]]||1998||2019|| [[w:Adam Opel AG|Opel]] plant. Sold to [[w:PSA Group|PSA Group]] in 2017. Continued to supply the [[w:Buick Cascada|Buick Cascada]] to GM through 2019. Part of [[w:Stellantis|Stellantis]] since 2021.
|-
| ||GM Powertrain Fredericksburg||[[w:Fredericksburg, Virginia|Fredericksburg, Virginia]]||United States||Torque converter clutches for automatic transmissions||1979||2010|| Located at 11032 Tidewater Trail. Originally part of Delco Moraine Division, which bought the plant in 1978 from American Poclain. Moved to GM Powertrain division in 1993. Sold to idX Corp. in 2017.
|-
| ||[[w:GM Powertrain Poland|GM Powertrain Poland]]||[[w:Tychy|Tychy]]||[[w:Poland|Poland]]||Diesel engines including the Isuzu [[w:Circle L engine|Circle L engine]]||1999||2017|| [[w:Adam Opel AG|Opel]] plant. Originally founded as Isuzu Motors Polska (ISPOL) in 1996. GM bought 60% in 2002 & the remaining 40% in 2013. Sold to [[w:PSA Group|PSA Group]] along with Opel in 2017. Part of [[w:Stellantis|Stellantis]] since 2021.
|-
| ||[[w:Grand Blanc Metal Center|Grand Blanc Metal Center]]||[[w:Grand Blanc, Michigan|Grand Blanc, Michigan]]||United States||Metal stampings and metal fabrication of body components, Tooling jigs-and-fixtures||1942||2013||Located at 10800 S. Saginaw St. Originally built by the US govt. and opened in 1942 to build tanks. Also known as the Fisher Body Tank Plant as it was operated by GM's Fisher Body Div. Built [[w:M4 Sherman|M4 Sherman]] (M4A2, M4A3 & M4A3E2) and [[w:M26 Pershing|M26 Pershing]] (T26E3) tanks as well as M10 & M10A1 "Wolverine" Tank Destroyers during WWII and [[w:M48 Patton|M48 Patton]] (M48 and M48A1) tanks beginning in 1952 for the Korean War. Grand Blanc also made a 90mm main gun that Grand Blanc installed on the last 300 M10A1s built at Grand Blanc, thus converting them into the M36 "Jackson". The Grand Blanc-built 90mm main gun was also installed on other M10A1s by other companies and by Grand Blanc on the M4A3 Sherman tank to create the M36B1 & M36B2 tank destroyers. Grand Blanc also supplied 2,445 turrets and 1,511 hulls for the 2,507 M18 Hellcats built by the Buick Division. Production ended in 1945 as WWII wound down. Buick then leased Grand Blanc and used it as a warehouse from 1947 until Fisher Body bought it in 1951. The M48 Patton was built from 1952-1955. Converted in 1955 into an automotive body metal fabricating plant. Became part of GM's Metal Fabricating Division in 1994 and became Grand Blanc Weld Tool Center in 2002, making tooling for GM. Closed July 2013. Most of the work done at Grand Blanc was transferred to Parma, OH. Now called Grand Blanc Center, apparently used as a warehouse.
|-
| ||Grand Rapids Metal Center||[[w:Wyoming, Michigan|Wyoming, Michigan]]||United States|| ||1936||2009||Located at 300 36th Street SW. Metal fabricating plant. Demolished.
|-
| ||Guide Lamp Division||[[w:Anderson, Indiana|Anderson, Indiana]]||United States||Headlamp, Taillamp assemblies||1929||1998||GM bought Guide Motor Lamp Manufacturing Company in 1928, becoming part of the Delco Remy division initially before becoming the separate Guide Lamp Division in 1929. Guide Lamp Division was renamed Guide Division in 1975. Guide Division merged with Fisher Body in 1984 to create Fisher Guide. Fisher Guide then merged with the Inland Division in 1990 to form Inland Fisher Guide. In 1998, Guide operations were sold to [[w:Palladium Equity Partners|Palladium Equity Partners]] which turned the operation into Guide Corp. In 2007, Guide Corp. closed down.
|-
|H||[[w:General Motors India|Halol]]||[[w:Halol|Halol]], [[w:Gujarat|Gujarat]]||[[w:India|India]]||[[w:Chevrolet Sail#India|Chevrolet Sail U-VA]] (hatchback)<br />[[w:Chevrolet Sail#India|Chevrolet Sail]] (sedan)<br />[[w:Chevrolet Cruze|Chevrolet Cruze]]<br />[[w:Chevrolet Tavera|Chevrolet Tavera]]||1995||2017||Past models:<br> [[w:Chevrolet Aveo (T200)|Chevrolet Aveo]], [[w:Chevrolet SRV|Chevrolet SRV]] (sports hatch), [[w:Chevrolet Optra|Chevrolet Optra]], [[w:Chevrolet Enjoy|Chevrolet Enjoy]], [[w:Opel Corsa|Opel Corsa]] (sedan), [[w:Opel Corsa|Opel Corsa Sail]] (hatchback), [[w:Opel Corsa|Opel Corsa Swing]] (station wagon), [[w:Opel Astra|Opel Astra]]. <br />
The new [[w:General Motors India|GM India]] began as a 50/50 joint venture with [[w:Hindustan Motors|Hindustan Motors]] in 1994.The Halol plant was bought from [[w:Hindustan Motors|Hindustan Motors]] in 1995. GM bought out [[w:Hindustan Motors|Hindustan Motors]] in 1999.
Sold to SAIC to produce [[w:MG Motor India|MG Motor India]] vehicles in 2017.
|-
| ||Fisher Body - Hamilton-Fairfield Stamping Plant||[[w:Hamilton, Ohio|Hamilton, Ohio]]||United States||Stampings & Bodies for GM vehicles||1947||1988||Located at 4400 Dixie Highway. Now the Fisher Industrial Park.
|-
| ||Harrison Radiator Division - Moraine||[[w:Moraine|Moraine]], [[w:Ohio|Ohio]]||United States||Machining and assembly of automotive A/C compressors, valves, and accumulator dehydrators||1941||1999||Located at 3600 Dryden Road. Originally built for [[w:Frigidaire|Frigidaire]]. In 1975, automotive and appliance operations were split with the automotive operations becoming Delco Air Conditioning Division. [[w:Frigidaire|Frigidaire]] appliance division was sold in 1979. Delco Air Conditioning Division merged into Harrison Radiator Division in 1981. Spun off with [[w:Delphi Automotive Systems|Delphi Automotive Systems]] in 1999. Became Delphi Harrison Thermal Systems. Closed by Delphi in 2003. Demolished by 2005.
|-
|H1, H2,<br> H3, H4 [https://www.uniquecarsandparts.com.au/holden_identification]||Holden Acacia Ridge Plant||[[w:Acacia Ridge, Queensland|Acacia Ridge, Queensland]]||[[w:Australia|Australia]]||[[w:Holden|Holden]] models including:<br /> [[w:Holden HD|Holden HD]]<br />[[w:Holden HR|Holden HR]]<br />[[w:Holden HK|Holden HK]]<br />[[w:Holden HT|Holden HT]]<br />[[w:Holden HG|Holden HG]]<br />[[w:Holden Torana|Holden Torana]]<br />[[w:Holden HQ|Holden HQ]]<br />[[w:Holden HJ|Holden HJ]]<br />[[w:Holden HX|Holden HX]]<br />[[w:Holden HZ|Holden HZ]]<br />[[w:Holden Gemini#First generation|Holden Gemini TX, TC, TD, TE, TF, TG]]<br />[[w:Holden Commodore (VC)|Holden Commodore (VC)]]<br />[[w:Holden Camira|Holden Camira]]||1966||1984||[[w:Holden|Holden]] plant. Replaced Fortitude Valley plant.
|-
|A||Holden Birkenhead Plant||[[w:Birkenhead, South Australia|Birkenhead, South Australia]]||[[w:Australia|Australia]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Oakland (automobile)|Oakland]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Buick|Buick]]<br />[[w:Cadillac|Cadillac]]<br />[[w:GMC (automobile)|GMC]]<br />[[w:Vauxhall Motors|Vauxhall]]<br />[[w:Bedford Vehicles|Bedford]]<br />[[w:Holden|Holden]]<br />||1926||1981||[[w:Holden|Holden]] plant. Built by GM Australia before it merged with Holden's Motor Body Builders Ltd. Plant was closed from 1931 until 1938. Also produced military vehicles & equipment during WWII. Before WWII, Birkenhead combined bodies made in Woodville with CKD chassis assembled in Melbourne. After WWII, Birkenhead assembled CKD chassis imported from the US, Canada, & the UK and combined them with bodies made in Woodville. Once Holden brand cars started to be made in 1948, body and chassis components came from Woodville & powertrain came from Fishermans Bend and complete cars were assembled in Birkenhead. Vehicle production ended in 1965 when the Elizabeth plant started making complete vehicles. Birkenhead was then used as an export boxing area, a parts warehouse, and also assembled earthmoving equipment for Terex (then owned by GM) from 1969 until the mid 1970's.
|-
|M,<br> J1, J2, J3, <br> and J4-J9||Holden Dandenong Plant||[[w:Dandenong|Dandenong]], [[w:Victoria, Australia|Victoria]]||[[w:Australia|Australia]]||[[w:Holden|Holden]] models including:<br /> [[w:Holden FE|Holden FE]]<br />[[w:Holden FC|Holden FC]]<br />[[w:Holden FB|Holden FB]]<br />[[w:Holden EK|Holden EK]]<br />[[w:Holden EJ|Holden EJ]]<br />[[w:Holden EH|Holden EH]]<br />[[w:Holden HD|Holden HD]]<br />[[w:Holden HR|Holden HR]]<br />[[w:Holden HQ|Holden HQ]]<br />[[w:Holden HZ|Holden HZ]]<br />[[w:Holden HK|Holden HK]]<br />[[w:Holden Torana|Holden Torana]] LH, LX, UC<br />[[w:Holden Sunbird|Holden Sunbird]] LX, UC<br />[[w:Holden Commodore (VB)|Holden Commodore (VB)]]<br />[[w:Holden Commodore (VC)|Holden Commodore (VC)]]<br />[[w:Holden Commodore (VH)|Holden Commodore (VH)]]<br />[[w:Holden Commodore (VK)|Holden Commodore (VK)]]<br />[[w:Holden Commodore (VL)|Holden Commodore (VL)]]<br />[[w:Holden Camira|Holden Camira]]<br />[[w:Holden Nova|Holden Nova]] LE, LF <br /> [[w:Toyota Corolla (E90)#Australia|Toyota Corolla (E90)]]<br />Bedford by Isuzu & [[w:Isuzu|Isuzu]] trucks<br />Body making<br />Torque converters & other components||1956|||1996||[[w:Holden|Holden]] plant. Also assembled Chevrolet trucks, Bedford vans & trucks and Frigidaire appliances. Built the 1 millionth Holden (an EJ) in October 1962, the 2 millionth Holden (an HK) in March 1969, and the 4 millionth Holden (a VC Commodore) in June 1981. Vehicle production by Holden ceased in 1988, vehicle production by Toyota for itself and for Holden lasted from 1989-1994 under a plant lease agreement<ref>{{cite web |author=Takahiro Fujimoto |date=October 1998 |url=http://e-server.e.u-tokyo.ac.jp/cirje/research/dp/98/cf23/dp.pdf |title=Toyota Motor Manufacturing Australia in 1995: An Emergent Global Strategy |publisher=[[w:University of Tokyo|University of Tokyo]] |page=23 |archive-url=https://www.webcitation.org/5xJZkwEEX?url=http://e-server.e.u-tokyo.ac.jp/cirje/research/dp/98/cf23/dp.pdf |archive-date=2011-03-20 |url-status=dead }}</ref>. Minor assembly until 1996. Then became known as Holden Service Parts Operations (HSPO) which manages the distribution and marketing of Holden service parts and accessories for the Holden dealer network and international customers.
|-
|L,<br><br> L1, L2, <br> L3-L5||Holden Elizabeth Plant||[[w:Elizabeth, South Australia|Elizabeth, South Australia]]||[[w:Australia|Australia]]||[[w:Holden Berlina|Holden Berlina]]<br />[[w:Holden Calais|Holden Calais]]<br /> [[w:Holden Caprice|Holden Caprice]]<br /> [[w:Holden Commodore|Holden Commodore]]<br /> [[w:Holden Ute|Holden Ute]]<br /> [[w:Holden Statesman|Holden Statesman]]<br /> [[w:Vauxhall VXR8|Vauxhall VXR8]]<br />[[w:Chevrolet SS (2013)|Chevrolet SS]] (2014-2017)<br />[[w:Chevrolet Caprice PPV|Chevrolet Caprice PPV]] (2011-2017)
|1959||2017||[[w:Holden|Holden]] manufacturing plant. Holden Vehicle Manufacturing Operations. Located at 180 Philip Highway. First opened as a body hardware plant making components, then expanded to making complete vehicle bodies in 1962, then expanded to making complete vehicles in 1965. Elizabeth became Holden’s only remaining car manufacturing plant in Australia in 1994. Built the 5 millionth Holden (a VN Calais) in August 1990, the 6 millionth Holden (a VX Commodore SS) in June 2001, and the 7 millionth Holden (a VE Commodore) in August 2008. Total number of vehicles built at all plants in Australia by Holden (including export models) from 1948-2017 is 7,687,675. Production ended October 20, 2017. Final vehicle made at Elizabeth and final Australian-built Holden was a VFII Commodore Redline with a manual transmission.[https://www.carsales.com.au/editorial/details/holdens-manufacturing-closure-by-the-numbers-109466/] Epicurean Food Group bought the site in 2023 and is using it as a farm to grow mushrooms.
Cars produced before its final year before closure included the [[w:Pontiac GTO#Fifth generation|Pontiac GTO]] (2004-2006), [[w:Vauxhall Monaro|Vauxhall Monaro]], [[w:Holden Monaro|Holden Monaro]], [[w:Pontiac G8|Pontiac G8]] (2008-2009), [[w:Holden Gemini#Second generation|Holden Gemini (RB)]], [[w:Chevrolet Cruze#First generation (J300; 2008)|Holden Cruze (JH)]], [[w:Holden Torana|Holden Torana]], [[w:Opel Vectra#Vectra B (1995–2002)|Holden Vectra (JS)]], [[w:Statesman (automobile)|Statesman brand WB]], [[w:Holden WB|Holden WB]] Ute & One-Tonner, [[w:Holden Adventra|Holden Adventra]], [[w:Holden Crewman|Holden Crewman]], [[w:Chevrolet Lumina#Holden-based models|Chevrolet Lumina]], [[w:Chevrolet Caprice#Fifth generation (1999–2006)|Chevrolet Caprice]], [[w:Chevrolet Cruze#First generation (J300; 2008)|Chevrolet Cruze]] 5-door, [[w:Chevrolet Omega|Chevrolet Omega]] B & C, [[w:Buick Royaum|Buick Royaum]], [[w:Daewoo Statesman|Daewoo Statesman]], and [[w:Daewoo Veritas|Daewoo Veritas]]. Also, [[w:United Australian Automobile Industries#Toyota Lexcen|Toyota Lexcen]].
|-
| ||Holden Fishermans Bend Plant (Port Melbourne)||[[w:Port Melbourne|Port Melbourne]], [[w:Victoria, Australia|Victoria]]||[[w:Australia|Australia]]||[[w:GM High Feature engine|Holden Alloytec V6 engine]]<br />[[w:Buick V6 engine#3800 V6|Buick V6]]<br />[[w:GM Family II engine|GM Family II I4 engine]]<br />[[w:Holden V8 engine]]<br />[[w:Holden straight-six motor#Starfire|Holden Starfire I4]]<br />[[w:Holden straight-six motor|Holden straight-six motor]]<br />Manual transmissions<br />[[w:Holden Salisbury differential|Holden Banjo/Salisbury differentials]]<br />Axles<br />Stampings<br />Components<br />Foundry ||1936||2016||Headquarters of GM Holden Ltd. <br /> Holden's Engine Company/Holden Engine Operations.<br />
Used to build vehicles as well including the [[w:Holden 48-215|Holden 48-215]] & [[w:Holden FJ|Holden FJ]]. Vehicle assembly ended in 1956 and was moved to Dandenong. <br /> Versions of the Alloytec/High Feature V6 were also supplied to [[w:Saab Automobile|Saab]] & [[w:Alfa Romeo|Alfa Romeo]] from this plant. <br />
Sold to the Victorian state Government in 2016.
|-
|B||Holden Fortitude Valley Plant||[[w:Fortitude Valley|Fortitude Valley]], [[w:Queensland|Queensland]]||[[w:Australia|Australia]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Oakland (automobile)|Oakland]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Buick|Buick]]<br />[[w:Cadillac|Cadillac]]<br />[[w:GMC (automobile)|GMC]]<br />[[w:Vauxhall Motors|Vauxhall]]<br />[[w:Bedford Vehicles|Bedford]]<br />[[w:Holden 48-215|Holden 48-215]]<br />[[w:Holden FJ|Holden FJ]]<br />[[w:Holden FE|Holden FE]]<br />[[w:Holden FC|Holden FC]]<br />[[w:Holden FB|Holden FB]]<br />[[w:Holden EK|Holden EK]]<br />[[w:Holden EJ|Holden EJ]]<br />[[w:Holden EH|Holden EH]]<br />||1927||1965||[[w:Holden|Holden]] plant. Built by GM Australia before it merged with Holden's Motor Body Builders Ltd. Plant was closed from 1931 until 1934. Fortitude Valley combined bodies made in Woodville with CKD chassis assembled in Melbourne. Replaced by Acacia Ridge plant.
|-
| ||Holden Marrickville Plant||[[w:Marrickville, New South Wales|Marrickville, New South Wales]]||[[w:Australia|Australia]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Oakland (automobile)|Oakland]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Marquette (automobile)#Buick brand|Marquette]]<br />[[w:Buick|Buick]]<br />[[w:Cadillac|Cadillac]]<br />[[w:GMC (automobile)|GMC]]<br />[[w:Vauxhall Motors|Vauxhall]]<br />[[w:Bedford Vehicles|Bedford]]||1926||1940||[[w:Holden|Holden]] plant. Built by GM Australia before it merged with Holden's Motor Body Builders Ltd. Plant was closed from 1931 until 1934. Marrickville combined bodies made in Woodville with CKD chassis assembled in Melbourne. Building sold. Replaced by Pagewood plant.
|-
| ||Holden Melbourne Plant (City Road)||[[w:Melbourne|Melbourne]], [[w:Victoria, Australia|Victoria]]||[[w:Australia|Australia]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Oakland (automobile)|Oakland]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Buick|Buick]]<br />[[w:Cadillac|Cadillac]]<br />[[w:GMC (automobile)|GMC]]<br />[[w:Vauxhall Motors|Vauxhall]]||1926||1936||[[w:Holden|Holden]] plant. Acquired by GM Australia before it merged with Holden's Motor Body Builders Ltd. Melbourne combined bodies made in Woodville with CKD chassis assembled in Melbourne. Building sold. Replaced by Fishermans Bend plant.
|-
|P,<br> L6||Holden Mosman Park Plant||[[w:Mosman Park, Western Australia|Mosman Park (formerly Cottesloe Beach)]], [[w:Western Australia|Western Australia]]||[[w:Australia|Australia]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Oakland (automobile)|Oakland]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Buick|Buick]]<br />[[w:Cadillac|Cadillac]]<br />[[w:GMC (automobile)|GMC]]<br />[[w:Vauxhall Motors|Vauxhall]]<br />[[w:Bedford Vehicles|Bedford]]<br />[[w:Holden|Holden]]<br />||1926||1972||[[w:Holden|Holden]] plant. Built by GM Australia before it merged with Holden's Motor Body Builders Ltd. Plant was closed from 1932 until 1935. Also produced military vehicles & equipment during WWII. Before WWII, Mosman Park combined bodies made in Woodville with CKD chassis assembled in Melbourne. After WWII, Mosman Park assembled CKD chassis imported from the US, Canada, & the UK and combined them with bodies made in Woodville. Once Holden brand cars started to be made in 1948, body and chassis components came from Woodville & powertrain came from Fishermans Bend and final assembly was done in Mosman Park. Plant was closed down in 1972. Demolished in the early 1990s.
|-
|S,<br> H5, H6, H7,<br> H8, H9||Holden Pagewood Plant||[[w:Pagewood, New South Wales|Pagewood, New South Wales]]||[[w:Australia|Australia]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Vauxhall Motors|Vauxhall]]<br />[[w:Bedford Vehicles|Bedford]]<br />[[w:Holden 48-215|Holden 48-215]]<br />[[w:Holden FJ|Holden FJ]]<br />[[w:Holden FE|Holden FE]]<br />[[w:Holden FC|Holden FC]]<br />[[w:Holden FB|Holden FB]]<br />[[w:Holden EK|Holden EK]]<br />[[w:Holden EJ|Holden EJ]]<br />[[w:Holden EH|Holden EH]]<br />[[w:Holden HD|Holden HD]]<br />[[w:Holden HR|Holden HR]]<br />[[w:Holden HK|Holden HK]]<br />[[w:Holden HT|Holden HT]]<br />[[w:Holden HG|Holden HG]]<br />[[w:Holden Monaro|Holden Monaro]]<br />[[w:Holden HQ|Holden HQ]]<br />[[w:Holden HJ|Holden HJ]]<br />[[w:Holden HX|Holden HX]]<br />[[w:Holden HZ|Holden HZ]]<br />[[w:Holden Torana|Holden Torana]]<br /> [[w:Holden Commodore (VB)|Holden Commodore (VB)]]<br />[[w:Statesman (automobile)|Statesman brand HQ-HZ]]<br />Body making||1940||1980||[[w:Holden|Holden]] plant. Also produced military equipment during WWII. Before WWII, Pagewood combined bodies made in Woodville with CKD chassis assembled in Melbourne. After WWII, Pagewood assembled CKD chassis imported from the US, Canada, & the UK and combined them with bodies made in Woodville. Also made Frigidaire appliances. Built the 3 millionth Holden (an HQ) in June 1974. Vehicle production ended in 1980 while plant closedown operations extended into 1981.
|-
| ||[[w:Holden Woodville Plant|Holden Woodville Plant]]||[[w:Woodville, South Australia|Woodville, South Australia]]||[[w:Australia|Australia]]||[[w:Holden|Holden]]:<br />Stamping<br />Body making<br />Paint shop<br />Body Hardware<br />Trim<br />Tool & Die<br />[[w:Tri-Matic|Tri-Matic]] automatic transmission||1923||1965||[[w:Holden|Holden]] plant. Built before Holden was taken over by GM. Built car bodies for many brands of cars including GM brands (Chevrolet, Pontiac, Oakland, Oldsmobile, Marquette, Buick, LaSalle, Cadillac, GMC, Vauxhall, & Bedford) and non-GM brands (Chrysler, DeSoto, Dodge, Plymouth, Willys, Hudson, Nash, Studebaker, Austin, Morris, Rover, Standard, Fiat, & others). (Holden Motor Body Works.) Also produced military equipment during WWII. Once Holden brand cars started to be made in 1948, body and chassis components were made in Woodville. Also produced replacement parts for discontinued models. Most operations transferred to Elizabeth between 1959 & 1965. Built the Tri-Matic automatic transmission from 1969-1987. Plant sold in 1984. Tri-Matic production area was leased back until production ended. Other companies continued production of spare parts.
|-
|V||[[w:IBC Vehicles|IBC Vehicles Ltd.]]/<br>[[w:GMM Luton|GMM Luton]]<ref>{{cite web |title=Company Profile |publisher=Vauxhall |url=http://media.gm.com/gb/vauxhall/en/company/c_company-profile/index.html |access-date=2009-06-29 |archive-url=https://web.archive.org/web/20090629105853/http://media.gm.com/gb/vauxhall/en/company/c_company-profile/index.html |archive-date=2009-06-29}}</ref>||[[w:Luton|Luton]], [[w:Bedfordshire|Bedfordshire]]||[[w:United Kingdom|United Kingdom]]||[[w:Bedford CF#CF2|Bedford CF2]]<br />[[w:Isuzu Fargo#Bedford Midi / Vauxhall Midi|Bedford/Vauxhall/GME/Isuzu Midi/<br>Bedford Seta/Vauxhall Albany]]<br />[[w:Suzuki Carry#Bedford Rascal|Bedford/Vauxhall/GME Rascal]]<br />[[w:Suzuki Carry#Export models|Suzuki Super Carry]]<br />[[w:Isuzu MU#First generation (UCS55/UCS69GW; 1989–1998)|Opel/Vauxhall Frontera A]]<br />[[w:Isuzu MU#Second generation (UER25FW, UES25FW, UES73FW; 1998–2004)|Opel/Vauxhall Frontera B]]<br />[[w:Holden Frontera#First generation (UCS55/UCS69GW; 1989–1998)|Holden Frontera (UT)]]<br />[[w:Renault Trafic#Second generation (X83; 2001)|Opel/Vauxhall Vivaro]] A (low roof versions only)<br />[[w:Renault Trafic#Third generation (X82; 2014)|Opel/Vauxhall Vivaro]] B (low roof versions only)<br />[[w:Renault Trafic#Second generation (X83; 2001)|Renault Trafic (X83)]] (low roof versions only)<br />[[w:Renault Trafic#Second generation (X83; 2001)|Nissan Primastar (X83)]] (low roof versions only)||1950 (as AA Block of Luton plant)<br><br>1984 (as Bedford Luton Van Plant)||2017|| [[w:Vauxhall Motors|Vauxhall plant]]. Began as the Bedford van plant when Bedford vans were moved out of the Luton passenger car plant and into a separate, nearby plant (AA Block [body assembly and paint] &<br> K Block [trim and final assembly] of the Luton complex) connected by a bridge so that components for the CF van made in the car plant could be easily transferred to the van plant. Was part of the Bedford Commercial Vehicles Division of the GM Overseas Commercial Vehicles Corp. CF2 production ended in July 1987. Built the Isuzu-designed Midi from December 20, 1984 through May 23, 1996 though the Midi was still available through the 1997 model year. An upscale, 7-psgr. variant of the Midi called the Vauxhall Albany was built for 1991 only. Built the Suzuki-designed Rascal from February 1986 through July 3, 1993. Also built the Rascal's Suzuki counterpart, the Super Carry, for the UK & other European markets. Became a joint venture with [[w:Isuzu|Isuzu]] called IBC Vehicles Ltd., which was incorporated on January 20, 1987. Production under IBC Vehicles began in October 1987 after the plant was reorganized and staff was retrained. GM owned 60% & Isuzu held 40%. The Bedford brand was discontinued and replaced by the Vauxhall brand on light commercial vehicles as of June 1, 1990. GM bought Isuzu's stake in IBC Vehicles back in Sept. 1998 & the operation was again a subsidiary of GM. It was then renamed GMM (GM Manufacturing) Luton. Began making Vivaro and Trafic midsize commercial vans in 2001, followed by the Primastar in 2002. Frontera SUV ended production at the end of 2003 and GMM Luton focused solely on light commercial vehicles from that point onwards. Sold to [[w:PSA Group|PSA Group]] in 2017. Part of [[w:Stellantis|Stellantis]] since 2021. Production ended March 28, 2025. Last vehicle produced was a Vauxhall Vivaro. Site has been sold for redevelopment into an industrial park.
|-
| ||[[w:IDA-Opel|IDA-Opel]]||[[w:Kikinda|Kikinda]], [[w:Socialist Republic of Serbia|Socialist Republic of Serbia]]||[[w:Yugoslavia|Yugoslavia]]||[[w:Opel Ascona#Ascona C (1981–1988)|Opel Ascona]] C<br />[[w:Opel Corsa#Corsa A (S83; 1982)|Opel Corsa]] A<br />[[w:Opel Kadett|Opel Kadett]] D & E<br />[[w:Opel Kikinda#Senator A (1978–1986)|Opel Kikinda]] (Senator A)<br />[[w:Opel Omega#Omega A (1986–1994)|Opel Omega]] A<br />[[w:Opel Rekord Series E|Opel Rekord]] E<br />[[w:Opel Vectra#Vectra A (1988–1995)|Opel Vectra]] A<br />Iron castings, brake, and axle components||1977||1992|| [[w:Adam Opel AG|Opel affiliate]]. A joint venture owned 49% by GM & 51% by Kikinda Iron Foundry. IDA = Industrija Delova Automobila or Industry of Automobile Parts. The operation exported iron castings, brake, and axle components to GM/Opel, thus allowing partially built Opels to be imported into Yugoslavia and not be counted as imports. Ended by the wars of the breakup of Yugoslavia and imposition of sanctions on Yugoslavia in 1992. The plant was later restructured as the Livnica Kikinda metal foundry, which was taken over by Slovenia's Cimos in 2004 and manufactures auto parts for various European manufacturers including Opel.
|-
| ||Indianapolis Metal Center||[[w:Indianapolis|Indianapolis]], [[w:Indiana|Indiana]]||United States||Metal stampings for trucks||1930||2011||Located at 340 S. White River Parkway W. Drive. Stamping plant. Acquired from the former Martin-Parry Corporation in 1930. Became a Chevrolet plant making truck bodies. Became part of GM Truck & Bus Group in 1982 and in early 1992, became part of NATP (North American Truck Platforms) and later transferred to CLCD (Cadillac/Luxury Car Division) before joining the Metal Fabrication Division in 1994. Closed in June 2011. Demolished in 2014-2015.
|-
| ||Inland Fisher Guide Plant (Columbus, Ohio)||[[w:Columbus, Ohio|Columbus, Ohio]]||United States||Door Panel Assemblies & Small Components||1946||1999||Located at 200 Georgesville Road. Originally opened as a plant for the Ternstedt Division of General Motors. Then, Fisher Hardware Fabrication when Ternstedt merged back into Fisher Body in 1969. Fisher became Fisher Guide in 1984 and Inland Fisher Guide in 1989. In 1995, Inland Fisher Guide became the Delphi Interior and Lighting Systems division of GM's [[w:Delphi Automotive Systems|Delphi Automotive Systems]] subsidiary. Spun off with [[w:Delphi Automotive Systems|Delphi Automotive Systems]] in 1999. Closed by Delphi in 2007.
|-
| ||Inland Fisher Guide Dayton Plant||[[w:Dayton, Ohio|Dayton]], [[w:Ohio|Ohio]]||United States||Engine Mounts<br />Transmission Mounts<br />Strut Mounts<br />Steering Wheels<br />Liteflex Springs<br />Brake Linings<br />Brake Hose<br />Brake Pads<br />Ball Joints<br />Ice Cube Trays ||1921||1999||Located at 2701 Home Avenue (originally Home Road). The first factory building was built in 1910 by the Wright Company and made airplanes and components. The 2nd factory building was built in 1911 & made airplane engines. Aircraft production ceased in 1916. 13 different types of planes had been produced. In Feb. 1917, the plants were sold to the Darling Motor Co. but they went bankrupt shortly thereafter. The Dayton-Wright Company bought the site from Darling Motor on March 22, 1917 and made aircraft parts at the site for its Moraine assembly plant from 1918 to 1919. Dayton-Wright Company was bought by GM in 1919 & it was initially run as a GM subsidiary. In 1923, the aircraft part of the business was sold to Consolidated Aircraft Co. & this site switched from aviation production to automotive production. Inland Manufacturing Division (originally Inland Mfg. Company) of GM was formed on January 6, 1923 at this site, initially to make steering wheels. Merged with Fisher Guide to became Inland Fisher Guide in 1989. In 1995, Inland Fisher Guide became the Delphi Interior and Lighting Systems division of GM's [[w:Delphi Automotive Systems|Delphi Automotive Systems]] subsidiary. Spun off with [[w:Delphi Automotive Systems|Delphi Automotive Systems]] in 1999. Delphi closed it in 2008. The 2 original Wright Brothers' buildings were left standing and became part of Dayton Aviation Heritage National Historical Park in 2009 but the rest was demolished around 2014. The Wright Brothers factory buildings were damaged by fire in March 2023.
|-
| ||Inland Fisher Guide Plant (Detroit - Fort St.)||[[w:Detroit, Michigan|Detroit, Michigan]]||United States||Door hinges and interior parts||1920||1989||Located at 6307 W. Fort St. & Livernois St. Was Ternstedt's headquarters until 1962. Originally opened by Ternstedt Manufacturing Co., which was taken over by Fisher Body Co. in 1920. Became part of GM when GM took over Fisher Body in 1926. Ternstedt became a separate division of GM in 1948 before merging back in to Fisher Body in 1969. Was a plant for the Ternstedt Division (Plant# 16) of General Motors. Then, Fisher Hardware Fabrication. Fisher became Fisher Guide in 1984 and Inland Fisher Guide in 1989. Is now Evans Distribution Systems.
|-
| ||Inland Fisher Guide Plant (Elyria, Ohio)||[[w:Elyria, Ohio|Elyria, Ohio]]||United States||Car seats||1947||1990||Located at 1400 Lowell St. Originally opened as a plant for the Ternstedt Division of General Motors. Then, Fisher Hardware Fabrication when Ternstedt merged back into Fisher Body in 1969. Fisher became Fisher Guide in 1984 and Inland Fisher Guide in 1989.
|-
| ||Inland Fisher Guide Plant (Euclid, Ohio)||[[w:Euclid, Ohio|Euclid, Ohio]]||United States||Vehicle Bodies until 1970<br />Then, trim fabrication, seat covers & backs, upholstery, door panels, sunvisors, & other interior parts.<br />Also made seats & cushions for Sea Ray Boats||1947||1993||Located at 20001 Euclid Ave. Originally built in 1943. Bought by GM in 1947 from Cleveland Pneumatic Aerol Co., which made rocket shells and aircraft landing gear there during WWII. Was a Fisher Body plant making bodies for Chevrolet, Pontiac, Oldsmobile, & Buick until 1970. Then became a Fisher Trim Fabrication plant. Fisher became Fisher Guide in 1984 and Inland Fisher Guide in 1989. Closed in 1993. Site currently in use by an industrial supply store (HGR) and indoor sports facilities (The Sports Plant).
|-
| ||[[w:Automotive industry in Flint, Michigan#Coldwater Road Plant|Inland Fisher Guide Plant (Flint - Coldwater Road)]]||[[w:Genesee Township, Michigan|Genesee Township, Michigan]]||United States||Window regulators, door hinges, door modules and seat adjusters||1953||1996||Located at 1245 East Coldwater Road. Originally opened as a plant for the Ternstedt Division of General Motors. Then, Fisher Hardware Fabrication when Ternstedt merged back into Fisher Body in 1969. Fisher became Fisher Guide in 1984 and Inland Fisher Guide in 1989. In 1995, Inland Fisher Guide became the Delphi Interior and Lighting Systems division of GM's [[w:Delphi Automotive Systems|Delphi Automotive Systems]] subsidiary. Sold to Peregrine Inc. in 1996, which continued making window regulators and door hinges and modules. Closed by Peregrine in 1998. A GM subsidiary called REALM bought the property in 1999 and GM used the administration building until 2000. Demolished by 2001. Site now used by Deployment Strategies Group LLC for container storage.
|-
| ||Inland Fisher Guide Plant (Grand Rapids, Michigan)||[[w:Walker, Michigan|Walker, Michigan]]||United States||Interior trim||1942||1998||Located at 2150 Alpine Avenue NW. Built by Haskelite Manufacturing Corporation to make wooden gliders for use in WWII. Bought by GM in the early 1950's. Built fuselages for [[w:F-84F Thunderstreak|F-84F Thunderstreak]] fighter jets. Fisher became Fisher Guide in 1984 and Inland Fisher Guide in 1989. In 1995, Inland Fisher Guide became the Delphi Interior and Lighting Systems division of GM's [[w:Delphi Automotive Systems|Delphi Automotive Systems]] subsidiary. Became part of Delphi in 1995. Sold by GM to [[w:Lear Corp.|Lear Corp.]] in 1998. Closed by Lear in 2005. Now called Avastar Park, a multi-tenant industrial site.
|-
| ||Inland Fisher Guide Plant (Livonia, Michigan)||[[w:Livonia, Michigan|Livonia, Michigan]]||United States||Seat Cushions, Seat Pads, Seat Backs, Door Panel Trim||1954||1995||Built on the site of the former Detroit Transmission Division plant that burned down in 1953. Located at 28400 Plymouth Road. Fisher became Fisher Guide in 1984 and Inland Fisher Guide in 1989. In 1995, Inland Fisher Guide became the Delphi Interior and Lighting Systems division of GM's [[w:Delphi Automotive Systems|Delphi Automotive Systems]] subsidiary. Closed in 1995. Sold to Peregrine Inc. in 1996, which continued making interior trim parts. Peregrine then closed the plant in 1998. Now the Plymouth Road Technical Center, a multi-tenant site for industrial, warehousing, and logistics purposes.
|-
| ||Inland Fisher Guide Plant (Syracuse)||[[w:Salina, New York|Salina, New York]]||United States||Metal auto parts (die casting, stamping, machining, painting, plating), Plastic trim parts - exterior and interior (injection molding)||1952||1993||Located at One General Motors Drive (address sometimes listed as 1000 Town Line Road). Plastic operations were added in the early 1960's. Metal operations were subsequently reduced and ultimately replaced by the plastic operations by the early 1970's. Fisher became Fisher Guide in 1984 and Inland Fisher Guide in 1989. Closed December 1993. Property is now Salina Industrial Powerpark, a multi-tenant industrial park.
|-
| ||Inland Fisher Guide Plant (Tecumseh, Michigan)||[[w:Tecumseh, Michigan|Tecumseh, Michigan]]||United States||Seat Pads & Backs||1966||1988||Located at 5550 Occidental Highway. Fisher became Fisher Guide in 1984. Now occupied by Uniloy Inc., a plastics company.
|-
| ||[[w:Inland Fisher Guide Plant (New Jersey)|Inland Fisher Guide Plant (Trenton)]]||[[w:West Trenton, New Jersey|West Trenton]], [[w:Ewing Township, New Jersey|Ewing Township]], [[w:New Jersey|New Jersey]]||United States||Door handles<br />Hinges<br />Door locks<br />Seat adjusters<br />Exterior body moldings and painted components||1938||1998||Located at 1445 Parkway Ave. Built 7,546 [[w:TBM Avenger|TBM Avenger]] torpedo bombers during WWII under license from Grumman as part of GM's Eastern Aircraft Division. In 1961, the facility became the first commercial user in the United States to use a programmable industrial robot to replace human workers. Brief article about the plant's closing and displaced workers. 1993 Plant closing date was later delayed until Summer of 1998 : [https://query.nytimes.com/gst/fullpage.html?res=9E0CEEDB1E3EF937A35751C1A964958260] Originally part of the [[w:Flint, Michigan auto industry#Ternstedt Division|Ternstedt Division]] of Fisher Body, then the Ternstedt Division of GM in 1948 before Ternstedt merged back in to Fisher Body in 1969. Then, Fisher Hardware Fabrication. Fisher became Fisher Guide in 1984 and Inland Fisher Guide in 1989. In 1995, Inland Fisher Guide became the Delphi Interior and Lighting Systems division of GM's [[w:Delphi Automotive Systems|Delphi Automotive Systems]] subsidiary. Closed in 1998. Plant was subsequently demolished. Site redeveloped into Ewing Town Center, a mixed retail and residential complex.
|-
| ||Inland Fisher Guide Plant (Vandalia, Ohio)||[[w:Vandalia, Ohio|Vandalia, Ohio]]||United States||Door Panel Assemblies<br />Seat Pads<br />Instrument Panels||1941||1999||Located at 250 Northwoods Boulevard. Originally a GM Aeroproducts division facility making aircraft propellers, Aeroproducts division became part of GM's Allison division in 1952, site was absorbed by GM's Inland division in 1961 after propeller production moved to Allison's Indianapolis operation in 1960, merged into Inland Fisher Guide division in 1991, became part of GM's [[w:Delphi Automotive Systems|Delphi Automotive Systems]] subsidiary in 1995 and transferred to Delphi Chassis Division. Spun off with Delphi in 1999. Transferred to Delphi Thermal Division in 2007. Sold in 2015 to [[w:Mahle GmbH|Mahle GmbH]]. Mahle transferred operations to its Behr plant in Dayton and closed the Vandalia plant by 2016. Mahle sold the property in 2017.
|-
| ||General Motors International A/S||[[w:Copenhagen|Copenhagen]]||[[w:Denmark|Denmark]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Oakland (automobile)|Oakland]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Buick|Buick]]<br />[[w:Opel|Opel]]<br />[[w:Vauxhall Motors|Vauxhall]]||1924||1974||GM's 1st European assembly plant & 1st assembly plant outside North America. First vehicle off the line was a Chevrolet utility truck on January 7, 1924. Pontiac assembly began July 24, 1926. Oakland, Oldsmobile, & Buick assembly began in 1929. In the 1960's, the Chevy Chevelle & Buick Skylark were assembled along with most Opel & Vauxhall models. Station wagon-based vans were assembled as was the Opel 1500, based on the 1200. Production ended in Oct. 1974. Over 550,000 units had been produced.
|-
| ||[[w:General Motors do Brasil|Ipiranga]]||[[w:Ipiranga (district of São Paulo)|Ipiranga]], [[w:São Paulo (state)|São Paulo (state)]]||[[w:Brazil|Brazil]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Oakland (automobile)|Oakland]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Buick|Buick]]<br />[[w:Cadillac|Cadillac]]||1925||1930||GM's 1st Brazilian assembly plant. Replaced by Sao Caetano do Sul plant.
|-
| ||[[w:Pars Khodro|General Motors Iran]]||[[w:Tehran|Tehran]]||[[w:Imperial State of Iran|Imperial State of Iran]]||[[w:Opel Commodore#Foreign assembly|Chevrolet Iran 2500/2800/Royale]]<br />[[w:Chevrolet Nova#Fourth generation (1975–1979)|Chevrolet Iran (Nova)]]<br />[[w:Buick Skylark#Buick Skylarks in Iran|Buick Iran (Skylark)]]<br />[[w:Cadillac Seville#First generation (1976–1979)|Cadillac Iran (Seville)]]<br />[[w:Chevrolet C/K (third generation)|Chevrolet C/K pickup]] ||1974||1987||When the Shah ruled Iran, GM established a joint venture in Iran called GM Iran. GM held 45% while Pars Khodro held the other 55%. Production began on January 15, 1974 of the Opel Commodore-based Chevrolet Iran 2500/2800/Royale. By 1977, this was replaced by the American Chevrolet Nova, Buick Skylark, & Cadillac Seville. Chevy pickups followed. Once the Shah was overthrown in the 1979 Revolution and Iran was taken over by fanatics, GM abandoned the factory & Iran. The company became Pars Khodro and the local management changed. Production of GM models continued sporadically until 1987 when it finally ended.
|-
|J (1953-2009)<br /><br />21 (1928-1952 [[w:Chevrolet|Chevrolet]])||[[w:Janesville Assembly Plant|Janesville Assembly Plant]]||[[w:Janesville, Wisconsin|Janesville, Wisconsin]]||United States||[[w:Chevrolet K5 Blazer|Chevrolet K5 Blazer]] (1992-1994)<br /> [[w:Chevrolet Tahoe|Chevrolet Tahoe]] (1995-2009) <br />[[w:Chevrolet Suburban|Chevrolet Suburban]] (1947-1966, 1992-2009)<br /> [[w:Chevrolet Tiltmaster|Chevrolet Tiltmaster/W-Series (Gas-powered)]] (1994-2009)<br /> [[w:GMC Forward|GMC Forward/W-Series (Gas-powered)]] (1994-2009)<br /> [[w:Isuzu N-Series|Isuzu N-Series (Gas-powered)]] (1994-2009)<br />[[w:Chevrolet Tahoe|GMC Yukon]] (1992-2009)<br /> [[w:Chevrolet Tahoe#Second generation (2000)|GMC Yukon Denali (GMT800)]] (2001-2006)<br /> [[w:Chevrolet Tahoe#Third generation (2007)|GMC Yukon Denali (GMT900)]] (2007-2009) <br />[[w:GMC Suburban|GMC Suburban]] (1992-1999)<br />[[w:GMC Yukon XL|GMC Yukon XL]] (2000-2009) <br /> [[w:Chevrolet Suburban#Ninth generation (2000)|GMC Yukon XL Denali (GMT800)]] (2001-2006) <br /> [[w:Chevrolet Suburban#Tenth generation (2007)|GMC Yukon XL Denali (GMT900)]] (2007-2009)||1919||2009||Located at 1000 General Motors Dr. Was the oldest active GM assembly plant at time of its closure in 2009; largest under one roof in the U.S.
Originally built [[w:Samson Tractor|Samson tractors]] from 1919-1922. Also made [[w:Samson Tractor#Trucks and a car|Samson trucks]] from 1920-1922. On October 1, 1922, the Janesville plant was transferred to Chevrolet. Started producing Chevrolets on Feb. 14, 1923. Shortly thereafter, a neighboring Fisher Body plant was added. Plant closed from September 1932 - late 1933. During World War II, both the Chevy & Fisher Body sides of the plant were controlled by Oldsmobile and made artillery shells. Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. Janesville Assembly joined the GM Assembly Division in 1968. On April 21, 1967, the 100 millionth GM vehicle built in the US, a blue, two-door Chevrolet Caprice, was produced at the Janesville plant. Full-size cars ended production in 1982 and were replaced by the compact J-cars like the Cavalier. Last passenger car built was the 1991 Chevy Cavalier. Only SUVs and trucks were subsequently built. SUV production ended Dec. 23, 2008. Last vehicle produced was a black 2009 Chevy Tahoe. Medium-duty truck production ended on April 23, 2009, marking the end of vehicle production at Janesville. Officially, the plant was placed on "standby" status but production never restarted and the 2015 GM-UAW contract allowed Janesville to be closed permanently. Demolished from 2018-2019.<br />
Past models: [[w:Chevrolet Superior|Chevrolet Superior]], [[w:Chevrolet Series AA Capitol|Chevrolet Series AA Capitol]], [[w:Chevrolet Series AB National|Chevrolet Series AB National]], [[w:Chevrolet Series AC International|Chevrolet Series AC International]], [[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]], [[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]], [[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]], [[w:Chevrolet Standard Six|Chevrolet Standard Six]], [[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]], [[w:Chevrolet Master|Chevrolet Master]], [[w:Chevrolet Deluxe|Chevrolet Deluxe]], [[w:Chevrolet Stylemaster|Chevrolet Stylemaster]], [[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]], [[w:Chevrolet 150|Chevrolet 150]] (1953-1957), [[w:Chevrolet 210|Chevrolet 210]] (1953-1957), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1970), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-1972), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-1982), [[w:Chevrolet Cavalier|Chevrolet Cavalier]] (1982-1991), [[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958), [[w:Chevrolet El Camino#First generation (1959–1960)|Chevrolet El Camino]] (1959-1960), [[w:Chevrolet Impala|Chevrolet Impala]] (1958-1982), [[w:Chevrolet Nomad|Chevrolet Nomad]] (1955-1957), [[w:Buick Skyhawk#Second generation (1982–1989)|Buick Skyhawk]] (1988-1989), [[w:Cadillac Cimarron|Cadillac Cimarron]] (1982-1988), [[w:Chevrolet AK Series|Chevrolet AK Series]], [[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1947-1955), [[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959), [[w:Chevrolet C/K|Chevrolet C/K]] (1960-1986), [[w:Chevrolet C/K (third generation)#R/V-Series (1987–1991)|Chevrolet R/V]] (1987-1989), [[w:Chevrolet C/K (fourth generation)|Chevrolet C/K crew cab (GMT400)]] (1992-1994), [[w:Chevrolet C/K (fourth generation)#C3500HD (1991–2002)|Chevrolet C3500HD]] (1991-1998), [[w:Chevrolet Kodiak#Second generation (1990–2002)|Chevrolet Kodiak (GMT530)]] (1990-2002), [[w:Chevrolet/GMC B series#Third generation (1993–2003)|Chevrolet B-series]] (1993-02), [[w:Isuzu Forward|Chevrolet T-Series]] (1997-2002), [[w:Chevrolet C/K (second generation)|GMC C/K (Action Line)]] (1967-1972), [[w:Chevrolet C/K (third generation)|GMC C/K (Rounded Line)]] (1973-1986), [[w:Chevrolet C/K (third generation)#R/V-Series (1987–1991)|GMC R/V]] (1987-1989), [[w:Chevrolet C/K (fourth generation)|GMC Sierra crew cab (GMT400)]] (1992-1994), [[w:Chevrolet C/K (fourth generation)#C3500HD (1991–2002)|GMC Sierra C3500HD]] (1991-1998), [[w:Chevrolet Kodiak#Second generation (1990–2002)|GMC TopKick (GMT530)]] (1990-02), [[w:Chevrolet/GMC B series#Third generation (1993–2003)|GMC B-series]] (1993-2002), [[w:GMC T-Series|GMC T-Series]] (1997-2002), [[w:Isuzu F-Series|Isuzu F-Series]] (1997-2002)
|-
| ||Kalamazoo Metal Center||[[w:Kalamazoo, Michigan|Kalamazoo, Michigan]]||United States||Stamped Body panels ||1965||1999|| Located at 5200 East Cork Street. Metal stamping plant. Started out as a Fisher Body plant. Now Midlink Business Park.
|-
|K||[[w:GM Korea|GM Korea]]||[[w:Gunsan|Kunsan]], [[w:Jeolla Province|Jeolla]]||[[w:South Korea|South Korea]]||[[w:Chevrolet Cruze|Chevrolet Cruze]]<br />[[w:Holden Cruze#Australia|Holden Cruze (JG sedan/JH wagon)]]<br />[[w:Holden Astra#Seventh generation (BK, BL; 2016)|Holden Astra Sedan (BL)]] (4-door)<br />[[w:Chevrolet Orlando|Chevrolet Orlando]]<br />[[w:GM Family Z engine|Family Z diesel engine]]||1997||2018||Past models: [[w:Daewoo Lacetti|Daewoo Lacetti]], [[w:Daewoo Nubira|Daewoo Nubira]], [[w:Daewoo Tacuma|Daewoo Tacuma]], [[w:Chevrolet Optra|Chevrolet Optra]], [[w:Chevrolet Vivant|Chevrolet Vivant]], [[w:Holden Viva|Holden Viva (JF)]], [[w:Suzuki Forenza|Suzuki Forenza]], [[w:Suzuki Reno|Suzuki Reno]]
This factory also produced Chevrolet vehicles for [[w:General Motors Europe|General Motors Europe]] and [[w:Chevrolet Europe|Chevrolet Europe]]. The factory permanently closed on May 31, 2018, due to low productivity caused by GM's withdrawal from Europe in 2017 and due to GM's restructuring of its GM Korea operations. Sold to Myoung Shin Co., Ltd. in 2018. Diesel engines were produced at an adjacent facility beginning in 2006.
|-
|A<br />(1953-1964 [[w:Chevrolet|Chevrolet]] and 1965-1990)<br /><br />8 <br />(1929-1952 [[w:Chevrolet|Chevrolet]])||[[w:Lakewood Assembly|Lakewood Assembly]]||[[w:Lakewood Heights, Atlanta|Lakewood Heights, Georgia]]||United States ||[[w:Chevrolet Caprice|Chevrolet Caprice]] (1966, 1987-1990)<br />[[w:Pontiac Safari|Pontiac Safari wagon]] (1987-1989)<br />[[w:Buick Estate#1977–1990|Buick LeSabre Estate wagon]] (1987-1989)<br /> [[w:Buick Estate#1977–1990|Buick Electra Estate wagon]] (1987-1989)<br />[[w:Buick Estate#1977–1990|Buick Estate wagon]] (1990)||1928||1990||Located at McDonough Boulevard and Sawtell Avenue. Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. Lakewood Assembly joined the GM Assembly Division in 1968. Idled from September 1982 to early 1984. Production ended with Chevrolet Caprice Classic & Buick Estate Wagon. Last vehicle produced was a gray Chevy Caprice on <br> August 6, 1990.<br /> Past models:<br /> [[w:Chevrolet Series AC International|Chevrolet Series AC International]]<br />[[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]]<br />[[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]]<br />[[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]]<br />[[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]]<br />[[w:Chevrolet Master|Chevrolet Master]]<br />[[w:Chevrolet Deluxe|Chevrolet Deluxe]]<br />[[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]]<br /> [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1966), [[w:Chevrolet 150|Chevrolet 150]] (1953-1957), [[w:Chevrolet 210|Chevrolet 210]] (1953-1957), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-1966), [[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958), [[w:Chevrolet El Camino#First generation (1959–1960)|Chevrolet El Camino]] (1959-1960), [[w:Chevrolet Impala|Chevrolet Impala]] (1958-1966), [[w:Chevrolet Nomad|Chevrolet Nomad]] (1955-1957), [[w:Chevrolet Suburban|Chevrolet Suburban]] (1957, 1965-1966). Also built the <br> [[w:Chevrolet Chevette|Chevrolet Chevette]] (1981-1982, 1984-1987) & [[w:Pontiac 1000|Pontiac 1000]] (1981-1982, 1984-1987),<br> [[w:Pontiac Acadian|Pontiac Acadian]] (Canada only).<br> GM G-body: [[w:Pontiac Grand Prix#Third generation (1969–1972)|Pontiac Grand Prix]] (1970-1972). GM A-body: [[w:Chevrolet Chevelle|Chevrolet Chevelle]] (1964-1970), [[w:Chevrolet El Camino#Second generation (1964–1967)|Chevrolet El Camino]] (1965), [[w:Pontiac Grand Prix|Pontiac Grand Prix]] (1973-1979), [[w:Pontiac GTO|Pontiac GTO]] (1969, 1971-1973), [[w:Pontiac LeMans|Pontiac LeMans]] (1971-1977).<br> [[w:Chevrolet AK Series|Chevrolet AK Series]], [[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1948-1955), [[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959), [[w:Chevrolet C/K|Chevrolet C/K]] (1960-80), [[w:Chevrolet C/K (second generation)|GMC C/K (Action Line)]] (1967-1972),<br> [[w:Chevrolet C/K (third generation)|GMC C/K (Rounded Line)]] (1973-1980).
|-
| ||[[w:Lansing Car Assembly|Lansing Car Assembly - Body]]||[[w:Lansing, Michigan|Lansing, Michigan]]||United States||Automotive bodies||1920||2005||Located at 401 N. Verlinden St. Opened as a [[w:Durant Motors|Durant Motors]] plant in 1920. Durant Motors went out of business in 1931 and the plant was vacant until GM bought it in 1935. Known as GM's Lansing Plant 6. The plant reopened as a Fisher Body plant replacing the Fisher Body operation within the main Oldsmobile plant (Lansing Plant 1) that operated out of space leased from Oldsmobile since 1923. It supplied bodies to the main Oldsmobile plant (Lansing Plant 1 or Lansing Car Assembly - Chassis). Together with the chassis plant, they made up Lansing Car Assembly. Demolished in 2008-2009.
|-
|M (1949-1984 [All], 1985-2005 [North Line])||[[w:Lansing Car Assembly|Lansing Car Assembly - Chassis (North)]]||[[w:Lansing, Michigan|Lansing, Michigan]]||United States||,<br> [[w:Chevrolet Cavalier#Third generation (1995)|Chevrolet Cavalier coupe]] (1995-1998),<br> [[w:Chevrolet Malibu#Fifth generation (1997)|Chevrolet Malibu]] (2001-2003),<br> [[w:Chevrolet Malibu#Fifth generation (1997)|Chevrolet Classic]] (2004-2005),<br> [[w:Pontiac Grand Am|Pontiac Grand Am]] (1992-2005),<br> [[w:Oldsmobile Calais|Oldsmobile Calais]] (1985-1987),<br> [[w:Oldsmobile Cutlass Calais|Oldsmobile Cutlass Calais]] (1988-1991),<br> [[w:Oldsmobile Achieva|Oldsmobile Achieva]] (1992-1998),<br> [[w:Buick Skylark#Sixth generation (1985–1991)|Buick Somerset Regal/Somerset/Skylark]] (1985-1991)||1902||2005|| "M" - North assembly line. Part of GM's Lansing Plant 1. Located around 1014 Townsend St., next to the former Oldsmobile headquarters at 920 Townsend St. This was Oldsmobile's home plant. It predated the founding of GM in 1908. Fisher Body leased space here to build bodies for Oldsmobile beginning in 1923, when Fisher started making bodies for 1924 Oldsmobiles. In 1935, Fisher Body moved to the ex-Durant Motors plant on Verlinden St. that GM bought earlier that year. Oldsmobile then took back the space that Fisher Body had been using (Bldg. 26). Lansing Car Assembly was converted to build unibody, fwd, compact cars for 1985 for multiple GM brands instead of the previous body-on-frame, rwd midsize & full-size cars exclusively for Oldsmobile. Demolished in 2007.
Past models: [[w:Oldsmobile F-Series|Oldsmobile F-Series]] (1928-1938), [[w:Oldsmobile L-Series|Oldsmobile L-Series]] (1932-1938), [[w:Oldsmobile Series 60|Oldsmobile Series 60]] (1939-1948), [[w:Oldsmobile Series 70|Oldsmobile Series 70]] (1939-1950), [[w:Oldsmobile 88|Oldsmobile 88]] (1949-1984), Oldsmobile 80 (1939), [[w:Oldsmobile 98#First generation (1941)|Oldsmobile 90]] (1940), [[w:Oldsmobile 98#First generation (1941)|Oldsmobile 96]] (1941), [[w:Oldsmobile 98|Oldsmobile 98]] (1941-1984), [[w:Oldsmobile 98#1953|Oldsmobile 98 Fiesta]] convertible (1953),<br> [[w:Oldsmobile Custom Cruiser#First generation (1971–1976)|Oldsmobile Custom Cruiser]] (1971-1976), [[w:Oldsmobile Cutlass|Oldsmobile Cutlass]] (1961-1984), [[w:Oldsmobile Cutlass Supreme|Oldsmobile Cutlass Supreme]] (1966-1984), [[w:Oldsmobile 442|Oldsmobile 442]] (1964-80), [[w:Oldsmobile Jetstar I|Oldsmobile Jetstar I]] (1964-1965), [[w:Oldsmobile Starfire#First generation (1961–1966)|Oldsmobile Starfire]] (1961-1966), [[w:Oldsmobile Toronado|Oldsmobile Toronado]] (1966-1978), [[w:Oldsmobile Vista Cruiser|Oldsmobile Vista Cruiser]] (1964-1977), [[w:Viking (automobile)|Viking]] (1929-1931)<br />Oldsmobile engines:<br />[[w:Oldsmobile straight-6 engine|Oldsmobile straight-6 engine]]<br />[[w:Oldsmobile straight-8 engine|Oldsmobile straight-8 engine]]<br />[[w:Oldsmobile V8 engine|Oldsmobile Rocket V8 engine]]<br />[[w:Oldsmobile V8 engine#Aluminum 215|Oldsmobile Rockette V8 engine]]<br />[[w:Oldsmobile Diesel engine|Oldsmobile Diesel V8]]
|-
|C (1985-2004 [South Line])||[[w:Lansing Car Assembly|Lansing Car Assembly - Chassis (South)]]||[[w:Lansing, Michigan|Lansing, Michigan]]||United States||[[w:Pontiac Grand Am|Pontiac Grand Am]] (1985-2004),<br> [[w:Oldsmobile Calais|Oldsmobile Calais]] (1985-1986),<br> [[w:Oldsmobile Alero|Oldsmobile Alero]] (1999-2004),<br> [[w:Chevrolet Alero|Chevrolet Alero]] (Export only: 1999-2001),<br> [[w:Buick Skylark#Seventh generation (1992–1998)|Buick Skylark]] (1992-1998)||1902||2004||"C" - South assembly line. Only started using a separate plant code from the North plant beginning with the 1985 N-body cars. Part of GM's Lansing Plant 1. Located around 1014 Townsend St., next to the former Oldsmobile headquarters at 920 Townsend St. Demolished in 2007.
|-
|B<br />(0 for EV1)||[[w:Lansing Craft Centre|Lansing Craft Centre]]||[[w:Lansing Township, Michigan|Lansing Township, Michigan]]||United States||[[w:Chevrolet SSR|Chevrolet SSR]] (2003–2006)||1987||2006||Located at 2801 West Saginaw Street, across the street from the Lansing Metal Center. Originally built by Ryan-Bohn Foundry and opened in 1920. Owned by Driggs Aircraft Company from 1927-1930. Owned by R.E. Olds from 1930-1940 but not used. Bought by GM's Oldsmobile Division in 1940. Became GM's Lansing Plant 2. Also known as Olds Forge. Built artillery shells during WWII. Oldsmobile used this plant as a forge (through 1983) and for making axles and differentials (through 1984). Became known as the Oldsmobile Differential Plant and Foundry. Converted into a full vehicle assembly plant including stamping, body shop and general assembly areas. First opened as a vehicle assembly plant known as the Reatta Craft Centre in 1988 though pilot production began in December 1986. After Buick Reatta production ended in 1991, plant was renamed Lansing Craft Centre. Used by the Genasys joint venture with [[w:American Specialty Cars|ASC]] to complete production of the Chevy Cavalier and Pontiac Sunfire convertibles. Cavalier and Sunfire convertible production ends during 1999. Cadillac Eldorado production moved here from Detroit-Hamtramck Assembly during 2000. Eldorado production ended April 22, 2002. Plant was then converted to truck production for the Chevy SSR. First saleable production SSR completed on July 29, 2003. Final SSR built March 17, 2006. Closed in 2006. Demolished in 2008-2009.
Past models: [[w:Buick Reatta|Buick Reatta]] (1988–1991), [[w:Chevrolet Cavalier#Third generation (1995)|Chevrolet Cavalier convertible]] (1995–2000), [[w:Pontiac Sunfire|Pontiac Sunfire]] convertible (1995–2000), [[w:General Motors EV1|General Motors EV1]] (1997, 1999), [[w:Cadillac Eldorado#Twelfth generation (1992–2002)|Cadillac Eldorado]] (2000-2002)
|-
|||[[w:Lansing Engine Plant|Lansing Engine]]||[[w:Delta Township, Michigan|Delta Township, Michigan]]||United States||[[w:Oldsmobile Diesel engine|Oldsmobile Diesel V6]]<br />[[w:Quad 4 engine|Quad 4 engine]]<br />[[w:GM Ecotec engine|GM Ecotec engine]] (2002 only)||1981||2002||Located at 2901 S. Canal Road. Known as GM's Lansing Plant 5. Also known as Delta Engine. Built to produce experimental diesel engine; part of Ryder Logistics since 2005.
|-
| ||[[w:Lansing Metal Center|Lansing Metal Center]]||[[w:Lansing Township, Michigan|Lansing Township, Michigan]]||United States|| Stamping and electroplating bumpers; general machining of crankshafts and connecting rods; and machining, welding, and stamping of other automobile parts||1952||2006|| Located at 2800 W. Saginaw Street, across the street from the Lansing Craft Centre. Known as GM's Lansing Plant 3. Also known as the Olds Jet plant. Originally built to manufacture turbine blades for Buick-built J65 axial flow jet engines. Metal fabricating plant. Electroplating operation ended in May 1987. Closed in March 2006. Demolished in 2008-2010.
|-
|K <br />(1953-1964 [[w:Chevrolet|Chevrolet]] and 1965-1988)<br /><br />5 (1929-1952 [[w:Chevrolet|Chevrolet]])<br /><br />M (1964 [[w:Pontiac (automobile)|Pontiac]])<br /><br />8 (1964 [[w:Buick|Buick]]) ||[[w:Leeds Assembly|Leeds Assembly]]||[[w:Kansas City, Missouri|Kansas City, Missouri]]||United States||[[w:Chevrolet Cavalier|Chevrolet Cavalier]] (1984-1987),<br> [[w:Oldsmobile Firenza|Oldsmobile Firenza]] (1982-1988),<br> [[w:Buick Skyhawk#Second generation (1982–1989)|Buick Skyhawk]] (1982-1988)<br>[[w:Pontiac Sunbird#Second generation (1982–1994)|Pontiac J2000]] (1982)||1929||1988||Located at 6817 Stadium Drive. Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Leeds Assembly began making Pontiac and Buick passenger cars for 1964. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. Leeds Assembly joined the GM Assembly Division in 1968. Retooled to build fwd J-cars for 1982. Closed April 15, 1988. <br />[[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]]<br />[[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]]<br />[[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]]<br />[[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]]<br />[[w:Chevrolet Master|Chevrolet Master]]<br />[[w:Chevrolet Deluxe|Chevrolet Deluxe]]<br />[[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]]<br />[[w:Buick Apollo|Buick Apollo]] (1974), [[w:Buick GS|Buick GS]] (1965-1968, 1970), [[w:Buick Regal|Buick Regal]] (1980-1981), [[w:Buick Skylark|Buick Skylark]] (1964-1970, 1975-76), [[w:Buick Special#1964–1967|Buick Special]] (1964-1967), [[w:Chevrolet 150|Chevrolet 150]] (1953-1957), [[w:Chevrolet 210|Chevrolet 210]] (1953-1957), [[w:Chevrolet AK Series|Chevrolet AK Series]], [[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1947-1955), [[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959), [[w:Chevrolet C/K (first generation)|Chevrolet C/K]] (1960-1966), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1963), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-1963), [[w:Chevrolet Corvair|Chevrolet Corvair]] (1960-1961), [[w:Chevrolet Chevelle|Chevrolet Chevelle]] (1964-1974, 1977), [[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958), [[w:Chevrolet El Camino|Chevrolet El Camino]] (1964-1974, 1978-80), [[w:Chevrolet Impala|Chevrolet Impala]] (1958-1963), [[w:Chevrolet Malibu|Chevrolet Malibu]] (1978-1981), [[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1971-1981), [[w:Chevrolet Nomad|Chevrolet Nomad]] (1955-1957), [[w:Chevrolet Nova|Chevrolet Chevy II/Nova]] (1962-63, 1974-1977),[[w:Chevrolet Suburban|Chevrolet Suburban]] (1952, 1956, 1959, 1961-1962), [[w:GMC Sprint|GMC Sprint]] (1971-1974), [[w:GMC Caballero|GMC Caballero]] (1978-1980), [[w:Pontiac GTO|Pontiac GTO]] (1964-1968), [[w:Pontiac LeMans|Pontiac LeMans]] (1964-1968), [[w:Pontiac Tempest|Pontiac Tempest]] (1964-1965)
|-
|K ('94-'05)<br /><br />E ('65-'91)<br /><br />L (Pre-1965 [[w:Oldsmobile|Oldsmobile]] & [[w:Pontiac (automobile)|Pontiac]]) <br /><br /> 3 (Pre-1964 [[w:Buick|Buick]]) ||[[w:Linden Assembly|Linden Assembly]]||[[w:Linden, New Jersey|Linden, New Jersey]]||United States||[[w:Chevrolet S-10 Blazer#Second generation (1995)|Chevrolet Blazer]] (1995-2005)<br />[[w:Chevrolet S-10 Blazer#Second generation (1995)|GMC Jimmy]] (1995-2005)<br />[[w:Chevrolet S-10#Second generation (1994)|Chevrolet S-10]] (1994-2004)<br /> [[w:Chevrolet S-10#Second generation (1994)|GMC Sonoma]] (1994-2004)||1937||2005||Located at 1016 W. Edgar Road. Linden Assembly was the 2nd GM multi-brand assembly plant (the 1st was Southgate, CA), assembling Buick, Oldsmobile, and Pontiac models. It was operated by GM's Linden Division through January 1942. During WWII, GM built 5,837 [[w:FM-1 Wildcat|FM-1 Wildcat]] and [[w:FM-2 Wildcat|FM-2 Wildcat]] fighter planes at Linden under license from Grumman as part of GM's Eastern Aircraft Division. After the war ended, in 1945, Linden & Southgate were both placed in a new division called the [[w:Buick-Oldsmobile-Pontiac Assembly Division|Buick-Oldsmobile-Pontiac Assembly Division]]. BOP Assembly Division became GM Assembly Division in 1965. In 1971, Linden Assembly became the first plant outside Cadillac's home plant in Detroit to assemble Cadillacs when it began to assemble C-body Cadillacs like the DeVille & Calais. In 1979, Linden became the sole source for all three of GM's E-body personal luxury coupes, the Oldsmobile Toronado, Buick Riviera, and Cadillac Eldorado. The closely related K-body Cadillac Seville was added in 1980. In the mid-1980s, the factory was retooled to produce the new L-body Chevy Beretta & Corsica, which began production in 1987. This was the first time Linden built a Chevrolet model. Linden was idled in September 1991 for conversion to truck and SUV production. It reopened in 1993 to produce the 1994 S-10 and Sonoma pickups, adding the Blazer and Jimmy SUVs for 1995. Closed April 2005. Last vehicle built was a white 2005 four-door Chevy Blazer on April 20, 2005. Demolished in 2008. Now Legacy Square, a complex of retail stores, and Legacy Commerce Center, an industrial space at the back of the property along Linden Ave.<br /> [[w:Chevrolet Corsica|Chevrolet Corsica]] (1987-1991), [[w:Chevrolet Beretta|Chevrolet Beretta]] (1987-1991), [[w:Buick Riviera#Sixth generation (1979–1985)|Buick Riviera]] (1979-1985), [[w:Oldsmobile Toronado#Third generation (1979–1985)|Oldsmobile Toronado]] (1979-1985), [[w:Cadillac Eldorado#Tenth generation (1979–1985)|Cadillac Eldorado]] (1979-1985), [[w:Cadillac Seville#Second generation (1980–1985)|Cadillac Seville]] (1980-85), [[w:Buick Century|Buick Century]] (1939, 1955-1957), [[w:Buick Electra|Buick Electra]] (1959-1963, 1971-1978), [[w:Buick Invicta|Buick Invicta]] (1959-1962), [[w:Buick LeSabre|Buick LeSabre]] (1959-1963), [[w:Buick Roadmaster|Buick Roadmaster]] (1948-1949, 1953-1957), [[w:Buick Special|Buick Special]] (1952-1957), [[w:Buick Super|Buick Super]] (1955-1957), [[w:Buick Wildcat|Buick Wildcat]] (1963), [[w:Cadillac Calais|Cadillac Calais]] (1971-1976), [[w:Cadillac DeVille|Cadillac DeVille]] (1971-1978), [[w:Oldsmobile 88|Oldsmobile 88]] (1949-1976), [[w:Oldsmobile 98|Oldsmobile 98]] (1941-1963, 1971-1978), [[w:Oldsmobile Cutlass|Oldsmobile Cutlass]] (1968-1970), [[w:Oldsmobile 442|Oldsmobile 442]] (1968-1970), [[w:Oldsmobile Jetstar I|Oldsmobile Jetstar I]] (1964-1965), [[w:Oldsmobile Starfire#First generation (1961–1966)|Oldsmobile Starfire]] (1961-1966), [[w:Pontiac Bonneville|Pontiac Bonneville]] (1958-1970, 1972-1973), [[w:Pontiac Catalina|Pontiac Catalina]] (1959-1970), [[w:Pontiac Chieftain|Pontiac Chieftain]] (1949, 1953, 1955, 1958), [[w:Pontiac Executive|Pontiac Executive]] (1967-1970), [[w:Pontiac Grand Prix|Pontiac Grand Prix]] (1962-1968), [[w:Pontiac Star Chief|Pontiac Star Chief]] (1955-1958, 1962, 1965-1966), [[w:Pontiac 2+2|Pontiac 2+2]] (1964-1967), [[w:Pontiac Ventura#1960–1970|Pontiac Ventura]] (1960-61)
|-
| ||[[w:Livonia Engine|Livonia Engine]]||[[w:Livonia, Michigan|Livonia, Michigan]]||United States||[[w:Cadillac High Technology engine|Cadillac High Technology engine]] (4.1/4.5/4.9L OHV V8)<br>[[w:GM Premium V engine|Premium V engine]] (4.6L Northstar V8, 4.0L Aurora V8, 3.5L Shortstar V6)||1971||2010|| Located at 12200 Middlebelt Road. Originally built as a parts supplier to Cadillac. Converted into an engine plant for the HT-series V8 that debuted for 1982. Now a multi-tenant commercial space including [[w:Penske Corporation|Penske Logistics]] and [[w:KUKA|KUKA]]. The [[w:KUKA|KUKA]] facility appears to be the one building the initial batch of [[w:BrightDrop Zevo 600|BrightDrop Zevo 600]] electric vans for GM prior to production moving to GM's [[w:CAMI Automotive|CAMI Automotive]] plant.
|-
||7 (1979-2019)<br /><br /> U (1966-1978)||[[w:Lordstown Assembly|Lordstown Assembly]]||[[w:Warren, Ohio|Warren, Ohio]]||United States||[[w:Chevrolet Cruze#Second generation (J400)|Chevrolet Cruze (2016-2019)]]||1966||2019
|GM bought the property in 1955 and announced plans for the new Chevrolet plant in 1956 but construction didn't begin until 1964. Production began on April 28, 1966. Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. Lordstown Assembly joined the GM Assembly Division in 1971. <br /> Past models: [[w:Chevrolet Cruze#First generation (J300; 2008)|Chevrolet Cruze (2011-2015)/ Cruze Limited (2016)]], [[w:Chevrolet Cobalt|Chevrolet Cobalt]] (2005-2010)/[[w:Pontiac G5|Pontiac G5]] (2007-2009, Canada: 2007-2010), [[w:Chevrolet Cavalier|Chevrolet Cavalier]] (1982-2005)/[[w:Pontiac Sunbird#Second generation (1982–1994)|Pontiac J2000/2000/2000 Sunbird/Sunbird]] (1982-1994)/ [[w:Pontiac Sunfire|Pontiac Sunfire]] (1995-2004), [[w:Chevrolet Vega|Chevrolet Vega]] (1971–1977)/[[w:Pontiac Astre|Pontiac Astre]] (1975-1977), [[w:Chevrolet Monza|Chevrolet Monza]] (1978-1980)/[[w:Pontiac Sunbird#First generation (1976–1980)|Pontiac Sunbird]] (1978-1980)/[[w:Oldsmobile Starfire#Second generation (1975–1980)|Oldsmobile Starfire]] (1978-1980)/ [[w:Buick Skyhawk#First generation (1975–1980)|Buick Skyhawk]] (1978-1980), [[w:Chevrolet van#Third generation (1971-1996)|Chevrolet Van/Sportvan]] (1971-1992), [[w:Chevrolet van#Third generation (1971-1996)|GMC Vandura/ Rally Van]] (1971-1992), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1966-1970), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1966-1970), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-1970), [[w:Chevrolet Impala|Chevrolet Impala]] (1966-1970), [[w:Pontiac Firebird#First generation (1967–1969)|Pontiac Firebird]] (1967-1969), [[w:Pontiac Pursuit|Pontiac Pursuit/G5 Pursuit]] (Canada: 2005-2006), [[w:Toyota Cavalier|Toyota Cavalier]] (1996-2000).
Located at 2300 Hallock-Young Road. Main assembly plant is the East part of the complex on Hallock-Young Road. Stamping plant added in 1970. Paint shop added in 2004. Stamping plant and paint shop are part of the West part of the complex on Ellsworth-Bailey Road. <br /> Closed on March 6, 2019. Sold to [[w:Lordstown Motors|Lordstown Motors]] in 2019. Lordstown Motors sold the plant to [[w:Foxconn|Foxconn]] in 2022 and Foxconn will do contract assembly for Lordstown Motors and others.
|-
|1 (Lotus Omega &<br />Lotus Carlton)<br /><br />H (Lotus models)||[[w:Lotus Cars|Lotus Cars]]||[[w:RAF Hethel|RAF Hethel]], [[w: Hethel|Hethel]], [[w:Norfolk|Norfolk]], [[w:England|England]]||[[w:United Kingdom|United Kingdom]]||
[[w:Opel Lotus Omega|Opel Lotus Omega]] A / [[w:Vauxhall Lotus Carlton|Vauxhall Lotus Carlton]]<br /> 1990-1992, 950 units
[[w:Lotus Esprit|Lotus Esprit]], [[w:Lotus Excel|Lotus Excel]], [[w:Lotus Elan#Elan (M100)|Lotus Elan]]
||1986||1993||GM owned Lotus from 1986-1993. GM sold Lotus in 1993 to A.C.B.N. Holdings S.A. of Luxembourg, a company controlled by Italian businessman Romano Artioli, who also owned Bugatti Automobili SpA. Artioli sold Lotus to Malaysian automaker [[w:Proton Holdings|Proton]] in 1996.
|-
| ||Mansfield Metal Center||[[w:Ontario, Ohio|Ontario, Ohio]]||United States||Metal stamping||1955||2010||Located at 2525 W. 4th St. Mostly demolished. Redeveloped into Ontario Commerce Park.
|-
| ||[[w:Massena Castings Plant|Massena Castings Plant]]||[[w:Rooseveltown, New York|Rooseveltown, New York]]||United States|| Aluminum engine blocks & cylinder heads for [[w:Chevrolet Turbo-Air 6 engine|Corvair engine]], Aluminum engine blocks for [[w:Chevrolet 2300 engine|Vega engine]], & aluminum cylinder heads & blocks for other engines.<br /> Also clutch housings, transmission cases, pistons, aluminum intake manifolds||1959||2009||Located at 56 Chevrolet Rd, Rooseveltown, NY 13662 <br /> Originally a Chevrolet facility. In 1978, became part of GM's Central Foundry Division. In 1991, Central Foundry became part of GM Powertrain. <br />Production ended April 23, 2009. Demolished in 2011.
|-
|M||Mexico City Assembly||[[w:Mexico City|Mexico City]]||[[w:Mexico|Mexico]]||[[w:Chevrolet|Chevrolet]] trucks & vans||1937||1995<ref>{{cite news|author=Thomas H. Klier, James Rubenstein|title=Mexico’s Growing Role in the Auto Industry Under NAFTA: Who Makes What and What Goes Where|url=https://www.chicagofed.org/publications/economic-perspectives/2017/6.|publisher=Federal Reserve Bank of Chicago, Economic Perspectives, Vol. 41, No. 6|at=see table 11 and footnotes right under table 11|date=September 2017}}</ref>||[[w:Chevrolet|Chevrolet]] including: Caprice, Chevelle, Corvair, Impala, Malibu, Nova, Malibu Rallye (Nova-based), trucks<br />[[w:Pontiac (automobile)|Pontiac]], [[w:Oldsmobile|Oldsmobile]], [[w:Buick|Buick]], [[w:Cadillac|Cadillac]],<br /> [[w:Opel Olympia|Opel Olympia]],<br> [[w:Opel Rekord|Opel Rekord/MX-1/<br>Olimpico/Fiera]] <br /> Located at 843 Avenida Ejército Nacional (formerly Calzada de Los Morales) although the old headquarters building was demolished in 2018. The current headquarters is in the GM Tower at the other end of the property on Blvd. Miguel de Cervantes Saavedra. Started with trucks then added passenger cars in the early 1940s. Switched from assembly to manufacturing in 1965. Production ended in 1995 and most of the property was sold but GM de Mexico still has its corporate headquarters at this location. Most of the location is now Plaza Antara, an open-air shopping center.
|-
|2||[[w:Moraine Assembly|Moraine Assembly]]||[[w:Moraine, Ohio|Moraine, Ohio]]||United States||[[w:Chevrolet S-10#First generation (1982)|Chevrolet S-10]] (1982-1992)<br /> [[w:Chevrolet S-10 Blazer#First generation (1983–1994)|Chevrolet S-10 Blazer]] 4-door (1991-1994)<br /> [[w:Chevrolet S-10 Blazer#Second generation (1995–2005)|Chevrolet Blazer]] (1995-2001)<br />[[w:GMC S-15#First generation (1982)|GMC S-15]] (1982-1990)<br />[[w:GMC Sonoma#First generation (1982)|GMC Sonoma]] (1991-1992)<br /> [[w:GMC S-15 Jimmy#First generation (1983–1994)|GMC S-15 Jimmy/Jimmy]] 4-door (1991-1994)<br /> [[w:GMC S-15 Jimmy#Second generation (1995–2005)|GMC Jimmy]] (1995-2001)<br /><br /> [[w:Chevrolet TrailBlazer#First generation (KC; 2001)|Chevrolet TrailBlazer]] (2002-2009)<br /> [[w:GMC Envoy#Second generation (2002–2009)|GMC Envoy]] (2002-2009)<br /> [[w:Isuzu Ascender|Isuzu Ascender]] (2003-2008)<br />[[w:Oldsmobile Bravada|Oldsmobile Bravada]] (1991-1994, 1996-2004)<br />[[w:Buick Rainier|Buick Rainier]] (2004-2007) <br />[[w:Saab 9-7X|Saab 9-7X]] (2005-2009)<br /><br />[[w:Grumman LLV|Grumman LLV]] chassis (1987-1994)||1951<br><br>1981 (Vehicle production)||2008|| Located at 2601 West Stroop Road. Began in 1951 as part of the [[w:Frigidaire|Frigidaire]] Division of General Motors Corporation producing household appliances. [[w:Frigidaire|Frigidaire]] production ended in 1979 when GM sold [[w:Frigidaire|Frigidaire]] to [[w:White Consolidated Industries|White Consolidated Industries]] but kept the Moraine plant and converted it to build vehicles. Vehicle production began in 1981. Was part of GM's Truck & Bus Group. Closed on December 23, 2008. Sold to [[w:Fuyao Group#Fuyao Glass America Inc.|Fuyao Group]] in 2014; began production of automotive glass for GM and other automakers in 2016.
|-
| ||Moraine Engine||[[w:Moraine, Ohio|Moraine, Ohio]]||United States||[[w:Detroit Diesel V8 engine|Detroit Diesel V8 engine]] 6.2L/6.5L||1981||2000||Located at 4100 Springboro Pike. Also began as a [[w:Frigidaire|Frigidaire]] plant. Replaced by the nearby DMAX Ltd. engine plant (originally a joint venture with Isuzu) which builds the replacement engine ([[w:Duramax V8 engine|Duramax V8 engine]]). Demolished by 2003. Production of the 6.5-liter diesel V8 moved to a new AM General plant in Franklin, OH known as General Engine Products. AM General makes the engine for its own use and for GM service parts, & 3rd party customers.
|-
| ||Muncie Transmission||[[w:Muncie, Indiana|Muncie, Indiana]]||United States||Transmissions including: [[w:Getrag 282 transmission|Getrag 282/NVG T550]], Getrag 284, Muncie M17, Muncie M20/M21/M22, Muncie M62/M64, [[w:Muncie SM420 transmission|Muncie SM420 transmission]], [[w:Muncie SM465 transmission|Muncie SM465 transmission]], [[w:New Venture Gear 3500 transmission|NV3500/NV3550]], [[w:New Venture Gear 4500 transmission|NV4500]]<br />Valves, Steering gears<br />Forge||1919||2006||Located at 1200 W. Eighth St. Originally founded as Warner Gear Company in 1902. Bought by GM in 1919. Became Muncie Products Division. Closed in 1932. Reopened by Chevrolet in 1935 (Chevrolet Muncie). Moved to Detroit Diesel Allison Division in 1984 & then to Hydramatic Division in 1986. Became part of [[w:New Venture Gear|New Venture Gear]] joint venture with Chrysler in 1990. GM owned 36% while [[w:Chrysler|Chrysler]] owned 64%. GM sold its stake to [[w:DaimlerChrysler|DaimlerChrysler]] in 2002 but took back the Muncie plant. Became Manual Transmissions of Muncie. The plant closed in 2006. Demolished in 2008-09.
|-
| ||GM Near East||[[w:Alexandria|Alexandria]]|| [[w:Egypt|Egypt]]||[[w:Chevrolet|Chevrolet]] cars and trucks <br />[[w:Buick|Buick]]||1936||1958||Began CKD assembly of trucks in 1936 followed by cars in 1938. In 1951, GM Near East became the Alexandria Branch of GM Middle East. Plant was liquidated in 1958.
|-
| ||[[w:General Motors New Zealand|General Motors New Zealand]]||[[w:Petone|Petone]]||[[w:New Zealand|New Zealand]]||[[w:Chevrolet|Chevrolet]] including [[w:Chevrolet Deluxe|Chevrolet Deluxe]], [[w:Chevrolet 210|Chevrolet 210]], [[w:Chevrolet Bel Air|Chevrolet Bel Air]], [[w:Chevrolet Impala|Chevrolet Impala]], [[w:Chevrolet Thriftmaster|Chevrolet Thriftmaster]]<br />[[w:Pontiac (automobile)|Pontiac]] including [[w:Pontiac Laurentian|Pontiac Laurentian]], [[w:Pontiac Parisienne#New Zealand|Pontiac Parisienne]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Buick|Buick]]<br />[[w:Opel Kadett#Kadett I (1936–1940)|Opel Kadett]]<br />[[w:Vauxhall Motors|Vauxhall]] including [[w:Vauxhall Cresta|Vauxhall Cresta]] (E, PA, PC), [[w:Vauxhall Wyvern|Vauxhall Wyvern]], [[w:Vauxhall Velox|Vauxhall Velox]], [[w:Vauxhall Viva|Vauxhall Viva]], [[w:Vauxhall Victor|Vauxhall Victor]]<br />[[w:Bedford Vehicles|Bedford]] including [[w:Bedford CF|Bedford CF]], [[w:Bedford TK|Bedford TK]]<br />[[w:Holden|Holden]] including [[w:Holden FE|Holden FE]], [[w:Holden FB|Holden FB]], [[w:Holden EJ|Holden EJ]], [[w:Holden EH|Holden EH]], [[w:Holden HD|Holden HD]]||1926||1984||Also made [[w:Frigidaire|Frigidaire]] refrigerators, freezers, washers, and dryers (Frigidaire was owned by GM from 1919 to 1979). <br />
Axle tube assemblies, oil filters, and spark plugs.
|-
|Z1-Z9 [https://forums.justcommodores.com.au/threads/commodore-vin-decoder-vb-to-zb.279978/]||[[w:General Motors New Zealand|General Motors New Zealand]]||[[w:Trentham, New Zealand|Trentham]]||[[w:New Zealand|New Zealand]]||[[w:Vauxhall Motors|Vauxhall]] including [[w:Vauxhall Chevette|Vauxhall Chevette]], [[w:Vauxhall Cresta#Cresta PC|Vauxhall Cresta]], [[w:Vauxhall Viva|Vauxhall Viva]]<br />[[w:Holden|Holden]] including [[w:Holden HQ|Holden HQ]], [[w:Statesman (automobile)#HQ|Holden Statesman HQ]], [[w:Holden HJ|Holden HJ]], [[w:Statesman (automobile)#HJ|Holden Statesman HJ]], [[w:Holden HX|Holden HX]], [[w:Statesman (automobile)#HX|Holden Statesman HX]], [[w:Holden HZ|Holden HZ]], [[w:Statesman (automobile)#HZ|Holden Statesman HZ]], [[w:Statesman (automobile)#WB|Holden Statesman WB]],<br /> [[w:Holden Commodore (VB)|Holden Commodore (VB)]],<br /> [[w:Holden Commodore (VC)|Holden Commodore (VC)]],<br /> [[w:Holden Commodore (VH)|Holden Commodore (VH)]],<br /> [[w:Holden Commodore (VK)|Holden Commodore (VK)]],<br /> [[w:Holden Commodore (VL)|Holden Commodore (VL)]],<br /> [[w:Holden Commodore (VN)|Holden Commodore (VN)]], [[w:Holden Royale|Holden Commodore Royale (VH/VK/VL)]] <br />[[w:Holden Torana|Holden Torana]]<br /> [[w:Isuzu Faster#Second generation (1980–1988)|Holden Rodeo]]<br />[[w:Isuzu Gemini#In other markets|Isuzu Gemini/Holden Gemini]]<br />[[w:Holden Camira|Holden Camira]]<br />[[w:Holden Barina#First generation (MB, ML; 1985–1988)|Holden Barina]]<br />[[w:Suzuki Cultus#First generation (1983)|Suzuki Swift]]<br />[[w:Daihatsu Charade#First generation (G10, G20; 1977–1983)|Daihatsu Charade (under contract for Daihatsu)]]<br />[[w:Datsun Truck#Nissan D21|Nissan Navara pickup (under contract for Nissan)]]||1967||1990||
|-
| ||GM Nordiska AB||Södra Hammarbyhamnen, [[w:Stockholm|Stockholm]]||[[w:Sweden|Sweden]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Opel|Opel]]<br />[[w:Vauxhall Motors|Vauxhall]]<br />[[w:Bedford Vehicles|Bedford]] trucks||1928||1957|| Converted into a warehouse in 1957.
|-
| ||Northway Motor Plant||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||Northway engines||1905||Burned down 1987||Located at 4584 Maybury Grand Ave. (Jeffries Expressway Service Drive) and W. Hancock St. Around 4646 Lawton St. (rear side) is the remnants of a water tower and railroad spur. Northway Motor and Manufacturing Company was acquired by GM in 1909, becoming Northway Motor and Manufacturing Division. Northway had made engines for both GM brands (in particular [[w:Oakland Motor Car Company|Oakland]], [[w:Oldsmobile|Oldsmobile]], [[w:Sheridan (automobile)|Sheridan]], [[w:Scripps-Booth|Scripps-Booth]], [[w:Samson Tractor|Samson Tractor]], and [[w:GMC (automobile)|GMC]]) and other automakers. Became part of GM Intercompany Parts Group. In 1920, Northway moved to a new plant on Holbrook Ave. in Detroit. This address was subsequently been used by [[w:Frigidaire|Frigidaire]] in the 1920's and 1930's and then by Refrigeration Service Inc. in the 1950's. At some point, the building was sold to Motor City Wiping Cloth Co. but they abandoned the property in 1983, leaving behind massive bales of rags and cloths. The building burned down in a horrific fire in 1987 after homeless people in the building were burning fires there to keep warm. The fire killed three firefighters and injured ten others. The fire even spread to the nearby Continental Paper warehouse.
|-
| ||Northway Motor Plant/General Motors Truck Co. Plant No. 7/ <br>Chevrolet Gear and Axle Div.||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||Northway engines, Axles, parts for past model Chevrolets||1920||1994||Located at 1806 Holbrook Ave. Northway Motor and Manufacturing Company was acquired by GM in 1909, becoming Northway Motor and Manufacturing Division. Northway had made engines for both GM brands (in particular [[w:Oakland Motor Car Company|Oakland]], [[w:Oldsmobile|Oldsmobile]], [[w:Sheridan (automobile)|Sheridan]], [[w:Scripps-Booth|Scripps-Booth]], [[w:Samson Tractor|Samson Tractor]], and [[w:GMC (automobile)|GMC]]) and other automakers. Became part of GM Central Products Division. In 1920, Northway moved here from their original plant on Maybury Grand Ave. and primarily supplied engines to GMC. In 1925, became part of Yellow Truck & Coach Manufacturing Company as part of the merger of Yellow Cab Manufacturing Company and General Motors Truck Corp., the manufacturer of GMC trucks. In 1926, Northway Motor Division was liquidated and its Detroit plant was sold to Chevrolet on March 31 to become the Chevrolet Gear and Axle Div. Part of the engine tooling machinery was transferred to the Yellow Sleeve-Valve Engine Works at East Moline, IL. Some Northway engines were still used by some GMC trucks (K-series) through 1930. Was part of the Detroit complex sold to [[w:American Axle|American Axle]] in 1994. Now part of American Axle's Advanced Technology Development Center.
|-
|N<br />(1953-1964 [[w:Chevrolet|Chevrolet]]) and 1965-1987<br /><br />9 <br />(1928-1952 [[w:Chevrolet|Chevrolet]])||[[w:Norwood Assembly|Norwood Assembly]]||[[w:Norwood, Ohio|Norwood, Ohio]]||United States||[[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1961)<br />[[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-1961)<br />[[w:Chevrolet Camaro|Chevrolet Camaro]] (1967-1987)<br />[[w:Chevrolet Caprice|Chevrolet Caprice]] (1966)<br />[[w:Chevrolet El Camino#First generation (1959–1960)|Chevrolet El Camino]] (1959-1960)<br />[[w:Chevrolet Impala|Chevrolet Impala]]<br /> (1958-1961, 1965-1966)<br />[[w:Chevrolet Nomad|Chevrolet Nomad]] (1955-1957)<br />[[w:Chevrolet Nova|Chevrolet Chevy II/Nova]]<br> (1962-1966, 1972)<br />[[w:Pontiac Firebird|Pontiac Firebird]] (1969-1987)<br />[[w:Buick Apollo|Buick Apollo]] (1973)||1923||1987||Located at 5025 Carthage Ave. First vehicle produced was a Chevrolet Superior on August 13, 1923. Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. Norwood Assembly joined the GM Assembly Division in 1971. Closed August 26, 1987. Last vehicle produced was a Chevy Camaro IROC-Z. Demolished. Now Linden Pointe on the Lateral, a mixed use retail and office space. <br />[[w:Chevrolet Superior|Chevrolet Superior]]<br />[[w:Chevrolet Series AA Capitol|Chevrolet Series AA Capitol]]<br />[[w:Chevrolet Series AB National|Chevrolet Series AB National]]<br />[[w:Chevrolet Series AC International|Chevrolet Series AC International]]<br />[[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]]<br />[[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]]<br />[[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]]<br />[[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]]<br />[[w:Chevrolet Master|Chevrolet Master]]<br />[[w:Chevrolet Deluxe|Chevrolet Deluxe]]<br />[[w:Chevrolet Stylemaster|Chevrolet Stylemaster]]<br />[[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]]<br />[[w:Chevrolet 150|Chevrolet 150]] (1953-1957)<br />[[w:Chevrolet 210|Chevrolet 210]] (1953-1957)<br />[[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958)<br />[[w:Chevrolet AK Series|Chevrolet AK Series]]<br />[[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1947-1955)<br />[[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959)<br />[[w:Chevrolet C/K (first generation)|Chevrolet C/K]] (1960-1966)<br />[[w:Chevrolet Suburban|Chevrolet Suburban]] (1952)
|-
|Z||[[w:NUMMI|NUMMI]]||[[w:Fremont, California|Fremont, California]]||United States||[[w:Chevrolet Chevy II / Nova#Fifth generation (1985–1988)|Chevrolet Nova]] (1985-1988)<br />[[w:Geo Prizm|Geo Prizm]] (1989-1997)<br />[[w:Chevrolet Prizm|Chevrolet Prizm]] (1998-2002)<br />[[w:Pontiac Vibe|Pontiac Vibe]] (2003-2010)<br />[[w:Toyota Corolla (E80)|Toyota Corolla FX]] (1987-1988)<br />[[w:Toyota Corolla|Toyota Corolla]] (1989-2010) (E90/E100/E110/E130/E140)<br />[[w:Toyota Hilux#Fifth generation (N80, N90, N100, N110; 1988)|Toyota Pickup]] (1992-1995)<br />[[w:Toyota Tacoma|Toyota Tacoma]] (1995-2010)<br />[[w:Toyota Voltz|Toyota Voltz]] (Japan: '02-'04)||1984||2009||Located at 45500 Fremont Blvd.<br /> Operated from 1963-1982 as a GM factory.<br />From 1984-2010, operated as [[w:NUMMI|New United Motor Manufacturing Inc. (NUMMI)]], which was a 50/50 joint venture between GM and [[w:Toyota|Toyota]] and assembled both GM and Toyota vehicles. First vehicle produced was a yellow Chevrolet Nova in December 1984. First Toyota produced was a Corolla FX16 3-d hatchback in September 1986. This was followed by the Corolla FX 3-d hatchback in February 1987. Nova and Corolla FX production ended in September 1988. That same month, NUMMI began producing the Toyota Corolla 4-door sedan. Geo Prizm production began in November 1988. In August 1991, Toyota pickup production began with the Regular Cab 4x2. The 4x4 followed in February 1992 ant the Xtracab followed in March 1993. Tacoma pickup production began in January 1995, replacing the previous unnamed Toyota pickup model. Prizm production ended in December 2001. In January 2002, Pontiac Vibe production began. In June 2002, production began of the Toyota Voltz, a rhd version of the Pontiac Vibe built for export to Japan. In September 2004, the 2nd generation Tacoma pickup began production. Pontiac Vibe production ended on August 17, 2009, ending GM production at Fremont. Tacoma pickup production ended March 26, 2010. The last vehicle built at NUMMI, a red Corolla sedan, was built April 1, 2010. NUMMI produced 7.7 million vehicles. <br />Sold to [[w:Tesla Motors|Tesla, Inc.]] in May 2010.<ref>{{cite news|author=Sam Abuelsamid|title=Tesla to buy old resources from GM, Toyota for NUMMI plant|url=http://www.autoblog.com/2010/08/22/tesla-to-buy-old-resources-from-gm-toyota/|access-date=20 August 2015|publisher=Autoblog.com|date=August 22, 2010}}</ref> Tesla only bought 210 of the total 370 acres owned by NUMMI. Tesla also bought $15 million worth of equipment and parts from the former NUMMI plant. Tesla took possession of the plant in October 2010. Tesla began production at Fremont in June 2012 with the Model S.
|-
|O <br />(1953-1963 [[w:Chevrolet|Chevrolet]])<br /><br />6 <br />(1928-1952 [[w:Chevrolet|Chevrolet]])<br /><br />C ([[w:GMC (automobile)|GMC]])||[[w:Oakland Assembly|Oakland Assembly]] (Chevrolet)||[[w:Oakland, California|Oakland, California]]||United States||[[w:Chevrolet Series 490|Chevrolet Series 490]]<br />[[w:Chevrolet Superior|Chevrolet Superior]]<br />[[w:Chevrolet Series AA Capitol|Chevrolet Series AA Capitol]]<br />[[w:Chevrolet Series AB National|Chevrolet Series AB National]]<br />[[w:Chevrolet Series AC International|Chevrolet Series AC International]]<br />[[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]]<br />[[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]]<br />[[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]]<br />[[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]]<br />[[w:Chevrolet Master|Chevrolet Master]]<br />[[w:Chevrolet Deluxe|Chevrolet Deluxe]]<br />[[w:Chevrolet Stylemaster|Chevrolet Stylemaster]]<br />[[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]]<br />[[w:Chevrolet 150|Chevrolet 150]] (1953-1957)<br />[[w:Chevrolet 210|Chevrolet 210]] (1953-1957)<br />[[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1963)<br />[[w:Chevrolet Corvair|Chevrolet Corvair]] (1960-1963)<br />[[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958)<br />[[w:Chevrolet Impala|Chevrolet Impala]] (1958-1963)<br />[[w:Chevrolet Nova|Chevrolet Chevy II/Nova]] (1962-1963)<br />[[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1947-1955)<br />[[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959)<br />[[w:Chevrolet C/K (first generation)|Chevrolet C/K]] (1960-1963)<br />[[w:GMC New Design|GMC New Design]] (1952-1954)<br />[[w:GMC Blue Chip|GMC Blue Chip]] (1955-1959)<br />[[w:Chevrolet C/K (first generation)|GMC C/K]] (1960-1963)<br />[[w:Chevrolet Suburban|Chevrolet Suburban]] (1952-1953, 1955, 1957, 1959, 1963)<br />[[w:GMC Suburban|GMC Suburban]]||1917||1963||Located at 73rd Ave. & Foothill Blvd. Built by Chevrolet before it became part of GM. Began building GMC trucks in December 1937 for the 1938 model year. Replaced by Fremont Assembly plant. Demolished. Site became Eastmont Mall which is now [[w:Eastmont Town Center|Eastmont Town Center]].
|-
| ||[[w:Oakland Motor Car Company|Oakland Motor Car Co.]]||[[w:Pontiac, Michigan|Pontiac, Michigan]]||United States||Oakland automobiles <br /> Pontiac 1926-1927||1909||1931||Located at 196 Oakland Ave. (now Cesar E Chavez Ave.). Also bordered by Baldwin Ave. and W. Howard St. GM bought Oakland Motor Car Co. in 1909. Oakland introduced sister brand Pontiac in 1926. Pontiac replaced Oakland for 1932. Early Pontiacs were built here before production moved to the new factory stretching from Baldwin Ave. east to Joslyn Ave. a little farther north. This was Pontiac's first headquarters until 1970 when Pontiac headquarters moved north to the Pontiac Assembly complex on Joslyn Ave. and <br> E. Montcalm St. Some of the buildings are still standing.
|-
| ||[[w:es:General Motors OBB|GM-OBB]]||[[w:Quito, Ecuador|Quito]]||[[w:Ecuador|Ecuador]]||[[w:Isuzu D-Max#Second generation (RT; 2011)|Chevrolet D-Max 2011]]||1980 (1st GM product)||2024||OBB (Ómnibus BB Transportes) was founded in 1975. GM bought 22% of OBB in 1981 & became majority shareholder in 1988. GM announced in April 2024 that GM-OBB will shut down at the end of August 2024.<ref>{{Cite web|url=https://gmauthority.com/blog/2024/04/gm-shutting-down-manufacturing-operations-in-colombia-and-ecuador/|title = GM Shutting Down Manufacturing Operations In Colombia And Ecuador|author=Deivis Centeno|publisher=GMAuthority.com|date = April 29, 2024}}</ref><ref>{{Cite web|url=https://www.americaeconomia.com/en/business-industries/general-motors-announces-end-car-manufacturing-operations-colombia-and-ecuador/|title = General Motors announces the end of car manufacturing operations in Colombia and Ecuador|publisher=AmericaEconomia.com|date = April 26, 2024}}</ref>
Past models: [[w:Chevrolet Aveo (T200)|Chevrolet Aveo]]<br />[[w:Chevrolet K5 Blazer|Chevrolet K5 Blazer]]<br />[[w:Opel Corsa#Corsa B (S93; 1993)|Chevrolet Corsa]], [[w:Opel Corsa#Corsa C (X01; 2000)|Chevrolet Corsa Evolution]]<br />[[w:Suzuki Cultus Crescent|Chevrolet Esteem]], [[w:Suzuki Cultus#Second generation (1988)|Chevrolet Forsa]]<br />[[w:Isuzu Gemini#Second generation (1985)|Chevrolet Gemini]]<br />[[w:Isuzu Faster#TF|Chevrolet LUV]], [[w:Isuzu D-Max#First generation (RA, RC; 2002)|Chevrolet LUV D-Max]]<br />[[w:Isuzu MU#First generation (UCS55/UCS69GW; 1989–1998)|Chevrolet Rodeo]], [[w:Isuzu Trooper#First generation (1981–1991)|Chevrolet Trooper]]<br />[[w:Chevrolet Sail#Second generation (2010)|Chevrolet Sail (Gen 2)]], [[w:Chevrolet Sail#Third generation (2014)|Chevrolet Sail (Gen 3)]]<br />[[w:Chevrolet C/K (third generation)|Chevrolet Silverado]]<br />[[w:Chevrolet Tracker (Americas)|Chevrolet Vitara]], [[w:Chevrolet Tracker (Americas)#Second generation|Chevrolet Grand Vitara]], [[w:Suzuki Vitara#Third generation (JT; 2005)|Chevrolet Grand Vitara SZ]]
|-
|6||[[w:Oklahoma City Assembly|Oklahoma City Assembly]]||[[w:Oklahoma City, Oklahoma|Oklahoma City, Oklahoma]]||United States||[[w:Chevrolet Trailblazer (SUV)#EXT|Chevrolet TrailBlazer EXT]] (2002-2006)<br />[[w:GMC Envoy XL#Second generation (2002–2009)|GMC Envoy XL]] (2002-2006)<br />[[w:GMC Envoy#Envoy XUV|GMC Envoy XUV]] (2004-2005)<br />[[w:Isuzu Ascender|Isuzu Ascender extended length]] (2003-2006)||1979||2006||Located at 7447 SE 74th Street. <br /> Initially produced front wheel drive [[w:GM X platform (FWD)|X platform]] vehicles ([[w:Chevrolet Citation|Chevrolet Citation]] (1980-1983) & [[w:Pontiac Phoenix#Second generation (1980–1984)|Pontiac Phoenix]] (1980-1982)) followed by front wheel drive [[w:General Motors A platform (FWD)|A platform]] vehicles ([[w:Chevrolet Celebrity|Chevrolet Celebrity]] (1982-1989), [[w:Pontiac 6000|Pontiac 6000]] (1988-1991), [[w:Oldsmobile Cutlass Ciera|Oldsmobile Cutlass Ciera]] (1989-1996), [[w:Buick Century#Fifth generation (1982–1996)|Buick Century]] (1982-1996)) as well as [[w:Chevrolet Malibu#Fifth generation (1997)|Chevrolet Malibu]] (1997-2001) & [[w:Oldsmobile Cutlass#Sixth generation (midsize) 1997–1999|Oldsmobile Cutlass]] (1997-1999). Converted to build body-on-frame SUVs for 2002 model year. Damaged by a tornado on May 8, 2003, but the company repaired the damage and returned the plant to operation just 53 days later. Idled February 20, 2006. Last vehicle produced was a white 2006 Chevrolet TrailBlazer EXT. Plant was taken over by Oklahoma City in 2008 and leased to neighbor Tinker Air Force Base. Now known as Building 9001 Tinker Aerospace Complex. Used for maintaining jet engines and for software engineering.
|-
|2||[[w:Opel|Opel]] Werk Bochum||[[w:Bochum|Bochum]], [[w:North Rhine-Westphalia|North Rhine-Westphalia]]||[[w:Germany|Germany]]||[[w:Opel Olympia#Name revival: Opel Olympia (1967–1970)|Opel Olympia]] A<br />[[w:Opel Ascona|Opel Ascona]] A, B<br />[[w:Opel Kadett|Opel Kadett]] A, B, C, D, & E<br />[[w:Opel Astra|Opel Astra]] F, G, & H<br />[[w:Opel Astra#H|Opel Astra]] H Classic (5-door, Caravan)<br />[[w:Opel GT#GT (1968–1973)|Opel GT]]<br />[[w:Opel Manta|Opel Manta]] A, B<br />[[w:Opel Zafira#Zafira Tourer C (2011–2019)|Opel/Vauxhall Zafira Tourer]] C<br />[[w:Opel Zafira#Zafira B (2005–2014)|Opel/Vauxhall Zafira]] B/Zafira Family<br />[[w:Opel Zafira#Zafira A (1999–2006)|Opel/Vauxhall Zafira]] A<br />[[w:Vauxhall Astra|Vauxhall Astra]]<br />Engines<br />Transmissions<br />Axles||1962||2014|| Plant I was the vehicle assembly plant. First car off the line was a Kadett A. Plant II was the engine, transmission, & axle plant. Engine production ended in 2004. Axle production ended in 2011. Transmission production ended Oct. 7, 2013. Vehicle production ended December 5, 2014.
|-
| ||[[w:Opel|Opel]] [[w:Opelwerk Brandenburg|Werk Brandenburg]]||[[w:Brandenburg an der Havel|Brandenburg an der Havel]], [[w:Brandenburg|Brandenburg]]||[[w:Germany|Germany]]||[[w:Opel Blitz|Opel Blitz]]<br />||1935||1944|| Bombed and heavily damaged by the Allies on Aug. 6, 1944. Factory was dismantled and shipped to the Soviet Union after the war ended as reparations.
|-
|6||[[w:Opel Eisenach|Opel Eisenach GmbH]]||[[w:Eisenach|Eisenach]], [[w:Thuringia|Thuringia]]||[[w:Germany|Germany]]||[[w:Opel Corsa#Corsa E (X15; 2014)|Opel/Vauxhall Corsa]] E (3-door)<br />[[w:Opel Corsa#Corsa D (S07; 2006)|Opel/Vauxhall Corsa]] D (3-door)<br />[[w:Opel Corsa#Corsa C (X01; 2000)|Opel/Vauxhall Corsa]] C (3-door)<br />[[w:Opel Corsa#Corsa B (S93; 1993)|Opel/Vauxhall Corsa]] B <br /> [[w:Opel Adam|Opel/Vauxhall Adam]]<br />[[w:Opel Astra#F|Opel Astra F]] (1992-1995)<br />[[w:Opel Astra#G|Opel Astra G]] (1998-2003)||1992||2017|| [[w:Adam Opel AG|Opel plant]]. Began production with Astra F in 1992. Began Corsa production in 1993 with Corsa B. Added production of the Adam in 2013. Sold to [[w:PSA Group|PSA Group]] in 2017. Part of [[w:Stellantis|Stellantis]] since 2021.
|-
| ||[[w:Adam Opel AG|Opel]] Werk Kaiserslautern||[[w:Kaiserslautern|Kaiserslautern]], [[w:Rhineland-Palatinate|Rhineland-Palatinate]]||[[w:Germany|Germany]]||Components<br />Engines:<br /> Four-cylinder turbo diesel engines:<br /> [[w:Fiat JTD engine#2.0 Multijet II|2.0 CDTI Family B turbodiesel 4-cyl.]]<br />[[w:Fiat JTD engine#1.9|1.9 CDTI turbodiesel 4-cyl.]]<br /> [[w:GM Ecotec Diesel (1997)|2.0/2.2 Ecotec direct injection turbodiesel]]
Four-cylinder gasoline engines:<br /> [[w:GM Ecotec engine|GM Ecotec engine]] 2.2<br />[[w:GM Ecotec engine#2.0|GM Ecotec engine]] 2.0 supercharged (LSJ) <br />[[w:GM Family II engine|GM Family II engine]] 1.6, 1.8, 2.0 <br />
|1966||2017||[[w:Adam Opel AG|Opel plant]]. Sold to [[w:PSA Group|PSA Group]] in 2017. Part of [[w:Stellantis|Stellantis]] since 2021.
|-
|1<br /><br />R (Catera)<br /><br />5 (Pre-1976)||[[w:Adam Opel AG|Opel]] Werk Rüsselsheim||[[w:Rüsselsheim|Rüsselsheim]], [[w:Hesse|Hesse]]||[[w:Germany|Germany]]||[[w:Opel Insignia|Opel/Vauxhall Insignia]] (sedan, hatchback, Sports Tourer, Country Tourer)<br />[[w:Buick Regal#Fifth generation (2008)|Buick Regal]] (2011MY from March 1, 2010-March 25, 2011)<br />[[w:Buick Regal#Sixth generation (2018)|Buick Regal]] (2018-2020)<br />[[w:Holden Insignia#First generation (G09; 2008)|Holden Insignia VXR (GA)]] (2015-2017)<br />[[w:Holden Commodore ZB|Holden Commodore (ZB)]] (2018-2020)<br />[[w:Opel Astra#J|Opel/Vauxhall Astra J]] (5-door)<br />[[w:Opel Zafira|Opel/Vauxhall Zafira Tourer C]]<br />[[w:Opel Vectra|Opel/Vauxhall Vectra]]<br />[[w:Opel Vectra#Vectra B (1995–2002)|Holden Vectra (JR)]]<br />[[w:Opel Vectra#Vectra C (2002–2010)|Holden Vectra (ZC)]]<br />[[w:Opel Signum|Opel/Vauxhall Signum]]<br />[[w:Opel Omega|Opel/Vauxhall Omega]]<br />[[w:Cadillac Catera|Cadillac Catera]] (1997-2001)<br />[[w:Opel Senator|Opel/Vauxhall Senator & Vauxhall Royale]]<br />[[w:Opel Calibra|Opel/Vauxhall/Holden Calibra (YE)]]<br />[[w:Opel Monza|Opel Monza/Vauxhall Royale Coupe]]<br />[[w:Opel Commodore|Opel Commodore/Vauxhall Viceroy]]<br />[[w:Opel Kapitan|Opel Kapitan]]<br />[[w:Opel Admiral|Opel Admiral]]<br />[[w:Opel Diplomat|Opel Diplomat]]<br />[[w:Opel Kadett#Kadett I (1936–1940)|Opel Kadett]]<br />[[w:Opel Olympia|Opel Olympia]]<br />[[w:Opel Blitz|Opel Blitz]]<br />axles<br />components<br />[[w:GM F40 transmission|GM F40 transmission]]<br />Frigidaire refrigerators (1937-c.1940 & 1946-1959)||1899 (1st production car built)<br><br> 1929 (part of GM)||2017 (left GM)<br><br>2020 (production for GM ended)|| [[w:Adam Opel AG|Opel plant]]. GM bought 80% of Opel in March 1929 and bought the rest in 1931, making Opel a full GM subsidiary. Russelsheim previously make engines. Sold to [[w:PSA Group|PSA Group]] in 2017. Rüsselsheim continued to supply the Buick Regal & the Holden Commodore ZB to GM through 2020. Part of [[w:Stellantis|Stellantis]] since 2021.
|-
|S||[[w:Opel Szentgotthárd|Opel Szentgotthárd]]||[[w:Szentgotthárd|Szentgotthárd]]||[[w:Hungary|Hungary]]||[[w:Opel Astra|Opel Astra]] F 1992-1997, 80,835 units<br />[[w:Opel Vectra#Vectra B (1995–2002)|Opel Vectra]] B1 and B2 1998-1999, 4,404 units<br />Opel Engines including:<br /> [[w:GM Family 1 engine| Family 1 engine]] DOHC versions 1.4, 1.6, 1.8<br />[[w:GM small gasoline engine|GM Small Gasoline Engine]]<br />[[w:GM Medium Gasoline Engine|GM Medium Gasoline Engine]]<br />[[w:GM Medium Diesel engine|GM Medium Diesel engine]]<br />[[w:VTi transmission|"VTi" CVT transmission]]<br /> [[w:Allison Transmission|Allison]] 3000, 4000, & Torqmatic Series automatic transmissions||1992||2017 (left GM)<br><br>2019 (production for GM ended)|| [[w:Adam Opel AG|Opel plant]]. Originally a joint venture between GM & Hungarian truck and engine maker Raba. GM bought out Raba & became 100% owner in 1995. Production of Allison Transmissions began in 2000. Sold to [[w:PSA Group|PSA Group]] in 2017. Szentgotthárd continued to supply the [[w:GM Medium Diesel engine|1.6L LH7 turbodiesel I4]] to GM through 2019. Part of [[w:Stellantis|Stellantis]] since 2021.
|-
| ||[[w:Opel Wien|Opel Wien GmbH]]||[[w:Aspern|Aspern]]||[[w:Austria|Austria]]||[[w:Family 0 engine|Family 0]] engines (1.0, 1.2, 1.4, 1.4 Turbo)<br />Transmissions (Easytronic automated manual, F15/F17 five-speed manual and M20/M32 six-speed manual)||1982||2017|| [[w:Adam Opel AG|Opel plant]]. Sold to [[w:PSA Group|PSA Group]] in 2017. Part of [[w:Stellantis|Stellantis]] since 2021. Closed by Stellantis in 2024. <br /> Past engines: [[w:GM Family 1 engine|GM Family 1 engine]] SOHC versions.
|-
| ||Osaka Assembly (Built on land leased from [[w:Sojitz|Nihon Menka]])<ref>{{cite book|url=https://books.google.com/books?id=TY4l3qWIIh4C&q=general+motors+assembly+plant+location+osaka+japan&pg=PA70|title=American Multinationals and Japan: The Political Economy of Japanese Capital Controls, 1899-1980|author=Mark Mason|date=14 October 1992|publisher=Harvard Univ Asia Center|isbn=9780674026308|via=Google Books}}</ref>||[[w:Osaka|Osaka]]||[[w:Japan|Japan]]||Chevrolet, Pontiac, Oldsmobile, Buick from CKD kits||1927||1941||Factory was seized by [[w:Imperial Japanese|Imperial Japanese]] Government, see also [[w:General Motors Japan|General Motors Japan]]<ref>{{cite web|url=http://www.autonews.com/article/20080914/ANA03/809150388/gm-had-early-start-in-japan-but-was-hobbled-by-nationalism|title=GM early history in Japan|author=Hans Greimel|publisher=Autonews.com|date=September 14, 2008}}</ref><ref>{{cite web|url=https://history.gmheritagecenter.com/wiki/index.php/File:1926-6-1.jpg|title=Image of Osaka facility}}</ref>
|-
| ||[[w:Oshawa Truck Assembly|Oshawa Battery Plant]]||[[w:Oshawa, Ontario|Oshawa, Ontario]]||[[w:Canada|Canada]] ||Batteries||19?||1990's?||Was part of the overall Oshawa Assembly complex (Autoplex) on Park Road South. Referred to by Delco Remy as Plant 41. This operation was closed.
|-
|9 (1917-Mid 1923 Chevrolet)||Oshawa North||[[w:Oshawa, Ontario|Oshawa, Ontario]]||[[w:Canada|Canada]]||<br />||1907||1996||The original Oshawa (North) plant opened in 1907 as a McLaughlin Motor Car Co. plant. It produced McLaughlin-Buick cars by fitting Buick engines and chassis to McLaughlin bodies. It also built Chevrolets for Chevrolet Motor Co. beginning in 1915 as the Chevrolet Motor Car Co. of Canada. McLaughlin Motor Car Co. and the Chevrolet Motor Car Co. of Canada were bought out by GM in 1918 becoming GM of Canada. GM of Canada continued to make Chevrolets and McLaughlin-Buicks (which became simply Buick after WWII) and also assembled [[w:Oakland Motor Car Company|Oakland]] 1921-1930, [[w:Oldsmobile|Oldsmobile]] 1920-1942, 1946-1969, [[w:Marquette (automobile)#Buick brand|Marquette]] 1929-1930, [[w:Buick|Buick]] 1908-1942, 1951-1971, [[w:LaSalle (automobile)|LaSalle]] 1927-1930, 1932-1935, [[w:Cadillac|Cadillac]] 1923-1936. [[w:Pontiac (automobile)|Pontiac]] production in Oshawa began shortly after US production in 1926. From the 1950's into the 1980's, Canadian market full-size Pontiacs were built on Chevrolet chassis and were powered by Chevrolet engines and had model names different from US-market Pontiacs (Pathfinder, Strato Chief, Laurentian, and Parisienne). Car production shifted to the current Oshawa complex Car Assembly plant (South plant; also known as Autoplex beginning in the 1980's) which opened in 1953. [[w:Chevrolet|Chevrolet]] trucks were made beginning in 1919 and [[w:GMC (automobile)|GMC]] trucks were made beginning in 1923 before truck production shifted to the Oshawa Truck plant located next to the South car plant in 1965. Oshawa also produced 65 [[w:Samson Tractor#Trucks and a car|Samson trucks]] from 1920-1921. Oshawa also produced military vehicles and equipment during both WWI and WWII. Also, Maple Leaf trucks.
Operations were gradually moved from the older North plant to the newer South plant. The North plant, by then known as the GM North Fabrication plant making metal and plastic parts, was sold to Peregrine, Inc. in 1996. It was then sold to ACSYS Technologies Inc. in 2001. Both companies continued to operate as an auto parts manufacturer supplying GM. ACSYS closed the plant in 2004. The North plant ended all operations in 2005 and the last of it was demolished by 2006. Much of the site of the North plant at 155 Division Street (Ritson Road North is on the other side) is now a Costco.
|-
|1||[[w:Oshawa Truck Assembly|Oshawa Truck Assembly]]||[[w:Oshawa, Ontario|Oshawa, Ontario]]||[[w:Canada|Canada]]||[[w:Chevrolet Silverado|Chevrolet Silverado]] (1999-2009)<br />[[w:GMC Sierra|GMC Sierra]] (1988-2009)||1965||2009||Part of the overall Oshawa Assembly complex (Autoplex) on Park Road South. Truck plant was at 1100 Park Road South at the southern end of the Autoplex. Production ended May 14, 2009. Over 10 million vehicles were produced. Now the GM Canadian Technical Centre's (CTC) McLaughlin Advanced Technology Track. <br />Past models: [[w:Chevrolet C/K|Chevrolet C/K]] (-1986, 1988-1998), [[w:GMC C/K|GMC C/K]] (-1986)
|-
| ||[[w:Delphi Automotive Systems|Packard Electric]]<br /> Main complex||[[w:Warren, Ohio|Warren, Ohio]]||United States||Automotive wiring<br>Electric Motors||1932||1999||Packard Electric was acquired by GM in 1932. Located between Griswold St NE on the north side, Dana St NE on the south side, Paige Ave NE on the east side, and N. Park Ave on the west side. Some of the earliest Packard cars were built here before Packard Automobile split from Packard Electric in 1902. Plant 4, which opened in 1938, was originally used by GM's Sunlight Electrical Division, which made electric motors. GM had acquired the former Sunlight Electrical Manufacturing Co. in March 1933. On July 1, 1943, Sunlight Electrical Division merged into GM's Packard Electric Division. Sunlight motors were still made in Plant 4. Became part of GM's Delphi Automotive Systems subsidiary in 1995 as Delphi Packard Electric Systems. Spun off with Delphi in 1999. Closed in 2006.
|-
| ||[[w:Delphi Automotive Systems|Packard Electric]]<br /> Plant# 41||[[w:Warren, Ohio|Warren, Ohio]]||United States||Automotive wiring||1947||1998||Packard Electric was acquired by GM in 1932. Located at 1554 Thomas Rd SE. Became part of GM's Delphi Automotive Systems subsidiary in 1995 as Delphi Packard Electric Systems. Closed in 1998. Sold in 2004 to Wetzel, Inc. Sold to Berk Enterprise, Inc. in 2009.
|-
| ||[[w:Delphi Automotive Systems|Packard Electric]]<br /> North River Road complex||[[w:Bazetta Township, Ohio|Bazetta Township, Ohio]] and [[w:Howland Township, Trumbull County, Ohio|Howland Township, Ohio]]||United States||Automotive wiring||1955||1999||Packard Electric was acquired by GM in 1932. Located on North River Road and Larchmont Avenue NE. The plant is in Bazetta Township and extends across the border into Howland Township. The majority is in Bazetta Township. Became part of GM's Delphi Automotive Systems subsidiary in 1995 as Delphi Packard Electric Systems. Spun off with Delphi in 1999. Parts of the site have been closed and demolished and/or sold but Delphi successor Aptiv still operates part of the site at 1265 North River Road.
|-
| ||[[w:Delphi Automotive Systems|Packard Electric]]<br /> Brookhaven Plant||[[w:Brookhaven, Mississippi|Brookhaven, Mississippi]]||United States||Automotive wiring||1977||1999||Packard Electric was acquired by GM in 1932. Located at 925 Industrial Park Road NE. Became part of GM's Delphi Automotive Systems subsidiary in 1995 as Delphi Packard Electric Systems. Spun off with Delphi in 1999. Delphi successor Aptiv still operates the Brookhaven plant.
|-
| ||[[w:Delphi Automotive Systems|Packard Electric]]<br /> Clinton Plant||[[w:Clinton, Mississippi|Clinton, Mississippi]]||United States||Automotive wiring||1973||1999||Packard Electric was acquired by GM in 1932. Located at 1001 Industrial Park Dr. Became part of GM's Delphi Automotive Systems subsidiary in 1995 as Delphi Packard Electric Systems. Spun off with Delphi in 1999. One plant closed in 2006 and the second closed in 2009.
|-
| ||[[w:Delphi Automotive Systems|Packard Electric]]<br /> Mexico||[[w:Ciudad Juárez|Ciudad Juárez]], [[w:Chihuahua (state)|Chihuahua]]||[[w:Mexico|Mexico]]||Automotive wiring||1978||1999||Originally established as Conductores y Componentes Eléctricos by the Packard Electric division of GM. Became part of GM's Delphi Automotive Systems subsidiary in 1995. Spun off with Delphi in 1999. Delphi successor Aptiv still operates the Mexican plants.
|-
| ||[[w:Delphi Automotive Systems|Packard Electric]]<br /> Ireland Ltd.||[[w:Tallaght|Tallaght]]||[[w:Republic of Ireland|Ireland]]||Wire harnesses||1975||1996||Located on Airton Road. Production and export of wiring harnesses from this plant allowed GM to import fully built-up vehicles into Ireland before Ireland fully removed its restrictions on importing fully built-up vehicles. Became part of GM's Delphi Automotive Systems subsidiary in 1995. Closed in 1996.
|-
| ||GM Peninsular SA||[[w:Barcelona|Barcelona]]||[[w:Spain|Spain]]||[[w:Chevrolet|Chevrolet]] trucks||1932||1936|| Production ended due to Spanish Civil War. Liquidated around 1939.
|-
| ||GM del Peru||[[w:Lima|Lima]]||[[w:Peru|Peru]]||[[w:Chevrolet Bel Air|Chevrolet Bel Air]]<br />[[w:Chevrolet Camaro (first generation)|Chevrolet Camaro]]<br />[[w:Chevrolet Caprice|Chevrolet Caprice]]<br />[[w:Chevrolet Chevelle|Chevrolet Chevelle]]/[[w:Chevrolet Malibu|Chevrolet Malibu]]<br />[[w:Chevrolet Impala|Chevrolet Impala]]<br />[[w:Opel Kadett|Opel Kadett]]<br />[[w:Opel Rekord|Opel Rekord]]<br />[[w:Vauxhall Victor|Vauxhall Victor]]||1945||1970||
|-
| ||[[w:Pittsburgh Metal|Pittsburgh Metal]]||[[W:West Mifflin, Pennsylvania|West Mifflin, Pennsylvania]]||United States||Metal stamping||1949||2008||Located at 1451 Lebanon School Road. Originally part of [[w:Fisher Body|Fisher Body]] division. Demolished in 2011.
|-
| ||GM Polsce Sp. Zo.o.||[[w:Warsaw|Warsaw]]||[[w:Poland|Poland]]||[[w:Chevrolet|Chevrolet]] cars and trucks||1928||1930's||Was at 103 Wolska St. Closed during the Depression.
|-
|P (1939-1988)||[[w:Pontiac Assembly|Pontiac Assembly]]/Pontiac Fiero Assembly||[[w:Pontiac, Michigan|Pontiac, Michigan]]||United States||In ex-Fisher Body plant (Pontiac Fiero Assembly):<br /> [[w:Pontiac Fiero|Pontiac Fiero]] (1984-1988)<br /><br />In Main plant (Pontiac Assembly) after reopening:<br /> [[w:GM G platform (RWD)|RWD G-bodies]]:<br /> [[w:Chevrolet Monte Carlo#Fourth generation (1981–1988)|Chevrolet Monte Carlo]] (1987-1988),<br /> [[w:Oldsmobile Cutlass Supreme#Fourth generation (1978–1988)|Oldsmobile Cutlass Supreme]] (1985-1987),<br /> [[w:Oldsmobile 442|Oldsmobile 442]] (1986-1987),<br />[[w:Oldsmobile Cutlass Supreme#Fourth generation (1978–1988)|Oldsmobile Cutlass Supreme Classic]] (1988),<br /> [[w:Buick Regal#Second generation (1978)|Buick Regal]] (1985-1987)<br /><br />Also:<br /> Pontiac engines:<br /> [[w:Pontiac straight-8 engine|Pontiac straight-8 engine]]<br />[[w:Pontiac V8 engine|Pontiac V8 engine]]<br />[[w:Pontiac Trophy 4 engine|Pontiac Trophy 4 engine]]<br />[[w:Iron Duke engine|Pontiac Iron Duke/Tech IV I4 engine]]||1927||1987 (Pontiac Assembly)/1988 (Pontiac Fiero Assembly)||This was Pontiac's home plant. Property runs from Walton Blvd. on the north to E. Montcalm St. on the south with Joslyn Ave. or for certain stretches, Highwood Blvd., on the east side and Price St. or further south, Baldwin Ave. and then N. Saginaw St., on the west side. Also known as Pontiac North to distinguish from GMC's multiple plants in Pontiac, MI. Within 90 days of ground being broken, vehicles were already being produced in Pontiac's new home plant in 1927. Final Assembly was Plant 8 of Pontiac's Assembly complex in Pontiac, Michigan. On March 14, 1962, Pontiac Assembly built the 75 millionth GM vehicle built in the US, a white 1962 Bonneville convertible. Idled in 1982 but reopened in January 1985 with bodies supplied by Flint Body Assembly. Closed in December 1987. Last vehicle built was a Buick Regal Grand National. Demolished in 1997. GM still has the Pontiac Redistribution Center on the northeast portion of this property at 1251 Joslyn Road at the intersection with E. Columbia Ave. The Pontiac Metal Center is another still active part of this property. GM still uses the eastern part of the property bordered by Joslyn Ave. on the east, E. Beverly Ave. on the north, E. Montcalm St. on the south, and N. Glenwood Ave. on the west. This area includes GM Performance and Racing Center at 900 N. Glenwood Ave. and the Propulsion Systems Pontiac Engineering Center at 800 N. Glenwood Ave. Pontiac's divisional HQ moved here in 1970 from the previous location at the former Oakland HQ on 196 Oakland Ave. (now Cesar E Chavez Ave.). Pontiac's divisional HQ at One Pontiac Plaza was about where the Propulsion Systems Engineering Center is now. [[w:Fisher Body|Fisher Body]] operated a plant on the site (Plant 17) from 1935-1982. This plant was connected to the final assembly plant by an enclosed bridge that ran over N. Saginaw St., that was used to transport the bodies from the Fisher Body plant, where bodies up to the firewall were built, to the Pontiac final assembly plant where the body was mated to the chassis and the front end, powertrain, & interior were installed and the car was completed. This plant, located at 900 Baldwin Ave., was converted to build the [[w:Pontiac Fiero|Pontiac Fiero]], which it built from 1983-1988. Last Fiero built August 16, 1988. GM used it as a warehouse until 2009 ("Pontiac Warehouse Operations"). Prototyping work was also done there. Most of the Fiero plant was demolished in 2013 (from Kennett Rd. until just before the plant sign which is just past St. Louis Ave.). There used to be an overpass going over Baldwin Ave. to the parking lot on the other side of Baldwin but this was taken down after Fiero production ended. Pontiac engines were made in Plant 9 and Plant 18. Another engine plant was built in 1981 in the northern part of the property. It was originally called Plant 55, later renamed Plant 33. It was next to Plant 51, later renamed Plant 25, which did chassis parts and machining and later, engine machining. Engine production ended in 1993. Plant 9 was demolished in 1997 & Plant 18 was demolished in 1998. Plants 25 & 33 were demolished sometime between 2008 & 2013. Some parts of the complex have been sold to U-Pull And Save Auto Parts, Dani’s Trucking, GFL Environmental, & Bedrock Express. <br />[[w:Pontiac Six|Pontiac Six]] (1927-1932, 1935-1940), Pontiac Series 302 V8 (1932), Pontiac Economy Eight (1933-1934), Pontiac Improved Eight (1935), Pontiac Deluxe Eight (1936-1940), [[w:Pontiac 2+2|Pontiac 2+2]] (1964-1967), [[w:Pontiac Bonneville|Pontiac Bonneville (B-body)]] (1958-80), [[w:Pontiac Bonneville#Seventh generation (1982–1986)|Pontiac Bonneville (G-body)]] (1982), [[w:Pontiac Can Am|Pontiac Can Am]] (1977) [[w:Pontiac Catalina|Pontiac Catalina]] (1959-1980), [[w:Pontiac Chieftain|Pontiac Chieftain]] (1949-1958), [[w:Pontiac Custom S|Pontiac Custom S]] (1969), [[w:Pontiac Executive|Pontiac Executive]] (1967-70), [[w:Pontiac Grand Am#1973–1975|Pontiac Grand Am (1973-75)]], [[w:Pontiac Grand Am#1978–1980|Pontiac Grand Am (1978-80)]], [[w:Pontiac Grand Prix|Pontiac Grand Prix (B-body)]] (1962-1968), [[w:Pontiac Grand Prix#Third generation (1969–1972)|Pontiac Grand Prix (G-body)]] (1969-1972), [[w:Pontiac Grand Prix|Pontiac Grand Prix (A-/G-body)]] (1973-1982), [[w:Pontiac Grand Safari|Pontiac Grand Safari]] (1971-1978), [[w:Pontiac Grand Ville|Pontiac Grand Ville]] (1971-75), [[w:Pontiac GTO|Pontiac GTO]] (1964-1973), [[w:Pontiac LeMans|Pontiac LeMans]] (1962-1981), [[w:Pontiac Safari|Pontiac Safari]] (1955-1957), [[w:Pontiac Star Chief|Pontiac Star Chief]] (1954-66), [[w:Pontiac Streamliner|Pontiac Streamliner]] (1941-51), [[w:Pontiac Tempest|Pontiac Tempest]] (1961-1970), [[w:Pontiac LeMans#1970|Pontiac T-37]] (1970-1971), [[w:Pontiac Torpedo|Pontiac Torpedo]] (1940-1948), [[w:Pontiac Ventura#1960–1970|Pontiac Ventura]] (1960-1961)
|-
|V (1972-1990)<br /><br /> P (Pre-1972)||Pontiac Central Assembly||[[w:Pontiac, Michigan|Pontiac, Michigan]]||United States|||[[w:Chevrolet AK Series|GMC C-Series/E-Series]]<br />[[w:GMC New Design|GMC New Design]] (1947-1951, 1952-1954)<br />[[w:GMC Blue Chip|GMC Blue Chip]] (1955-1959)<br /> [[w:Chevrolet C/K|GMC C/K]] (1960-1985)<br />[[w:Chevrolet C/K|Chevrolet C/K]] (1967-1985)<br /> [[w:GMC Suburban|GMC Suburban]] (1937-1966)<br />[[w:GMC Motorhome|GMC Motorhome/TransMode]] (1978)<br /> Buses ([[w:GM "old-look" transit bus|Yellow Coach/GM "old-look" transit bus]] (1940-1969), [[w:GM PD-4103|GM PD-4103]], [[w:PD-4501 Scenicruiser|PD-4501 Scenicruiser]], [[w:GM New Look bus|GM New Look bus]] (1960-1977), [[w:GM Buffalo bus|GM Buffalo bus]] (1966-1980), [[w:Rapid Transit Series|Rapid Transit Series (RTS)]] (1978-1987))<br />Medium Duty Trucks & Heavy Duty Trucks including:<br />[[w:Chevrolet C/K (second generation)#Medium-duty trucks|Chevrolet C-Series medium-duty trucks]] (1967-1972)<br />[[w:Chevrolet/GMC B series#GMC (1966–1970)|GMC E-Series medium-duty trucks]] (E4500/E5500/E6500) (1967-1968) [https://web.archive.org/web/20140109015322/https://www.gmheritagecenter.com/docs/gm-heritage-archive/historical-brochures/GMC/100_YR_GMC_HISTORY_MAR09.pdf] (page 30)<br />[[w:Chevrolet C/K (second generation)#Medium-duty trucks|GMC C-Series medium-duty trucks]] (1969-1972)<br />[[w:Chevrolet C/K (third generation)#Medium-duty trucks (1973–1989)|Chevrolet/GMC C-Series medium-duty trucks]] (1985-1990)<br />[[w:Chevrolet Kodiak#First generation (1981–1989)|Chevrolet Kodiak]] (1985-1990)<br />[[w:Chevrolet Kodiak#First generation (1981–1989)|GMC Top Kick]] (1985-1990)<br />[[w:Chevrolet/GMC B series|Chevrolet B-series]] (-1991)<br />[[w:Chevrolet/GMC B series|GMC B-series]] (-1991)<br />[[w:GMC Brigadier#Background|Chevrolet/GMC H/J series]] (1966-1977)<br />[[w:Chevrolet Bruin|Chevrolet Bruin]] (1978-1980)<br />[[w:GMC Brigadier|GMC Brigadier]] (1978-1987)<br />[[w:WhiteGMC Brigadier|WhiteGMC Brigadier]] (1988-1989)<br />[[w:GMC General#Background|Chevrolet/GMC C/M series]] (1966-1976)<br />[[w:Chevrolet Bison|Chevrolet Bison]] (1977-1980)<br />[[w:GMC General|GMC General]] (1977-1987)<br />[[w:GMC Astro#Background|GMC F/D series "Crackerbox"]] (1959-1968)<br />[[w:Chevrolet Titan|Chevrolet Titan]] (1970-1980)<br />[[w:GMC Astro|GMC Astro]] (1969-1987)<br />Engines ([[w:GMC straight-6 engine|GMC straight-6 engine]] 1947-1962,<br /> [[w:GMC V6 engine|GMC V6 (1960-1973)/V12 (1960-1965) engine]],<br> [[w:GMC V8 engine#GMC engines|GMC 60° V8]] (1966-1972))||1928||1990||Located at 660 South Boulevard East. Known as GMC Truck & Coach Division Plant 2 when built. Production of trucks began in January 1928. In 1925, General Motors Truck Corp., the parent of the GMC brand, merged with Yellow Cab Manufacturing Company (including its Yellow Coach Mfg. Co. bus-making subsidiary) to form Yellow Truck & Coach Manufacturing Company, in which GM owned a majority stake of 57%. The Northway Motor Division of Detroit was transferred to General Motors Truck Corp. as part of that merger but was liquidated in 1926. On September 30, 1943, GM acquired the remainder of Yellow Truck & Coach Manufacturing Co. and on October 1, 1943 the GMC Truck & Coach Division of General Motors Corp. was formed and Yellow Truck & Coach Manufacturing Co. was dissolved. When limited production of civilian buses resumed in March 1944, they were badged as GM Coach and the Yellow name was retired. Headquarters of Yellow Truck & Coach Manufacturing Co. and later the GMC Truck & Coach Division. Headquarters building in front of Plant 2 was completed in March 1928. Administration and engineering buildings were part of the complex. Built 409,012 [[w:GMC CCKW 2½-ton 6×6 truck|CCKW 6x6 trucks]], AFKWX 6x6 cab-over trucks, [[w:DUKW|DUKW "Ducks"]], & other types of trucks during WWII. Also produced 2,249 buses & 30 T18E2 Boarhound armored cars during WWII. The small-block, Group 1 GMC inline-6s were moved from Plant 4 of Pontiac West to Building 29 at Pontiac Central in November 1947. In December 1947, engine manufacturing and machine shops moved from Plants 1 and 4 of Pontiac West to Building 29 at Pontiac Central. The medium- and big-block, Group 2 & 3 GMC inline-6s were moved to Building 29 at Pontiac Central in February 1948. In August 1977, the GMC MotorHome was moved from Plant 3 of Pontiac West to Building 29 at Pontiac Central. The GMC MotorHome was discontinued after 1978. [https://www.gmccolonial.com/gmc-motorhome-history] Transit bus production ended in spring 1987 when GM sold the product line to Greyhound Corporation, which continued RTS production at its [[w:Transportation Manufacturing Corporation|TMC]] plant in Roswell, New Mexico. Converted in 1994 into a Truck Product Engineering Center (Pontiac Centerpoint Campus) by GM using only the steel frame of the large main building while everything else was demolished. The Truck Product Engineering Center closed in 2009 and the site is now the Centerpoint Business Campus, which is occupied by many businesses including Fanuc Robotics and i.M. Branded.
|-
|E (1988-2009)<br /><br />V (1972-1985)||[[w:Pontiac East Assembly|Pontiac East Assembly]]||[[w:Pontiac, Michigan|Pontiac, Michigan]]||United States||Medium Duty Trucks:<br /> [[w:Chevrolet C/K (third generation)#Medium-duty trucks (1973–1989)|Chevrolet/GMC C-Series medium-duty trucks]] (1973-85), [[w:Chevrolet Kodiak#First generation (1981–1989)|Chevrolet Kodiak]] (1981-1985), [[w:Chevrolet Kodiak#First generation (1981–1989)|GMC Top Kick]] (1981-85)<br /><br /> [[w:Chevrolet C/K (fourth generation)|Chevrolet C/K (GMT400)]] (1988-1998)<br /> [[w:Chevrolet C/K (fourth generation)|GMC Sierra (GMT400)]] (1988-1998)<br /> [[w:Chevrolet Silverado#First-generation Silverado / second-generation Sierra (GMT800; 1999)|Chevrolet Silverado (GMT800)]] (1999-2006)<br /> [[w:Chevrolet Silverado#First-generation Silverado / second-generation Sierra (GMT800; 1999)|Chevrolet Silverado Classic (GMT800)]] (2007)<br /> [[w:Chevrolet Silverado#First-generation Silverado / second-generation Sierra (GMT800; 1999)|GMC Sierra (GMT800)]] (1999-2006)<br /> [[w:Chevrolet Silverado#First-generation Silverado / second-generation Sierra (GMT800; 1999)|GMC Sierra Classic (GMT800)]] (2007)<br /> [[w:Chevrolet Silverado#Second-generation Silverado / third-generation Sierra (GMT900; 2007)|Chevrolet Silverado (GMT900)]] (2007-2009)<br /> [[w:Chevrolet Silverado#Second-generation Silverado / third-generation Sierra (GMT900; 2007)|GMC Sierra (GMT900)]] (2007-2009) ||1972||2009||Located at 2100 South Opdyke Road. Known as GMC Truck & Coach Division Plant 6 when built, also known as Pontiac Assembly Center. Pontiac East is directly to the east of Pontiac Central. Pontiac East began by building medium-duty trucks, which were moved from Pontiac Central. In 1985, medium-duty trucks were moved back to Pontiac Central, combining with production of heavy-duty trucks and buses. GMT400 full-size pickup production began in December 1986 for the 1988 model year. Closed in September 2009. Demolished in 2011-2012. Portions of the site are now occupied by Challenge Manufacturing Co. and Williams International.
|-
|0 (1978-1994)<br /><br />V (1972-1977)<br /><br /> P (Pre-1972)||[[w:Pontiac West Assembly|Pontiac West Assembly]]||[[w:Pontiac, Michigan|Pontiac, Michigan]]||United States||Trucks, Buses,<br />Engines: ([[w:Buick straight-6 engine|Buick 257/331 straight-6 engine]] (1931-1932), [[w:GMC straight-6 engine|GMC straight-6 engine]] 1933-1948), <br /> [[w:GMC Motorhome|GMC Motorhome/TransMode]] (1973-1977)<br /> [[w:Chevrolet van#First generation (1964–1966)|Chevrolet Van/GMC Handi-Van]] (1964-1966)<br />[[w:Chevrolet van#Second generation (1967–1970)|Chevrolet Van/GMC Handi-Van]] (1967-1970)<br />[[w:Chevrolet van#Third generation (1971–1996)|Chevrolet Van/GMC Vandura]] (1978-1980)<br />[[w:Chevrolet S-10#First generation (1982)|Chevrolet S-10]]<br /> (1982-1984, 1991-1993)<br />[[w:GMC S-15|GMC S-15]] (1982-1984)<br />[[w:GMC Sonoma|GMC Sonoma]] (1991-1993)<br />[[w:Chevrolet S-10 Blazer#First generation (1983–1994)|Chevrolet S-10 Blazer]]<br /> (1983-1994 2-d, 1994 4-d)<br />[[w:GMC S-15 Jimmy|GMC S-15 Jimmy]]<br /> (1983-1994 2-d, 1994 4-d)<br />[[w:GMC Typhoon|GMC Typhoon]] (1992-1993)<br />[[w:Oldsmobile Bravada#First generation (1991–1994)|Oldsmobile Bravada]] (1994) ||1906||1994||Complex includes GMC Truck & Coach Division Plants 1, 3, 4, and 5. Plant 1 was originally the plant of Rapid Motor Vehicle Company, one of the 2 main ancestors of the modern GMC Division (the other being Reliance Motor Car Company). Plant 1 was located at 25 Rapid Street and opened in 1906, before Rapid was taken over by GM in 1908-1909. Plant 1 started making Buick 257 & 331 inline-6's in 1931 after Buick stopped making inline-6s after 1930 and switched its entire lineup to straight-8s. The tooling was moved to Plant 1 from the Buick complex in Flint. Buick had been supplying inline-6s to GMC since 1925. In 1933, GMC started making inline-6s of its own design in Plant 1. The medium- and big-block, Group 2 & 3 GMC inline-6s were moved to Building 29 at Pontiac Central in February 1948. Plant 1 was demolished around 1981. Plant 3 opened in 1940 and was located at South Boulevard West and Franklin Road. Plant 3 was used for sheet metal work and material storage at first. Plant 3 later built the [[w:GMC Motorhome|GMC Motorhome]]. In August 1977, the GMC MotorHome was moved from Plant 3 of Pontiac West to Building 29 at Pontiac Central for its final model year of 1978. Plant 3 was demolished around 2005. Plant 4 was located on South Saginaw Street (now Woodward Ave.) Engine production began in Plant 4 in October 1938. The [[w:GMC straight-6 engine|GMC straight-6 engine]] was built there through 1947/1948. Small-block, Group 1 GMC inline-6 engines were made in Plant 4 from October 1938. The small-block, Group 1 GMC inline-6s were moved to Building 29 at Pontiac Central in November 1947. In December 1947, engine manufacturing and machine shops moved from Plants 1 and 4 to Building 29 at Pontiac Central. Plant 4 was also used for material storage. Plant 4 also built the [[w:Chevrolet van|1964-1970 Chevrolet & GMC full-size vans]]. Plant 4 was demolished around 2008. Plant 5 was located on Franklin Road, to the north of Plant 3. Plant 5 was demolished around 2005. After Pontiac Central opened in 1928, Pontiac West focused on machining and component manufacturing rather than vehicle assembly.[https://www.hagerty.com/media/automotive-history/a-gmc-motor-homecoming-50-years-on/] (Paragraph 4) There would be sporadic vehicle production at Pontiac West in the 1960's and 1970's (vans, motorhomes). In the 1980's, vehicle production increased as Pontiac West became one of GM's plants building compact pickups and SUVs. Production ended in 1994. Entire property sold to M1 Concourse in 2014.
|-
| ||Pontiac Foundry||[[w:Pontiac, Michigan|Pontiac, Michigan]]||United States||[[w:Casting|Iron castings]] of engine parts. ||1927||1987||Was part of GM's Central Foundry Division. Was Plant 6 of Pontiac's Assembly complex in Pontiac, Michigan. Demolished in 1995. A U.S. Postal Service distribution center now occupies the approximate area where the foundry used to be.
|-
| ||[[w:Regina Plant|Regina Plant]]||[[w:Regina, Saskatchewan|Regina, Saskatchewan]]||[[w:Canada|Canada]]
|[[w:Chevrolet|Chevrolet]] cars & trucks, Maple Leaf trucks, [[w:Pontiac (automobile)|Pontiac]], [[w:Oldsmobile|Oldsmobile]], [[w:Buick|Buick]]
|1928||1941||Factory office building is located at 1102 8th Avenue while the factory building is behind the office building stretching down Winnipeg Street down to 6th Ave. Production began on Dec. 11, 1928. Production halted in August 1930, restarted in March 1931, then halted again a few months later in 1931. Production restarted in December 1937. In 1941, taken over by the [[w:Government of Canada|Government of Canada]] to produce munitions for World War II as Regina Industries Limited. Auto production never resumed and the property was used by the Canadian Department of National Defense until the mid-1960s. Sold to the Saskatchewan provincial govt. in 1967 and then the Regina city govt. in 1987. Was used by both public- and private-sector tenants. Damaged by a fire on May 3, 2017. In 2020, the City of Regina decommissioned the building and all the tenants were required to move out. Buildings are still standing and have been used by a variety of businesses and organizations. You can still see "GMC" carved in stone above the front entrance to the office building. Office building is designated a Heritage Inventory Property by city of Regina. A related building is down the block at 1260 8th Avenue at the corner of Toronto Street. After the factory closed in 1941, GM still used this building for its regional administrative and parts distribution operations until it moved in 1967.
|-
| ||[[w:GMC (marque)#History|Reliance Motor Truck Co.]]||[[w:Owosso, Michigan|Owosso]], [[w:Michigan|Michigan]]||United States||Reliance trucks (1909-1912)<br> GMC trucks (heavy duty models) (1912-1913)||1909||1913||Plant was located on Michigan Ave. In late 1908, GM bought Reliance Motor Car Co. and reorganized it as Reliance Motor Truck Co. Reliance truck production moved here from Detroit in 1909. In February 1912, the GMC brand replaced the Reliance brand as well as the Rapid brand. In 1913, production was consolidated at the Rapid Street plant of the former Rapid Motor Vehicle Co. in Pontiac, Michigan and the Owosso plant was sold. Plant was later used by American Malleables and later by Mid-West Abrasive Co., a maker of sandpaper. Plant was later extended to S. Washington St.
|-
| ||Saab [[w:Gothenburg|Gothenburg]] Transmission||[[w:Gothenburg|Gothenburg]]||[[w:Sweden|Sweden]]||Pre-GM era:<br />[[w:Saab two-stroke|Saab two-stroke]]<br />GM era:<br />Saab 99/900 manual transmission<br />[[w:F35 transmission|F35 transmission]]<br />[[w:GM F40 transmission|GM F40 transmission]] ||1989||2009||Saab plant. Opened in 1953. Engine production ended in 1968.
GM bought 50% of [[w:Saab Automobile|Saab Automobile]] in 1989 & the other 50% in 2000. Transmission production ended when the 1st gen. 9-5 ended production. GM sold [[w:Saab Automobile|Saab Automobile]] to [[w:Spyker Cars|Spyker Cars]] in February, 2010.
|-
| ||Saab [[w:Sodertalje|Sodertalje]] Engine||[[w:Sodertalje|Sodertalje]]||[[w:Sweden|Sweden]]||Pre-GM era:<br />[[w:Saab B engine|Saab B engine]]<br />GM era:<br />[[w:Saab H engine|Saab H engine]] ||1989||2007||Saab plant. Opened in 1972.
GM bought 50% of [[w:Saab Automobile|Saab Automobile]] in 1989 & the other 50% in 2000. Engine plant sold to [[w:Scania AB|Scania AB]] in 2007. GM sold [[w:Saab Automobile|Saab Automobile]] to [[w:Spyker Cars|Spyker Cars]] in February, 2010.
|-
|1,2,3,4,8||Saab [[w:Trollhättan Assembly|Trollhättan Assembly]]||[[w:Trollhättan|Trollhättan]]||[[w:Sweden|Sweden]]||Pre-GM era:<br />[[w:Saab 92|Saab 92]]<br />[[w:Saab 93|Saab 93]]<br />[[w:Saab 95|Saab 95]]<br />[[w:Saab 96|Saab 96]]<br />[[w:Saab 99|Saab 99]]<br />GM era:<br />[[w:Saab 900|Saab 900]]<br />[[w:Saab 9000|Saab 9000]]<br />[[w:Saab 9-3|Saab 9-3]]<br />[[w:Saab 9-5|Saab 9-5]]<br />[[w:Cadillac BLS|Cadillac BLS]]||1989||2010||Saab plant. Opened in 1947. Also did engine (Saab two-stroke) & transmission production until 1953 when it was relocated to the Gothenburg plant.
GM bought 50% of [[w:Saab Automobile|Saab Automobile]] in 1989 & the other 50% in 2000. Saab also built the 9-3 based BLS for Cadillac. The BLS was not sold in the US or Canada. GM sold [[w:Saab Automobile|Saab Automobile]] to [[w:Spyker Cars|Spyker Cars]] in February, 2010.
|-
| ||Saginaw Malleable Iron||[[w:Saginaw, Michigan|Saginaw, Michigan]]||United States|| ||1919||2007|| Located at 77 W. Center St. Iron castings. HQ of Central Foundry Division. In 1919, Saginaw Malleable Iron and Central Foundry merged with the Jacox division into GM's Saginaw Products Company. In 1928, became the Saginaw Malleable Iron division of GM. Closed in 2007, demolished in 2010. Converted into a park.
|-
| ||Saginaw Nodular Iron||[[w:Saginaw, Michigan|Saginaw, Michigan]]||United States||Steering knuckles, crankshafts, disc brake caliper housings, exhaust manifolds, flywheels, differential carriers, clutch pressure plates||1967||1988|| Located at 2100 Veterans Memorial Parkway. Straddles the City of Saginaw-Buena Vista Township border. Iron castings. Closed in 1988. Later demolished.
|-
| ||Saginaw Parts||[[w:Saginaw, Michigan|Saginaw, Michigan]]||United States|| ||1909||1983|| Located on corner of 6th & Washington Avenues. Opened in 1907 to build the 1908 Rainier. Bought by GM in 1909 as part of its purchase of [[w:Rainier Motor Car Company|Rainier Motor Car Company]]. Reorganized into the [[w:Marquette (automobile)#Company|Marquette Motor Co.]] which still made Rainier brand cars through 1911 as well as parts for Welch and Welch-Detroit cars. In 1912, the Rainier brand was replaced by the Marquette brand, which was said to be a combination of the previous Rainier and Welch-Detroit brands. In February 1912, the company was renamed Peninsular Motor Co. Some late production cars seem to have been badged as Peninsular. All of those activities ended at the end of 1912. In 1917, during World War I, the plant was reopened and used to manufacture mortar shells for the US Ordnance Corps. In 1919, became part of the Saginaw Products Company with this plant becoming the Saginaw Products Company Motor Plant. From 1919-1922, the plant made [[w:Chevrolet Inline-4 engine#224|OHV I4]] engines for [[w:Chevrolet Series FB|Chevrolet Series FB]] and [[w:Oldsmobile Model 43|Oldsmobile Model 43A]]. It was then used as a warehouse. From 1935, it made all different types of auto parts and service parts as Chevrolet Saginaw Service Parts Plant or from 1969, Chevrolet Saginaw Parts Plant. Closed in 1983, demolished in 1984.
|-
| ||Saginaw Steering Gear - Plant 1||[[w:Saginaw, Michigan|Saginaw, Michigan]]||United States||Steering components||1910||1984||Located on 628 North Hamilton St. Originally founded as the Jackson, Church and Wilcox Company (Jacox) in 1906. Bought by GM in 1910. Became the Jackson-Church-Wilcox or Jacox division of GM. In 1919, the Jacox division merged with Saginaw Malleable Iron and Central Foundry into GM's Saginaw Products Company. Became the Saginaw Steering Gear Division in 1928. Closed in 1984. Sold in 1987 to Thomson Industries. Still operates today as Thomson Aerospace & Defense, a brand of Linear Motion LLC, which is owned by the Umbra Group of Italy.
|-
| ||Saginaw Steering Gear - Plant 2||[[w:Saginaw, Michigan|Saginaw, Michigan]]||United States||Steering Gears, pump hoses||1941||2001||Located at 1400 Holmes Street. Affectionately known as "The Gun Plant", it was built in 1941 when the division was contracted to build M1919 machine guns, and M1-Carbines for World War II. After the war, normal steering gear production continued until its closure in 2001. It was demolished in 2002.
|-
| ||Saginaw Steering Gear complex||[[w:Buena Vista Township, Michigan|Buena Vista Township, Michigan]]||United States|| Complete Hydraulic and Electric Power Steering Systems, Halfshafts, Intermediate Drive Shafts||1953||2010||Located at 3900 E. Holland Road. Former Saginaw Steering Gear Division of GM. Saginaw Steering Gear Division renamed Saginaw Division in 1985. Grouped under Delphi Automotive Systems in 1995. Plant 3 opened in 1953, Plant 4 opened in 1956. The sprawling Five-Plant complex (Plants 3-7), division Headquarters and large engineering center, were spun off with Delphi in 1999. GM repurchased the Delphi Steering division from bankrupt Delphi in 2009, renaming it Nexteer Automotive, and then sold the division to [[w:Pacific Century Motors|Pacific Century Motors]] in 2010. The former GM Division now operates as "[[w:Nexteer Automotive|Nexteer Automotive]]", an independent company headquartered at the Saginaw site. Nexteer moved its headquarters to Auburn Hills in 2015.
|-
| ||Saginaw Steering Gear Overseas Corp.||[[w:Hendon|Hendon]], [[w:England|England]]||United Kingdom|| Steering columns, Steering column components (jacket & bracket assemblies), Vacuum pumps, EGR valves||1970 (auto parts)||?||Located on Capitol Way in The Capitol Industrial Park. Originally opened in 1924 as a vehicle assembly plant making Chevrolets (See listing for "GM Ltd."). When Chevrolet production was moved to Luton in 1930, Hendon was used for parts distribution. Later, Frigidaire made appliances at Hendon. In 1970, Hendon began producing steering columns. In 1971, more automotive components began to be produced in place of Frigidaire appliances. In 1979, Hendon became aligned with Saginaw Steering Gear in the US. In 1980, GM sold the Hendon site for redevelopment but leased back an area for construction of a new plant for Saginaw Steering Gear. The new plant opened in 1981. In 1982, GM Ltd. was dissolved and the Hendon plant became part of Saginaw Steering Gear Overseas Corp., part of GM Overseas Corp.
|-
| ||Saginaw Transmission||[[w:Saginaw, Michigan|Saginaw, Michigan]]||United States||Manual Transmissions, Brakes||1921||1999||Located at 2328 E. Genesee Ave. Built 1919–20 for the Michigan Crankshaft Company (originally founded as National Engineering Company), acquired by GM in 1921 and placed under Saginaw Products Company. In 1928, became the Saginaw Crankshaft Division of GM. Transferred to Chevrolet upon the dissolution of the Crankshaft Division in 1931 when crankshaft manufacturing was turned over to the car divisions. Made the "Saginaw" 3 and 4-Speed manual transmissions. It was spun off as part of Delphi in 1999. The plant was sold to [[w:TRW Automotive|TRW Automotive]] in 2007. TRW used the plant to produces brake and suspension components (known as TRW Braking and Suspension). TRW closed this plant in 2014.
|-
|4||[[w:Scarborough Van Assembly|Scarborough Van Plant]]||[[w:Scarborough, Toronto|Scarborough]], [[w:Ontario|Ontario]]||[[w:Canada|Canada]]||[[w:Chevrolet Van#Third generation (1971–1996)|Chevrolet Van]] (1974-1993)<br />[[w:GMC Vandura#Third generation (1971–1996)|GMC Vandura]] (1974-1993)<br />[[w:Chevrolet Sportvan#Third generation (1971–1996)|Chevrolet Sportvan]] (1974-1993)<br />[[w:GMC Vandura#Third generation (1971–1996)|GMC Rally Van]] (1974-1993)<br />||1952<br><br>1974 (Vehicle production)||1993||Located at 1901 Eglinton Avenue East. Originally a [[w:Frigidaire|Frigidaire]] home appliance plant through 1970. In 1960, production of automotive components was added. Production included radios, instrument clusters, horns, shock absorbers, and propshafts. After Frigidaire production ended in 1970, only auto parts were made and the plant name was changed from Frigidaire Products of Canada to Delco Canada. Auto parts production ended in 1973 and the plant was expanded and converted to build full-size vans and renamed Scarborough Van Plant. First van produced on May 23, 1974 (a 1974 Chevy Van 10). After van production began, plant was expanded 5 times over the years. Cutaway production was added for 1975, halted in 1978, and resumed in 1980. One millionth van produced in January 1986 (a GMC model). Closed on May 6, 1993 and operations moved to [[w:Flint Truck Assembly|Flint Truck Assembly]]. Scarborough produced 1,626,313 vans from 1974-1993. Plant demolished and now site of Eglinton Town Centre and Comstock Bus Garage at the southern end of the property.
|-
| ||[[w:Scripps-Booth|Scripps-Booth]]||[[w:Detroit, Michigan|Detroit]], [[w:Michigan|Michigan]]||United States||Scripps-Booth automobiles||1918||1922||Taken over by Chevrolet by the end of 1917 before Chevrolet was part of GM. When Chevrolet became part of GM, Scripps-Booth became part of GM as well. Scripps-Booth then adopted an Oakland chassis and a Northway six-cylinder engine, using parts from other GM divisions. However, a place could not be found for Scripps-Booth in GM's lineup, so GM closed it down in 1922.
|-
|8||[[w:Shreveport Operations|Shreveport Operations]]||[[w:Shreveport, Louisiana|Shreveport, Louisiana]]||United States||[[w:Chevrolet Colorado#First generation (2004)|Chevrolet Colorado]] (2004-2012)<br />[[w:Chevrolet Colorado#First generation (2004)|GMC Canyon]] (2004-2012)<br />[[w:Hummer H3|Hummer H3]] (2006-2010)<br />[[w:Hummer H3#H3T|Hummer H3T]] (2009-2010)<br />[[w:Chevrolet Colorado#Isuzu i-series|Isuzu i-series]] pickup (2006-2008)||1981||2012||Located at 7600 General Motors Blvd. General Motors Blvd. was renamed Antoine Blvd. in 2013. A portion of the complex is now used by Glovis America, a Hyundai Automotive Group subsidiary, for a vehicle logistics and processing center for Hyundai and Kia vehicles. <br />Past models: <br> [[w:Chevrolet S-10 |Chevrolet S-10]] (1982-03), [[w:Chevrolet S-10 EV|Chevrolet S-10 EV]] (1997-1998),<br /> [[w:Chevrolet S-10 Blazer#First generation (1983–1994)|Chevrolet S-10 Blazer]] (1983-1991 2-d),<br /> [[w:GMC S-15|GMC S-15]] (1982-1990), [[w:GMC Sonoma|GMC Sonoma]] (1991-03), [[w:GMC Syclone|GMC Syclone]] (1991),<br /> [[w:Chevrolet S-10 Blazer#First generation (1983–1994)|GMC S-15 Jimmy]] (1983-1991 2-d),<br /> [[w:Isuzu Hombre|Isuzu Hombre]] (1996-'00)
|-
|A||[[w:General Motors South Africa|General Motors South Africa]] Darling Street & Kempston Road plants||[[w:Port Elizabeth, South Africa|Port Elizabeth]]||[[w:South Africa|South Africa]]||[[w:Acadian (automobile)|Acadian]] (from CKD kits supplied from Oshawa and Willow Run)<br />[[w:Beaumont (automobile)|Acadian Beaumont & Beaumont]] (from CKD kits supplied from Oshawa 1966-69)<br />[[w:Chevrolet Series AA Capitol|Chevrolet Series AA Capitol]]<br />[[w:Chevrolet Series AB National|Chevrolet Series AB National]]<br />[[w:Chevrolet Series AC International|Chevrolet Series AC International]]<br />[[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]]<br />[[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]]<br />[[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]]<br />[[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]]<br />[[w:Chevrolet Master|Chevrolet Master]]<br />[[w:Opel Ascona#Export models|Chevrolet Ascona]]<br />[[w:Chevrolet Caprice|Chevrolet Caprice]]<br />[[w:Statesman (automobile)#HJ|Chevrolet Caprice Classic]]<br />[[w:Chevrolet Constantia|Chevrolet Constantia]]<br />[[w:Chevrolet Corvair|Chevrolet Corvair]] (from CKD kits supplied from Oshawa)<br />[[w:Chevrolet Chevair|Chevrolet Chevair]]<br />[[w:Chevrolet Chevelle|Chevrolet Chevelle]]/[[w:Chevrolet Malibu|Chevrolet Malibu]]<br />[[w:Chevrolet Chevy II/Nova|Chevrolet Chevy II/Nova]]<br /> [[w:Chevrolet Nomad#South Africa production (GMSA)|Chevrolet Nomad]]<br /> [[w:Statesman (automobile)#HQ|Chevrolet De Ville]]<br />[[w:Holden HK#South Africa|Chevrolet El Camino<br />Chevrolet El Toro]]<br />[[w:Chevrolet Impala|Chevrolet Impala]]<br />[[w:Holden HK#South Africa|Chevrolet Kommando]]<br />[[w:Chevrolet LUV|Chevrolet LUV]]<br />[[w:Holden EK|Holden EK]]<br />[[w:Holden EJ|Holden EJ]]<br />[[w:Holden EH|Holden EH]]<br />[[w:Holden HD|Holden HD]]<br />[[w:Holden HR|Holden HR]]<br />[[w:Holden Monaro#Export program|Holden Monaro (HT)/Chevrolet SS (HG)]]<br />[[w:Pontiac Parisienne|Pontiac Parisienne]]<br />[[w:Vauxhall Viva#South Africa|Chevrolet Firenza/1300/1900]]<br />[[w:Opel Rekord Series D#ZA|Chevrolet 2500, 3800, 4100]]<br />[[w:Opel Rekord Series E#Chevrolet Rekord|Chevrolet Rekord]]<br />[[w:Opel Ascona#Ascona C (1981–1988)|Opel Ascona C]]<br />[[w:Opel Kadett A|Opel Kadett A]]<br />[[w:Opel Kadett B|Opel Kadett B]]<br />[[w:Opel Kadett#Kadett D (1979–1984)|Opel Kadett D]]<br />[[w:Opel Kadett#Kadett E (1984–1995)|Opel Kadett E/Monza]]<br />[[w:Opel Astra#F|Opel Kadett F]]<br />[[w:Opel Astra#G|Opel Astra G]]<br />[[w:Opel Corsa#Corsa B (S93; 1993)|Opel Corsa B/Corsa Lite]]<br />[[w:Opel Rekord|Opel Rekord]]<br />[[w:Vauxhall Cresta|Vauxhall Cresta]]<br />[[w:Vauxhall Velox|Vauxhall Velox]]<br />[[w:Vauxhall Victor|Vauxhall Victor]]<br />[[w:Vauxhall Viscount|Vauxhall Viscount]]<br />[[w:Vauxhall Viva#Other markets|Vauxhall Viva]]<br />[[w:Isuzu F-Series|Isuzu F-Series]]<br />[[w:Isuzu N-Series|Isuzu N-Series]]<br /> [[w:Isuzu Faster|Isuzu KB]]<br />[[w:Isuzu D-Max|Isuzu KB (D-Max based)]]<br />||1926 (Darling Street)<br />1928 (Kempston Road)||1929 (Darling Street)<br />2017||Also assembled in the pre-WWII era: <br />[[w:Chevrolet|Chevrolet]]<br />[[w:Pontiac (automobile)|Pontiac]]<br />[[w:Oakland (automobile)|Oakland]]<br />[[w:Oldsmobile|Oldsmobile]]<br />[[w:Buick|Buick]]<br />[[w:LaSalle (automobile)|LaSalle]]<br />[[w:Cadillac|Cadillac]]<br />[[w:GMC (automobile)|GMC]]<br />[[w:Vauxhall Motors|Vauxhall]]<br />[[w:Bedford Vehicles|Bedford]]<br />[[w:Opel|Opel]]<br />[[w:Frigidaire|Frigidaire]] appliances.
Also built the [[w:Ranger (automobile)#South Africa|Ranger]].
GM sold the factory to Isuzu in 2017 and left the South African market. Isuzu consolidated its commercial truck production in the Struandale plant which already built Isuzu pickups and the Kempston Road plant ended production on Nov. 30, 2018.
|-
|4||[[w:General Motors South Africa|General Motors South Africa]] Struandale plant||[[w:Port Elizabeth, South Africa|Port Elizabeth]]||[[w:South Africa|South Africa]]||[[w:Chevrolet Spark#Africa|Chevrolet Spark (M300)]]<br />[[w:Opel Corsa#Corsa C (X01; 2000)|Opel Corsa C]]<br />[[w:Chevrolet Montana#South Africa|Opel Corsa Utility/Chevrolet Utility]]<br />[[w:Hummer H3|Hummer H3]]<br />[[w:Isuzu D-Max#Second generation (RT; 2011)|Isuzu KB]]<br />||1996||2017||Struandale was originally a Ford plant opened in 1973 which GM South Africa bought during the time it was known as Delta Motor Corp. in 1994.
GM sold the factory to Isuzu in 2017 and left the South African market. Struandale absorbed Isuzu pickup production beginning with the 2nd generation D-Max around 2013 & Isuzu commercial truck ([[w:Isuzu F-Series|Isuzu F-Series]] & [[w:Isuzu N-Series|Isuzu N-Series]]) production in Jan. 2019. Isuzu KB was renamed D-Max in South Africa in 2018, aligning with the rest of the world.
|-
| ||[[w:General Motors South Africa|General Motors South Africa]] Engine plant - Aloes||[[w:Port Elizabeth, South Africa|Port Elizabeth]]||[[w:South Africa|South Africa]]||[[w:Chevrolet 153 4-cylinder engine|Chevrolet 153 4-cylinder engine]]<br />[[w:Chevrolet Turbo-Thrift engine|Chevrolet Turbo-Thrift inline-6]]<br />[[w:Vauxhall Viva|Vauxhall Viva]] inline-4||1966||1999?||
|-
|C (1965-1982)<br /><br /> U (1964 [[w:Chevrolet|Chevrolet]])<br /><br />S (1960-1964 [[w:Pontiac (automobile)|Pontiac]])<br /><br />C (1937-1964 [[w:Oldsmobile|Oldsmobile]] and 1936-1959 [[w:Pontiac (automobile)|Pontiac]])<br /><br />2 (1938-1964 <br> [[w:Buick|Buick]]) ||[[w:South Gate Assembly|South Gate Assembly]]||[[w:South Gate, California|South Gate, California]]||United States||[[w:Chevrolet Cavalier|Chevrolet Cavalier]] (1982) <br /> [[w:Cadillac Cimarron|Cadillac Cimarron]] (1982)||1936||1982|| Located at 2700 Tweedy Blvd. South Gate Assembly was the 1st GM multi-brand assembly plant, assembling Buick, Oldsmobile, and Pontiac models. The first finished cars were produced in May 1936. It was operated by GM's Southern California Division through 1943. Automobile production ended in Feb. 1942. During WWII, it produced the M5 and M5A1 Stuart tanks from July 1942-August 1943 in cooperation with Cadillac Division which held the contract to build the tank. It also provided a proof range for Army Ordnance to test various types of machine gun and cannon shells. Space was also provided for Army Ordnance to modify M4 medium tanks. Also built were gun shields and deck houses for the Navy. When M5A1 production ceased in August 1943, the plant was leased to Douglas Aircraft Co. until the end of the war for aircraft parts production. After the war ended, in 1945, Southgate & Linden were both placed in a new division called the [[w:Buick-Oldsmobile-Pontiac Assembly Division|Buick-Oldsmobile-Pontiac Assembly Division]]. South Gate began making Chevrolet full-size cars for 1964. BOP Assembly Division became GM Assembly Division in 1965. South Gate was converted to build H-body small cars like the Vega for 1975 but the plant was switched back to full-size cars for 1977, building Chevy, Oldsmobile, & Buick B-bodies. In 1979, South Gate Assembly became the second plant (the 1st was Linden, NJ in 1971) outside Cadillac's home plant in Detroit to assemble Cadillacs when it began to assemble C-body Cadillacs like the DeVille instead of Oldsmobile & Buick B-bodies. The plant was then idled in March 1980. It was again switched to build small cars for 1982, this time the J-body. Slow sales and efforts to reduce air quality issues resulted in plant closure, with production ending on March 23, 1982. Plant demolished and site used for 3 new schools for L.A. School District and the South Gate Industrial and Business Park at the southern end of the property.<br /> Unibody B-O-P "Y"-body [[w:Buick Special#1961–1963|Buick Special]]/[[w:Buick Skylark#First generation (1961–1963)|Buick Skylark]] (1962-1963), [[w:Oldsmobile F-85#First generation (1961)|Oldsmobile F-85/<br> Cutlass]] (1962-1963), [[w:Pontiac Tempest#First generation (1961–1963)|Pontiac Tempest]]/[[w:Pontiac LeMans#First generation (1961–1963)|Pontiac LeMans]] (1962-1963) added to B-& C-body mix 1961-63; replaced by [[w:General Motors B platform|Chevrolet B-body]] for 1964; [[w:GM H platform (RWD)|GM H platform (RWD)]]: [[w:Chevrolet Vega|Chevrolet Vega]] (1975), [[w:Chevrolet Monza|Chevrolet Monza]] (1975-1976), [[w:Pontiac Astre|Pontiac Astre]] (1975), [[w:Pontiac Sunbird#First generation (1976–1980)|Pontiac Sunbird]] (1976), [[w:Oldsmobile Starfire#Second generation (1975–1980)|Oldsmobile Starfire]] (H-body) (1976), [[w:Buick Skyhawk#First generation (1975–1980)|Buick Skyhawk]] (1976); [[w:Buick Centurion|Buick Centurion]] (1971-1973); [[w:Buick Century|Buick Century]] (1936-1942, 1954-1958); [[w:Buick Electra|Buick Electra]] (1959-1963); [[w:Buick Estate#1970|Buick Estate]] (1970-1973); [[w:Buick Invicta|Buick Invicta]] (1959-1962); [[w:Buick LeSabre|Buick LeSabre]] (1959-1974, 1977-1978); [[w:Buick Roadmaster|Buick Roadmaster]] (1947-1949, 1953-1958); [[w:Buick Special|Buick Special]] (1936-1958); [[w:Buick Super|Buick Super]] (1940-1958); [[w:Buick Wildcat|Buick Wildcat]] (1963-1970); [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1964-1974); [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-1974, 1977-80); [[w:Chevrolet Impala|Chevrolet Impala]] (1964-1974, 1977-1980); [[w:Oldsmobile 88|Oldsmobile 88]] (1949-1970, 1977-1978); [[w:Oldsmobile 98|Oldsmobile 98]] (1941-63); [[w:Oldsmobile Jetstar I|Oldsmobile Jetstar I]] (1964-1965); [[w:Oldsmobile Starfire#First generation (1961–1966)|Oldsmobile Starfire]] (1961-1966); [[w:Pontiac 2+2|Pontiac 2+2]] (1964-1967); [[w:Pontiac Bonneville|Pontiac Bonneville]] (1958-1970, 1972-1973); [[w:Pontiac Catalina|Pontiac Catalina]] (1959-1973); [[w:Pontiac Chieftain|Pontiac Chieftain]] (1949-1953, 1955-1958); [[w:Pontiac Executive|Pontiac Executive]] (1967-1968); [[w:Pontiac Grand Prix|Pontiac Grand Prix]] (1962-68); [[w:Pontiac Star Chief|Pontiac Star Chief]] (1955-1958, 1960, 1962, 1966); [[w:Pontiac Ventura#1960–1970|Pontiac Ventura]] (1960-1961); [[w:Cadillac Deville#Fifth generation (1977–1984)|Cadillac Deville]] (1979-1980).
|-
| ||[[w:St. Catharines Components Plant|St. Catharines Components Plant]]||[[w:St. Catharines, Ontario|St. Catharines, Ontario]]||[[w:Canada|Canada]]||Engine components<br />Transmissions<br />Transmission components<br />Starter motors<br />Alternators<br /> Final drive assemblies<br /> Axles<br />Steering wheels<br />Steering gear<br />Shock absorbers<br />Brakes<br />Bearings<br />Horns<br />Vehicle Radios<br />Fractional horsepower motors for appliances||1929||2010||Was located at 285 Ontario Street. Originally McKinnon Dash and Metal Work Ltd., which opened this site in 1900. In 1917, the company was renamed McKinnon Industries, Ltd. Taken over by GM on March 29, 1929. In 1963, fractional horsepower motors for appliances were moved to the GM Diesel plant in London, Ontario. In 1964, vehicle radios, horns, and shocks were moved to the Scarborough plant followed by propshafts in 1966. In 1969, McKinnon Industries Ltd. was integrated into GM Canada rather than being a separate subsidiary. In 1990, the Axle Plant is officially renamed Components Plant. Permanently closed in 2010 as part of GM's restructuring plans. All operations were transferred to [[w:St. Catharines Engine Plant|St. Catharines Engine Plant]]. Some of the Components Plant was demolished in 2016 and the site will be re-developed for mixed-use residential and commercial development.
|-
| ||St. Catharines Foundry||[[w:St. Catharines, Ontario|St. Catharines, Ontario]]||[[w:Canada|Canada]]||[[w:Casting|Iron casting]] of engine parts||1952||1995|| Was located at 285 Ontario Street. Operated as part of GM subsidiary McKinnon Industries, Ltd. until 1969 when it became "General Motors of Canada Limited, St. Catharines". Aligned with GM's Central Foundry Division in 1989.
|-
|S <br />(1952 [[w:GMC (automobile)|GMC]] and 1953-1987)<br /><br />3 <br />(1928-1952 [[w:Chevrolet|Chevrolet]])||[[w:St. Louis Truck Assembly|St. Louis Truck Assembly]]||[[w:St. Louis, Missouri|St. Louis, Missouri]]||United States ||[[w:Chevrolet C/K|Chevrolet C/K]] (1960-1986)<br />[[w:Chevrolet C/K (third generation)|GMC C/K (Rounded Line)]] (1973-1986)<br />[[w:Chevrolet C/K (third generation)#R/V-Series (1987–1991)|Chevrolet R/V]] (1987 only)<br />[[w:Chevrolet C/K (third generation)#R/V-Series (1987–1991)|GMC R/V]] (1987 only)||1920<ref>{{cite web|url=https://www.autonews.com/article/20111031/CHEVY100/310319998/built-across-the-nation|author=James B. Treece|title=Built across the nation|publisher=Autonews.com|date=October 31, 2011}}</ref>||1987||Located at 3809 N. Union Blvd. Chevrolet had previously licensed [[w:Gardner (automobile)|Gardner Buggy Co.]] to assemble its cars in St. Louis in 1915. That was replaced by Chevrolet's own St. Louis plant on Union Blvd. Built 149,135 [[w:GMC CCKW 2½-ton 6×6 truck|GMC CCKW 6x6 trucks]] & 6,748 [[w:DUKW|DUKW]] amphibious vehicles during WWII. Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. St. Louis Assembly joined the GM Assembly Division in 1971. Operated 3 assembly lines: car line, truck line, and the Corvette line. 695,214 Corvettes were built from 1954-1981 in the old Fisher Body Mill Building that had been used to assemble wooden bodies in earlier years and was converted to Corvette production. First 1954 Corvette was built in St. Louis on December 28, 1953. Last Corvette built in St. Louis was built July 31, 1981. Chevy Caprice & Impala production ended on August 1, 1980 and the main car line closed down. Was a Truck and Bus Group plant from 1982, only making full-size pickups. Closed August 7, 1987. The second-to-last vehicle produced was a GMC R1500 regular cab, long bed pickup while the last vehicle produced was a Chevy pickup. The old Fisher Body Mill Building where Corvettes were built was demolished in 1992. Some of the main assembly facility was demolished and the remainder was renovated to become the Union Seventy Center. The remainder of the site, roughly 118 acres, was demolished and replaced with trees, grass, a pond, & new access roads. Property is now the Union Seventy Center, an industrial warehouse and distribution campus used by several different tenants. <br />[[w:Chevrolet Series 490|Chevrolet Series 490]]<br /> [[w:Chevrolet Superior|Chevrolet Superior]]<br />[[w:Chevrolet Series AA Capitol|Chevrolet Series AA Capitol]]<br />[[w:Chevrolet Series AB National|Chevrolet Series AB National]]<br />[[w:Chevrolet Series AC International|Chevrolet Series AC International]]<br />[[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]]<br />[[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]]<br />[[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]]<br />[[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]]<br />[[w:Chevrolet Master|Chevrolet Master]], [[w:Chevrolet Deluxe|Chevrolet Deluxe]]<br />[[w:Chevrolet Stylemaster|Chevrolet Stylemaster]], [[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]], <br />[[w:Chevrolet 150|Chevrolet 150]] (1953-1957), [[w:Chevrolet 210|Chevrolet 210]] (1953-1957), [[w:Chevrolet AK Series|Chevrolet AK Series]], [[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1947-1955), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1970), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-1970), [[w:Chevrolet K5 Blazer#1969–1972|Chevrolet K5 Blazer]] (1969-1972), [[w:Chevrolet Corvair|Chevrolet Corvair Forward Control]] (1961-1965), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-1980), [[w:Chevrolet Corvette|Chevrolet Corvette]] (1954-1981), [[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958), [[w:Chevrolet El Camino#First generation (1959–1960)|Chevrolet El Camino]] (1959-1960), [[w:Chevrolet Impala|Chevrolet Impala]] (1958-1980), [[w:Chevrolet Nomad|Chevrolet Nomad]] (1955-1957), [[w:Chevrolet Suburban|Chevrolet Suburban]] (1956, 1959, 1963-1967), [[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959), [[w:Chevrolet C/K (second generation)|GMC C/K (Action Line)]] (1967-1972), [[w:Chevrolet K5 Blazer#1969–1972|GMC Jimmy]] (1970-1972), [[w:GMC New Design|GMC New Design]] (1953-1954), [[w:GMC Suburban|GMC Suburban]] (1947-1955, 1967-1972)
|-
|2||[[w:Sainte-Thérèse Assembly|Ste. Thérèse Assembly]]||[[w:Boisbriand, Quebec|Boisbriand, Quebec]]||[[w:Canada|Canada]]||[[w:Chevrolet Camaro (fourth generation)|Chevrolet Camaro]] (1993-2002)<br />[[w:Pontiac Firebird#Fourth generation (1993–2002)|Pontiac Firebird]] (1993-2002)||1966||2002||Located at 2500 Boulevard De la Grande-Allée. <br />Past models:<br> [[w:Chevrolet Celebrity|Chevrolet Celebrity]] (1987-90)<br />[[w:Oldsmobile Cutlass Ciera|Oldsmobile Cutlass Ciera]] (1988-1991)<br />[[w:Oldsmobile Cutlass#Fifth-generation (intermediate) 1978–1988|Oldsmobile Cutlass/Cutlass Supreme]] (1978-1987)<br />[[w:Oldsmobile 442|Oldsmobile Cutlass 442]] (1979)<br />[[w:Pontiac Bonneville#Seventh generation (1982–1986)|Pontiac Bonneville]] (1983-86)<br />[[w:Pontiac Grand Prix#Fifth generation (1978–1987)|Pontiac Grand Prix]] (1978-1981, 1983-1987)<br />[[w:Pontiac Grand Prix#1986|Pontiac Grand Prix 2+2]] (1986)<br />[[w:Chevrolet Vega|Chevrolet Vega]] (1973-1974)<br />[[w:Pontiac Astre|Pontiac Astre]] (1973-1974)<br />[[w:Chevrolet Monza|Chevrolet Monza]] (1975-1977)<br />[[w:Pontiac Sunbird#First generation (1976–1980)|Pontiac Sunbird]] (1977)<br />[[w:Oldsmobile Starfire#Second generation (1975–1980)|Oldsmobile Starfire]] (1975-77)<br />[[w:Buick Skyhawk#First generation (1975–1980)|Buick Skyhawk]] (1975-1977)<br />[[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1967-1970)<br />[[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1967-70)<br />[[w:Chevrolet Impala|Chevrolet Impala]] (1967-1970)<br />[[w:Chevrolet Caprice|Chevrolet Caprice]] (1967-1970)<br />[[w:Pontiac Catalina|Pontiac Catalina]] (1970-1972)<br /> [[w:Pontiac Grand Ville|Pontiac Grand Ville]] (1971).
Plant demolished and site re-developed as a commercial and residential site known as Faubourg Boisbriand and the Centre for Sports Excellence.
|-
| ||Strasbourg Transmission||[[w:Strasbourg|Strasbourg]]||[[w:France|France]]||[[w:GM 6L50 transmission|6L45/6L50]] 6-speed RWD automatic transmissions||1968||2013||Past products: [[w:GM 5L40-E transmission|5L40]], [[w:GM 4L30-E transmission|4L30]], [[w:Turbo-Hydramatic 180|TH180/3L30]] RWD automatic transmissions
Also supplied 4-, 5-, & 6-speed RWD auto. transmissions to [[w:BMW|BMW]].<br /> Also supplied 3-speed RWD auto. transmissions to Fiat, Peugeot ([[w:Peugeot 604|604]]), & Rover ([[w:Rover SD1|SD1]]).
Sold to Punch Metals International in 2013, which renamed the unit as Punch Powerglide Strasbourg.<ref>{{Cite web|url=https://gmauthority.com/blog/2012/12/general-motors-sells-strasbourg-plant-to-punch-metals-international/|title = General Motors Sells Strasbourg Plant to Punch Metals International|author=Alex Luft|publisher=GMAuthority.com|date = 22 December 2012}}</ref> In 2014, Punch Powerglide Strasbourg began producing [[w:ZF 8HP transmission|8HP 8-speed automatic transmissions]] for [[w:ZF Friedrichshafen|ZF Friedrichshafen]] in addition to the GM 6L50 6-speed automatic transmission. In 2023, Punch Powerglide Strasbourg was renamed Dumarey Powerglide Strasbourg.
|-
| ||General Motors Suisse AG||[[w:Biel|Biel]]||[[w:Switzerland|Switzerland]]||[[w:Chevrolet|Chevrolet]] 1936-1941, 1946-1968<ref>{{cite web|title=What's Wrong With This Picture? And What's Very Right With the Other Ones? They Do Things a Bit Differently In Switzerland|date=15 August 2020 |at=see 20th comment down from 8-15-20 5:59 pm|url=https://www.curbsideclassic.com/blog/qotd/whats-wrong-with-this-picture-and-whats-very-right-with-the-other-ones-they-do-things-a-bit-differently-in-switzerland/}}</ref><br />[[w:Pontiac (automobile)|Pontiac]] 1937-1939, 1946-1959 (None produced in 1955-1956)<br />[[w:Oldsmobile|Oldsmobile]] 1936-1940, 1947-1958<br />[[w:Buick|Buick]] 1936-1940, 1946-1958<br />[[w:LaSalle (automobile)|LaSalle]] 1936 <br />[[w:Cadillac|Cadillac]] 1938-1940<br />[[w:Opel|Opel]] 1936-1941, 1950-1975<br />[[w:Vauxhall Motors|Vauxhall]] 1936-1940, 1946-1971<br />[[w:Ranger (automobile)#Europe|Ranger]] 1970-1975 ||1936||1975|| First car off the line was a [[w:Buick Series 40|Buick Model 41]] on February 5, 1936. Other prewar cars built include the [[w:Buick Series 90|Buick Series 90]] & [[w:Opel P4|Opel P4]]. GM rented the factory from the city council until they bought it on Feb. 20, 1947. Closed August 14, 1975. Last car was an [[w:Opel Rekord D|Opel Rekord D]]. A total of 329,864 cars were assembled. Regular as well as customized vehicles in small series were made like drawing vehicles for the [[w:Swiss Armed Forces|Swiss Armed Forces]]: An open 6-seater [[w:Chevrolet|Chevrolet]] Platform combined with an Opel 2.5L I-6 cylinder; after World War II those "Swiss" cars were also offered to the public as limousines. As well, GM produced luxury upgraded vehicles for the European market like the [[w:Opel Kapitän|Opel Kapitän]], [[w:Opel Rekord P1#Swiss assembly|Rekord]] "Ascona Edition", and the Kadett-based [[w:Opel Kadett B#Opel Ascona (modified Kadett B assembled in Biel, Switzerland)|Opel Ascona 1700]] up to the early 1970s. The [[w:Ranger (automobile)#Europe|Ranger]] was invented by using [[w:Vauxhall Motors|Vauxhall]] structures on an [[w:Opel Rekord C|Opel Rekord C]] body. Also built the first generation [[w:Chevrolet Camaro (first generation)|Chevrolet Camaro]], [[w:Chevrolet Chevelle|Chevrolet Chevelle]], [[w:Chevrolet Chevy II / Nova|Chevrolet Chevy II / Nova]], & the [[w:Chevrolet Corvair|Chevrolet Corvair]] (from CKD kits supplied from Oshawa). Also built the [[w:Vauxhall Victor|Vauxhall Victor]] and the special Victor Riviera as well as the [[w:Vauxhall Cresta|Vauxhall Cresta]] and [[w:Vauxhall Viscount|Vauxhall Viscount]]. Afterwards the plant was used as GM's European central spare parts warehouse until 1992. Most buildings still exist, they now house a [[w:Coop (Switzerland)|Coop]] mall.
|-
| ||SynergyCells||[[w:New Carlisle, Indiana|New Carlisle, Indiana]]||United States||Was supposed to make NCA (Nickel Cobalt Aluminum Oxide) type lithium-ion battery cells for EV's||Was scheduled to open in 2027|| || Originally owned and constructed by SynergyCells, a 49.99/50.01 joint venture between General Motors and [[w:Samsung SDI|Samsung SDI]] established in 2024. GM sold its stake in the plant to partner Samsung SDI in 2026 before the plant opened. Located at 56115 Larrison Road (also referred to as 31949 SR 2)
|-
|T||[[w:General Motors India|Talegaon]]||[[w:Talegaon|Talegaon]], [[w:Pune district|Pune district]], [[w:Maharashtra|Maharashtra]]||[[w:India|India]]||[[w:Chevrolet Spark|Chevrolet Spark]]<br />[[w:Chevrolet Beat|Chevrolet Beat]]<br />[[w:Chevrolet Sail#Second generation (2010)|Chevrolet Sail U-VA]] (hatchback)<br />[[w:Chevrolet Sail|Chevrolet Sail]]||2008||2020||Part of [[w:General Motors India|GM India]]. Production began in September 2008. Closed December 24, 2020. [[w:Hyundai Motor India|Hyundai Motor India]] signed a deal to buy the Talegaon plant from GM in August 2023 and completed the deal to buy the plant in January 2024. After extensive renovations and upgrades, Hyundai reopened the plant in October 2026. The Hyundai plant now includes an engine plant in addition to the vehicle assembly plant.
|-
|T (1953-1996)<br /><br />2 (1928-1952 [[w:Chevrolet|Chevrolet]])||[[w:North Tarrytown Assembly|North Tarrytown Assembly]]||[[w:Sleepy Hollow, New York|North Tarrytown, New York]]||United States||Past models:<br />[[w:Chevrolet 490|Chevrolet 490]]<br />[[w:Chevrolet Superior|Chevrolet Superior]]<br />[[w:Chevrolet Series AA Capitol|Chevrolet Series AA Capitol]]<br />[[w:Chevrolet Series AB National|Chevrolet Series AB National]]<br />[[w:Chevrolet Series AC International|Chevrolet Series AC International]]<br />[[w:Chevrolet Series AD Universal|Chevrolet Series AD Universal]]<br />[[w:Chevrolet Series AE Independence|Chevrolet Series AE Independence]]<br />[[w:Chevrolet Series BA Confederate|Chevrolet Series BA Confederate]]<br />[[w:Chevrolet Standard Six|Chevrolet Standard Six]]<br />[[w:Chevrolet Series CA Eagle / Master|Chevrolet Series CA Eagle / Master]]<br />[[w:Chevrolet Master|Chevrolet Master]]<br />[[w:Chevrolet Deluxe|Chevrolet Deluxe]]<br />[[w:Chevrolet Stylemaster|Chevrolet Stylemaster]]<br /> [[w:Chevrolet Fleetmaster|Chevrolet Fleetmaster]]<br />[[w:Chevrolet AK Series|Chevrolet AK Series]]<br />[[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1947-1955)<br />[[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959) <br />[[w:Chevrolet C/K (first generation)|Chevrolet C/K (Gen.1)]] (1960-1966)<br />[[w:Chevrolet C/K (second generation)|Chevrolet C/K (Action Line)]] (1967-1972)<br />[[w:Chevrolet 150|Chevrolet 150]] (1953-1957)<br />[[w:Chevrolet 210|Chevrolet 210]] (1953-1957)<br /> [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1974)<br />[[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-1970)<br />[[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-1974)<br />[[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958)<br />[[w:Chevrolet Impala|Chevrolet Impala]] (1958-1974)<br />[[w:Chevrolet Nomad|Chevrolet Nomad]] (1955-1957)<br />[[w:Chevrolet Suburban|Chevrolet Suburban]] (1950, 1952, 1963-1964, 1966)<br />[[w:Chevrolet C/K (second generation)|GMC C/K (Action Line)]] (1967-1972)<br />[[w:Chevrolet Nova|Chevrolet Nova]] (1975-1979)<br />[[w:Chevrolet Citation|Chevrolet Citation]] (1980-1985)<br />[[w:Pontiac Ventura#1971–1977|Pontiac Ventura]] (1975-1977)<br />[[w:Pontiac Phoenix#First generation (1977–1979)|Pontiac Phoenix (rwd X-body)]] (1978-1979)<br />[[w:Pontiac Phoenix#Second generation (1980–1984)|Pontiac Phoenix (fwd X-body)]] (1980-1984)<br />[[w:Pontiac 6000|Pontiac 6000]] (1985-1989)<br />[[w:Buick Skylark#Fourth generation (1975–1979)|Buick Skylark (rwd X-body)]] (1976-1979)<br />[[w:Buick Skylark#Fifth generation (1980–1985)|Buick Skylark (fwd X-body)]] (1980-1983)<br />[[w:Buick Century#Fifth generation (1982–1996)|Buick Century]] (1985-1989)<br />[[w:Chevrolet Lumina APV|Chevrolet Lumina APV]] (1990-1993)<br />[[w:Chevrolet Lumina Minivan|Chevrolet Lumina Minivan]] (1994-1996)<br />[[w:Pontiac Trans Sport#First generation (1990-1996)|Pontiac Trans Sport]] (1990-1996)<br />[[w:Oldsmobile Silhouette#First generation (1990–1996)|Oldsmobile Silhouette]] (1990-1996) ||1918 (as part of GM)||1996|| Located at 199 Beekman Avenue. Originally built by [[w:Mobile Company of America|Mobile Company of America]]. In 1904, plant was sold to Maxwell-Briscoe, which later became [[w:Maxwell Motor Company|Maxwell Motor Company]]. Chevrolet bought the complex in 1914, before Chevrolet was part of GM. The first Chevrolet produced in Tarrytown was the [[w:Chevrolet 490|Chevrolet 490]]. The plant became part of GM when Chevrolet became part of GM in 1918. The Fisher Body side of the plant became part of GM's Eastern Aircraft Division during World War II and assembled the wings, center section, trailing edges, motor mount, cabin, windshield, & upholstery for Avenger bombers & Wildcat fighters. Built the 50 millionth Chevrolet, a white 1963 Impala SS on June 10, 1963. Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. Tarrytown Assembly joined the GM Assembly Division in 1968. Passenger car production ended on Feb. 3, 1989. Plant joined Truck and Bus Group for 1990 when it was converted to build GM's new trio of fwd minivans. Plant closed in June 1996. Minivan production moved to [[w:Doraville Assembly|Doraville Assembly]] for 1997. North Tarrytown changed its name to Sleepy Hollow in December 1996. Plant was demolished. Site being redeveloped as Edge-on-Hudson, a mixed use residential/retail/office/park space.
|-
|H||[[w:General Motors Thailand|General Motors Thailand]] Ltd.||Pluak Daeng, [[w:Rayong province|Rayong province]]||[[w:Thailand|Thailand]]||[[w:Chevrolet Colorado|Chevrolet/Holden Colorado]] (RC/RG) <br /> [[w:Chevrolet Trailblazer (SUV)#RG|Chevrolet/Holden Trailblazer & Holden Colorado 7]] (RG)<br />[[w:Chevrolet Cruze|Chevrolet Cruze]]<br />[[w:Daewoo Lacetti|Chevrolet Optra]]<br /> [[w:Daewoo Kalos|Chevrolet Aveo]]<br /> [[w:Daewoo Winstorm|Chevrolet/Holden Captiva]]||2000||2020||Past Models:<br /> [[w:Opel Zafira#Zafira A (1999)|Opel/Vauxhall/Chevrolet Zafira]]<br /> [[w:Opel Zafira#Zafira A (1999)|Holden Zafira (TT)]]<br /> [[w:Subaru Traviq|Subaru Traviq]], [[w:Isuzu D-Max#First generation (RA, RC; 2002)|Isuzu D-Max]],<br> [[w:Alfa Romeo 156|Alfa Romeo 156]] [https://www.just-auto.com/news/thailand-gm-to-make-alfa-156-in-thailand/]<br /> Sold to [[w:Great Wall Motors|Great Wall Motors]] in 2020.<ref>{{Cite web|url=https://gmauthority.com/blog/2020/09/sale-of-gm-rayong-plant-to-great-wall-motors-confirmed/|title=Sale of GM Rayong Plant to Great Wall Motors Confirmed|author=Sam McEachern|publisher=GMAuthority.com|date=30 September 2020}}</ref>
|-
| ||[[w:General Motors Thailand|General Motors Powertrain (Thailand) Ltd.]]||Pluak Daeng, [[w:Rayong province|Rayong province]]||[[w:Thailand|Thailand]]||2.5L ([[w:List of VM Motori engines#R 425 DOHC|R 425 DOHC]]) & 2.8L ([[w:List of VM Motori engines#R 428 DOHC|R 428 DOHC]] & [[w:List of VM Motori engines#A 428 DOHC|A 428 DOHC]]) turbodiesel I4 engines||2011||2020|| Sold to [[w:Great Wall Motors|Great Wall Motors]] in 2020.<ref>{{Cite web|url=https://gmauthority.com/blog/2020/09/sale-of-gm-rayong-plant-to-great-wall-motors-confirmed/|title=Sale of GM Rayong Plant to Great Wall Motors Confirmed|author=Sam McEachern|publisher=GMAuthority.com|date=30 September 2020}}</ref>
|-
| ||Three Rivers||[[w:Three Rivers, Michigan|Three Rivers]], [[w:Michigan|Michigan]]||United States||Rwd Automatic transmissions, propshafts||1979||1994||Located at 1 Manufacturing Way (formerly 1 Hydramatic Drive) off W. Hoffman St. GM bought the closed plant from Continental Can Co. Part of GM St. Joseph County Operations & GM Hydramatic Division. The Hydramatic Division merged with the GM Engine Division to form GM Powertrain in 1991-1992. Sold to [[w:American Axle|American Axle & Manufacturing Inc.]] in 1994.
|-
| ||[[w:Toledo Transmission|Toledo Transmission]]||[[w:Toledo, Ohio|Toledo, Ohio]]||United States||Transmissions, Gears||1916||1957||Located at 900 W. Central Ave. Acquired from Warner Gear Co. by Chevrolet in 1916 before Chevrolet was part of GM. The plant became part of GM when Chevrolet became part of GM in 1918. During WWII, produced truck transfer cases and transmissions for four- and six-wheel-drive military trucks. Replaced by the current Toledo Transmission plant on Alexis Road in 1956. A brick smokestack that says "CHEVROLET" on it is a remnant of this plant and can still be seen today at the intersection of Maplewood Ave. and Arcadia Ave. It is similar to the more famous smokestack that says "OVERLAND", a remnant of the old Willys-Overland Jeep plant, which is only a short distance away from the Chevrolet smokestack.
|-
|M||Toluca Assembly||[[w:Toluca|Toluca]]||[[w:Mexico|Mexico]]||[[w:Chevrolet Kodiak|Chevrolet Kodiak]]||1995<ref>{{cite news|author=Thomas H. Klier, James Rubenstein|title=Mexico’s Growing Role in the Auto Industry Under NAFTA: Who Makes What and What Goes Where|url=https://www.chicagofed.org/publications/economic-perspectives/2017/6.|publisher=Federal Reserve Bank of Chicago, Economic Perspectives, Vol. 41, No. 6|at=see table 11 and footnotes right under table 11|date=September 2017}}</ref>||2008||[[w:Chevrolet C/K|Chevrolet C/K]], [[w:Chevrolet C/K (fourth generation)#C3500HD (1991–2002)|Chevrolet/GMC C3500HD]] (US: 2001-2002), [[w:Chevrolet Silverado#First-generation Silverado / second-generation Sierra (GMT800; 1999)|Chevrolet Silverado]]
|-
| ||Tonawanda Forge||[[w:Tonawanda (town), New York|Tonawanda]], [[w:New York (state)|New York]]||United States||Forged metal components||c.1950||1994||Located at 2390-2392 Kenmore Ave. Sold to [[w:American Axle|American Axle & Manufacturing Inc.]] in 1994. Closed in 2008, subsequently demolished.
|-
| ||Tonawanda Foundry||[[w:Tonawanda (town), New York|Tonawanda]], [[w:New York (state)|New York]]||United States||[[w:Casting|Iron castings]] of engine parts, brake drums. ||1954||1984||Was located on River Road. Was a Chevrolet Foundry. Was part of GM's Central Foundry Division.
|-
|Z||General Motors Turkiye Ltd.||[[w:Torbali|Torbali]], [[w:Izmir Province|Izmir Province]]||[[w:Turkey|Turkey]]||[[w:Opel Vectra|Opel Vectra]] A & B||1990||2000||[[w:Adam Opel AG|Opel plant]]. Converted into a spare parts warehouse.
|-
| ||[[w:Ultium#Production|Ultium Cells LLC - Lansing]]||[[w:Delta Township, Michigan|Delta Township, Michigan]]||United States||Was supposed to make Ultium lithium-ion battery cells for EV's||Was scheduled to open in late 2024 or in 2025|| || Originally owned and constructed by Ultium Cells LLC, a 50/50 joint venture between General Motors and [[w:LG Energy Solution|LG Energy Solution]]. This was supposed to be Ultium Cells' third plant but GM sold its stake in the plant to partner LG Energy Solution in 2025 before the plant opened. Located at 7111 Davis Hwy. It is adjacent to GM's Lansing Delta Township Assembly plant.
|-
| ||General Motors Uruguaya SA||[[w:Sayago|Sayago]], [[w:Montevideo|Montevideo]]||[[w:Uruguay|Uruguay]]||[[w:Chevrolet|Chevrolet]]<br />[[w:Opel Kadett|Opel Kadett]]<br />[[w:Opel Rekord|Opel Rekord]]<br />[[w:Bedford Vehicles|Bedford trucks]]||1962||1986||
|-
|L (1953-1992)<br /><br />20 (1947-1952 [[w:Chevrolet|Chevrolet]])||[[w:Van Nuys Assembly|Van Nuys Assembly]]||[[w:Van Nuys, California|Van Nuys, California]]||United States||[[w:Chevrolet Camaro|Chevrolet Camaro]] (1967-1971, 1978-1992)<br />[[w:Pontiac Firebird|Pontiac Firebird]] (1968-1971, 1978-1992) ||1947||1992||Located at 8000 Van Nuys Blvd. Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. Van Nuys Assembly joined the GM Assembly Division in 1968. Demolished in 1993. Redeveloped into "The Plant", a retail and industrial complex that also includes LAPD and LAFD stations.<br />Past models: [[w:Buick Apollo|Buick Apollo]] (1973-1975), [[w:Buick Skylark#Fourth generation (1975–1979)|Buick Skylark]] (1975-1977), [[w:Chevrolet 150|Chevrolet 150]] (1953-1957), [[w:Chevrolet 210|Chevrolet 210]] (1953-1957), [[w:Chevrolet Advance Design|Chevrolet Advance Design]] (1948-1955), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1950-1969), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1958-1969), [[w:Chevrolet C/K (first generation)|Chevrolet C/K]] (1960-1966), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-1969), [[w:Chevrolet Chevelle|Chevrolet Chevelle]] (1964, 1970-1972), [[w:Chevrolet Corvair|Chevrolet Corvair]] (1963, 1965-1966), [[w:Chevrolet Delray|Chevrolet Delray]] (1954-1958), [[w:Chevrolet El Camino|Chevrolet El Camino]] (1959-1960, 1964, 1970-1972), [[w:Chevrolet Impala|Chevrolet Impala]] (1958-1969), [[w:Chevrolet Monte Carlo|Chevrolet Monte Carlo]] (1970-1972), [[w:Chevrolet Nomad|Chevrolet Nomad]] (1955-1957), [[w:Chevrolet Nova|Chevrolet Nova]] (1972-1977), [[w:Chevrolet Suburban|Chevrolet Suburban]] (1952, 1955, 1959), [[w:Chevrolet Task Force|Chevrolet Task Force]] (1955-1959), [[w:GMC Sprint|GMC Sprint]] (1971-1972), [[w:Oldsmobile Omega|Oldsmobile Omega]] (1973-1977), [[w:Pontiac GTO#Fourth generation|Pontiac GTO]] (1974), [[w:Pontiac Ventura#1971–1977 X-body compact|Pontiac Ventura]] (1972-1976)
|-
| ||Vauxhall - Bedford Die Plant||[[w:Bedford|Bedford]], [[w:Bedfordshire|Bedfordshire]]||[[w:United Kingdom|United Kingdom]]||Tools & Die Manufacturing||1969||1980's||Opened May 1969. Supplemented die-making at the Luton plant.
|-
|8 (since 1993)<br />E (before 1993)||[[w:Vauxhall Ellesmere Port|Vauxhall Ellesmere Port]]||[[w:Ellesmere Port|Ellesmere Port]], [[w:Cheshire|Cheshire]]||[[w:United Kingdom|United Kingdom]]||[[w:Opel Astra#K|Opel]]/[[w:Vauxhall Astra|Vauxhall Astra]] K (5-door, Sports Tourer)<br />[[w:Opel Astra#J|Opel]]/[[w:Vauxhall Astra|Vauxhall Astra]] J (5-door, Sports Tourer)<br />[[w:Opel Astra#H|Opel]]/[[w:Vauxhall Astra|Vauxhall Astra]] H<br />[[w:Opel Astra#G|Opel]]/[[w:Vauxhall Astra|Vauxhall Astra]] G<br />[[w:Opel Astra#F|Opel]]/[[w:Vauxhall Astra|Vauxhall Astra]] F<br />[[w:Opel Kadett E|Opel Kadett E]]/[[w:Vauxhall Astra#Second generation (1984–1991)|Vauxhall Astra Mk II]]<br />[[w:Vauxhall Belmont|Vauxhall Belmont]]<br />[[w:Opel Combo#Kadett Combo (Combo A; 1986)|Opel Kadett Combo/Bedford Astravan & Astramax]]<br />[[w:Vauxhall Astra#First generation (1980–1984)|Vauxhall Astra Mk I]]<br />[[w:Vauxhall Chevette|Vauxhall Chevette]]<br />[[w:Bedford Chevanne|Bedford Chevanne]]<br />[[w:Vauxhall Firenza|Vauxhall Firenza]]<br />[[w:Vauxhall Magnum|Vauxhall Magnum]]<br />[[w:Opel Vectra#Vectra C (2002–2010)|Opel/Vauxhall Vectra C]]<br />[[w:Vauxhall Viva|Vauxhall Viva]]<br />[[w:Holden Astra#Third generation (TR; 1995)|Holden Astra (TR)]]<br />[[w:Holden Astra#Seventh generation (BK, BL; 2016)|Holden Astra (BK)]] (wagon)<br />Vauxhall Viva OHV Inline-4<br />[[w:General Motors 54° V6 engine|General Motors 54° V6 engine]]||1962||2017|| [[w:Vauxhall Motors|Vauxhall plant]]. <br />Also made engines, transmissions, axles, & other components. Component production began in November 1962. Vehicle production began with the Viva on June 1, 1964. Engine production ended in 2004. Sold to [[w:PSA Group|PSA Group]] in 2017. Part of [[w:Stellantis|Stellantis]] since 2021. Absorbing production of electric midsize vans from Luton van plant following Luton's closure on March 28, 2025.
|-
|7 (since 1993)<br />V (before 1993)||Vauxhall Luton (car plant)||[[w:Luton|Luton]], [[w:Bedfordshire|Bedfordshire]]||[[w:United Kingdom|United Kingdom]]||[[w:Vauxhall Carlton|Vauxhall Carlton]]<br />[[w:Vauxhall Cavalier|Vauxhall Cavalier]]<br />[[w:Vauxhall Cresta|Vauxhall Cresta]]<br />[[w:Opel Vectra#Vectra A (1988–1995)|Opel Vectra A]]<br />[[w:Opel Vectra#Vectra B (1995–2002)|Opel/Vauxhall Vectra B]]<br />[[w:Vauxhall Velox|Vauxhall Velox]]<br />[[w:Vauxhall Ventora|Vauxhall Ventora]]<br />[[w:Vauxhall Victor|Vauxhall Victor]]<br />[[w:Vauxhall Viscount|Vauxhall Viscount]]<br />[[w:Vauxhall Viva|Vauxhall Viva]]<br />[[w:Vauxhall VX4/90|Vauxhall VX4/90]]<br />[[w:Vauxhall VX Series|Vauxhall VX Series]]<br />[[w:Vauxhall Wyvern|Vauxhall Wyvern]]<br />[[w:Envoy (automobile)#Vauxhall Victor based models|Envoy F/FB/FC/FD]]<br />Chevrolet Bedford AC/LQ<br />Bedford WHG/WLG/WS/VYC/AS/WT/BYC/K/[[w:Bedford M series|MS/ML]]/OS/OL/[[w:Bedford OB|OB]]<br />[[w:Bedford S type|Bedford S series]]<br />[[w:Bedford SB|Bedford SB]]<br />[[w:Bedford TA|Bedford TA]]<br />[[w:Bedford HC|Bedford HC/JC/PC]]<br />[[w:Bedford CA|Bedford CA/Envoy EA]]<br />[[w:Bedford CF|Bedford CF/CF1/Opel Bedford Blitz]]<br />[[w:Bedford HA|Bedford HA]]<br />[[w:Vauxhall Slant-4 engine|Vauxhall Slant-4 engine]]<br />Vauxhall OHV Inline-6<br />[[w:Churchill tank|Churchill tank]] ||1905 (operations began)<br><br>1925 (part of GM)||2002|| Vauxhall moved from London to Luton in 1905. GM bought Vauxhall in 1925. Chevrolet truck production was moved to Luton in 1930 from the Hendon plant and became known as Chevrolet Bedford. Chevrolet Bedford trucks were replaced by Vauxhall-developed Bedford trucks during 1931 though Chevrolet Bedford production continued through 1932. Bedford trucks and buses were built at Luton until production was moved to Dunstable in 1955. Subsequently, only Bedford vans and car-based light commercial vehicles were still made in Luton. Produced Churchill tanks during World War II. Production ended in 2002 with the [[w:Vauxhall Vectra|Vauxhall Vectra]]. Over 7.4 million vehicles had been produced. The Luton passenger car plant was next to the at the time still active van plant previously used by the IBC Vehicles joint venture. The plant has now been demolished and the site is now being redeveloped for housing.<ref>{{cite news|url=http://www.lutontoday.co.uk/news/politics/redevelopment-of-former-vauxhall-site-given-the-go-ahead-1-5795094|work=Luton Today|title=Redevelopment of former Vauxhall site given the go-ahead|date=8 Jan 2014|access-date=29 September 2014}}</ref> It is being redeveloped into a new Luton suburb called [[w:Napier Park|Napier Park]]. The van plant was closed in 2025 by Stellantis.
|-
| ||GM de Venezuela<br />Caracas||[[w:Antimano|Antimano]], [[w:Caracas|Caracas]]||[[w:Venezuela|Venezuela]]||[[w:Chevrolet Bel Air|Chevrolet Bel Air]]<br />[[w:Chevrolet C/K|Chevrolet C/K]] <br />[[w:Chevrolet Camaro|Chevrolet Camaro]]<br /> [[w:Chevrolet Caprice|Chevrolet Caprice]]<br />[[w:Chevrolet Chevelle|Chevrolet Chevelle]]<br />[[w:Chevrolet Corvair|Chevrolet Corvair]]<br />[[w:Chevrolet Deluxe|Chevrolet Deluxe]]<br />[[w:Chevrolet Impala|Chevrolet Impala]]<br />[[w:Chevrolet Malibu|Chevrolet Malibu]]<br /> [[w:Chevrolet Nova|Chevrolet Nova]]<br /> [[w:Chevrolet Advance Design|Chevrolet Thriftmaster/Loadmaster]]<br />[[w:Opel Kadett|Opel Kadett]]<br />[[w:Opel Rekord|Opel Rekord]] ||1948||1983||Plant closed in 1983 & GM moved to the newer Valencia plant that it bought from Chrysler in 1979.
|-
| ||GM Venezolana<br />Mariara||[[w:Mariara|Mariara]], [[w:Carabobo|Carabobo]]||[[w:Venezuela|Venezuela]]||[[w:Chevrolet Silverado#Second-generation Silverado / third-generation Sierra (GMT900; 2007)|Chevrolet C3500]]<br /> [[w:Isuzu Forward|Chevrolet F-Series]]<br />[[w:Isuzu Giga|Chevrolet E-Series]]<br />[[w:Chevrolet Kodiak|Chevrolet Kodiak]]<br />[[w:Isuzu Elf|Chevrolet N-Series]]<br />||2008||2015||Plant closed in 2015 & N-Series moved to Valencia plant.
|-
| ||GM Venezolana<br />Valencia||[[w:Valencia, Carabobo|Valencia]], [[w:Carabobo|Carabobo]]||[[w:Venezuela|Venezuela]]||[[w:Chevrolet Astra|Chevrolet Astra]]<br />[[w:Chevrolet Aveo (T200)|Chevrolet Aveo]]<br /> [[w:Chevrolet C/K|Chevrolet C/K]] <br />[[w:Chevrolet Celebrity|Chevrolet Celebrity]]<br />[[w:Buick Century#Fifth generation (1982–1996)|Chevrolet Century]]<br />[[w:Chevrolet Chevette#Latin America|Chevrolet Chevette]]<br />[[w:Chevrolet Corsa|Chevrolet Corsa]]<br /> [[w:Chevrolet Cruze#First generation (J300; 2008)|Chevrolet Cruze]]<br />[[w:Chevrolet Tahoe#First generation (1992)|Chevrolet Grand Blazer]]<br />[[w:Chevrolet Kodiak|Chevrolet Kodiak]]<br /> [[w:Chevrolet Malibu#Fourth generation (1978)|Chevrolet Malibu]]<br />[[w:Opel Ascona#Chevrolet Monza|Chevrolet Monza]]<br />[[w:Isuzu Elf|Chevrolet N-Series]]<br />[[w:Daewoo Lacetti|Chevrolet Optra]]<br />[[w:Chevrolet Orlando#First generation (J309; 2011)|Chevrolet Orlando]]<br />[[w:Chevrolet S-10 Blazer|Chevrolet S-10 Blazer]]<br />[[w:Chevrolet Silverado|Chevrolet Silverado]]<br /> [[w:Chevrolet Spark|Chevrolet Spark]]<br />[[w:Chevrolet Tahoe|Chevrolet Tahoe]]<br />[[w:Chevrolet TrailBlazer#First generation (KC; 2001)|Chevrolet TrailBlazer]] ||1979||2017||Originally built by Chrysler de Venezuela SA. GM bought the plant from Chrysler in 1979 and moved their entire operations there from the Caracas plant by 1983. <br />
There had already been production pauses because of part shortages between 2014 and 2016. On May 2, 2017 GM announced the total closure of the plant and deconsolidation of the Venezuelan unit from its accounts due to the illegal seizure of its factory by the Venezuelan government. The plant halted all of its operations of manufacturing vehicles and now only retains the GM brands representation.<ref>{{cite web|url=https://www.semana.com/internacional/articulo/general-motors-cierra-operaciones-en-venezuela/244829|title=General Motors concreta el cierre de sus operaciones en Venezuela|website=Semana.com|date=May 2, 2017}}</ref><ref>{{cite news|url=https://elpais.com/internacional/2017/04/20/actualidad/1492679446_631610.html|title=General Motors suspende operaciones en Venezuela tras el embargo de una planta|newspaper=El País|date=April 20, 2017|via=elpais.com}}</ref><ref>{{cite web|url=http://www.elcomercio.com/actualidad/generalmotors-cierre-operaciones-venezuela-negocios.html|title=General Motors inicia cierre de operaciones en Venezuela|website=El Comercio|date=May 2, 2017}}</ref>
|-
| ||[[w:GM Vietnam|GM Vietnam]]||[[w:Hanoi, Vietnam|Hanoi]]||[[w:Vietnam|Vietnam]]||[[w:Chevrolet Aveo|Chevrolet Aveo]]<br />[[w:Chevrolet Captiva#First generation (C100, C140; 2006)|Chevrolet Captiva]]<br />[[w:Chevrolet Cruze#First generation (J300; 2008)|Chevrolet Cruze]]<br />[[w:Chevrolet Lacetti|Chevrolet Lacetti]]<br />[[w:Chevrolet Spark#Second generation (M200, M250; 2005)|Chevrolet Spark Lite]]<br />[[w:Chevrolet Spark#Third generation (M300; 2009)|Chevrolet Spark]]<br />[[w:Chevrolet Orlando#First generation (J309; 2011)|Chevrolet Orlando]]<br />[[w:Chevrolet Vivant|Chevrolet Vivant]]<br>[[w:Daewoo Cielo|Daewoo Cielo]]<br>[[w:Daewoo Lacetti|Daewoo Lacetti]]<br />[[w:Daewoo Lanos|Daewoo Lanos]]<br>[[w:Daewoo Leganza|Daewoo Leganza]]<br>[[w:Daewoo Magnus|Daewoo Magnus]]<br>[[w:Daewoo Matiz|Daewoo Matiz]]<br>[[w:Daewoo Nubira|Daewoo Nubira]]<br>[[w:Daewoo Damas|Daewoo Damas]]||1995||2018||Originally established as VIDAMCO (a joint venture with a state owned co.) in 1993 by Daewoo Motor Co. Daewoo bought out its Vietnamese partner in April 2000, making VIDAMCO 100% owned by Daewoo Motor Co. Bought by GM in 2002 as part of the creation of [[w:GM Daewoo|GM Daewoo Auto & Technology Co.]] In July 2011, the name of the company was changed from VIDAMCO to GM Vietnam. Sold to [[w:VinFast|VinFast]] in 2018. [[w:VinFast Fadil|VinFast Fadil]] produced under license from GM; is a rebadged [[w:Chevrolet Spark#Fourth generation (M400; 2015)|Chevrolet Spark (M400)]]/[[w:Opel Karl|Opel Karl]].
|-
| ||[[w:Warren Transmission|Warren Transmission]]||[[w:Warren, Michigan|Warren, Michigan]]||United States||[[w:GM-Ford 6-speed automatic transmission|6T70, 6T75, 6T80]] ||1958||2020||Located at 23500 Mound Road. Past transmissions: [[w:GM 4T60-E transmission|4T65-E]], [[w:List of GM transmissions#Hybrid and PHEV|5ET50 EVT]]
Plant originally built in 1941 as a US Navy Ordnance facility operated by the Hudson Motor Car Co. building 20mm Oerlikon anti-aircraft guns. In 1943, the Navy moved the contract from Hudson to Westinghouse, which now operated the Warren plant for the Navy. Ford bought the plant in 1946 and used it to produce axles and ball joints. GM bought the plant in 1958.<ref>{{Cite web|url=https://gmauthority.com/blog/2022/01/old-gm-warren-transmission-plant-set-to-be-demolished/|title = Old GM Warren Transmission Plant Set To Be Demolished|author=Sam McEachern|publisher=GMAuthority.com|date=January 25, 2022}}</ref> The plant became a Chevrolet facility making auto parts. It also made artillery shells in the 1960's and 1970's. The factory was transferred to the Hydramatic Division in 1980, later becoming part of GM Powertrain. [https://nadc1.com/?portfolio=gm-paint-shop-strip-out] Ended production on August 1, 2019. Reopened for production of face masks during the COVID-19 pandemic beginning in March 2020<ref>{{Cite web|url=https://www.freep.com/story/money/cars/general-motors/2020/06/08/gm-warren-transmission-plant-coronavirus/3135789001/|title = GM revived Warren plant for face mask production. What happens when demand slows?|author=Jamie LaReau|publisher=Detroit Free Press|date=June 8, 2020}}</ref>. First face mask produced March 27, 2020. Sold to a developer in 2021.
|-
| ||[[w:Welch Motor Car Company|Welch]]||[[w:Pontiac, Michigan|Pontiac]], [[w:Michigan|Michigan]]||United States||Welch automobiles||1909||1911||Welch Motor Car Company became affiliated with GM in 1909 and GM officially took it over in 1910. Welch ended production in 1911. Welch was noted for having engines with a single overhead cam and hemispherical combustion chambers, unusual technology for its time.
|-
| ||[[w:Welch Motor Car Company|Welch-Detroit]]||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||Welch-Detroit automobiles||1910||1911||The Welch Company of Detroit was a separate company from the Welch Motor Car Company of Pontiac, Michigan and was set up in June 1909 to build a smaller, cheaper car than the Welch made in Pontiac, Michigan. Both Welch companies became affiliated with GM in 1909 and GM officially took over both companies in 1910. Both Welch and Welch-Detroit ended production in 1911. Equipment from the factory was moved to the also GM-owned, former Rainier Motor Car Company factory in Saginaw to make the 1912 Marquette, which was said to be a combination of the previous Rainier and Welch-Detroit brands.
|-
|W||[[w:Willow Run Assembly|Willow Run Assembly]]||[[w:Ypsilanti Township, Michigan|Ypsilanti Twp, Michigan]]||United States||[[w:Chevrolet Caprice#Fourth generation (1991–1996)|Chevrolet Caprice]] sedan & wagon (1991-1993) <br />[[w:Oldsmobile Custom Cruiser#Third generation (1991–1992)|Oldsmobile Custom Cruiser]] wagon (1991-1992)<br />[[w:Buick Roadmaster#1991–1996|Buick Roadmaster Estate wagon]] (1991-1993)||1956||1993||Located at 2625 Tyler Road, to the south of the former Willow Run Transmission plant. Initially opened in 1956 to exclusively build Chevrolet trucks in a 500,000 sq. ft. building that had been used as a warehouse by GM and was previously used by Kaiser-Frazer's engineering dept. [https://aadl.org/aa_news_19561208-chevrolet_willow_run_truck_plant_gains_momentum] In 1958-59, plant was expanded into a 2-part Chevrolet & Fisher Body passenger car assembly plant to make the Chevrolet Corvair. First completed 1960 Corvair rolls off the line on July 7, 1959 [https://www.facebook.com/photo/?fbid=792700342891740&set=a.453129043515540]. Added the Chevy II (Nova) for 1962. Was part of the [[w:Chevrolet Assembly Division|Chevrolet Assembly Division]]. Chevrolet Assembly Division plants, along with the onsite Fisher Body plants, were gradually transferred to the GM Assembly Division which replaced the BOP Assembly Division in 1965. Willow Run Assembly joined the GM Assembly Division in 1971. Idled in Nov. 1978. Converted in 1978-79 to build the fwd X-body compacts for 1980. Began building fwd X-cars on January 17, 1979. In 1984, joined the new BOC group in preparation for its conversion to build the new fwd H-body full-size cars for 1986. Final H-car built on May 19, 1989 and in September, moved to the CPC group. Converted to build the body-on-frame, rwd B-body for 1991. Chevy Caprice sedan production began in January 1990 followed by station wagons in July. Closed July 1993. B-body production consolidated in Arlington, TX. Assembly plant was 2.5 million sq. ft. when it closed. The Willow Run Assembly Plant is now the Willow Run Business Center, a multi-tenant warehouse and distribution facility, part of which is leased by GM to distribute automotive service parts, which is known as Ypsilanti #87 Processing Center, part of GM Customer Care and Aftersales. The nearby Willow Run Company Vehicle Operations site at 2901 Tyler Road was sold to International Turbine Industries in April 2013.<ref name=WR-Assembly-sold>{{cite news|author=Katrease Stafford|title=GM Willow Run plant redevelopment: Aircraft maintenance firm buys 1 building|url=https://www.annarbor.com/news/ypsilanti/gm-willow-run-plant-redevelopment-aircraft-maintenance-firm-purchases-facility-25-new-jobs-expected/|access-date=24 April 2013|newspaper=AnnArbor.com|date=April 2, 2013}}</ref>
Past models: [[w:Chevrolet Task Force|Chevrolet Task Force]] (1957-1958), [[w:Chevrolet Suburban#Fourth generation (1955)|Chevrolet Suburban]] (1958), [[w:Chevrolet Corvair|Chevrolet Corvair]] (1960-1969), [[w:Chevrolet Nova|Chevrolet Chevy II/Nova]] (1962-79), [[w:Acadian (automobile)|Acadian]] (Canada only: 1968-71), [[w:Pontiac Ventura#1971–1977 X-body compact|Pontiac <br> Ventura]] (1971-1977), [[w:Pontiac GTO#Fourth generation|Pontiac GTO]] (1974), [[w:Pontiac Phoenix#First generation (1977–1979)|Pontiac Phoenix (rwd <br> X-body)]] (1977-1979), [[w:Oldsmobile Omega|Oldsmobile Omega (rwd X-body)]] (1973-1979), [[w:Buick Skylark#Fourth generation (1975–1979)|Buick Skylark (rwd <br> X-body)]] (1977-1978), [[w:Chevrolet Citation|Chevrolet Citation]] (1980-1981, 1984-1985), [[w:Oldsmobile Omega#Third generation (1980–1984)|Oldsmobile Omega (fwd X-body)]] (1980-1984), [[w:Buick Skylark#Fifth generation (1980–1985)|Buick Skylark (fwd <br> X-body)]] (1980-1985), [[w:Oldsmobile 88#Ninth generation (1986–1991)|Oldsmobile 88]] (1986-89), [[w:Pontiac Bonneville#Eighth generation (1987–1991)|Pontiac Bonneville]] (1987-1989).
|-
| ||[[w:Willow Run Transmission|Willow Run Transmission]]||[[w:Ypsilanti, Michigan|Ypsilanti, Michigan]]||United States|| [[w:Hydramatic|Hydramatic]] automatic transmissions <br /> [[w:GM 4L80-E transmission|4L80-E transmission]]<br />[[w:GM 4L80-E transmission|4L85-E transmission]]<br />[[w:GM 4T60-E transmission|4T60-E transmission]]<br />[[w:GM 4T60-E transmission|4T65-E transmission]]<br />[[w:GM 4T80-E transmission|4T80-E transmission]]<br />[[w:GM 6L50 transmission|6L50-E transmission]]<br />[[w:GM 6L80 transmission|6L80-E transmission]]<br />[[w:GM 6L90 transmission|6L90-E transmission]]<br />||1953||2010||Began as the Ford [[w:B-24 Liberator|B-24 Liberator]] bomber plant in World War II which opened in 1941, grew from 3.5 million square feet to nearly 5 million square feet under GM. Ford built the factory and sold it to the US government, which leased it back to Ford for the duration of WWII. Ford Motor had first option on the plant after war production ended, an option it ultimately chose not to exercise. The factory was instead leased and then sold to [[w:Kaiser-Frazer|Kaiser-Frazer]] and was their main production site from 1946-1953, when they moved production to Toledo, OH following Kaiser-Frazer's acquisition of Toledo-based [[w:Willys-Overland|Willys-Overland]]. In addition to automobiles, [[w:Kaiser-Frazer|Kaiser-Frazer]] also built [[w:C-119 Flying Boxcar|C-119 Flying Boxcar]] cargo planes at Willow Run under license from [[w:Fairchild Aircraft|Fairchild Aircraft]], producing an estimated 88 C-119s between 1951 and 1953. In 1953, GM first leased then bought the plant to replace the Detroit Transmission Division factory in Livonia, Michigan that had burned down earlier in 1953. Whatever equipment could be salvaged was brought from the destroyed Detroit Transmission Division plant in Livonia to Willow Run in 1953. Also supplied Hydramatics to Lincoln, Nash, Hudson, Rambler, Kaiser, and Willys. It was also initially supplied to Rolls-Royce before Rolls-Royce set up their own Hydramatic production line in the UK building Hydramatics under license from GM. Rolls-Royce also supplied Armstrong-Siddeley and [[w: British Motor Corporation|BMC]], which in turn supplied other British automakers like Jensen that used BMC’s biggest engines. The Detroit Transmission Division became the Hydramatic Division in October 1963. The Hydramatic Division merged with the GM Engine Division to form GM Powertrain in 1991-1992. Over the years, GM expanded the plant to almost 5 million sq. ft. In addition to automatic transmissions, GM also produced the M16A1 rifle and the M39A1 20mm autocannon for the US military during the Vietnam War at Willow Run Transmission. GM Powertrain also had an on-site engineering center. The plant closed in December 2010. A small portion of the plant was saved by the [[w:Yankee Air Museum|Yankee Air Museum]] to be turned into the National Museum of Aviation and Technology at Historic Willow Run but more than 95% of the plant was demolished from 2013-2014. The rest of the site has been redeveloped into the [[w:American Center for Mobility|American Center for Mobility]], an autonomous- and connected-driving testing center which opened in December 2017.
|-
|Y (1964 [[w:Chevrolet|Chevrolet]] and 1965-2010) <br /><br /> W <br /> (Pre-1965 [[w:Oldsmobile|Oldsmobile]] & [[w:Pontiac (automobile)|Pontiac]])<br /><br /> 5 (Pre-1965 [[w:Buick|Buick]]) || [[w:Wilmington Assembly|Wilmington Assembly]] || [[w:Wilmington, Delaware|Wilmington, Delaware]]||United States||[[w:Pontiac Solstice|Pontiac Solstice]] (2006-2010)<br />[[w:Saturn Sky|Saturn Sky]] (2007-2010) <br />[[w:Opel GT#GT (roadster) (2007–2010)|Opel GT]] (Europe: 2007-2010) <br />[[w:Daewoo G2X#Daewoo G2X|Daewoo G2X]] (S. Korea: 2007-2009) ||1947||2009||Located at 801 Boxwood Road. Was originally part of the [[w:Buick-Oldsmobile-Pontiac Assembly Division|Buick-Oldsmobile-Pontiac Assembly Division]]. Wilmington began making Chevrolet passenger cars for 1964. BOP Assembly Division became GM Assembly Division in 1965. Converted to make the Chevette small car for 1976. Switched back to making B-body full-size cars for 1985. Converted to make the fwd Chevy Corsica & Beretta for 1987. Then built Corsica's replacement, Malibu, for 1997. Converted to build Saturn's 2nd model range, the Opel Vectra-based, plastic body paneled Saturn L-Series for 2000. Converted to build the rwd, Kappa platform small sports cars for 2006 beginning with the Pontiac Solstice. Final car produced was a Solstice roadster on July 28, 2009. The plant was sold to [[w:Fisker Automotive|Fisker Automotive]] in 2010, which had planned to build its [[w:Fisker Atlantic|2nd model line]] there. However, Fisker Automotive went bankrupt in Nov. 2013 before ever building any cars in Wilmington. Fisker Automotive's assets, including the Wilmington plant, were purchased out of bankruptcy by Wanxiang Group in February 2014. Wanxiang did not use the plant and sold it in 2017. Plant was demolished in 2019. A large part of the site is now an Amazon fulfillment center.<br />Past models: [[w:Chevrolet Corsica|Chevrolet Corsica]] (1987-1996), [[w:Chevrolet Beretta|Chevrolet Beretta]] (1987-1996), [[w:Pontiac Tempest#Fourth generation (1987–1991)|Pontiac Tempest (Canada only)]] (1988-91), [[w:Chevrolet Malibu#Fifth generation (1997)|Chevrolet Malibu]] (1997-1999), [[w:Saturn L-Series|Saturn L-Series]] (2000-2005), [[w:Chevrolet Chevette|Chevrolet Chevette]] (1976-1984), [[w:Pontiac 1000|Pontiac 1000]] (1981-1984), [[w:Pontiac Acadian|Pontiac Acadian]] (Canada only: 1976-1984), [[w:Buick Centurion|Buick Centurion]] (1971-1973), [[w:Buick Electra|Buick Electra]] (1959-1962, 1971-1974), [[w:Buick Estate#1971-1976|Buick Estate]] (1972-1973, 1975), [[w:Buick GS|Buick GS]] (1968-1969), [[w:Buick Invicta|Buick Invicta]] (1959-1962), [[w:Buick LeSabre|Buick LeSabre]] (1959-1975), [[w:Buick Limited#1958 Limited|Buick Limited]] (1958), [[w:Buick Roadmaster|Buick Roadmaster]] (1948-1950, 1955-1957), [[w:Buick Skylark#Third generation (1968–1972)|Buick Skylark]] (1968-1969), [[w:Buick Special|Buick Special]] (1950, 1953-1958), [[w:Buick Super|Buick Super]] (1954-1958), [[w:Buick Wildcat|Buick Wildcat]] (1963-1970), [[w:Chevrolet Bel Air|Chevrolet Bel Air]] (1964), [[w:Chevrolet Biscayne|Chevrolet Biscayne]] (1964-1968), [[w:Chevrolet Caprice|Chevrolet Caprice]] (1966-1975, 1985-1986), [[w:Chevrolet Impala|Chevrolet Impala]] (1964-1975, 1985), [[w:Oldsmobile 88|Oldsmobile 88]] (1949-1963, 1985), [[w:Oldsmobile 98|Oldsmobile 98]] (1948-1963), [[w:Oldsmobile Starfire#First generation (1961–1966)|Oldsmobile Starfire]] (1961-1963), [[w:Pontiac Bonneville|Pontiac Bonneville]] (1958-1963), [[w:Pontiac Catalina|Pontiac Catalina]] (1959-1960, 1962-1963), [[w:Pontiac Chieftain|Pontiac Chieftain]] (1950-1951, 1954-1957), [[w:Pontiac Grand Prix#First generation (1962–1964)|Pontiac Grand Prix]] (1962-1963), [[w:Pontiac Star Chief|Pontiac Star Chief]] (1955-1958, 1960), [[w:Pontiac Ventura#1960–1970|Pontiac Ventura]] (1960-1961)
|-
| ||[[w:Windsor Transmission|Windsor Transmission]]||[[w:Windsor, Ontario|Windsor, Ontario]]||[[w:Canada|Canada]]||[[w:GM 4T40 transmission|4T40E/4T45E transmission]]<br />Transmission components||1920||2010||Plant was originally in [[w:Walkerville, Ontario|Walkerville]] until Walkerville was annexed by Windsor in 1935. Was located at 1550 Kildare Road. Walker Road is at the back of the property. Previous: 1920 - 1928 axles and parts, 1928 - 1963 engines (including the [[w:Chevrolet Stovebolt engine|Chevrolet Stovebolt OHV inline-6 engine]] and Buick engines from 1935-1942). The Windsor plant was taken over by McKinnon Industries Ltd., a GM subsidiary based in St. Catharines, Ontario, Canada in 1963. As a result, engine production in Windsor was moved to St. Catharines and transmission production in St. Catharines was moved to Windsor. At this point, the Windsor plant was renamed the Windsor Transmission Plant. In 1969, McKinnon Industries Ltd. was integrated into GM Canada rather than being a separate subsidiary. Windsor Transmission was closed on July 28, 2010. The 4-spd. automatics made in Windsor were discontinued and replaced by 6-spd. automatics made in St. Catharines. Sold in 2014 and completely demolished by 2017. Site now occupied by MotiPark Ltd.
|-
| ||Windsor Trim||[[w:Windsor, Ontario|Windsor, Ontario]]||[[w:Canada|Canada]]||Seat assemblies and door trim panels||1965||1996|| Located at 1600 Lauzon Rd. Sold to Peregrine, Inc. in 1996 and then sold to [[w:Lear Corp.|Lear Corp.]] in 1999. Closed by Lear in 2005. Demolished in 2009. Part of the property is now the [[w:WFCU Centre|WFCU Centre]] and part will be residential homes.
|-
| ||[[w:Wixom Performance Build Center|Wixom Performance Build Center]]||[[w:Wixom, Michigan|Wixom, Michigan]]||United States||[[w:GM LS engine|6.2L LS3 V8]] [[w:Chevrolet Corvette (C6)#Grand Sport|(C6 Corvette Grand Sport coupe w/manual transmission only)]]<br />[[w:GM LS engine|7.0L LS7 V8]]<br />[[w:GM LS engine|6.2L supercharged LS9 V8]]<br />[[w:Northstar engine series#LC3|4.4L supercharged LC3 Northstar V8]] ||2004||2013<ref>{{Cite web|url=https://www.torquenews.com/106/gm-closing-wixom-performance-engine-facility-build-your-own-engine-program-ends|title=GM Closing Wixom Performance Engine Facility, Build-Your-Own-Engine Program Ends|author=Patrick Rall|date=September 20, 2013|publisher=Torquenews.com}}</ref>||Located at 30240 Oak Creek Dr.<br> Performance Build Center relocated to <br> Bowling Green Assembly in 2014.
|-
| ||[[w:Detroit Assembly#LaSalle Factory/DeSoto Factory|Wyoming Assembly (LaSalle Wyoming Ave. plant)]]||[[w:Detroit|Detroit]], [[w:Michigan|Michigan]]||United States||[[w:LaSalle (automobile)|LaSalle]] 1927-1933||1926||1934||Located at 6000 Wyoming Avenue. Originally built to produce Liberty aircraft engines in World War I, opening in 1917. In 1919, was taken over by Saxon Motor Co., owned by Hugh Chalmers of Chalmers Motor Co. GM bought the plant in 1926 and built the LaSalle there from 1927. GM sold Wyoming Assembly to Chrysler in 1934, which then used it to build its DeSoto brand. After the DeSoto brand was discontinued in late 1960, became Wyoming Export plant which was used to prepare vehicles for export. Plant closed in 1980. Plant was demolished in 1992.
|-
| ||[[w:GMC (marque)#History|Yellow Truck & Coach Manufacturing Company]]||[[w:Chicago|Chicago]], [[w:Illinois|Illinois]]||United States||Yellow Cab taxis<br>Yellow Coach buses<br>Yellocab trucks (T-1, T-2, and T-3)||1925||1928||Located on West Dickens Ave. In 1925, General Motors Truck Corp., the parent of the GMC brand, merged with Yellow Cab Manufacturing Company (including its Yellow Coach Mfg. Co. bus-making subsidiary) to form Yellow Truck & Coach Manufacturing Company, in which GM owned a majority stake of 57%. Yellocab trucks were discontinued during 1927 and were replaced with new light-duty GMC trucks (T-10 & T-20). During 1928, bus and taxi production was consolidated at the GMC Pontiac Central plant in Pontiac, Michigan. The Chicago plant was closed and sold.
|-
| ||Yellow Sleeve-Valve Engine Works||[[w:East Moline|East Moline]], [[w:Illinois|Illinois]]||United States||Yellow-Knight engines||1925||1929||Production began in 1923. In 1925, General Motors Truck Corp., the parent of the GMC brand, merged with Yellow Cab Manufacturing Company (including its Yellow Coach Mfg. Co. bus-making subsidiary) to form Yellow Truck & Coach Manufacturing Company, in which GM owned a majority stake of 57%. The Northway Motor Division of Detroit was transferred to General Motors Truck Corp. as part of that merger but was liquidated in 1926. During 1929 and 1930, Yellow Sleeve Valve Engine production equipment was transferred from East Moline, Illinois to Pontiac West Plant 1 in Pontiac, Michigan. The East Moline plant was closed at the end of 1929 and was sold.
|-
| ||[[w:Yulon GM|Yulon GM]]||[[w:Miaoli|Miaoli]]||[[w:Taiwan|Taiwan]]||[[w:Buick Excelle#Taiwan|Buick Excelle]]<br />[[w:Buick LaCrosse#China|Buick LaCrosse]] ||2006||2012||A joint venture owned 49% by GM & 51% by [[w:Yulon|Yulon Motor Co]]. Yulon bought GM's stake in the venture in Dec. 2008. Production continued after the sale through licensing but cooperation between GM & Yulon ended in 2012.
|-
| ||General Motors Zaire||[[w:Kinshasa|Kinshasa]]||[[w:Zaire|Zaire]] (now [[w:Democratic Republic of the Congo|D.R. Congo]])||[[w:Chevrolet|Chevrolet]] trucks<br />[[w:Opel Kadett|Opel Kadett]]<br />[[w:Opel Rekord|Opel Rekord]]<br />[[w:Opel Commodore|Opel Commodore]]<br />[[w:Opel Ascona|Opel Ascona]]<br />[[w:Bedford Vehicles|Bedford Trucks]]||1975||1987||GM sold the plant in 1987 to local businessmen. Plant was looted bare in 1991.
|}
== Former partner factories ==
{| class="wikitable sortable" style="font-size:90%"
!VIN !! Name !! City/State !! Country !! class="unsortable" | Products !! Opened !! Idled !! class="unsortable" | Comments
|-
|H||[[w:AM General#Hummer brand|AM General]] Commercial plant||[[w:Mishawaka, Indiana|Mishawaka, Indiana]]||United States||[[w:Hummer H2|Hummer H2]] (2003-2009)||2002||2009||Located at 12900 McKinley Highway. Built under contract for GM by AM General. Plant later built the [[w:Mercedes-Benz R-Class|Mercedes-Benz R-Class]] under contract for Mercedes for export to China from 2015-2017 as well as the [[w:VPG MV-1|VPG MV-1]] under contract for VPG (later Mobility Ventures MV-1; Mobility Ventures being an AM General subsidiary that took over VPG's assets after VPG went bankrupt). MV-1 was made from 2011-2016.
|-
|E||[[w:AM General#Hummer brand|AM General]] Military plant||[[w:Mishawaka, Indiana|Mishawaka, Indiana]]||United States||[[w:Hummer H1|Hummer H1]] (2000-2006)||1992 (civilian production)||2006 (civilian production)||Located at 13200 McKinley Highway. This plant built the military [[w:Humvee|Humvee]] from fall 1984 and civilian Hummers from 1992. In Dec. 1999, GM bought the rights to the Hummer brand from AM General. AM General still handled manufacturing but GM handled marketing and distribution. At this point, the AM General Hummer was renamed Hummer H1. H1 built under contract for GM by AM General. Humvee production for military use continued after 2006.
|-
| ||Asoke Engineering (Asoke Motors)||Bangkok?||[[w:Thailand|Thailand]]||[[w:Bedford HA#The BTV|Plai Noi]]<br />[[w:Opel Rekord|Opel Rekord]]||Mid-1970s||Early-1980s||A version of GM's [[w:Bedford HA#The BTV|BTV]] called the Plai Noi was assembled in Thailand in 1974.
|-
| ||Associated Industries Ltd.||[[w:Georgetown, Guyana|Georgetown]]||[[w:Guyana|Guyana]]||[[w:Bedford HA#The BTV|Tapir]]||Mid-1970's||Late-1970's||A version of GM's [[w:Bedford HA#The BTV|BTV]] called the Tapir was assembled in Guyana.
|-
| ||Associated Motor Industries Ltd.||[[w:Jurong|Jurong]] (Jurong Industrial Estate)||[[w:Singapore|Singapore]]||[[w:Chevrolet Impala|Chevrolet Impala]]<br />[[w:Statesman (automobile)#HQ|Chevrolet 350]]<br />[[w:Vauxhall Motors|Vauxhall]] including: <br />[[w:Vauxhall Victor|Victor]]<br />[[w:Vauxhall Viva|Viva]]<br />[[w:Vauxhall VX4/90|VX4/90]]||1968||1975||Jointly owned by Wearne Brothers Limited & Motor Investments Bhd. Associated Motor Industries Ltd. assembled vehicles under license from GM beginning in 1968 as well as brands from other automakers (Austin, Morris, & Renault).
|-
| ||Associated Motor Industries Malaysia Sdn. Bhd.||[[w:Batu Tiga|Batu Tiga]], [[w:Selangor|Selangor]]||[[w:Malaysia|Malaysia]]||[[w:Holden|Holden]]<br />||1968||1971 (?)||Associated Motor Industries Malaysia assembled Holden vehicles under license from GM beginning in 1968 as well as brands from other automakers.
|-
|C||[[w:Automobilwerk Eisenach|Automobilwerk Eisenach]] (AWE)||[[w:Eisenach|Eisenach]]||[[w:Germany|Germany]]||[[w:Opel Vectra#Vectra A (1988–1995)|Opel Vectra]] A<br />||1990||1991|| The old [[w:Wartburg (marque)|Wartburg]] plant built vehicles for Opel for a short time before closing permanently.
|-
| ||[[w:Avtotor|Avtotor]]||[[w:Kaliningrad|Kaliningrad]]||[[w:Russia|Russia]]||[[w:Chevrolet Aveo (T200)|Chevrolet Aveo]], [[w:Chevrolet Captiva#First generation (C100, C140; 2006)|Chevrolet Captiva]], [[w:Chevrolet Epica|Chevrolet Epica]], [[w:Chevrolet Lacetti|Chevrolet Lacetti]], [[w:Chevrolet Malibu#Eighth generation (2013)|Chevrolet Malibu]], [[w:Chevrolet Orlando#First generation (J309; 2010)|Chevrolet Orlando]], [[w:Chevrolet Rezzo|Chevrolet Rezzo]], [[w:Chevrolet Tahoe#Second generation (2000) |Chevrolet Tahoe (GMT800)]], [[w:Chevrolet Tahoe#Third generation (2007)|Chevrolet Tahoe (GMT900)]], [[w:Chevrolet Trailblazer (SUV)#First generation (KC; 2001)|Chevrolet Trailblazer]], [[w:Cadillac BLS|Cadillac BLS]], [[w:Cadillac CTS|Cadillac CTS]], [[w:Cadillac Escalade#Second generation (2001)|Cadillac Escalade (GMT800)]], [[w:Cadillac Escalade#Third generation (2007)|Cadillac Escalade (GMT900)]], [[w:Cadillac SRX|Cadillac SRX]], [[w:Cadillac STS|Cadillac STS]], [[w:Hummer H2|Hummer H2]], [[w:Hummer H3|Hummer H3]], [[w:Opel Antara|Opel Antara]], [[w:Opel Astra|Opel Astra]], [[w:Opel Insignia|Opel Insignia]], [[w:Opel Mokka#First generation (J13; 2012)|Opel Mokka]], [[w:Opel Meriva|Opel Meriva]], [[w:Opel Zafira|Opel Zafira]]||2004||2015||Built under contract by [[w:Avtotor|Avtotor]] for GM. GM ended the contract in 2015.
|-
| ||Azia Avto||[[w:Ust-Kamenogorsk|Ust-Kamenogorsk]]||[[w:Kazakhstan|Kazakhstan]]||[[w:Chevrolet Aveo (T200)|Chevrolet Aveo]], [[w:Chevrolet Captiva#First generation (C100, C140; 2006)|Chevrolet Captiva]], [[w:Chevrolet Cruze|Chevrolet Cruze]], [[w:Chevrolet Epica|Chevrolet Epica]], [[w:Chevrolet Lacetti|Chevrolet Lacetti]], [[w:Chevrolet Malibu#Eighth generation (2013)|Chevrolet Malibu]], [[w:Chevrolet Orlando#First generation (J309; 2010)|Chevrolet Orlando]], [[w:Chevrolet Trax|Chevrolet Tracker]]||2007||2018||Built under contract by Azia Avto for GM.
|-
| ||[[w:Bangchan General Assembly|Bangchan General Assembly]] Co., Ltd.||[[w:Khan Na Yao district|Khan Na Yao district]], [[w:Bangkok|Bangkok]]||[[w:Thailand|Thailand]]||[[w:Opel Kadett|Opel Kadett]] <br />[[w:Opel Rekord|Opel Rekord]] <br />[[w:Holden Kingswood|Holden Monaro LS]]<br />[[w:Statesman (automobile)|Chevrolet De Ville]]||1970||1987 (?)||[[w:Isuzu|Isuzu]] invested in Bangchan in 1979 but then sold its stake to [[w:Honda|Honda]] in 1987. Phra Nakorn Automobile Group became sole owner of Bangchan in 2005.
|-
|B||[[w:Gruppo Bertone|Gruppo Bertone]]||[[w:Grugliasco|Grugliasco]]||[[w:Italy|Italy]]||[[w:Opel Kadett#Kadett E (1984–1995)|Opel Kadett E convertible]]<br />[[w:Vauxhall Astra#Second generation (1984–1993)|Vauxhall Astra Mark 2 convertible]]<br />[[w:Opel Astra#F|Opel/Vauxhall Astra F convertible]]<br />[[w:Opel Astra#G|Opel/Vauxhall Astra G coupe & convertible]]<br />[[w:Holden Astra#Fourth generation (TS; 1998)|Holden Astra convertible (TS)]] ||1987||2006||Built under contract by [[w:Gruppo Bertone|Gruppo Bertone]] for Opel/Vauxhall.
|-
| ||Central African Transport Company (CATCO)||?||[[w:Malawi|Malawi]]||[[w:Bedford HA#The BTV|Zonse]]||Mid-1970's||?||A version of GM's [[w:Bedford HA#The BTV|BTV]] called the Zonse was assembled in Malawi.
|-
| ||Centroamericana de Ensamblaje y Fabricación||(?)||[[w:Honduras|Honduras]]||[[w:El Compadre (car)|Compadre]]||1970s||(?)||A version of GM's [[w:Bedford HA#The BTV|BTV]] called the Compadre was assembled in Honduras.
|-
| ||Champion Motors||[[w:Shah Alam|Shah Alam]], [[w:Selangor|Selangor]]||[[w:Malaysia|Malaysia]]||[[w:Chevrolet Impala|Chevrolet Impala]]<br />[[w:Vauxhall Victor|Vauxhall Victor]]<br />[[w:Vauxhall Viva|Vauxhall Viva]]<br />[[w:Bedford Vehicles|Bedford trucks]] including [[w:Bedford TJ|Bedford TJ]]||1968||1982 (?)||Champion Motors assembled vehicles under license from GM beginning in 1968. Champion Motors was renamed Assembly Services Sdn. Bhd. (ASSB) in 1975. The last products still being built for GM were Bedford trucks. A joint venture of Toyota & [[w:UMW Holdings|UMW Holdings Bhd.]] called Sejati Motor took over ASSB in 1982. Sejati Motor was renamed UMW Toyota Motor in 1987. ASSB is a subsidiary of UMW Toyota Motor.
|-
| ||Chinese Automobile Co., Ltd.||[[w:Xinzhuang District|Xinzhuang District]], [[w:New Taipei City|New Taipei City]]||[[w:Taiwan|Taiwan]]||[[w:Opel Astra|Opel Astra]] F & G<br />[[w:Opel Vectra#Vectra B (1995–2002)|Opel Vectra]] B ||1993||2000||GM ended the assembly contract in 2001.
|-
| ||Fabrica Superior de Centro America S.A.||?||[[w:El Salvador|El Salvador]]||[[w:Bedford HA#The BTV|Cherito]]||1973||1975||A version of GM's [[w:Bedford HA#The BTV|BTV]] called the Cherito was assembled in El Salvador. It was distributed by Auto Palace.
|-
| ||Fernandes Autohandel||?||[[w:Suriname|Suriname]]||[[w:Bedford HA#The BTV|Moetete]]||1973||1975||A version of GM's [[w:Bedford HA#The BTV|BTV]] called the Moetete was assembled in Suriname.
|-
| ||[[w:GAZ|GAZ]]||[[w:Nizhny Novgorod|Nizhny Novgorod]]||[[w:Russia|Russia]]||[[w:Chevrolet Aveo#Second generation (T300; 2012)|Chevrolet Aveo]]||2013||2015||Built under contract by [[w:GAZ|GAZ]] for GM. GM ended the contract in 2015.
|-
| ||Genoto (General Otomotiv Sanayi ve Ticaret AS)||[[w:Kozyatağı|Kozyatağı]], [[w:Istanbul|Istanbul]]||[[w:Turkey|Turkey]]||[[w:Bedford Vehicles|Bedford trucks]] including [[w:Bedford TK|Bedford TK]] (KG EJR & KBC 10 & 570)||1965||1986||Built Bedford trucks under license from GM, sometimes rebadged as Genoto.
|-
|E||[[w:Heuliez|Heuliez]]||[[w:Cerizay|Cerizay]]||[[w:France|France]]||[[w:Opel Tigra#Tigra TwinTop B (2004–2009)|Opel/Vauxhall Tigra TwinTop B]]<br />[[w:Opel Tigra#Tigra TwinTop B (2004–2009)|Holden Tigra (XC)]]||2004||2009||Built under contract by [[w:Heuliez|Heuliez]] for Opel/Vauxhall.
|-
| ||[[w:Hindustan Motors|Hindustan Motors]]||[[w:Uttarpara|Uttarpara]], [[w:West Bengal|West Bengal]]||[[w:India|India]]||[[w:Vauxhall Motors|Vauxhall]] models under Hindustan name including [[w:Hindustan Contessa|Hindustan Contessa]] (based on [[w:Vauxhall Victor|Vauxhall Victor]])<br />[[w:Bedford Vehicles|Bedford]] models including [[w:Bedford TJ|Bedford TJ]]<br />[[w:Allison Transmission|Allison Transmission]]<br />[[w:Terex|Terex]]||1957 (?)||2004||Built under license by [[w:Hindustan Motors|Hindustan Motors]].
|-
| ||INDEVESA, S.A. (Industrias Nicaraguenses De Vehiculos SA)||(?)||[[w:Nicaragua|Nicaragua]]||[[w:Bedford HA#The BTV|Pinolero]]||1974||(?)||The Nicaraguan state-owned company produced a version of GM's BTV called the Pinolero.
|-
| ||Industrias Superior||[[w:Guatemala City|Guatemala City]]||[[w:Guatemala|Guatemala]]||[[w:Bedford HA#The BTV|Chato]]||1977||1970's||A version of GM's [[w:Bedford HA#The BTV|BTV]] called the Chato was assembled in Guatemala. It was distributed by CIDEA.
|-
|3||[[w:Isuzu|Isuzu]] Kawasaki plant||[[w:Kawasaki, Kanagawa|Kawasaki, Kanagawa]]||[[w:Japan|Japan]]||[[w:Chevrolet W-Series|Chevrolet W-Series]] (1984-1998)<br />[[w:GMC W-Series|GMC W-Series]] (1984-1998)<br />[[w:Isuzu N-Series|Isuzu N-Series]] (1987-1994)<br />[[w:Isuzu F-Series|Isuzu F-Series]] (1995-98 FRR, 1989-96 FSR, 1992-96 FTR/FVR)||1938||2005||[[w:Isuzu|Isuzu]] plant. Closed 2005.
|-
|H<br />(WMI: MPA)||[[w:Isuzu Motors (Thailand)|Isuzu Motors Co., (Thailand) Ltd.]] (IMCT)||Samrong Tai, [[w:Phra Pradaeng district|Phra Pradaeng district]], [[w:Samut Prakan province|Samut Prakan province]]||[[w:Thailand|Thailand]]||[[w:Holden Rodeo|Holden Rodeo (RA)]]||2003||2008||Rebadged Isuzu D-Max produced by Isuzu Thailand for GM Holden in Australia and New Zealand. Replaced by the updated and renamed Holden Colorado, which was made by GM Thailand rather than Isuzu Thailand. The model name was changed because after GM sold the last of its shares in Isuzu in 2006, GM Holden lost the right to use the Rodeo name, which was owned by Isuzu, during 2008.
|-
|9||[[w:KUKA|KUKA]]||[[w:Livonia, Michigan|Livonia]], [[w:Michigan|Michigan]]||United States||[[w:BrightDrop Zevo 600|BrightDrop Zevo 600]] (2022)||2021||2022||Produced under contract for GM in a limited run of less than 500 units. A temporary measure until GM's CAMI plant is ready to start building BrightDrop electric vans.
|-
| ||[[w:Lilpop, Rau i Loewenstein|Lilpop, Rau and Loewenstein (LRL)]]||[[w:Warsaw|Warsaw]]||[[w:Poland|Poland]]||[[w:Chevrolet|Chevrolet]] cars, trucks, and buses<br />[[w:Buick|Buick]]<br />[[w:Opel|Opel]]||1937||1939||Was located at Bema Street. Lilpop, Rau and Loewenstein was a GM distributor who also assembled vehicles from CKD kits under license from GM until the German invasion that began World War II interrupted production. The Germans took over the factory during the war and the company was nationalized by the Communist Polish govt. after the war.
|-
|N (Opel Speedster &<br />Vauxhall VX220)<br /><br />H (Lotus models)||[[w:Lotus Cars|Lotus Cars]]||[[w:RAF Hethel|RAF Hethel]], [[w: Hethel|Hethel]], [[w:Norfolk|Norfolk]], [[w:England|England]]||[[w:United Kingdom|United Kingdom]]||
[[w:Opel Speedster|Opel Speedster]]/[[w:Vauxhall VX220|Vauxhall VX220]] (2001-2006) 7,207 units
[[w:Lotus Elise|Lotus Elise]]<br />[[w:Lotus Exige|Lotus Exige]]
||2000||2005||GM owned Lotus from 1986-1993. GM sold Lotus in 1993 to A.C.B.N. Holdings S.A. of Luxembourg, a company controlled by Italian businessman Romano Artioli, who also owned Bugatti Automobili SpA. Artioli sold Lotus to Malaysian automaker [[w:Proton Holdings|Proton]] in 1996. The Opel Speedster & Vauxhall VX220 were built under contract for GM by Lotus after GM had sold Lotus. The Opel Speedster & Vauxhall VX220 were based on the Lotus Elise.
|-
|6||[[w:Magna Steyr|Magna Steyr]]||[[w:Graz|Graz]]||[[w:Austria|Austria]]||[[w:Saab 9-3#Second generation (2003–2014)|Saab 9-3 Convertible]] (2004-2010)||2003||2009||Built under contract by [[w:Magna Steyr|Magna Steyr]] for GM-owned Saab Automobile AB. 9-3 Convertible production was moved to Saab's own plant in Trollhattan, Sweden in January 2010.
|-
| ||[[w:de:McCairns Motors|McCairns Motors Ltd.]]||[[w:Dublin Docklands|Dublin Docklands]], [[w:Dublin|Dublin]] and [[w:Santry|Santry]]||[[w:Republic of Ireland|Republic of Ireland]]||[[w:Vauxhall Cresta|Vauxhall Cresta]]<br />[[w:Vauxhall Victor|Vauxhall Victor]]<br />[[w:Vauxhall Viva|Vauxhall Viva]]<br />[[w:Bedford Vehicles|Bedford trucks]]<br />[[w:Chevrolet Bel Air|Chevrolet Bel Air]]||1935||1975||McCairns Motors was the local assembler and distributor for Vauxhall and Bedford in Ireland. Assembly began at Dublin Port on Alexandra Road in November 1935. In 1951, car assembly moved to a larger plant in Santry. McCairns also assembled and sold other brands like Simca, Alfa Romeo, and Mitsubishi Fuso. Production ended due to Ireland joining the European Economic Community in 1973 and the end of tariffs on imports of completely built-up vehicles. This removed the need for local assembly in Ireland. McCairns Motors used the site in Santry until 1987. The Omni Park shopping center now stands where the assembly plant in Santry used to be.
|-
| ||[[w:Mercury Marine|Mercury Marine]]||[[w:Stillwater, Oklahoma|Stillwater, Oklahoma]]||United States||[[w:Chevrolet small-block engine (first and second generation)#LT5|5.7L LT5 DOHC V8 engine]] (For 1990-1995 C4 Chevrolet Corvette ZR-1)||1989||1993||Engine was built for GM by Mercury Marine at their existing MerCruiser marine engine plant in Stillwater. 21,000 square feet of the 650,000 square foot plant was partitioned from the rest of the plant for assembly of this engine. LT5 engine production actually ended in 1993. Extra engines were built to be sufficient for Corvette ZR-1 production through 1995. The extra engines were sealed and crated for long-term storage and were shipped to the Corvette plant in Bowling Green, Kentucky and stored there until they were needed for installation in a '94 or '95 Corvette ZR-1. <br> Plant was located at 3003 N Perkins Rd. Closed in December 2011. Sold in 2012 to Belgium-based aerospace supplier Asco Industries.
|-
|H||[[w:Navistar|Navistar]] - Springfield Assembly Plant (Main Line)||[[w:Springfield, Ohio|Springfield, Ohio]]||[[w:United States|United States]]||[[w:Chevrolet Silverado#Medium duty version (4500HD, 5500HD, 6500HD, and International CV)|Chevrolet Silverado Medium Duty (2019-2026)<br />International CV]] (2019-2026)||2019||2026||Located at 6125 Urbana Road. Jointly developed by GM & Navistar. Built under contract by [[w:Navistar|Navistar/International Motors]] for GM. Contract with GM ended Sept. 30, 2026. Both the Silverado Medium Duty & the International CV are discontinued. Plant sold to [[w:Roshel|Roshel]].
|-
|N||[[w:Navistar|Navistar]] - Springfield Assembly Plant (Secondary Line)||[[w:Springfield, Ohio|Springfield, Ohio]]||[[w:United States|United States]]||[[w:Chevrolet Express|Chevrolet Express]] cutaway (2017-2026),<br /> [[w:GMC Savana|GMC Savana]] cutaway (2017-2026) ||2017||2026||Located at 6125 Urbana Road. Built under contract by [[w:Navistar|Navistar/International Motors]] for GM. Contract with GM ended Sept. 30, 2026. For 2027, all Express and Savana production is at GM's own Wentzville Assembly Plant. Express/Savana 3500 series cutaway w/177-inch wheelbase and all Express/Savana 4500 series cutaways (159 & 177 inch wheelbases) are discontinued. Plant sold to [[w:Roshel|Roshel]].
|-
| ||Neal and Massy Industries Ltd.||[[w:Morvant|Morvant]]<br /> later moved to <br />[[w:Arima|Arima]]||[[w:Trinidad and Tobago|Trinidad and Tobago]]||[[w:Holden Commodore#First generation (1978–1988)|Holden Commodore]]<br />[[w:Holden Kingswood|Holden Kingswood]]<br />[[w:Statesman (automobile)|Chevrolet Caprice (rebadged Statesman DeVille)]]<br />[[w:Opel Rekord Series C|Opel Rekord]]<br />[[w:Vauxhall Cresta|Vauxhall Cresta]]<br />[[w:Vauxhall Victor|Vauxhall Victor]]<br />[[w:Vauxhall Viva|Vauxhall Viva]]<br />[[w:Bedford Vehicles|Bedford trucks]]||1966||1994 (Production for GM may have ended earlier)||Built under license by Neal and Massy for GM. Neal and Massy also assembled vehicles for Datsun (Nissan) and Mazda. Assembly operation closed in 1994. Neal and Massy (now called Massy Motors) still operates as an importer/distributor for several non-GM automotive brands.
|-
| ||[[w:Nexus Automotive|Nexus Automotive (Pvt.) Ltd.]]||[[w:Port Qasim|Port Qasim]], [[w:Karachi|Karachi]], [[w:Sindh|Sindh province]]||[[w:Pakistan|Pakistan]]||[[w:Chevrolet Spark#Asia|Chevrolet Joy]]||2005||2006||Nexus Automotive was a GM licensed assembler and distributor. Built under contract for [[w:Nexus Automotive|Nexus Automotive]] by [[w:Ghandhara Nissan|Ghandhara Nissan]] at a plant with spare capacity.
|-
|K||[[w:Nissan USA#Manufacturing|Nissan Mexicana]]||[[w:Cuernavaca|Cuernavaca]]||[[w:Mexico|Mexico]]||[[w:Chevrolet City Express|Chevrolet City Express]] (2015-2018)<br />[[w:Nissan NV200|Nissan NV200]] (2013-2021)||2014||2018||Nissan plant.
Chevrolet City Express is a rebadged Nissan NV200 made for GM by Nissan. Chevrolet <br> City Express discontinued after 2018. NV200 discontinued in North America after 2021.
|-
| ||[[w:Nissan Motor Australia|Nissan Motor Australia]] Clayton plant||[[w:Clayton South, Victoria|Clayton South]], [[w:Victoria (state)|Victoria]]||[[w:Australia|Australia]]||[[w:Holden Astra#First generation (LB, LC; 1984–1987)|Holden Astra (LB/LC)]]<br />[[w:Nissan Pulsar#N12 (1982)|Nissan Pulsar (N12)]]<br />[[w:Holden Astra#Second generation (LD; 1987–1989)|Holden Astra (LD)]]<br />[[w:Nissan Pulsar#N13 (1986)|Nissan Pulsar (N13)]]||1984 (GM prod.)||1989 (GM prod.)|| Production for GM Holden at Nissan's Australian plant was done as part of the Australian government's [[w:Button car plan|Button car plan]] for rationalization of local automotive production. The relationship ended in 1989 and GM Holden established a joint venture with Toyota called [[w:United Australian Automobile Industries|United Australian Automobile Industries]] to replace the Nissan relationship. The Nissan Pulsar-based Holden Astra was replaced by the Toyota Corolla-based Holden Nova. Nissan closed its Australian vehicle assembly plant in 1992. The Clayton plant was later taken over by HSV and the Walkinshaw Group.
|-
|Y||[[w:Nissan Motor Ibérica|Nissan Motor Ibérica]]||[[w:Barcelona|Barcelona]]||[[w:Spain|Spain]]||[[w:Opel Vivaro A|Opel/Vauxhall Vivaro A]] (high roof versions only)<br />[[w:Renault Trafic#Second generation (X83; 2001)|Renault Trafic]] (high roof versions only)<br />[[w:Renault Trafic#Second generation (X83; 2001)|Nissan Primastar]] (high roof versions only)||2001||2015||This is a Nissan plant that built high roof versions of Renault-designed midsize vans for Opel/Vauxhall as part of a supply deal between GM Europe & Renault as well as for Renault and Nissan. The low roof versions were made by Vauxhall at the IBC Vehicles/GMM Luton plant however that UK plant could not fit the high roof versions so they were built by Nissan in Spain. Van production in Barcelona ended in 2015 and high roof Opel/Vauxhall Vivaro production was moved to Renault's plant in Sandouville, France, which also handled all Renault Trafic and Nissan NV300 (Primastar replacement) production. Nissan closed this plant in Dec. 2021.
|-
| ||[[w:de:O’Shea’s Limited (Opel)|O’Shea’s Limited]]||[[w:Cork (city)|Cork]], [[w:Munster|Munster]]||[[w:Republic of Ireland|Republic of Ireland]]||[[w:Opel|Opel]] cars including [[w:Opel Rekord|Rekord]]||1937||1965|| Before 1962, O’Shea’s was the sole Opel assembler and distributor in Ireland. From 1962-1965, assembly and distribution of Opels in Ireland was split between Reg Armstrong Motors and O’Shea’s Limited. After 1965, Reg Armstrong Motors was the sole Opel assembler and distributor in Ireland.
|-
| ||PT. Pantja Motor||[[w:Sunter, Jakarta|Sunter]], [[w:North Jakarta|North Jakarta]], [[w:Jakarta|Jakarta]]||[[w:Indonesia|Indonesia]]||[[w:Chevrolet Tavera|Chevrolet Tavera]]||2001||2005||Isuzu's Indonesian assembler, now known as [[w:Isuzu Astra Motor Indonesia|Isuzu Astra Motor Indonesia]]. Built the Isuzu Panther-based Tavera for GM Indonesia.
|-
| ||[[w:Pininfarina|Pininfarina]]||[[w:Grugliasco|Grugliasco]]||[[w:Italy|Italy]]||[[w:Cadillac Eldorado#1959–60 Eldorado Brougham|Cadillac Eldorado Brougham (Series 6900)]] (1959-1960) painted bodies||1959||1960||Bodies were built by [[w:Pininfarina|Pininfarina]] and mated with chassis shipped to Italy by Cadillac and then shipped back to the US.
|-
| ||[[w:Pininfarina|Pininfarina]]||[[w:San Giorgio Canavese|San Giorgio Canavese]]||[[w:Italy|Italy]]||[[w:Cadillac Allanté|Cadillac Allanté]] (1987-1993) painted bodies||1986||1993||Bodies were designed and manufactured under contract by [[w:Pininfarina|Pininfarina]] for Cadillac. Plant was built specially for the Allanté. Bodies were then flown from Turin, Italy to Detroit on specially equipped Boeing 747s and then trucked to GM's Detroit/Hamtramck Assembly Plant for final assembly. The assembly process was known as the "Allanté Air Bridge". It was also referred to as "the world's longest assembly line."
|-
| ||[[w:Pragoti|Pragoti Industries Ltd.]]||[[w:Sitakunda|Sitakunda]], [[w:Chittagong Division|Chittagong Division]]||[[w:Bangladesh|Bangladesh]]||[[w:Vauxhall Viva|Vauxhall Viva]]<br />[[w:Bedford Vehicles|Bedford trucks and buses]]<br />[[w:Bedford HA#The BTV|BTV]]||1966||1970's||Began as part of [[w:Ghandhara Industries|Ghandhara Industries]] Ltd. in 1966 when Bangladesh was still [[w:East Pakistan|East Pakistan]] and assembled GM vehicles like the Ghandhara plant in Karachi did. After Bangladesh became independent in 1971, the operation was nationalized by the new government and became Pragoti Industries Ltd.
|-
| ||[[w:de:Reg. Armstrong Motors|Reg Armstrong Motors Ltd.]]||[[w:Ringsend|Ringsend]], [[w:Dublin|Dublin]]||[[w:Republic of Ireland|Republic of Ireland]]||[[w:Opel|Opel]] cars including [[w:Opel Kadett|Kadett]], [[w:Opel Rekord|Rekord]], and [[w:Opel Commodore|Commodore]]||1962||1974||From 1962-1965, assembly and distribution of Opels in Ireland was split between Reg Armstrong Motors and O’Shea’s Limited. After 1965, Reg Armstrong Motors was the sole Opel assembler and distributor in Ireland. Reg Armstrong Motors also assembled the [[w:NSU Prinz|NSU Prinz]], [[w:Honda motorcycles|Honda motorcycles]], and from 1976-1978, the original [[w:Mini|Mini]] at the Ringsend plant. Production ended due to Ireland joining the European Economic Community in 1973 and the end of tariffs on imports of completely built-up vehicles. This removed the need for local assembly in Ireland.
|-
|B (GM)||[[w:Société de Véhicules Automobiles de Batilly|Renault Batilly]]||[[w:Batilly, Meurthe-et-Moselle|Batilly]]||[[w:France|France]]||[[w:Renault Trafic#First generation (1980)|Opel/Vauxhall Arena]]<br />[[w:Renault Trafic#First generation (1980)|Renault Trafic]]<br />[[w:Renault Master#Second generation (1997)|Opel/Vauxhall Movano A]]<br />[[w:Renault Master#Third generation (2010)|Opel/Vauxhall Movano B]]<br />[[w:Renault Master|Renault Master]]<br />[[w:Renault Master#Renault Mascott|Renault Trucks Mascott]]<br />[[w:Nissan Interstar|Nissan Interstar]]<br />[[w:Nissan NV400|Nissan NV400]]||1997||2017||Renault-[[w:Société de Véhicules Automobiles de Batilly|SOVAB]] plant. Opel/Vauxhall was sold to [[w:PSA Group|PSA Group]] in 2017. As part of PSA Group, Opel/Vauxhall became part of [[w:Stellantis|Stellantis]] in 2021. Movano switched to being PSA/Fiat-based instead of Renault-based in 2021.
|-
|S (GM)||[[w:Sandouville Renault Factory|Renault Sandouville]]||[[w:Sandouville|Sandouville]]||[[w:France|France]]||[[w:Renault Trafic#Third generation (X82; 2014)|Opel/Vauxhall Vivaro]] B (high roof versions only) <br />[[w:Renault Trafic#Third generation (X82; 2014)|Renault Trafic]]<br />[[w:Nissan NV300|Nissan NV300]]<br />[[w:Renault Trafic#Third generation (X82; 2014)|Nissan Primastar]]<br />[[w:Renault Trafic#Third generation (X82; 2014)|Fiat Talento]]||2014||2017||Renault plant. Opel/Vauxhall was sold to [[w:PSA Group|PSA Group]] in 2017. Vivaro switched to being PSA-based instead of Renault-based in 2018. As part of PSA Group, Opel/Vauxhall became part of [[w:Stellantis|Stellantis]] in 2021.
|-
| ||[[w:Renault Argentina|Renault Santa Isabel]]||[[w:Santa Isabel, Córdoba|Santa Isabel]], [[w:Córdoba Province, Argentina|Cordoba]]||[[w:Argentina|Argentina]]||[[w:Chevrolet D-20|Chevrolet C-20 & D-20]]<br />[[w:Chevrolet Tahoe#First generation (1992)|Chevrolet Grand Blazer]] (GMT400)<br />[[w:Chevrolet C/K#1997–2001|Chevrolet Silverado]] (GMT400)<br />[[w:Renault Trafic#South America|Chevrolet Trafic/SpaceVan]] ||1991||2002||[[w:Renault Argentina|Renault Argentina]]-CIADEA plant. Built Chevrolets under license for GM.
|-
| ||[[w:Sevel Argentina|Sevel Argentina]]||[[w:Córdoba, Argentina|Estación Ferreyra, Córdoba]], [[w:Córdoba Province, Argentina|Cordoba]]||[[w:Argentina|Argentina]]||[[w:Chevrolet D-20|Chevrolet C-20/D-20]]||1985||1991||Fiat - PSA jointly owned plant. Built Chevrolets under license for GM.
|-
|For Saab<br> 9-2X:<br> G (w/man. trans.),<br> H (w/auto. trans.)||[[w:Subaru#Manufacturing facilities|Subaru Main Plant]]||[[w:Ōta, Gunma|Ōta, Gunma]]||[[w:Japan|Japan]]||[[w:Saab 9-2X|Saab 9-2X]] (2005-2006)<br />[[w:Subaru Forester#Second generation (SG; 2002)|Chevrolet Forester (India)]] (2003-2007)||2003 (GM prod.)||2007 (GM prod.)||[[w:Subaru|Subaru]] plant
|-
|4||[[w:Subaru-Isuzu Automotive|Subaru-Isuzu Automotive]] (S.I.A.)||[[w:Lafayette, Indiana|Lafayette, Indiana]]||United States||[[w:Holden Frontera#Second generation (1998)|Holden Frontera]] (UE/MX)||1999 (GM prod.)||2003 (GM prod.)||Subaru & Isuzu joint venture plant. Isuzu built a rebadged, rhd version of the 2nd generation US market Isuzu Rodeo & Amigo SUVs for export to GM Holden in Australia and New Zealand.
|-
|W (GM),<br />4 (Suzuki)||Suzuki Iwata Assembly||[[w:Iwata, Shizuoka|Iwata, Shizuoka]]||[[w:Japan|Japan]]||[[w:Chevrolet Tracker (Americas)#First generation|Geo Tracker]] (US: 1989-1990)<br />[[w:Suzuki Sidekick|Suzuki Sidekick]] (US: 1989-1995, 1997-98)<br />[[w:Suzuki Sidekick|Suzuki Sidekick Sport]] (US: 1996-1998)<br />[[w:Suzuki Grand Vitara|Suzuki Grand Vitara]] (1999-2013)<br />[[w:Suzuki XL-7#First generation (XL-7; 1998)|Suzuki XL-7]] (2001-2006)<br />[[w:Holden Drover#Second generation (1981)|Holden Drover (QB)]]<br />[[w:Holden Scurry#Eighth generation (DA71/DB71/DA81/DA41/DB41/DA51/DB51; 1985)|Holden Scurry (NB)]]||1985 (GM prod.)||1990 (GM prod.)||[[w:Suzuki|Suzuki]] plant
|-
|K (GM),<br />5 (Suzuki)||Suzuki Kosai Assembly||[[w:Kosai, Shizuoka|Kosai, Shizuoka]]||[[w:Japan|Japan]]||[[w:Chevrolet Sprint|Chevrolet Sprint]] (US: 1985-1988)<br />[[w:Geo Metro|Geo Metro]] (US: 1989-1993)<br />[[w:Pontiac Firefly|Pontiac Firefly]] (Canada)<br />[[w:Holden Barina#First generation (MB, ML; 1985–1988)|Holden Barina (MB/ML)]]<br />[[w:Holden Barina#Second generation (MF, MH; 1989–1994|Holden Barina (MF/MH)]]<br />[[w:Suzuki Cultus|Suzuki Swift]] (US: 1989-1994)<br />[[w:Suzuki Ignis#Chevrolet Cruze|Chevrolet/Holden Cruze (YGM1)]] (YG) ||1984 (GM prod.)||2008 (GM prod.)||[[w:Suzuki|Suzuki]] plant
|-
|M (GM),<br />0 (Suzuki/Fiat/Subaru)||[[w:Magyar Suzuki Corporation|Magyar Suzuki Corporation]]||[[w:Esztergom|Esztergom]]||[[w:Hungary|Hungary]]||[[w:Opel Agila#Second generation (H08; 2007)|Opel/Vauxhall Agila B]]<br />[[w:Suzuki Splash|Suzuki Splash]]<br />[[w:Suzuki Swift|Suzuki Swift]]<br />[[w:Suzuki Cultus#Second generation (1988)|Subaru Justy]]<br />[[w:Suzuki SX4|Suzuki SX4]]<br />[[w:Fiat Sedici|Fiat Sedici]]<br />[[w:Suzuki Ignis#Suzuki Ignis (2003 facelift)|Suzuki Ignis]]<br />[[w:Suzuki Ignis#Suzuki Ignis (2003 facelift)|Subaru G3X Justy]]||1992<br /><br />2007 (GM prod.)||2014 (GM prod.)||[[w:Suzuki|Suzuki]] plant
|-
| ||Suzuki Sagara Assembly & Engine||[[w:Makinohara|Makinohara]], [[w:Shizuoka Prefecture|Shizuoka Prefecture]]||[[w:Japan|Japan]]||[[w:Chevrolet MW|Chevrolet MW]] (sold in Japan)<br />||2000||2010||[[w:Suzuki|Suzuki]] plant.<br /> Also built the 3.6-liter GM High Feature V6 engine ([[w:GM High Feature engine#LY7|Suzuki N36A]]) to power the [[w:Suzuki XL-7#Second generation (XL7; 2006)|2nd generation Suzuki XL7]] under license from GM. (Note: Dates reflect beginning & end dates of production for GM.)
|-
| ||Tecna SA||[[w:Arica, Chile|Arica]]||[[w:Chile|Chile]]||[[w:Acadian (automobile)|Acadian]] (1962-71 from CKD kits supplied by GM Oshawa and Willow Run)<br />[[w:Beaumont (automobile)|Acadian Beaumont]] (1964-71 from CKD kits supplied by GM Oshawa)<br />[[w:Vauxhall Victor|Vauxhall Victor]]||1962||1971||
|-
| ||Tecno S.A.||[[w:Uruca|La Uruca]], [[w:San José, Costa Rica|San José]]||[[w:Costa Rica|Costa Rica]]||[[w:Bedford HA#The BTV|GM Amigo]]||1970s||(?)||A version of GM's [[w:Bedford HA#The BTV|BTV]] called the Amigo was assembled in Costa Rica.
|-
| ||Tecnomotor S.A.||(?)||[[w:Paraguay|Paraguay]]||[[w:Bedford HA#The BTV|GM Mitai]]||1970s||(?)||A version of GM's [[w:Bedford HA#The BTV|BTV]] called the Mitai was assembled in Paraguay.
|-
|9 (GM),<br />6 (Fiat & Ram)||[[w:Tofaş|Tofaş]]||[[w:Bursa|Bursa]]||[[w:Turkey|Turkey]]||[[w:Opel Combo#Combo D (2012-2018)|Opel/Vauxhall Combo D]]<br />[[w:Fiat Doblo|Fiat Doblo]]<br />[[w:Ram ProMaster City|Ram ProMaster City]]||2011||2017||[[w:Fiat|Fiat]] plant (joint venture with Koç Holding of Turkey). Opel/Vauxhall was sold to PSA Group in 2017. Combo switched to being PSA-based instead of Fiat-based in 2019. As part of PSA Group, Opel/Vauxhall became part of Stellantis in 2021. Fiat and Tofaş also became part of Stellantis in 2021.
|-
| ||[[w:Toyota Australia|Toyota Australia]] [[w:Toyota Australia Altona Plant|Altona plant]]||[[w:Altona North|Altona North]], [[w:Victoria (state)|Victoria]]||[[w:Australia|Australia]]||[[w:Holden Nova#Second generation (LG; 1994–1996)|Holden Nova (LG)]]<br />[[w:Toyota Corolla (E100)|Toyota Corolla (E100)]]<br />[[w:Holden Apollo|Holden Apollo (JM/JP)]]<br />[[w:Toyota Camry (XV10)|Toyota Camry (XV10)]]||1994||1996 (GM prod.)|| Production for GM Holden at Toyota's Australian plant was done as part of [[w:United Australian Automobile Industries|United Australian Automobile Industries]], a model sharing joint venture in Australia between Holden and Toyota from 1987-1996. This was created as part of the Australian government's [[w:Button car plan|Button car plan]] for rationalization of local automotive production. Toyota consolidated its Australian production at the new Altona plant in 1994-1995. The joint venture dissolved in 1996 and Holden's rebadged Toyotas were replaced with rebadged Opel models (Astra and Vectra) from GM Europe. Corolla production in Australia ended in 1999. Toyota closed the Altona plant in 2017.
|-
| ||[[w:Toyota Australia|Toyota Australia]] Port Melbourne plant||[[w:Port Melbourne|Port Melbourne]], [[w:Victoria (state)|Victoria]]||[[w:Australia|Australia]]||[[w:Holden Apollo|Holden Apollo (JK/JL)]]<br />[[w:Toyota Camry#V20 (1986–1992)|Toyota Camry (V20)]]<br />[[w:Holden Apollo|Holden Apollo (JM)]]<br />[[w:Toyota Camry (XV10)|Toyota Camry (XV10)]]||1989 (GM prod.)||1994 (GM prod.)|| Production for GM Holden at Toyota's Australian plant was done as part of [[w:United Australian Automobile Industries|United Australian Automobile Industries]], a model sharing joint venture in Australia between Holden and Toyota from 1987-1996. This was created as part of the Australian government's [[w:Button car plan|Button car plan]] for rationalization of local automotive production. Toyota consolidated its Australian production at the new Altona plant in 1994-1995 and production ended at the older Port Melbourne plant in late 1994. The joint venture would later dissolve in 1996 and Holden's rebadged Toyota Camry was replaced with a rebadged Opel Vectra from GM Europe.
|-
| ||PT. Udatin (Usaha Dagang Teknik Indonesia)||[[w:Surabaya|Surabaya]], [[w:East Java|East Java]]||[[w:Indonesia|Indonesia]]||[[w:Holden FC|Holden FC]]<br />[[w:Holden FB|Holden FB]]<br />[[w:Holden EK|Holden EK]]<br />[[w:Holden EJ|Holden EJ]]<br />[[w:Holden EH|Holden EH]]<br />[[w:Holden HQ|Holden HQ]]<br />[[w:Holden HJ|Holden HJ]]<br />[[w:Holden HX|Holden HX]]<br />[[w:Holden HZ|Holden HZ]]<br />[[w:Statesman (automobile)|Statesman brand HQ-HZ]]<br />[[w:Holden Monaro|Holden Monaro]] HQ<br />[[w:Holden Torana|Holden Torana]] LJ, LH, LX<br /> [[w:Holden Gemini#First generation|Holden Gemini TX, TC, TD, TE, TF, TG]]<br />[[w:Holden Camira|Holden Camira]] JB<br />[[w:Isuzu Aska#South-East Asia and New Zealand|Holden Aska]]<br />[[w:Holden Gemini#Second generation|Holden Gemini (RB)]]<br />[[w:Holden Commodore (VB)|Holden Commodore (VB)]]<br />[[w:Holden Commodore (VC)|Holden Commodore (VC)]]<br />[[w:Holden Commodore (VH)|Holden Commodore (VH)]]<br />[[w:Holden Commodore (VK)|Holden Commodore (VK)]]<br />[[w:Holden Commodore (VL)|Holden Calais (VL)]]<br />[[w:Isuzu Faster#Second generation (1980–1988)|Holden Lincah/Raider]]<br />[[w:GMC (automobile)|GMC trucks]]||1959||1988||Built vehicles under contract for GM. During the 1960's, production was off and on due to Indonesian government policies and the economic situation. Production ended in 1988.
|-
| ||Unison||[[w:Minsk|Minsk]]||[[w:Belarus|Belarus]]||[[w:Chevrolet Tahoe#Fourth generation (2015)|Chevrolet Tahoe]] K2XX, [[w:Chevrolet Trax|Chevrolet Tracker]], [[w:Cadillac Escalade#Fourth generation (2015)|Cadillac Escalade]] K2XX, [[w:Opel Mokka#First generation (J13; 2012)|Opel Mokka]]||2015||2018||Built under contract by Unison for GM. Production ended in 2018.
|-
|6,7 (Saab)<br />9 (Opel/Vauxhall)||[[w:Valmet Automotive|Valmet Automotive]]||[[w:Uusikaupunki|Uusikaupunki]]||[[w:Finland|Finland]]||[[w:Saab 9-3#First generation (1998–2003)|Saab 9-3 Convertible & 9-3 Viggen]]<br />[[w:Saab 900|Saab 900]] (including 900 Convertible)<br />[[w:Opel Calibra|Opel/Vauxhall Calibra]]||1969||2003||Built under contract by [[w:Valmet Automotive|Valmet Automotive]] for Saab & for Opel/Vauxhall. Saab-Valmet was established in 1968 as a joint venture between Valmet and Saab-Scania. In 1992, Valmet became the sole owner, and the company was renamed Valmet Automotive in 1995.
|-
|X||[[w:ZAZ|ZAZ]]||[[w:Zaporizhia|Zaporizhia]] & [[w:Illichivsk|Illichivsk]]||[[w:Ukraine|Ukraine]]||[[w:Chevrolet Aveo (T200)|Chevrolet Aveo]], [[w:Chevrolet Lacetti|Chevrolet Lacetti]], [[w:Chevrolet Lanos|Chevrolet Lanos]], [[w:Opel Astra#G|Opel Astra Classic]], [[w:Opel Astra#H|Opel Astra]], [[w:Opel Corsa|Opel Corsa]], [[w:Opel Combo|Opel Combo]], [[w:Opel Meriva|Opel Meriva]], [[w:Opel Vectra|Opel Vectra]], [[w:Opel Zafira|Opel Zafira]]||2003||2012||Built under contract by [[w:ZAZ|ZAZ]] for GM.
|-
|}
h1iqd461o9ktxud0u1ki8o7gr8z7muk
OpenSCAD User Manual/Suggest Reduce Function
0
477065
4676291
4529856
2026-10-15T18:31:47Z
~2026-55590-85
3628499
link to an implementation
4676291
wikitext
text/x-wiki
==Implement a reduce() Function==
Not that i know how to do this .. but i did find a good explanation of what would be needed and started this page
[[w:Fold_(higher-order_function)#Evaluation_order_considerations|Issues to do with reduce in a functional language]]
I believe it has been done here: https://github.com/andy128k/scad_utils/blob/2c6b2fa847380a17bfbced4d7235f884330cd06a/lists.scad#L76
<code>
// Fold
function list_fold(list, func, acc = undef, index = 0) =
index >= len(list)
? acc
: list_fold(list, func, func(acc, list[index]), index + 1);
</code>
For example, <code>echo(list_fold([1,2,3], function(a, b) a + b, 0));</code> will echo <code>6</code>.
{{BookCat}}
4wpje2gh2w9z2vacq4g16w3poeiwiqq
User:Dom walden/Multivariate Analytic Combinatorics/Homology of Critical Points
2
480750
4676280
4675908
2026-10-15T17:15:37Z
Dom walden
3209423
/* Step 3 */
4676280
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>
Step 1 works because <math display="inline">h</math> is a submersion at each point of the regions we are homeomorphing. This is not the case at critical points. We need some way by which a homeomorphism can pass through a critical point.
To prove a homeomorphism between two subsets <math display="inline">A</math> and <math display="inline">B</math> of <math display="inline">Z</math>, we project <math display="inline">Z</math> to some other space <math display="inline">N</math> (in our case <math display="inline">\R^n</math>) using some function <math display="inline">F</math>. We take subsets <math display="inline">Y_0</math> and <math display="inline">Y_1</math> of <math display="inline">N</math> such that <math display="inline">A = Z \cap F^{-1}(Y_0)</math> and <math display="inline">B = Z \cap F^{-1}(Y_1)</math>. We need to prove <math display="inline">Y_0</math> and <math display="inline">Y_1</math> are connected by a one-parameter family of regions <math display="inline">Y_t</math> [explain one-parameter family]. The criterion for such a family to exist is that the '''characteristic covectors''' of <math display="inline">F</math> are all nonzero on each stratum of <math display="inline">Y_t</math>.<ref>Goresky and MacPherson 1988, pp. 70.</ref>
At each point <math display="inline">x \in M</math> and <math display="inline">y \in N</math> there are '''tangent spaces''' <math display="inline">T_xM</math> and <math display="inline">T_yN</math>, a vector space whose zero is at the point <math display="inline">x</math> or <math display="inline">y</math> (resp.)
[picture of various tangent spaces]
In the case the <math display="inline">N = \R</math>, the tangent space <math display="inline">T_x\R</math> is just <math display="inline">\R</math> but whose origin is at <math display="inline">x</math>.
[picture of T_x\R]
Say <math display="inline">F(x) = y</math>, then the differential of the map <math display="inline">F</math> can be seen as a function whose input is a vector in the tangent space <math display="inline">T_xM</math> and whose output is a vector in the tangent space <math display="inline">T_yM</math>. [If I move this far on the tangent space of M how do I move in the tangent space of N?]
[picture]
[example for M = \R and N = \R?]
A function which takes as input a vector in the tangent space <math display="inline">T_xM</math> (say) and outputs a scalar (usually <math display="inline">\R</math>) is called a '''covector'''. The set of all covectors on <math display="inline">T_xM</math> is called the dual space of <math display="inline">T_xM</math> and is denoted <math display="inline">T^*_xM</math>. There are only a limited number of ways to express a covectors. For example, if our tangent space is two-dimensional then all covectors are of the form <math display="inline">ax + by</math> where <math display="inline">(x, y) \in T_xM</math>.
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]
In this case, the covectors on the tangent space <math display="inline">T_xM</math> are of the form <math display="inline">adf(x) + bdr(x)</math> (in this case <math display="inline">df</math> and <math display="inline">dr</math> are maps to <math display="inline">\R</math>) and on <math display="inline">T_y\R^2</math> are of the form <math display="inline">cu + dv</math> (for <math display="inline">(u, v) \in \R^2</math>). A covector <math display="inline">cu + dv \in T^*_{(u, v)}\R^2</math> is called a '''characteristic covector''' of <math display="inline">F</math> if <math display="inline">F(x) = (u, v)</math> and <math display="inline">cdf(x) + ddr(x) = 0</math> for all vectors in the tangent space of the stratum containing <math display="inline">p</math>.<ref>Goresky and MacPherson 1988, pp. 82.</ref> [explain adf(x) + bdr(x) in terms of this being a function which takes a vector input]
[example of where covectors do and do not vanish on a stratified space, pp. 71?]
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. Such a homeomorphism exists when the characteristic covectors of <math display="inline">F</math> are all nonzero on each stratum of <math display="inline">Y_t</math>.<ref>Goresky and MacPherson 1988, chapter 4, particularly pp. 71-72.</ref>
Given a smooth mapping between manifolds <math display="inline">F: M \to N</math> (for example, in our case we could have <math display="inline">N = \R^2</math>) and that <math display="inline">F|Z: Z \to N</math> is proper. Let <math display="inline">Y \subset N \times \R</math> be a closed Whitney stratified subset such that the projection to the second factor <math display="inline">\pi: Y \to \R</math> is a proper stratified submersion.<ref>Goresky and MacPherson 1988, pp. 71.</ref>
Suppose for each <math display="inline">t \in \R</math>, for each <math display="inline">p \in F(Z) \cap Y_t</math>, and for each nonzero characteristic covector <math display="inline">\lambda \in T^*_pN</math> of <math display="inline">F|Z</math>, the restriction of <math display="inline">\lambda</math> to the subspace <math display="inline">T_pS_t = \ker(d\pi(p)) \cap T_pS</math> is nonzero, where <math display="inline">S</math> is a stratum of <math display="inline">Y</math> which contains <math display="inline">(p, t)</math> and <math display="inline">S_t = \pi^{-1}(t) \cap S</math> is the stratum of <math display="inline">Y_t = \pi^{-1}(t) \cap Y</math> which contains <math display="inline">p</math>. This is equivalent to the statement that, for each <math display="inline">t \in \R</math>, the restriction <math display="inline">F|Z</math> is transverse to <math display="inline">Y_t</math>.<ref>Goresky and MacPherson 1988, pp. 71-72.</ref>
This means that, for each <math display="inline">t \in \R</math>, <math display="inline">Z \cap F^{-1}(Y_t)</math> is stratified by its intersection with the strata of <math display="inline">Z</math>...
We finally prove there is a homeomorphism between <math display="inline">Z \cap F^{-1}(Y_0) \cong Z \cap F^{-1}(Y_1)</math> which preserves the Whitney stratification of both sides and is smooth on each stratum.
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 because
* The input domain is stratified as above...,
* We have defined <math display="inline">F|Z</math> to be transverse to <math display="inline">Y</math>, and therefore it preserves the stratification (unless <math display="inline">F(Z) \cap Y = \empty</math>), and
* We defined above the projection on <math display="inline">Y</math> to be a stratified submersion, meaning it is a submersion on each stratum of <math display="inline">F(Z) \cap Y</math>.<ref>Goresky and MacPherson 1988, pp. 43.</ref>
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
[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>
where all the intersections of strata (of <math display="inline">Z</math>?) are transverse.<ref>Goresky and MacPherson 1988, pp. 100-102.</ref>
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>
Let <math display="inline">D = \{ x \in X | r(x) \leq \delta \}</math> for stratum <math display="inline">X</math>. We will show there is a local trivial fibration of the configuration: <math display="inline">(V_1, V_2)</math> fibres over <math display="inline">D</math> and is homeomorphic to <math display="inline">D \times (\text{normal Morse data})</math>
(V_1, V_2) -> D \times (normal Morse data)
| /
--> D <---
and that <math display="inline">(W_1, W_2)</math> fibres over the tangential Morse data and is homeomorphic to <math display="inline">(\text{tangential Morse data}) \times (\text{normal slice})</math>.
For <math display="inline">Z_1 = \{ z \in Z : r\pi(z) \leq \delta \}</math>, the map <math display="inline">F(z): Z_1 \to \R^2 = (\rho(z), f(z) - f\pi(z))</math> is transverse to each stratum of <math display="inline">\text{Box}(\delta, \epsilon/4)</math>, [list], [by lemma 6.5]. <math display="inline">(V_1, V_2) = F^{-1}(\text{Box}(\delta, \epsilon/4), \text{Bottom}(\delta, \epsilon/4))</math>. For each stratum <math display="inline">S</math> of Box and each <math display="inline">x \in D</math>, we have transverse intersection <math display="inline">F^{-1}(S) \pitchfork \pi^{-1}(x)</math>. Therefore, <math display="inline">\pi|F^{-1}(S)</math> is a submersion and by Thom's isotopy lemma the projection <math display="inline">\pi|F^{-1}(\text{Box}(\delta, \epsilon/4): F^{-1}(\text{Box}(\delta, \epsilon/4)) \to X</math> is a stratified fibre bundle over <math display="inline">D</math>. The fibre over the critical point <math display="inline">p</math> is <math display="inline">\pi^{-1}(p) \cap (F^{-1}(\text{Box}(\delta, \epsilon/4), F^{-1}(\text{Bottom}(\delta, \epsilon/4))</math> and is equal to the normal Morse data...<ref>Goresky and MacPherson 1988, pp. 101.</ref>
Take <math display="inline">G: X \to \R^2 = (r(x), f(x))</math>. <math display="inline">\delta</math> and <math display="inline">\epsilon</math> have been chosen so that <math display="inline">(G^{-1}(\text{Box}(\delta, \epsilon/4), G^{-1}(\text{Bottom}(\delta, \epsilon/4))</math> is the tangential Morse data for <math display="inline">f</math> and is contained in the region <math display="inline">D</math> over which <math display="inline">\pi|(V_1, V_2)</math> is a stratified fibre bundle. Therefore, <math display="inline">(W_1, W_2) = \pi^{-1} G^{-1}(\text{Box}(\delta, \epsilon/4), \text{Bottom}(\delta, \epsilon/4))</math> is transverse to <math display="inline">(V_1, V_2)</math>.<ref>Goresky and MacPherson 1988, pp. 101-102.</ref>
Finally, this means that <math display="inline">(V_1, V_2) \cap (W_1, W_2)</math> is homeomorphic (by stratum preserving homeomorphism) to <math display="inline">(\pi^{-1}(p), \cap (V_1, V_2)) \times \pi(W_1, W_2)</math>, the product of normal and tangential Morse data.<ref>Goresky and MacPherson 1988, pp. 102.</ref>
We use a succession of such diagrams to interpolate between the box diagram which defines local Morse data [explain] and the above diagram whose realisation we have just proven is <math display="inline">(\text{normal Morse data}) \times (\text{tangential Morse data})</math>.
[diagram_d0.py]
The realisation is the local Morse data. This is equal to the realisation of the diagram below.<ref>Goresky and MacPherson 1988, pp. 103, 106.</ref>
[diagram_d11.py]
The realisation of the first diagram [d0] is equivalent to the realisation of the below diagram.
[diagram_d1.py]
In the right-hand picture of the above diagram, we have put a dotted outline around the region <math display="inline">A^{\flat}_1</math>. We prove that there are no characteristic covectors for <math display="inline">(r, f): Z \to \R^2</math> in this region and can, therefore, move the wall in this region...<ref>Goresky and MacPherson 1988, pp. 82-83.</ref>
By adding a zero-dimensional stratum at the top right corner of the right-hand picture. A one-parameter family of pictures <math display="inline">P_b(t)</math> gives rise to a stratified space <math display="inline">Y \subset M \times \R</math> such that
<math display="block">Y = \{ (z, t) \in M \times \R : (r, f)(z) \in P_b(t) \}.</math>
<math display="inline">(r, f)</math> takes each stratum of <math display="inline">Z</math> transversally to each stratum of each <math display="inline">Y_t</math>. <math display="inline">(f \circ \pi, f)^{-1}(P_a) = f^{-1}[-\epsilon, \infty)</math> is transverse to each stratum of <math display="inline">Y_t \cap Z</math>. Therefore, there is a homeomorphism between<ref>Goresky and MacPherson 1988, pp. 107.</ref>
<math display="block">Z(D_1) = Z \cap (f \circ \pi, f)^{-1}(P_a) \cap (r, f)^{-1}(P_b(0))</math>
and
<math display="block">Z(D_1) = Z \cap (f \circ \pi, f)^{-1}(P_a) \cap (r, f)^{-1}(P_b(1)).</math>
To go from D_2 to D_3 we find the characteristic covectors of <math display="inline">(f\pi, f): V \to \R^2</math> where <math display="inline">V = (r, f)^{-1}(P_b(1))</math>. We stratify <math display="inline">P_b(1)</math> by its interior <math display="inline">P</math> and boundary <math display="inline">\partial P</math>.<ref>Goresky and MacPherson 1988, pp. 107.</ref>
The strata of <math display="inline">V</math> come in four types:
# <math display="inline">(r, f)^{-1}(P) \cap X</math>
# <math display="inline">(r, f)^{-1}(P) \cap Y</math>
# <math display="inline">(r, f)^{-1}(\partial P) \cap X</math>
# <math display="inline">(r, f)^{-1}(\partial P) \cap Y</math>
where <math display="inline">X</math> is the strata that contains the critical point and <math display="inline">Y</math> is any other strata such that <math display="inline">Y > X</math>.
All characteristic covectors are of the form <math display="inline">\lambda = (u, v, adu + bdv) \in T^*\R^2</math>.
For strata 1 and 3, the image of <math display="inline">X</math> under <math display="inline">(f\pi, f)</math> is the diagonal <math display="inline">f\pi = f</math> (dotted outline). Therefore, the characteristic covectors of any point <math display="inline">z</math> in <math display="inline">X</math> are either where <math display="inline">z = p</math>, in which case the covector is zero(?), or where <math display="inline">z \neq p</math>, in which case <math display="inline">u = v</math> and <math display="inline">a = b</math>.<ref>Goresky and MacPherson 1988, pp. 107-108.</ref>
For strata 2, being that the critical point is isolated and non-degenerate, which means it, and any neighbourhood, is not zero on any limit of tangent spaces in strata <math display="inline">Y > X</math>. Therefore, <math display="inline">f</math> and <math display="inline">f\pi</math> are linearly independent.<ref>Goresky and MacPherson 1988, pp. 84.</ref> Unless <math display="inline">\pi(z) = p</math>, in which case <math display="inline">d(f\pi)(z) = f\pi(z) = 0</math>, so they are covectors where <math display="inline">u = 0</math> and <math display="inline">b = 0</math>.<ref>Goresky and MacPherson 1988, pp. 108.</ref>
For strata 4, we can use implicit function theorem to generate local coordinates <math display="inline">y_1, \cdots y_{r-s-1}</math> in <math display="inline">Y > X</math> and define the Riemannian metric <math display="inline">r(z) = r\pi(z) + (f(z) - f\pi(z))^2 g(y)</math> for some <math display="inline">g</math> depending only on <math display="inline">y</math>.
There are no characteristic covectors in <math display="inline">|u| \leq \epsilon</math> and <math display="inline">|v| < \epsilon</math>. By [lemma 6.7 and 6.8 and 8.1(d)] <math display="inline">df</math>, <math display="inline">df\pi</math> and <math display="inline">dr</math> are linearly independent in this region.<ref>Goresky and MacPherson 1988, pp. 109.</ref>
Outside of these points, the slope of <math display="inline">\ker(\lambda)</math> for any characteristic covector <math display="inline">\lambda</math> is
<math display="block">\frac{-a}{b} = \frac{f(z) - f\pi(z) - M}{\frac{\alpha}{\beta} + (f(z) - f\pi(z))}</math>
for <math display="inline">\alpha df + \beta dr = 0</math>.<ref>Goresky and MacPherson 1988, pp. 108-109.</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>
== Notes ==
{{Reflist}}
== References ==
* {{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 }}
1ybaht5hr85zvy8b3nt0f5otn4n9hsp
About Monsters And Angels
0
485372
4676338
4676146
2026-10-16T08:31:43Z
3MMPEYTON
3393808
4676338
wikitext
text/x-wiki
<br>'''Monster, a threatening force from the far-side.''' <br><br>This book will introduce four fictional creations with odd human connections: <br>zombie-person <br>ghost-person <br>werewolf-person <br>demon-person <br>...and Angels. <br><br>This book is intended as a short conceptual guide for readers interested in folklore, storytelling, monsters and angels. <br>Link: [[About_Monsters_And_Angels/Questions_And_Answers|About Monsters And Angels: Questions And Answers]]
<br>
{| class="wikitable"
|+ About Monsters And Angels
|-
! Guardian Angel !! The Sleep Of Reason Produces Monsters
|-
| [[File:The story of our Christianity; an account of the struggles, persecutions, wars, and victories of Christians of all times (1893) (14783658362).jpg|thumb|The story of our Christianity; an account of the struggles, persecutions, wars, and victories of Christians of all times (1893) (14783658362)]] || [[File:Plate 43 from 'Los Caprichos'- The sleep of reason produces monsters (El sueño de la razon produce monstruos) MET MM2149.jpg|thumb|Plate 43 from 'Los Caprichos': The sleep of reason produces monsters (El sueño de la razon produce monstruos), print, Goya (Francisco de Goya y Lucientes) (MET, 18.64(43))]]
|}
<br>
<br>
<br> "Monsters are real, and ghosts are real too. They live inside of us, and sometimes, they win." - Stephen King
<br>
<br>'''Table Of Content:'''<br>[[About_Monsters_And_Angels/Chapter_One|Chapter One]]: Monsters And Their Human Origin <br>Chapter Two<br>Chapter Three<br>Chapter Four<br>Chapter Five<br>Chapter Six<br>Chapter Seven<br>Chapter Eight<br>Chapter Nine<br>Chapter Ten<br>
<br>
<br>
{{New book}}
<br>
{{Formatting}}
<br>
{{BookCat}}
{{Shelves|Literature|Paranormal|Cultural anthropology}}
<br>
[[Category:Book:About Monsters And Angels]]
<br>
{{status|0%}}
<br>
<noinclude>{{Chapter navigation with TOC||Chapter One|TOC mini}}</noinclude>
6zzk3e2wtbc8uvuzogwst0txgbh9ikw
A-level Computing AQA Paper 1 Skeleton program 2027
0
485519
4676293
4671786
2026-10-15T18:49:38Z
Codename Noreste
3441010
Converting this to a soft redirect. ([[:m:User:Max/MaxEdit.js|MaxEdit]])
4676293
wikitext
text/x-wiki
{{soft redirect|v:en:A-level Computer Science AQA Paper 1 Skeleton program 2027}}
9v3ftgu726evjxukw82vv5vxj17t2jp
About Monsters And Angels/Chapter One
0
485682
4676329
4676153
2026-10-16T06:06:15Z
3MMPEYTON
3393808
4676329
wikitext
text/x-wiki
== Chapter One: Monsters And Their Human Origin ==
A '''monster''' is a frightening, grotesque, or fictional creature, an exceptionally cruel person, or anything of unusually large or powerful scale. [1] <br>
<br>
The Munsters, Stranger Things, The Exorcist, Poltergeist, Shaun of the Dead. We love monsters, they are part of a large film and Entertainment industry. Around the world, monsters appear in films and on TV shows. They pop-up, taking forms that range from ghosts and demons, to zombies, werewolves, and hungry-spirits. Although these monsters are described as supernatural, able to cross the barriers that separate the dead from the living, many monster traditions originated from human experiences. <br>
<br>
This wikibook explores the concept that monsters are kind of human, merely symbolic expressions of human fears, behaviors, or cultural change. <br>
By closely examining the human origin of monster myths, readers may understand how they developed, why these stories persist, and why they mutate over time.<br>
=== Monsters As Cultural Expression: ===
Monsters are not just the creations of individuals. Monsters emerge from cultural environments and reflect shared concerns within a community. <br>
<br>
When people are concerned about events occurring in their neighborhood, or in their society, they may express their concerns indirectly, by sharing short stories, poetry, Art, even comic drawings that address their concerns. <br>
<br>
Monsters are associated with taboo behavior, meaning actions that are considered dangerous, behaviors that are often socially forbidden. <br>
<br>
In an interview with Michael Connerty, Emil Ferris, the author of the graphic novel: My Favorite Things Is Monsters: Book One, talks candidly about sexuality and horror movies. <br>
<br>
Michael Connerty: There are a lot of very powerful images that punctuate both books, cent[e]red on women and violence – some come from classical painting, some in the form of your imaginary comic book covers.
Emil Ferris: I grew up with that, I mean you saw women portrayed in a particular way, and horror comics always used women, and horror movies did too, where there was this sexualization of a woman before she was murdered, which is really a very frightening thing to do. And Karen and Deeze talk about that, I mean they talk about the sexualization of brutality, you know, which is often the brutality of sex, when it's negative, when it's assault. It's just something that has to be pointed out. I like the fact that they have that conversation, because I think more people need to have that conversation with their sons and their daughters. They need to talk about those things but we're so afraid to talk about those things, and we have to. We have to because it's so hard for children to figure out, 'well, how do I negotiate this world?' It's just really good to be frank about these things.
[2] <br>
<br>
The common sources of monsters include: <br>
- Trauma: events that leave an emotional or physical response, usually deeply harmful, disturbing, or overwhelming. <br>
- Illness: physical or mental poor health interpreted through symbolic stories. <br>
- Social conflict: tensions within families, communities, or societies. <br>
- Taboo behavior: actions considered dangerous or forbidden. <br>
- Environmental conditions: landscapes, climate, or natural hazards. <br>
<br>
Monsters come from trauma, illness, social conflicts, behaviors that are taboo, and social conflict. They are born from our darkest release. <br>
<br>
{| class="wikitable"
|+
|-
! Mural
|-
| [[File:Hip Hop Meeting Málaga (Drak-Baros-Elalfil, 2023) 04.jpg|thumb|Hip Hop Meeting Málaga (Drak-Baros-Elalfil, 2023) 04]]
|}
<br>
<br>
'''The Trama Monster:''' <br>
Trama survivors may see visions of monsters in their nightmares or daydreams. They may experience a form of post-traumatic stress, whereby anxiety lingers long after the traumatic event has ended. In Psychology, monsters may be symbols for unspoken or unprocessed trauma. Monster imagery in film and literature serves as a tangible manifestation of psychological trauma, repressed grief, and existential threat. [3] <br>
<br>
In psychological studies, monsters represent the breakdown of pre-trauma assumptions about safety, self, and the world. It seems the world is safe and known until a monster appears. <br>
Unprocessed pain can be projected outwards, into a tangible, symbolic "monster" which allows the mind to shape, grasp, or manipulate the invisible terror inside. <br>
<br>
Toby Allen, a popular Illustrator, started The "Real Monsters" Project, an Art project he started by illustrating his mental health disorders, such as anxiety, depression and social phobia, as fantasy creatures. <br>
<br>
In Monsters, a blog about monsters, Allen talks about the inspiration behind the "Real Monsters" project: <br>
<br>
Interviewer: What is the inspiration behind your art? Why did you choose to depict mental illnesses as monsters? <br>
<br>
Toby Allen: The Real Monsters project originated from imagining my own anxieties as monsters and finding it to be a really therapeutic process. It made them feel weaker, and I was able to look at my own anxiety in an almost comical way. I wanted to expand upon this idea and draw other representations of mental illnesses that could help people in the same way it helped me. [4] <br>
<br>
A similar concept can be understood in ''The Babadook'' (2015), a film directed by Jennifer Kent. In ''The Babadook'', following her husband's violent death, a mother's repressed grief and clinical depression is personified as an entity that feeds on denial. <br>
<br>
Research in clinical psychology notes that cinematic or internal "monsters" serve as a tangible symbol for post-traumatic stress and anxiety. These symbolic "monsters" represent a subtle threat that a person must confront and master in order to achieve emotional balance. [3] <br>
<br>
'''Monsters associated with illnesses''':<br>
Monsters are often seen as cultural or physical manifestations of real world physical and mental illnesses that pre-modern societies could not explain. <br>
Human societies, along with most diseases, existed before microscopes. Without modern scientific tools, human understanding of disease -- such as how they multiplied, or how they were passed -- was small and strongly linked with the supernatural. <br>
<br>
In the BBC article ''The Real-Life Diseases That Spread The Vampire Myth'', Stephen Dowling writes about vampires and porphyria (a genetic disorder): <br>
<br>
Take porphyria, for instance, which affects heme, the chemical compound which helps make up the haemoglobin found in our blood. The patients suffer itching, rashes and blisters every time their skin is exposed to sunlight. In the very worst – and thankfully, very rare – cases, the gums recede from the teeth, making them appear far more prominent. Their bodily waste takes on a purple hue, like that of undigested blood. And the effects of sensitivity to light can be so severe that sufferers lose their ears and noses – a physiognomy echoed in the looks of vampires such as Nosferatu. [5] <br>
<br>
Porphyria is a rare genetic disorder, described by Desiree Lyon Howe of the American Porphyria Foundation, as being so rare "there are probably no more than a few hundred of these severe cases in the entire world at any one time." [5] <br>
Although rare, in Medieval times, in remote and closed communities, the chance of porphyria surviving in a small gene pool was greater than today. The farming villages in Transylvania, now part of Romania, were ideal. Stories about vampires spread from eastern European regions, like Transylvania, westward. <br>
<br>
With little medical knowledge, medieval folks could have accused people suffering from porphyria of being vampires. <br>
<br>
Another disease associated with monsters is Werewolf Syndrome or Hypertrichosis, which is a condition characterized by dense, abnormal hair growth over the body. This condition may have started a few werewolf myths. [6] <br>
<br>
{| class="wikitable"
|+ Hypertrichosis
|-
! !! !!
|-
| [[File:Joris Hoefnagel - Animalia Rationalia et Insecta (Ignis)- Plate I.jpg|thumb|Petrus Gonsalvus and his wife Catherine (c. 1575) by Joris Hoefnagel. Watercolor and gouache. National Gallery of Art, Washington D.C.]] || [[File:Polytrichia J.? Homo pilosus. Adr. Evtikhiev..JPG|thumb|Polytrichia J.? Homo pilosus. Adr. Evtikhiev.]] || [[File:Die Gartenlaube (1874) b 061.jpg|thumb|Die Gartenlaube (1874) b 061]]
|}
<br>
<br>
=== Reference: ===
1. Dictionary.com. Monster. In Dictionary.com. Retrieved October 14, 2026, from https://www.dictionary.com/browse/monster
2. Connerty, Michael. Scary monsters and super creeps: An interview with Emil Ferris. Published in Studies in Comics, Jan 2025, Art Source <br>
<br>
3. Hamilton, Jenny. Monsters and posttraumatic stress: an experiential-processing model of monster imagery in psychological therapy, film and television. November 5, 2020 In Nature.com https://www.nature.com/articles/s41599-020-00628-2 <br>
<br>
4. Real Monsters project. February 6, 2026. Monsters https://dstrl.org/RealMonsters/real-monsters-project <br>
<br>
5. Dowling, Stephen. October 31, 2016. ''The real-life diseases that spread the vampire myth''. BBC.com https://www.bbc.com/future/article/20161031-the-real-life-disease-that-spread-the-vampire-myth <br>
<br>
6. "Hypertrichosis." October 8, 2026. In Wikipedia https://en.wikipedia.org/wiki/Hypertrichosis <br>
<br>
<br>
<noinclude>{{Chapter navigation with TOC||Chapter_One_Part_Two|TOC mini}}</noinclude>
<br>
{{BookCat}}
4snsj3qcssumkx1m8h97d0qh7l9syjb
Template:Columns-end
10
485763
4676245
4674478
2026-10-15T12:14:13Z
JJPMaster
3095725
Restoring revision 4671503 by [[Special:Contributions/It-is-Truly-Meet|It-is-Truly-Meet]]: rm deletion template maintained due to EF false positive
4676245
wikitext
text/x-wiki
<includeonly></div><div style="clear: both"></div></div></includeonly><noinclude>
{{Documentation|Template:Columns-start/doc}}
<!-- Add categories to the /doc subpage, interwikis to Wikidata, not here -->
</noinclude>
hzjggggnqw5itd0ms4w9iu46khmut92
Vehicle Identification Numbers (VIN codes)/Jaguar/VIN Codes
0
485791
4676298
4676123
2026-10-15T19:18:02Z
JustTheFacts33
3434282
/* Engine (Position 7-8) 2018-: */
4676298
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 (All models: 2016- EXCEPT F-Type '16-'17, XJ '16-'19)==
===Jaguar WMIs (2016-) (Position 1-3)===
* SAJ - Jaguar passenger car (UK)
* SAD - Jaguar SUV (UK & Europe)
* L2C - Chery Jaguar Land Rover (China)
===Model Line (Position 4)===
{| class="wikitable"
|+Position 4
!VIN code
!Description
|-
|A
|[[w:Jaguar XE|Jaguar XE]] ('17-'20)
|-
|B
|[[w:Jaguar XF (X260)|Jaguar XF]] ('16-'24)
|-
|C
|[[w:Jaguar F-Pace|Jaguar F-Pace]] ('17-'26)
|-
|D
|[[w:Jaguar F-Type|Jaguar F-Type]] ('18-'24)
|-
|E
|[[w:Jaguar Type 01|Jaguar Type 01]] ('28-)
|-
|F
|[[w:Jaguar E-Pace|Jaguar E-Pace]] ('18-'24)
|-
|H
|[[w:Jaguar I-Pace|Jaguar I-Pace EV]] ('19-'24)
|}
===Body Style (Position 6):===
* 1 = Coupe (F-Type coupe)
* 2 = 5-door wagon (XF Sportbrake wagon '18-'20)
* 2 = 5-door (E-Pace, F-Pace, I-Pace EV)
* 4 = 4-door sedan (XE, XF sedan, Type 01)
* 5 = Convertible (F-Type convertible)
===Transmission (Position 7) 2016-2017:===
* B = Automatic (XE '17, XF '16-'17, F-Pace '17)
===Engine/Emissions Control System (Position 8) 2016-2017:===
{| class="wikitable"
|+Position 8
! VIN !! Size !! Type !! Fuel !! Valvetrain !! Engine Family/Notes/Applications
|-
| G || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve||Direct Injection. ULEV. Dual VVT. [[w:Ford EcoBoost engine#2.0 L (2010–2018)|Ford EcoBoost engine (Mazda L engine-based)]].<br> Jaguar XE 25t ('17).
|-
| N || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve||Common-rail Direct Injection. Exhaust VVT. [[w:Ingenium engine family|JLR Ingenium AJ20D engine]]. Jaguar XE 20d, XF 20d, F-Pace 20d ('17).
|-
| V || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. SULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XF 35t ('16-'17) [If 5th pos. of VIN is NOT G, H, M, or N]. Jaguar XE 35t ('17). Jaguar F-Pace 35t ('17) [If 5th pos. of VIN is NOT M or P].
|-
| V || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. SULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 380 PS/375 hp. Jaguar XF S ('16-'17). If 5th pos. of VIN is G, H, M, or N. Jaguar F-Pace S ('17) [If 5th pos. of VIN is M or P].
|}
===Engine (Position 7-8) 2018-:===
{| class="wikitable"
|+Position 7-8
! VIN Pos. 7 !! Power Level !! Transmission !! VIN Pos. 8 !! Size !! Type !! Fuel !! Valvetrain !! Engine Family/Notes/Applications
|-
| E || 550 PS/542 hp || 8-spd. Auto. || E || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct injection. Dual Continuously VCT (VVT). [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133S engine]]. Jaguar F-Type R ('18-'20), F-Pace SVR ('19-'22).
|-
| E || 450 PS/444 hp || 8-spd. Auto. || E || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct injection. Dual Continuously VCT (VVT). [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133S engine]]. Jaguar F-Type P450 ('22).
|-
| F || 575 PS/567 hp || 8-spd. Auto. || E || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct injection. Dual Continuously VCT (VVT). [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133S engine]]. Jaguar F-Type SVR ('18-'20), F-Type R ('21-'22).
|-
| F || 600 PS/592 hp || 8-spd. Auto. || E || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct injection. Dual Continuously VCT (VVT). [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133S engine]]. Jaguar XE SV Project 8 ('19).
|-
| F || 180 PS/178 hp || 8-spd. Auto. || N || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve||Common-rail Direct Injection. Exhaust VVT.<br> [[w:Ingenium engine family|JLR Ingenium AJ20D4/AJ200D engine]].<br> Jaguar XE 20d ('18-'19), XF 20d ('18-'19), F-Pace 20d ('18-'19).
|-
| E || 340 PS/335 hp || 8-spd. Auto. || U || 3.0L || I6 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve||48v Mild Hybrid. E-supercharger. Direct Injection. Dual VVT. CVVL (Intake VVL). [[w:Ingenium engine family|JLR Ingenium AJ20P6/AJ300P engine]].<br> Jaguar F-Pace P340 ('21-'22).
|-
| F || 400 PS/395 hp || 8-spd. Auto. || U || 3.0L || I6 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve||48v Mild Hybrid. E-supercharger. Direct Injection. Dual VVT. CVVL (Intake VVL). [[w:Ingenium engine family|JLR Ingenium AJ20P6/AJ300P engine]].<br> Jaguar F-Pace P400 ('21-'22).
|-
| E || 340 PS/335 hp || 8-spd. Auto. || V || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. Continuously variable intake & exhaust valve timing.<br> [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> Jaguar XE 35t ('18), XF 35t ('18), F-Type ('18), F-Type P340 ('19-'20),<br> F-Pace 35t ('18).
|-
| F || 380 PS/375 hp || 8-spd. Auto. || V || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. Continuously variable intake & exhaust valve timing.<br> [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> Jaguar XE S ('18-'19), XF S ('18-'20), F-Type ('18),<br> F-Type P380 ('19), F-Type P380 R-Dynamic ('19-'21), F-Pace S ('18-'20).
|-
| G || 400 PS/395 hp || 8-spd. Auto. || V || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. Continuously variable intake & exhaust valve timing.<br> [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> Jaguar F-Type 400 Sport ('18).
|-
| J || 340 PS/335 hp || 6-spd. Man. || V || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. Continuously variable intake & exhaust valve timing.<br> [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> Jaguar F-Type ('18), F-Type P340 ('19).
|-
| K || 380 PS/375 hp || 6-spd. Man. || V || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. Continuously variable intake & exhaust valve timing.<br> [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> Jaguar F-Type P380 R-Dynamic ('18-'19).
|-
| E || 250 PS/247 hp || 8-spd. Auto. || X || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve||Direct Injection. Dual VVT. CVVL (Intake VVL).<br> [[w:Ingenium engine family|JLR Ingenium AJ20P4/AJ200P engine]].<br> Jaguar F-Pace P250 ('21-'22).
|-
| F || 250 PS/247 hp || 8-spd. Auto. || X || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve||Direct Injection. Dual VVT. CVVL (Intake VVL).<br> [[w:Ingenium engine family|JLR Ingenium AJ20P4/AJ200P engine]].<br> Jaguar XE 25t ('18-'20), XF 25t ('18-'20), XF P250 ('21-'22),<br> E-Pace P250 ('18-'22), F-Pace 25t ('18-'20).
|-
| G || 300 PS/296 hp || 8-spd. Auto. || X || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve||Direct Injection. Dual VVT. CVVL (Intake VVL).<br> [[w:Ingenium engine family|JLR Ingenium AJ20P4/AJ200P engine]].<br> Jaguar XE 30t ('18-'20), XF 30t ('18-'20), XF P300 ('21-'22),<br> F-Type ('18), F-Type P300 ('19-'21), E-Pace P300 R-Dynamic ('18-'20),<br> E-Pace 300 Sport ('21-'22), F-Pace 30t ('18-'20).
|}
====Motor Type for Electric Vehicles 2019-====
{| class="wikitable"
|+Position 7-8
|-
! VIN Pos. 7 !! Power Level !! Transmission !! VIN Pos. 8 !! Battery Size !! Battery Type !! Fuel !! Drive Wheels !! Notes/Applications
|-
| S || 400 PS/394 hp || 1-spd. Auto. || 1 || 90 Kwh || Lithium-ion || Electricity || All || Jaguar I-Pace EV400 ('19-'24).
|}
===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) 2016-===
* A - Solihull, West Midlands, England, UK (XE '17, F-Pace '17-'26, Type 01 '28-)
* C - Castle Bromwich, West Midlands, England, UK (XE '17-'20, XF '16-'24, F-Type '18-'24)
* S - Oxford Road plant, Ryton, West Midlands, England, UK (JLR SVO plant) (XE SV Project 8 '19)
* 1 - Graz, Austria (Magna Steyr plant) (E-Pace '18-'24, I-Pace EV '19-'24)
===Model (Position 12)===
* 9 - XE ('17) [Solihull plant]
* P - XE ('17-'20) [Castle Bromwich plant]
* Y - XF ('16-'24)
* K - F-Type ('18-'24)
* Z - E-Pace ('18-'20)
* 0 - E-Pace ('20-'24)
* F - I-Pace EV ('19-'20)
* 6 - I-Pace EV ('20-'24)
'''Positions 13–17, Serial Number'''
==General Template for Jaguar's VIN format (All models: 2000-2015 plus F-Type '16-'17, XJ '16-'19)==
===Jaguar WMIs (2000-) (Position 1-3)===
* SAJ - Jaguar passenger car (UK)
* SAD - Jaguar SUV (UK & Europe)
===Regional Spec/Restraint System (Position 4):===
* J = Manual seat belts, Dual front airbags (US: XK8 '00)
* B = Manual seat belts, Dual front airbags (Canada: XK8 '00)
* D = Manual seat belts, Depowered Dual front airbags, & Front Side Airbags (US: S-Type '00-'02, XJ8/XJR '00-'03, XK8/XKR '01-'06, XK/XKR Early '07)
* F = Manual seat belts, Depowered Dual front airbags, & Front Side Airbags (Canada: S-Type '00-'02, XJ8/XJR '00-'03, XK8/XKR '01-'06, XK/XKR Early '07)
* E = Manual seat belts, Depowered Dual front airbags w/occupant position sensing, & Front Side Airbags & Side Curtain Airbags (US: X-Type '02-'04, S-Type '03-'04, XJ8/XJR Early '04)
* G = Manual seat belts, Depowered Dual front airbags w/occupant position sensing, & Front Side Airbags & Side Curtain Airbags (Canada: X-Type '02-'04,<br> S-Type '03-'04, XJ8/XJR Early '04)
* W = Manual seat belts, Depowered Dual front airbags w/occupant position (driver) and weight (fr. psgr.) sensing, & Front Side Airbags & Side Curtain Airbags <br> (US: X-Type '05-'08, S-Type '05-'08, XF '09-'15, XJ8/XJR '04-'09, XJ '10-)
* X = Manual seat belts, Depowered Dual front airbags w/occupant position (driver) and weight (fr. psgr.) sensing, & Front Side Airbags & Side Curtain Airbags (Canada: X-Type '05-'08, S-Type '05-'08, XF '09-'15, XJ8/XJR '04-'09, XJ '10-)
* W = Manual seat belts, Depowered Dual front airbags w/occupant position (driver) and weight (fr. psgr.) sensing, & Front Side Head/Thorax Airbags <br> (US: XK/XKR '07-'15, F-Type '14-)
* X = Manual seat belts, Depowered Dual front airbags w/occupant position (driver) and weight (fr. psgr.) sensing, & Front Side Head/Thorax Airbags <br> (Canada: XK/XKR '07-'15, F-Type '14-)
===Transmission & Steering Location (Position 5 - '00-'12):===
* A = Automatic / LHD
* B = Manual / LHD (X-Type '02-'05, S-Type 3.0 '03-'04)
===Transmission & Drive Wheels (Position 5 - '13-):===
* A = Automatic / Rwd (XF '13-'15, XJ '13-'19, XK '13-'15, F-Type '14-'17)
* B = Manual / Rwd (F-Type '16-'17)
* J = Automatic / Awd (XF Awd '13-'15, XJ Awd '13-'19, F-Type Awd '16-'17)
===Model Line (Position 6-7)===
{| class="wikitable"
|+Position 6-7
!VIN code
!Description
|-
|51
|[[w:Jaguar X-Type|Jaguar X-Type sedan - High Series]] ('02-'08)
|-
|52
|[[w:Jaguar X-Type|Jaguar X-Type sedan - Entry Series]] ('03-'04)
|-
|53
|[[w:Jaguar X-Type|Jaguar X-Type sedan w/Sport Package]] ('02-'03)
|-
|54
|[[w:Jaguar X-Type|Jaguar X-Type Sportwagon]] ('05-'08)
|-
|01
|[[w:Jaguar S-Type (1999)|Jaguar S-Type]] ('00-'08)
|-
|03
|[[w:Jaguar S-Type (1999)|Jaguar S-Type Sport]] [3.0, 4.0] ('02)
|-
|03
|[[w:Jaguar S-Type (1999)|Jaguar S-Type Sport]] [3.0, 4.2] ('03)
|-
|03
|[[w:Jaguar S-Type (1999)|Jaguar S-Type R]] ('03-'08)
|-
|05
|[[w:Jaguar XF (X250)|Jaguar XF Luxury]] ('09)
|-
|06
|[[w:Jaguar XF (X250)|Jaguar XF Premium Luxury]] ('09)
|-
|07
|[[w:Jaguar XF (X250)|Jaguar XF Supercharged]] ('09)
|-
|0E
|[[w:Jaguar XF (X250)|Jaguar XF]] ('13-'14)
|-
|0F
|[[w:Jaguar XF (X250)|Jaguar XF]] ('10-'12)
|-
|0F
|[[w:Jaguar XF (X250)|Jaguar XF 2.0T Premium]] [8th pos. of VIN is S] ('15)
|-
|0F
|[[w:Jaguar XF (X250)|Jaguar XF 3.0 Sport Rwd or 3.0 Portfolio Rwd]] [8th pos. of VIN is 7] ('15)
|-
|0F
|[[w:Jaguar XF (X250)|Jaguar XF 3.0 Sport Awd or 3.0 Portfolio Awd]] [8th pos. of VIN is F] ('15)
|-
|0G
|[[w:Jaguar XF (X250)|Jaguar XF Premium]] ('10-'11)
|-
|0H
|[[w:Jaguar XF (X250)|Jaguar XF Portfolio]] [8th pos. of VIN is B] ('12)
|-
|0H
|[[w:Jaguar XF (X250)|Jaguar XF Supercharged]] [8th pos. of VIN is E: '10-'13 or P: '13-'15]
|-
|0J
|[[w:Jaguar XF (X250)|Jaguar XFR]] ('10-'15)
|-
|0K
|[[w:Jaguar XF (X250)|Jaguar XFR-S]] ('13-'15)
|-
|8J
|[[w:Jaguar XF (X250)|Jaguar XFR w/Speed Pack]] ('13-'15)
|-
|12
|[[w:Jaguar XJ (X308)#Sport|Jaguar XJ Sport]] ('02-'03)
|-
|14
|[[w:Jaguar XJ (X308)|Jaguar XJ8]] ('00-'03)
|-
|15
|[[w:Jaguar XJ (X308)#XJR|Jaguar XJR]] ('00-'03)
|-
|23
|[[w:Jaguar XJ (X308)|Jaguar XJ8L]] (LWB) ('00-'01)
|-
|24
|[[w:Jaguar XJ (X308)#Daimler/Vanden Plas|Jaguar XJ8 Vanden Plas]] (LWB) ('00-'03)
|-
|25
|[[w:Jaguar XJ (X308)#Daimler/Vanden Plas|Jaguar XJ8 Vanden Plas Supercharged]] (LWB) ('00-'01)
|-
|25
|[[w:Jaguar XJ (X308)#Daimler/Vanden Plas|Jaguar XJ Super V8]] (LWB) ('02-'03)
|-
|71
|[[w:Jaguar XJ (X350)|Jaguar XJ8]] ('04-'09)
|-
|73
|[[w:Jaguar XJ (X350)|Jaguar XJR]] ('04-'09)
|-
|74
|[[w:Jaguar XJ (X350)|Jaguar XJ8 Vanden Plas]] (SWB) ('04)
|-
|79
|[[w:Jaguar XJ (X350)|Jaguar XJ8L]] (LWB) ('05-'09)
|-
|82
|[[w:Jaguar XJ (X350)|Jaguar XJ8 Vanden Plas]] (LWB) ('05-'09)
|-
|82
|[[w:Jaguar XJ (X350)|Jaguar XJ Super V8]] (LWB, 5-psgr.) ('05-'09)
|-
|86
|[[w:Jaguar XJ (X350)|Jaguar XJ Super V8 Portfolio]] (LWB, 4-psgr.) ('06)
|-
|94
|[[w:Jaguar XJ (X350)|Jaguar XJ Super V8 Portfolio]] (LWB, 5-psgr.) ('09)
|-
|1C
|[[w:Jaguar XJ (X351)|Jaguar XJ]] ('10-'15)
|-
|1C
|[[w:Jaguar XJ (X351)|Jaguar XJ R-Sport]] [8th pos. of VIN is 7 (Rwd) or D (Awd)] ('16-'19)
|-
|1C
|[[w:Jaguar XJ (X351)|Jaguar XJ Supercharged]] [8th pos. of VIN is E] ('16-'19)
|-
|1E
|[[w:Jaguar XJ (X351)|Jaguar XJR]] ('14-'17)
|-
|1G
|[[w:Jaguar XJ (X351)|Jaguar XJ Supercharged]] [8th pos. of VIN is E: '10-'13 or T: '13-'15]
|-
|1J
|[[w:Jaguar XJ (X351)|Jaguar XJ Supersport]] ('11-'12)
|-
|2E
|[[w:Jaguar XJ (X351)|Jaguar XJR LWB]] ('14-'17), XJR575 LWB ('18-'19)
|-
|2G
|[[w:Jaguar XJ (X351)|Jaguar XJL]] [8th pos. of VIN is B] ('10-'11)
|-
|2G
|[[w:Jaguar XJ (X351)|Jaguar XJL Portfolio Rwd]] [8th pos. of VIN is B: '12-'13 or 1: '13]
|-
|2G
|[[w:Jaguar XJ (X351)|Jaguar XJL Portfolio Rwd]] [8th pos. of VIN is Z: '14-'15)
|-
|2G
|[[w:Jaguar XJ (X351)|Jaguar XJL Portfolio Rwd]] [8th pos. of VIN is 7: '16-'19), XJ50 3.0 Rwd (LWB) '19
|-
|2G
|[[w:Jaguar XJ (X351)|Jaguar XJL Portfolio Awd]] [8th pos. of VIN is D] ('13-'19), XJ50 3.0 Awd (LWB) '19
|-
|2G
|[[w:Jaguar XJ (X351)|Jaguar XJL Supercharged]] [8th pos. of VIN is E: '10-'13, '16-'19 or T: '13-'15], XJ50 5.0 Rwd (LWB) '19, XJ Collection (LWB) '19
|-
|2J
|[[w:Jaguar XJ (X351)|Jaguar XJL Supersport]] ('11-'13)
|-
|2K
|[[w:Jaguar XJ (X351)|Jaguar XJL Ultimate]] ('13)
|-
|3F
|[[w:Jaguar XJ (X351)|Jaguar XJ Supersport w/Speed Pack]] ('12-'13)
|-
|3G
|[[w:Jaguar XJ (X351)|Jaguar XJL Supersport w/Speed Pack]] ('12-'13)
|-
|3H
|[[w:Jaguar XJ (X351)|Jaguar XJ Supercharged w/Sport & Speed Pack]] ('12-'15)
|-
|3K
|[[w:Jaguar XJ (X351)|Jaguar XJL Supercharged w/Sport & Speed Pack]] ('12-'15)
|-
|41
|[[w:Jaguar XK (X100)|Jaguar XK8/XKR coupe]] ('00-'06)
|-
|42
|[[w:Jaguar XK (X100)|Jaguar XK8/XKR convertible]] ('00-'06)
|-
|43
|[[w:Jaguar XK (X150)|Jaguar XK/XKR coupe]] ('07-'09)
|-
|44
|[[w:Jaguar XK (X150)|Jaguar XK/XKR convertible]] ('07-'09)
|-
|45
|[[w:Jaguar XK (X150)|Jaguar XKR Portfolio Edition coupe]] ('09)
|-
|46
|[[w:Jaguar XK (X150)|Jaguar XKR Portfolio Edition convertible]] ('09)
|-
|4D
|[[w:Jaguar XK (X150)|Jaguar XK Touring coupe]] [8th pos. of VIN is B] ('13-'14)
|-
|4E
|[[w:Jaguar XK (X150)|Jaguar XK Touring convertible]] [8th pos. of VIN is B] ('13-'14)
|-
|4D
|[[w:Jaguar XK (X150)|Jaguar XKR coupe]] [8th pos. of VIN is C] ('10-'15)
|-
|4E
|[[w:Jaguar XK (X150)|Jaguar XKR convertible]] [8th pos. of VIN is C] ('10-'15)
|-
|4F
|[[w:Jaguar XK (X150)|Jaguar XK coupe]] (most Portfolio Edition features are std.) [8th pos. of VIN is B] ('10-'15)
|-
|4F
|[[w:Jaguar XK (X150)|Jaguar XKR175 coupe]] [8th pos. of VIN is C] ('11)
|-
|4F
|[[w:Jaguar XK (X150)|Jaguar XKR coupe w/Dynamic Pack]] [8th pos. of VIN is C] ('13-'15), XK Final Fifty Edition coupe ('15)
|-
|4G
|[[w:Jaguar XK (X150)|Jaguar XK convertible]] (most Portfolio Edition features are std.) [8th pos. of VIN is B] ('10-'15)
|-
|4G
|[[w:Jaguar XK (X150)|Jaguar XKR convertible w/Dynamic Pack]] [8th pos. of VIN is C] ('13-'15), XK Final Fifty Edition convertible ('15)
|-
|4H
|[[w:Jaguar XK (X150)|Jaguar XKR-S coupe]] ('12-'15), XKR-S GT coupe ('14)
|-
|4J
|[[w:Jaguar XK (X150)|Jaguar XKR-S convertible]] ('12-'15)
|-
|6A
|[[w:Jaguar F-Type)|Jaguar F-Type coupe]] ('15-'17), F-Type Premium coupe '17
|-
|6B
|[[w:Jaguar F-Type)|Jaguar F-Type S coupe]] ('15-'17), F-Type S British Design Edition coupe '17
|-
|6D
|[[w:Jaguar F-Type)|Jaguar F-Type R coupe]] ('15-'17)
|-
|6E
|[[w:Jaguar F-Type)|Jaguar F-Type convertible]] ('14-'17), F-Type Premium convertible '17
|-
|6F
|[[w:Jaguar F-Type)|Jaguar F-Type S convertible]] ('14-'17), F-Type S British Design Edition convertible '17
|-
|6G
|[[w:Jaguar F-Type)|Jaguar F-Type V8 S convertible]] ('14-'15)
|-
|6H
|[[w:Jaguar F-Type)|Jaguar F-Type R convertible]] ('16-'17)
|-
|6J
|[[w:Jaguar F-Type)|Jaguar F-Type SVR coupe]] ('17)
|-
|6K
|[[w:Jaguar F-Type)|Jaguar F-Type SVR convertible]] ('17)
|-
|7A
|[[w:Jaguar F-Type#Project 7)|Jaguar F-Type Project 7 convertible]] ('16)
|}
===Engine/Emissions Control System (Position 8)===
{| class="wikitable"
|+Position 8
! VIN !! Size !! Type !! Fuel !! Valvetrain !! Engine Family/Notes/Applications
|-
| A || 3.0L || 60° V6 || Gas ||DOHC,<br /> 24 valve||MPI. ULEV. Variable intake valve timing. [[w:Jaguar AJ-V6 engine#AJ30|Jaguar AJ-V6 - AJ30 V6 engine]].<br> Jaguar X-Type 3.0 (Mid '05-'08), S-Type 3.0 ('06-'08).
|-
| A || 4.2L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. ULEV. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.2 L|Jaguar AJ-V8 - AJ34 V8 engine]]. Jaguar XF ('10).
|-
| A || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 550 PS/542 hp. Jaguar XKR-S ('12-'15), XKR-S GT ('14), F-Type R coupe ('15).
|-
| B || 4.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||MPI. [[w:Jaguar AJ-V8 engine#Supercharged|Jaguar AJ-V8 - AJ27S V8 engine]].<br> Jaguar XJR ('00-'03), Vanden Plas Supercharged ('00-'01), Super V8 ('02-'03), XKR ('00-'02).
|-
| B || 4.2L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||MPI. [[w:Jaguar AJ-V8 engine#Supercharged_2|Jaguar AJ-V8 - AJ33S V8 engine]]. Jaguar XJR ('04-'05), Super V8 ('05), XKR ('03-'06).
|-
| B || 4.2L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. ULEV. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.2 L|Jaguar AJ-V8 - AJ34 V8 engine]].<br> Jaguar S-Type ('06-'08), XF ('09), XJ8/Vanden Plas ('06-'09), XK ('07-'09).
|-
| B || 5.0L || V8 || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. Variable intake valve lift. Variable intake.<br> [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> Jaguar XF ('10-'12), XJ ('11-'12), XJL ('11), XJL Portfolio Rwd ('12-'13), XK ('10-'15), XK Touring ('13-'14).
|-
| C || 3.0L || 60° V6 || Gas ||DOHC,<br /> 24 valve||MPI. Variable intake valve timing. [[w:Jaguar AJ-V6 engine#AJ30|Jaguar AJ-V6 - AJ30 V6 engine]].<br> Jaguar S-Type 3.0 ('00-'01), X-Type 3.0 ('02-Mid '05).
|-
| C || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 - AJ27 V8 engine]].<br> Jaguar XJ8/Vanden Plas ('00-'03), XJ Sport ('02-'03), XK8 ('00-'02).
|-
| C || 4.2L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.2 L|Jaguar AJ-V8 - AJ33 V8 engine]]. Jaguar XJ8 ('04-'05), XK8 ('03-'06).
|-
| C || 4.2L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||MPI. ULEV. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#Supercharged_2|Jaguar AJ-V8 - AJ34S V8 engine]].<br> Jaguar S-Type R ('06-'08), XF Supercharged ('09), XJR ('06-'09), Super V8 ('06-'09), XKR ('07-'09).
|-
| C || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 510 PS/503 hp. Jaguar XFR ('10-'13), XJ/XJL Supersport ('11-'13), XKR ('10-'15).
|-
| C || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 380 PS/375 hp. Jaguar F-Type S ('14-'15), F-Type S w/man. trans. ('16-'17).
|-
| D || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 - AJ28 V8 engine]]. Jaguar S-Type 4.0 ('00-'01).
|-
| D || 2.5L || 60° V6 || Gas ||DOHC,<br /> 24 valve||MPI. Variable intake valve timing. [[w:Jaguar AJ-V6 engine#AJ25|Jaguar AJ-V6 - AJ25 V6 engine]]. Jaguar X-Type 2.5 ('02-'05).
|-
| D || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XJ Awd, XJL Portfolio Awd ('13-'15).
|-
| D || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. SULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XJ R-Sport Awd, XJL Portfolio Awd ('16-'19), XJ50 3.0 Awd ('19).
|-
| E || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 470 PS/464 hp.<br> Jaguar XF Supercharged ('10-'13), XJ/XJL Supercharged ('11-'13, '16-'19), XJ50 5.0 Rwd ('19), XJ Collection ('19).
|-
| F || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XF 3.0 Awd ('13-'14).
|-
| F || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. SULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XF 3.0 Awd ('15).
|-
| H || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas/E85 ||DOHC,<br /> 32 valve||Flex Fuel. Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]]. 510 PS/503 hp. Jaguar XFR ('13-'15).
|-
| K || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 550 PS/542 hp. Jaguar XJR/XJR LWB ('14-'17).
|-
| K || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 575 PS/567 hp. Jaguar XJR575 LWB ('18-'19).
|-
| L || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 495 PS/488 hp. Jaguar F-Type V8 S convertible ('14-'15).
|-
| L || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 550 PS/542 hp. Jaguar F-Type R ('16-'17).
|-
| N || 3.0L || 60° V6 || Gas ||DOHC,<br /> 24 valve||MPI. Variable intake valve timing. [[w:Jaguar AJ-V6 engine#AJ30|Jaguar AJ-V6 - AJ30 V6 engine]]. Jaguar S-Type 3.0 ('01-'02).
|-
| P || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 - AJ28 V8 engine]]. Jaguar S-Type 4.0 ('01-'02).
|-
| P || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas/E85 ||DOHC,<br /> 32 valve||Flex Fuel. Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]]. 470 PS/464 hp. Jaguar XF Supercharged ('13-'15).
|-
| S || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve||Direct Injection. Dual VVT. [[w:Ford EcoBoost engine#2.0 L (2010–2018)|Ford EcoBoost engine (Mazda L engine-based)]].<br> Jaguar XF 2.0T ('13-'14), XF 2.0T Premium ('15).
|-
| T || 3.0L || 60° V6 || Gas ||DOHC,<br /> 24 valve||MPI. Variable intake valve timing. [[w:Jaguar AJ-V6 engine#AJ30|Jaguar AJ-V6 - AJ30 V6 engine]]. Jaguar S-Type 3.0 ('03-'05).
|-
| T || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas/E85 ||DOHC,<br /> 32 valve||Flex Fuel. Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]]. 470 PS/464 hp. Jaguar XJ/XJL Supercharged ('13-'15).
|-
| T || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. SULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar F-Type w/auto. trans. ('15-'17), F-Type Premium w/auto. trans. ('17).
|-
| U || 4.2L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.2 L|Jaguar AJ-V8 - AJ33 V8 engine]]. Jaguar S-Type 4.2 ('03-'05).
|-
| U || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. SULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 380 PS/375 hp. Jaguar F-Type S ('15), F-Type S Rwd w/auto. trans. ('16-'17).
|-
| V || 4.2L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||MPI. [[w:Jaguar AJ-V8 engine#Supercharged_2|Jaguar AJ-V8 - AJ33S V8 engine]]. Jaguar S-Type R ('03-'05).
|-
| V || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. SULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 380 PS/375 hp. Jaguar F-Type S Awd w/auto. trans. ('16-'17).
|-
| X || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas/E85 ||DOHC,<br /> 24 valve||Flex Fuel. Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XF 3.0 Rwd ('14).
|-
| Z || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 550 PS/542 hp. Jaguar XFR-S ('13-'15).
|-
| Z || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas/E85 ||DOHC,<br /> 24 valve||Flex Fuel. Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XJ Rwd, XJL Portfolio Rwd ('14-'15).
|-
| 1 || 5.0L || V8 || Gas/E85 ||DOHC,<br /> 32 valve||Flex Fuel. Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. Variable intake valve lift. Variable intake. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]]. Jaguar XJL Portfolio Rwd ('13).
|-
| 6 || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. SULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar F-Type w/man. trans. ('16-'17), F-Type Premium w/man. trans. ('17).
|-
| 7 || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XF 3.0 Rwd ('13), XJ Rwd ('13), F-Type ('14-'15).
|-
| 7 || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. SULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XF 3.0 Rwd ('15), XJ R-Sport Rwd ('16-'19), XJL Portfolio Rwd ('16-'19), XJ50 3.0 Rwd ('19).
|-
| 8 || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 575 PS/567 hp. Jaguar F-Type Project 7 ('16), F-Type SVR ('17).
|}
===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) 2000-2019===
* 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)
* G - Castle Bromwich, West Midlands, England, UK - S-Type 4.0 ('00-'02)
* H - Castle Bromwich, West Midlands, England, UK - S-Type 4.2 ('03-'08)
* 1 - Castle Bromwich, West Midlands, England, UK - S-Type R (4.2 supercharged) ('03-'08)
* H - Castle Bromwich, West Midlands, England, UK - XF 4.2 ('09-'10)
* 1 - Castle Bromwich, West Midlands, England, UK - XF Supercharged (4.2 supercharged) ('09)
* L - Castle Bromwich, West Midlands, England, UK - XF 5.0 ('10-'12)
* M - Castle Bromwich, West Midlands, England, UK - XF Supercharged, XFR (5.0 supercharged) ('10-'15), XFR-S (5.0 supercharged) ('13-'15)
* P - Castle Bromwich, West Midlands, England, UK - XF 2.0T ('13-'15)
* 8 - Castle Bromwich, West Midlands, England, UK - XF 3.0 supercharged ('13-'15)
* L - Browns Lane plant, Coventry, West Midlands, England, UK - XJ8 (4.0) ('00-'03), XJ8L (4.0) ('00-'01), XJ8 Vanden Plas (4.0) ('00-'03), XJ Sport (4.0) ('02-'03)
* M - Browns Lane plant, Coventry, West Midlands, England, UK - XJ8 Vanden Plas Supercharged (4.0 supercharged) ('00-'01),<br> Super V8 (4.0 supercharged) ('02-'03), XJR (4.0 supercharged) ('00-'03)
* S - Browns Lane plant, Coventry, West Midlands, England, UK - XJ8 (4.2) ('04-'06), XJ8L (4.2) ('05-'06), XJ8 Vanden Plas (4.0) ('04-'06)
* T - Browns Lane plant, Coventry, West Midlands, England, UK - Super V8 (4.2 supercharged) ('05-'06), Super V8 Portfolio (4.2 supercharged) ('06),<br> XJR (4.2 supercharged) ('04-'06)
* S - Castle Bromwich, West Midlands, England, UK - XJ8 (4.2) ('07-'09), XJ8L (4.2) ('07-'09), XJ8 Vanden Plas (4.0) ('07-'09)
* T - Castle Bromwich, West Midlands, England, UK - Super V8 (4.2 supercharged) ('07-'09), Super V8 Portfolio (4.2 supercharged) ('09),<br> XJR (4.2 supercharged) ('07-'09)
* L - Castle Bromwich, West Midlands, England, UK - XJ (5.0) ('10-'12), XJL (5.0) ('10-'11), XJL Portfolio (5.0) ('12-'13)
* M - Castle Bromwich, West Midlands, England, UK - XJ/XJL Supercharged (5.0 supercharged) ('10-'19), XJ/XJL Supersport (5.0 supercharged) ('11-'13),<br> XJL Ultimate (5.0 supercharged) ('13), XJR SWB/LWB (5.0 supercharged) ('14-'17), XJR575 LWB (5.0 supercharged) ('18-'19), XJ50 LWB (5.0 supercharged) ('19), XJ Collection Sp. Ed. LWB (5.0 supercharged) ('19)
* 8 - Castle Bromwich, West Midlands, England, UK - XJ base (3.0 supercharged) ('13-'15), XJ R-Sport (3.0 supercharged) ('16-'19),<br> XJL Portfolio AWD (3.0 supercharged) ('13-'19), XJL Portfolio RWD (3.0 supercharged) ('14-'19), XJ50 LWB (3.0 supercharged) ('19)
* N - Browns Lane plant, Coventry, West Midlands, England, UK - XK8 (4.0) ('00-'02)
* P - Browns Lane plant, Coventry, West Midlands, England, UK - XKR (4.0 supercharged) ('00-'02)
* 2 - Browns Lane plant, Coventry, West Midlands, England, UK - XK8 (4.2) ('03-'06)
* 3 - Browns Lane plant, Coventry, West Midlands, England, UK - XKR (4.2 supercharged) ('03-'06)
* 5 - Castle Bromwich, West Midlands, England, UK - XK (4.2) ('07-'09)
* 9 - Castle Bromwich, West Midlands, England, UK - XKR (4.2 supercharged) ('07-'09)
* L - Castle Bromwich, West Midlands, England, UK - XK (5.0) ('10-'15)
* M - Castle Bromwich, West Midlands, England, UK - XKR (5.0 supercharged) ('10-'15), XKR-S (5.0 supercharged) ('12-'15), XKR-S GT (5.0 supercharged) ('14)
* 8 - Castle Bromwich, West Midlands, England, UK - F-Type Base, S (3.0 supercharged) ('14-'17), F-Type Premium (3.0 supercharged) ('17)
* M - Castle Bromwich, West Midlands, England, UK - F-Type V8S (5.0 supercharged) ('14-'15), F-Type R (5.0 supercharged) ('15-'17),<br> F-Type Project 7 (5.0 supercharged) ('16), F-Type SVR (5.0 supercharged) ('17)
===Model (Position 12)===
* C - X-Type ('02-'03)
* D - X-Type ('03-'04)
* E - X-Type ('04-'06)
* J - X-Type ('06-'08)
* L - S-Type ('00-'01)
* M - S-Type ('01-'04)
* N - S-Type ('04-'08)
* R - XF ('09-'11)
* S - XF ('11-'13)
* U - XF ('13-'15)
* F - XJ ('00-'03)
* G - XJ ('04-'06) [Browns Lane plant]
* H - XJ ('06-'09) [Castle Bromwich plant]
* V - XJ ('10-'16)
* W - XJ ('16-'19)
* A - XK ('00-'06)
* B - XK ('07-'15)
* K - F-Type ('14-'17)
'''Positions 13–17, Serial Number'''
==General Template for Jaguar's VIN format (1981 - 1999)==
===Jaguar WMIs (1981-1999) (Position 1-3)===
* SAJ - Jaguar passenger car
===Model Line (Position 4)===
{| 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]].<br> 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]] modified by [[w:Tom Walkinshaw Racing|JaguarSport]]. Jaguar XJR-S ('93).
|-
| 3 || 6.0L || 60° V12 || Gas ||SOHC,<br /> 24 valve||MPI. [[w:Jaguar V12 engine|Jaguar V12]]. Jaguar 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
===Positions 12–17, Serial Number===
** 100001 and after - XJ-S/XJ-SC/XJS/XJR-S (XJ27)
** 300001 and after - XJ-series sedan Series III
** 500001 and after - XJ-series sedan (XJ40/XJ81)
** 720001 and after - XJ-series sedan (X300/X305/X306/X330)
** 810001 and after - XJ-series sedan (X308)
** 001001 and after - XK8 (X100)
koi85ad4wmo6hq8d22g6z4dzv456ssa
4676317
4676298
2026-10-15T23:39:32Z
JustTheFacts33
3434282
/* Engine (Position 7-8) 2018-: */
4676317
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 (All models: 2016- EXCEPT F-Type '16-'17, XJ '16-'19)==
===Jaguar WMIs (2016-) (Position 1-3)===
* SAJ - Jaguar passenger car (UK)
* SAD - Jaguar SUV (UK & Europe)
* L2C - Chery Jaguar Land Rover (China)
===Model Line (Position 4)===
{| class="wikitable"
|+Position 4
!VIN code
!Description
|-
|A
|[[w:Jaguar XE|Jaguar XE]] ('17-'20)
|-
|B
|[[w:Jaguar XF (X260)|Jaguar XF]] ('16-'24)
|-
|C
|[[w:Jaguar F-Pace|Jaguar F-Pace]] ('17-'26)
|-
|D
|[[w:Jaguar F-Type|Jaguar F-Type]] ('18-'24)
|-
|E
|[[w:Jaguar Type 01|Jaguar Type 01]] ('28-)
|-
|F
|[[w:Jaguar E-Pace|Jaguar E-Pace]] ('18-'24)
|-
|H
|[[w:Jaguar I-Pace|Jaguar I-Pace EV]] ('19-'24)
|}
===Body Style (Position 6):===
* 1 = Coupe (F-Type coupe)
* 2 = 5-door wagon (XF Sportbrake wagon '18-'20)
* 2 = 5-door (E-Pace, F-Pace, I-Pace EV)
* 4 = 4-door sedan (XE, XF sedan, Type 01)
* 5 = Convertible (F-Type convertible)
===Transmission (Position 7) 2016-2017:===
* B = Automatic (XE '17, XF '16-'17, F-Pace '17)
===Engine/Emissions Control System (Position 8) 2016-2017:===
{| class="wikitable"
|+Position 8
! VIN !! Size !! Type !! Fuel !! Valvetrain !! Engine Family/Notes/Applications
|-
| G || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve||Direct Injection. ULEV. Dual VVT. [[w:Ford EcoBoost engine#2.0 L (2010–2018)|Ford EcoBoost engine (Mazda L engine-based)]].<br> Jaguar XE 25t ('17).
|-
| N || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve||Common-rail Direct Injection. Exhaust VVT. [[w:Ingenium engine family|JLR Ingenium AJ20D engine]]. Jaguar XE 20d, XF 20d, F-Pace 20d ('17).
|-
| V || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. SULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XF 35t ('16-'17) [If 5th pos. of VIN is NOT G, H, M, or N]. Jaguar XE 35t ('17). Jaguar F-Pace 35t ('17) [If 5th pos. of VIN is NOT M or P].
|-
| V || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. SULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 380 PS/375 hp. Jaguar XF S ('16-'17). If 5th pos. of VIN is G, H, M, or N. Jaguar F-Pace S ('17) [If 5th pos. of VIN is M or P].
|}
===Engine (Position 7-8) 2018-:===
{| class="wikitable"
|+Position 7-8
! VIN Pos. 7 !! Power Level !! Transmission !! VIN Pos. 8 !! Size !! Type !! Fuel !! Valvetrain !! Engine Family/Notes/Applications
|-
| E || 550 PS/542 hp || 8-spd. Auto. || E || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct injection. Dual Continuously VCT (VVT). [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133S engine]]. Jaguar F-Type R ('18-'20), F-Pace SVR ('19-'23).
|-
| E || 450 PS/444 hp || 8-spd. Auto. || E || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct injection. Dual Continuously VCT (VVT). [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133S engine]]. Jaguar F-Type P450 ('22-23).
|-
| F || 575 PS/567 hp || 8-spd. Auto. || E || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct injection. Dual Continuously VCT (VVT). [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133S engine]]. Jaguar F-Type SVR ('18-'20), F-Type R ('21-'23).
|-
| F || 600 PS/592 hp || 8-spd. Auto. || E || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct injection. Dual Continuously VCT (VVT). [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133S engine]]. Jaguar XE SV Project 8 ('19).
|-
| F || 180 PS/178 hp || 8-spd. Auto. || N || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Diesel || DOHC,<br /> 16 valve||Common-rail Direct Injection. Exhaust VVT.<br> [[w:Ingenium engine family|JLR Ingenium AJ20D4/AJ200D engine]].<br> Jaguar XE 20d ('18-'19), XF 20d ('18-'19), F-Pace 20d ('18-'19).
|-
| E || 340 PS/335 hp || 8-spd. Auto. || U || 3.0L || I6 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve||48v Mild Hybrid. E-supercharger. Direct Injection. Dual VVT. CVVL (Intake VVL). [[w:Ingenium engine family|JLR Ingenium AJ20P6/AJ300P engine]].<br> Jaguar F-Pace P340 ('21-'22).
|-
| F || 400 PS/395 hp || 8-spd. Auto. || U || 3.0L || I6 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 24 valve||48v Mild Hybrid. E-supercharger. Direct Injection. Dual VVT. CVVL (Intake VVL). [[w:Ingenium engine family|JLR Ingenium AJ20P6/AJ300P engine]].<br> Jaguar F-Pace P400 ('21-'23).
|-
| E || 340 PS/335 hp || 8-spd. Auto. || V || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. Continuously variable intake & exhaust valve timing.<br> [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> Jaguar XE 35t ('18), XF 35t ('18), F-Type ('18), F-Type P340 ('19-'20),<br> F-Pace 35t ('18).
|-
| F || 380 PS/375 hp || 8-spd. Auto. || V || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. Continuously variable intake & exhaust valve timing.<br> [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> Jaguar XE S ('18-'19), XF S ('18-'20), F-Type ('18),<br> F-Type P380 ('19), F-Type P380 R-Dynamic ('19-'21), F-Pace S ('18-'20).
|-
| G || 400 PS/395 hp || 8-spd. Auto. || V || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. Continuously variable intake & exhaust valve timing.<br> [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> Jaguar F-Type 400 Sport ('18).
|-
| J || 340 PS/335 hp || 6-spd. Man. || V || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. Continuously variable intake & exhaust valve timing.<br> [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> Jaguar F-Type ('18), F-Type P340 ('19).
|-
| K || 380 PS/375 hp || 6-spd. Man. || V || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. Continuously variable intake & exhaust valve timing.<br> [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> Jaguar F-Type P380 R-Dynamic ('18-'19).
|-
| E || 250 PS/247 hp || 8-spd. Auto. || X || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve||Direct Injection. Dual VVT. CVVL (Intake VVL).<br> [[w:Ingenium engine family|JLR Ingenium AJ20P4/AJ200P engine]].<br> Jaguar F-Pace P250 ('21-'23).
|-
| F || 250 PS/247 hp || 8-spd. Auto. || X || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve||Direct Injection. Dual VVT. CVVL (Intake VVL).<br> [[w:Ingenium engine family|JLR Ingenium AJ20P4/AJ200P engine]].<br> Jaguar XE 25t ('18-'20), XF 25t ('18-'20), XF P250 ('21-'23),<br> E-Pace P250 ('18-'23), F-Pace 25t ('18-'20).
|-
| G || 300 PS/296 hp || 8-spd. Auto. || X || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve||Direct Injection. Dual VVT. CVVL (Intake VVL).<br> [[w:Ingenium engine family|JLR Ingenium AJ20P4/AJ200P engine]].<br> Jaguar XE 30t ('18-'20), XF 30t ('18-'20), XF P300 ('21-'23),<br> F-Type ('18), F-Type P300 ('19-'21), E-Pace P300 R-Dynamic ('18-'20),<br> E-Pace 300 Sport ('21-'22), F-Pace 30t ('18-'20).
|}
====Motor Type for Electric Vehicles 2019-====
{| class="wikitable"
|+Position 7-8
|-
! VIN Pos. 7 !! Power Level !! Transmission !! VIN Pos. 8 !! Battery Size !! Battery Type !! Fuel !! Drive Wheels !! Notes/Applications
|-
| S || 400 PS/394 hp || 1-spd. Auto. || 1 || 90 Kwh || Lithium-ion || Electricity || All || Jaguar I-Pace EV400 ('19-'24).
|}
===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) 2016-===
* A - Solihull, West Midlands, England, UK (XE '17, F-Pace '17-'26, Type 01 '28-)
* C - Castle Bromwich, West Midlands, England, UK (XE '17-'20, XF '16-'24, F-Type '18-'24)
* S - Oxford Road plant, Ryton, West Midlands, England, UK (JLR SVO plant) (XE SV Project 8 '19)
* 1 - Graz, Austria (Magna Steyr plant) (E-Pace '18-'24, I-Pace EV '19-'24)
===Model (Position 12)===
* 9 - XE ('17) [Solihull plant]
* P - XE ('17-'20) [Castle Bromwich plant]
* Y - XF ('16-'24)
* K - F-Type ('18-'24)
* Z - E-Pace ('18-'20)
* 0 - E-Pace ('20-'24)
* F - I-Pace EV ('19-'20)
* 6 - I-Pace EV ('20-'24)
'''Positions 13–17, Serial Number'''
==General Template for Jaguar's VIN format (All models: 2000-2015 plus F-Type '16-'17, XJ '16-'19)==
===Jaguar WMIs (2000-) (Position 1-3)===
* SAJ - Jaguar passenger car (UK)
* SAD - Jaguar SUV (UK & Europe)
===Regional Spec/Restraint System (Position 4):===
* J = Manual seat belts, Dual front airbags (US: XK8 '00)
* B = Manual seat belts, Dual front airbags (Canada: XK8 '00)
* D = Manual seat belts, Depowered Dual front airbags, & Front Side Airbags (US: S-Type '00-'02, XJ8/XJR '00-'03, XK8/XKR '01-'06, XK/XKR Early '07)
* F = Manual seat belts, Depowered Dual front airbags, & Front Side Airbags (Canada: S-Type '00-'02, XJ8/XJR '00-'03, XK8/XKR '01-'06, XK/XKR Early '07)
* E = Manual seat belts, Depowered Dual front airbags w/occupant position sensing, & Front Side Airbags & Side Curtain Airbags (US: X-Type '02-'04, S-Type '03-'04, XJ8/XJR Early '04)
* G = Manual seat belts, Depowered Dual front airbags w/occupant position sensing, & Front Side Airbags & Side Curtain Airbags (Canada: X-Type '02-'04,<br> S-Type '03-'04, XJ8/XJR Early '04)
* W = Manual seat belts, Depowered Dual front airbags w/occupant position (driver) and weight (fr. psgr.) sensing, & Front Side Airbags & Side Curtain Airbags <br> (US: X-Type '05-'08, S-Type '05-'08, XF '09-'15, XJ8/XJR '04-'09, XJ '10-)
* X = Manual seat belts, Depowered Dual front airbags w/occupant position (driver) and weight (fr. psgr.) sensing, & Front Side Airbags & Side Curtain Airbags (Canada: X-Type '05-'08, S-Type '05-'08, XF '09-'15, XJ8/XJR '04-'09, XJ '10-)
* W = Manual seat belts, Depowered Dual front airbags w/occupant position (driver) and weight (fr. psgr.) sensing, & Front Side Head/Thorax Airbags <br> (US: XK/XKR '07-'15, F-Type '14-)
* X = Manual seat belts, Depowered Dual front airbags w/occupant position (driver) and weight (fr. psgr.) sensing, & Front Side Head/Thorax Airbags <br> (Canada: XK/XKR '07-'15, F-Type '14-)
===Transmission & Steering Location (Position 5 - '00-'12):===
* A = Automatic / LHD
* B = Manual / LHD (X-Type '02-'05, S-Type 3.0 '03-'04)
===Transmission & Drive Wheels (Position 5 - '13-):===
* A = Automatic / Rwd (XF '13-'15, XJ '13-'19, XK '13-'15, F-Type '14-'17)
* B = Manual / Rwd (F-Type '16-'17)
* J = Automatic / Awd (XF Awd '13-'15, XJ Awd '13-'19, F-Type Awd '16-'17)
===Model Line (Position 6-7)===
{| class="wikitable"
|+Position 6-7
!VIN code
!Description
|-
|51
|[[w:Jaguar X-Type|Jaguar X-Type sedan - High Series]] ('02-'08)
|-
|52
|[[w:Jaguar X-Type|Jaguar X-Type sedan - Entry Series]] ('03-'04)
|-
|53
|[[w:Jaguar X-Type|Jaguar X-Type sedan w/Sport Package]] ('02-'03)
|-
|54
|[[w:Jaguar X-Type|Jaguar X-Type Sportwagon]] ('05-'08)
|-
|01
|[[w:Jaguar S-Type (1999)|Jaguar S-Type]] ('00-'08)
|-
|03
|[[w:Jaguar S-Type (1999)|Jaguar S-Type Sport]] [3.0, 4.0] ('02)
|-
|03
|[[w:Jaguar S-Type (1999)|Jaguar S-Type Sport]] [3.0, 4.2] ('03)
|-
|03
|[[w:Jaguar S-Type (1999)|Jaguar S-Type R]] ('03-'08)
|-
|05
|[[w:Jaguar XF (X250)|Jaguar XF Luxury]] ('09)
|-
|06
|[[w:Jaguar XF (X250)|Jaguar XF Premium Luxury]] ('09)
|-
|07
|[[w:Jaguar XF (X250)|Jaguar XF Supercharged]] ('09)
|-
|0E
|[[w:Jaguar XF (X250)|Jaguar XF]] ('13-'14)
|-
|0F
|[[w:Jaguar XF (X250)|Jaguar XF]] ('10-'12)
|-
|0F
|[[w:Jaguar XF (X250)|Jaguar XF 2.0T Premium]] [8th pos. of VIN is S] ('15)
|-
|0F
|[[w:Jaguar XF (X250)|Jaguar XF 3.0 Sport Rwd or 3.0 Portfolio Rwd]] [8th pos. of VIN is 7] ('15)
|-
|0F
|[[w:Jaguar XF (X250)|Jaguar XF 3.0 Sport Awd or 3.0 Portfolio Awd]] [8th pos. of VIN is F] ('15)
|-
|0G
|[[w:Jaguar XF (X250)|Jaguar XF Premium]] ('10-'11)
|-
|0H
|[[w:Jaguar XF (X250)|Jaguar XF Portfolio]] [8th pos. of VIN is B] ('12)
|-
|0H
|[[w:Jaguar XF (X250)|Jaguar XF Supercharged]] [8th pos. of VIN is E: '10-'13 or P: '13-'15]
|-
|0J
|[[w:Jaguar XF (X250)|Jaguar XFR]] ('10-'15)
|-
|0K
|[[w:Jaguar XF (X250)|Jaguar XFR-S]] ('13-'15)
|-
|8J
|[[w:Jaguar XF (X250)|Jaguar XFR w/Speed Pack]] ('13-'15)
|-
|12
|[[w:Jaguar XJ (X308)#Sport|Jaguar XJ Sport]] ('02-'03)
|-
|14
|[[w:Jaguar XJ (X308)|Jaguar XJ8]] ('00-'03)
|-
|15
|[[w:Jaguar XJ (X308)#XJR|Jaguar XJR]] ('00-'03)
|-
|23
|[[w:Jaguar XJ (X308)|Jaguar XJ8L]] (LWB) ('00-'01)
|-
|24
|[[w:Jaguar XJ (X308)#Daimler/Vanden Plas|Jaguar XJ8 Vanden Plas]] (LWB) ('00-'03)
|-
|25
|[[w:Jaguar XJ (X308)#Daimler/Vanden Plas|Jaguar XJ8 Vanden Plas Supercharged]] (LWB) ('00-'01)
|-
|25
|[[w:Jaguar XJ (X308)#Daimler/Vanden Plas|Jaguar XJ Super V8]] (LWB) ('02-'03)
|-
|71
|[[w:Jaguar XJ (X350)|Jaguar XJ8]] ('04-'09)
|-
|73
|[[w:Jaguar XJ (X350)|Jaguar XJR]] ('04-'09)
|-
|74
|[[w:Jaguar XJ (X350)|Jaguar XJ8 Vanden Plas]] (SWB) ('04)
|-
|79
|[[w:Jaguar XJ (X350)|Jaguar XJ8L]] (LWB) ('05-'09)
|-
|82
|[[w:Jaguar XJ (X350)|Jaguar XJ8 Vanden Plas]] (LWB) ('05-'09)
|-
|82
|[[w:Jaguar XJ (X350)|Jaguar XJ Super V8]] (LWB, 5-psgr.) ('05-'09)
|-
|86
|[[w:Jaguar XJ (X350)|Jaguar XJ Super V8 Portfolio]] (LWB, 4-psgr.) ('06)
|-
|94
|[[w:Jaguar XJ (X350)|Jaguar XJ Super V8 Portfolio]] (LWB, 5-psgr.) ('09)
|-
|1C
|[[w:Jaguar XJ (X351)|Jaguar XJ]] ('10-'15)
|-
|1C
|[[w:Jaguar XJ (X351)|Jaguar XJ R-Sport]] [8th pos. of VIN is 7 (Rwd) or D (Awd)] ('16-'19)
|-
|1C
|[[w:Jaguar XJ (X351)|Jaguar XJ Supercharged]] [8th pos. of VIN is E] ('16-'19)
|-
|1E
|[[w:Jaguar XJ (X351)|Jaguar XJR]] ('14-'17)
|-
|1G
|[[w:Jaguar XJ (X351)|Jaguar XJ Supercharged]] [8th pos. of VIN is E: '10-'13 or T: '13-'15]
|-
|1J
|[[w:Jaguar XJ (X351)|Jaguar XJ Supersport]] ('11-'12)
|-
|2E
|[[w:Jaguar XJ (X351)|Jaguar XJR LWB]] ('14-'17), XJR575 LWB ('18-'19)
|-
|2G
|[[w:Jaguar XJ (X351)|Jaguar XJL]] [8th pos. of VIN is B] ('10-'11)
|-
|2G
|[[w:Jaguar XJ (X351)|Jaguar XJL Portfolio Rwd]] [8th pos. of VIN is B: '12-'13 or 1: '13]
|-
|2G
|[[w:Jaguar XJ (X351)|Jaguar XJL Portfolio Rwd]] [8th pos. of VIN is Z: '14-'15)
|-
|2G
|[[w:Jaguar XJ (X351)|Jaguar XJL Portfolio Rwd]] [8th pos. of VIN is 7: '16-'19), XJ50 3.0 Rwd (LWB) '19
|-
|2G
|[[w:Jaguar XJ (X351)|Jaguar XJL Portfolio Awd]] [8th pos. of VIN is D] ('13-'19), XJ50 3.0 Awd (LWB) '19
|-
|2G
|[[w:Jaguar XJ (X351)|Jaguar XJL Supercharged]] [8th pos. of VIN is E: '10-'13, '16-'19 or T: '13-'15], XJ50 5.0 Rwd (LWB) '19, XJ Collection (LWB) '19
|-
|2J
|[[w:Jaguar XJ (X351)|Jaguar XJL Supersport]] ('11-'13)
|-
|2K
|[[w:Jaguar XJ (X351)|Jaguar XJL Ultimate]] ('13)
|-
|3F
|[[w:Jaguar XJ (X351)|Jaguar XJ Supersport w/Speed Pack]] ('12-'13)
|-
|3G
|[[w:Jaguar XJ (X351)|Jaguar XJL Supersport w/Speed Pack]] ('12-'13)
|-
|3H
|[[w:Jaguar XJ (X351)|Jaguar XJ Supercharged w/Sport & Speed Pack]] ('12-'15)
|-
|3K
|[[w:Jaguar XJ (X351)|Jaguar XJL Supercharged w/Sport & Speed Pack]] ('12-'15)
|-
|41
|[[w:Jaguar XK (X100)|Jaguar XK8/XKR coupe]] ('00-'06)
|-
|42
|[[w:Jaguar XK (X100)|Jaguar XK8/XKR convertible]] ('00-'06)
|-
|43
|[[w:Jaguar XK (X150)|Jaguar XK/XKR coupe]] ('07-'09)
|-
|44
|[[w:Jaguar XK (X150)|Jaguar XK/XKR convertible]] ('07-'09)
|-
|45
|[[w:Jaguar XK (X150)|Jaguar XKR Portfolio Edition coupe]] ('09)
|-
|46
|[[w:Jaguar XK (X150)|Jaguar XKR Portfolio Edition convertible]] ('09)
|-
|4D
|[[w:Jaguar XK (X150)|Jaguar XK Touring coupe]] [8th pos. of VIN is B] ('13-'14)
|-
|4E
|[[w:Jaguar XK (X150)|Jaguar XK Touring convertible]] [8th pos. of VIN is B] ('13-'14)
|-
|4D
|[[w:Jaguar XK (X150)|Jaguar XKR coupe]] [8th pos. of VIN is C] ('10-'15)
|-
|4E
|[[w:Jaguar XK (X150)|Jaguar XKR convertible]] [8th pos. of VIN is C] ('10-'15)
|-
|4F
|[[w:Jaguar XK (X150)|Jaguar XK coupe]] (most Portfolio Edition features are std.) [8th pos. of VIN is B] ('10-'15)
|-
|4F
|[[w:Jaguar XK (X150)|Jaguar XKR175 coupe]] [8th pos. of VIN is C] ('11)
|-
|4F
|[[w:Jaguar XK (X150)|Jaguar XKR coupe w/Dynamic Pack]] [8th pos. of VIN is C] ('13-'15), XK Final Fifty Edition coupe ('15)
|-
|4G
|[[w:Jaguar XK (X150)|Jaguar XK convertible]] (most Portfolio Edition features are std.) [8th pos. of VIN is B] ('10-'15)
|-
|4G
|[[w:Jaguar XK (X150)|Jaguar XKR convertible w/Dynamic Pack]] [8th pos. of VIN is C] ('13-'15), XK Final Fifty Edition convertible ('15)
|-
|4H
|[[w:Jaguar XK (X150)|Jaguar XKR-S coupe]] ('12-'15), XKR-S GT coupe ('14)
|-
|4J
|[[w:Jaguar XK (X150)|Jaguar XKR-S convertible]] ('12-'15)
|-
|6A
|[[w:Jaguar F-Type)|Jaguar F-Type coupe]] ('15-'17), F-Type Premium coupe '17
|-
|6B
|[[w:Jaguar F-Type)|Jaguar F-Type S coupe]] ('15-'17), F-Type S British Design Edition coupe '17
|-
|6D
|[[w:Jaguar F-Type)|Jaguar F-Type R coupe]] ('15-'17)
|-
|6E
|[[w:Jaguar F-Type)|Jaguar F-Type convertible]] ('14-'17), F-Type Premium convertible '17
|-
|6F
|[[w:Jaguar F-Type)|Jaguar F-Type S convertible]] ('14-'17), F-Type S British Design Edition convertible '17
|-
|6G
|[[w:Jaguar F-Type)|Jaguar F-Type V8 S convertible]] ('14-'15)
|-
|6H
|[[w:Jaguar F-Type)|Jaguar F-Type R convertible]] ('16-'17)
|-
|6J
|[[w:Jaguar F-Type)|Jaguar F-Type SVR coupe]] ('17)
|-
|6K
|[[w:Jaguar F-Type)|Jaguar F-Type SVR convertible]] ('17)
|-
|7A
|[[w:Jaguar F-Type#Project 7)|Jaguar F-Type Project 7 convertible]] ('16)
|}
===Engine/Emissions Control System (Position 8)===
{| class="wikitable"
|+Position 8
! VIN !! Size !! Type !! Fuel !! Valvetrain !! Engine Family/Notes/Applications
|-
| A || 3.0L || 60° V6 || Gas ||DOHC,<br /> 24 valve||MPI. ULEV. Variable intake valve timing. [[w:Jaguar AJ-V6 engine#AJ30|Jaguar AJ-V6 - AJ30 V6 engine]].<br> Jaguar X-Type 3.0 (Mid '05-'08), S-Type 3.0 ('06-'08).
|-
| A || 4.2L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. ULEV. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.2 L|Jaguar AJ-V8 - AJ34 V8 engine]]. Jaguar XF ('10).
|-
| A || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 550 PS/542 hp. Jaguar XKR-S ('12-'15), XKR-S GT ('14), F-Type R coupe ('15).
|-
| B || 4.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||MPI. [[w:Jaguar AJ-V8 engine#Supercharged|Jaguar AJ-V8 - AJ27S V8 engine]].<br> Jaguar XJR ('00-'03), Vanden Plas Supercharged ('00-'01), Super V8 ('02-'03), XKR ('00-'02).
|-
| B || 4.2L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||MPI. [[w:Jaguar AJ-V8 engine#Supercharged_2|Jaguar AJ-V8 - AJ33S V8 engine]]. Jaguar XJR ('04-'05), Super V8 ('05), XKR ('03-'06).
|-
| B || 4.2L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. ULEV. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.2 L|Jaguar AJ-V8 - AJ34 V8 engine]].<br> Jaguar S-Type ('06-'08), XF ('09), XJ8/Vanden Plas ('06-'09), XK ('07-'09).
|-
| B || 5.0L || V8 || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. Variable intake valve lift. Variable intake.<br> [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> Jaguar XF ('10-'12), XJ ('11-'12), XJL ('11), XJL Portfolio Rwd ('12-'13), XK ('10-'15), XK Touring ('13-'14).
|-
| C || 3.0L || 60° V6 || Gas ||DOHC,<br /> 24 valve||MPI. Variable intake valve timing. [[w:Jaguar AJ-V6 engine#AJ30|Jaguar AJ-V6 - AJ30 V6 engine]].<br> Jaguar S-Type 3.0 ('00-'01), X-Type 3.0 ('02-Mid '05).
|-
| C || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 - AJ27 V8 engine]].<br> Jaguar XJ8/Vanden Plas ('00-'03), XJ Sport ('02-'03), XK8 ('00-'02).
|-
| C || 4.2L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.2 L|Jaguar AJ-V8 - AJ33 V8 engine]]. Jaguar XJ8 ('04-'05), XK8 ('03-'06).
|-
| C || 4.2L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||MPI. ULEV. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#Supercharged_2|Jaguar AJ-V8 - AJ34S V8 engine]].<br> Jaguar S-Type R ('06-'08), XF Supercharged ('09), XJR ('06-'09), Super V8 ('06-'09), XKR ('07-'09).
|-
| C || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 510 PS/503 hp. Jaguar XFR ('10-'13), XJ/XJL Supersport ('11-'13), XKR ('10-'15).
|-
| C || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 380 PS/375 hp. Jaguar F-Type S ('14-'15), F-Type S w/man. trans. ('16-'17).
|-
| D || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 - AJ28 V8 engine]]. Jaguar S-Type 4.0 ('00-'01).
|-
| D || 2.5L || 60° V6 || Gas ||DOHC,<br /> 24 valve||MPI. Variable intake valve timing. [[w:Jaguar AJ-V6 engine#AJ25|Jaguar AJ-V6 - AJ25 V6 engine]]. Jaguar X-Type 2.5 ('02-'05).
|-
| D || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XJ Awd, XJL Portfolio Awd ('13-'15).
|-
| D || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. SULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XJ R-Sport Awd, XJL Portfolio Awd ('16-'19), XJ50 3.0 Awd ('19).
|-
| E || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 470 PS/464 hp.<br> Jaguar XF Supercharged ('10-'13), XJ/XJL Supercharged ('11-'13, '16-'19), XJ50 5.0 Rwd ('19), XJ Collection ('19).
|-
| F || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XF 3.0 Awd ('13-'14).
|-
| F || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. SULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XF 3.0 Awd ('15).
|-
| H || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas/E85 ||DOHC,<br /> 32 valve||Flex Fuel. Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]]. 510 PS/503 hp. Jaguar XFR ('13-'15).
|-
| K || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 550 PS/542 hp. Jaguar XJR/XJR LWB ('14-'17).
|-
| K || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 575 PS/567 hp. Jaguar XJR575 LWB ('18-'19).
|-
| L || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 495 PS/488 hp. Jaguar F-Type V8 S convertible ('14-'15).
|-
| L || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 550 PS/542 hp. Jaguar F-Type R ('16-'17).
|-
| N || 3.0L || 60° V6 || Gas ||DOHC,<br /> 24 valve||MPI. Variable intake valve timing. [[w:Jaguar AJ-V6 engine#AJ30|Jaguar AJ-V6 - AJ30 V6 engine]]. Jaguar S-Type 3.0 ('01-'02).
|-
| P || 4.0L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.0 L|Jaguar AJ-V8 - AJ28 V8 engine]]. Jaguar S-Type 4.0 ('01-'02).
|-
| P || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas/E85 ||DOHC,<br /> 32 valve||Flex Fuel. Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]]. 470 PS/464 hp. Jaguar XF Supercharged ('13-'15).
|-
| S || 2.0L || I4 Turbo [[w:Intercooler|IC]] || Gas || DOHC,<br /> 16 valve||Direct Injection. Dual VVT. [[w:Ford EcoBoost engine#2.0 L (2010–2018)|Ford EcoBoost engine (Mazda L engine-based)]].<br> Jaguar XF 2.0T ('13-'14), XF 2.0T Premium ('15).
|-
| T || 3.0L || 60° V6 || Gas ||DOHC,<br /> 24 valve||MPI. Variable intake valve timing. [[w:Jaguar AJ-V6 engine#AJ30|Jaguar AJ-V6 - AJ30 V6 engine]]. Jaguar S-Type 3.0 ('03-'05).
|-
| T || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas/E85 ||DOHC,<br /> 32 valve||Flex Fuel. Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]]. 470 PS/464 hp. Jaguar XJ/XJL Supercharged ('13-'15).
|-
| T || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. SULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar F-Type w/auto. trans. ('15-'17), F-Type Premium w/auto. trans. ('17).
|-
| U || 4.2L || V8 || Gas ||DOHC,<br /> 32 valve||MPI. Continuously variable intake valve timing. [[w:Jaguar AJ-V8 engine#4.2 L|Jaguar AJ-V8 - AJ33 V8 engine]]. Jaguar S-Type 4.2 ('03-'05).
|-
| U || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. SULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 380 PS/375 hp. Jaguar F-Type S ('15), F-Type S Rwd w/auto. trans. ('16-'17).
|-
| V || 4.2L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||MPI. [[w:Jaguar AJ-V8 engine#Supercharged_2|Jaguar AJ-V8 - AJ33S V8 engine]]. Jaguar S-Type R ('03-'05).
|-
| V || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. SULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 380 PS/375 hp. Jaguar F-Type S Awd w/auto. trans. ('16-'17).
|-
| X || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas/E85 ||DOHC,<br /> 24 valve||Flex Fuel. Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XF 3.0 Rwd ('14).
|-
| Z || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 550 PS/542 hp. Jaguar XFR-S ('13-'15).
|-
| Z || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas/E85 ||DOHC,<br /> 24 valve||Flex Fuel. Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XJ Rwd, XJL Portfolio Rwd ('14-'15).
|-
| 1 || 5.0L || V8 || Gas/E85 ||DOHC,<br /> 32 valve||Flex Fuel. Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. Variable intake valve lift. Variable intake. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]]. Jaguar XJL Portfolio Rwd ('13).
|-
| 6 || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. SULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar F-Type w/man. trans. ('16-'17), F-Type Premium w/man. trans. ('17).
|-
| 7 || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XF 3.0 Rwd ('13), XJ Rwd ('13), F-Type ('14-'15).
|-
| 7 || 3.0L || 90° V6 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 24 valve||Direct Injection. SULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#V6|Jaguar AJ126 V6 engine]].<br> 340 PS/335 hp. Jaguar XF 3.0 Rwd ('15), XJ R-Sport Rwd ('16-'19), XJL Portfolio Rwd ('16-'19), XJ50 3.0 Rwd ('19).
|-
| 8 || 5.0L || V8 [[w:Supercharged|SC]] [[w:Intercooler|IC]] || Gas ||DOHC,<br /> 32 valve||Direct Injection. ULEV. Continuously variable intake & exhaust valve timing. [[w:Jaguar AJ-V8 engine#AJ-V8 Gen III 5.0|Jaguar AJ-V8 - AJ133 V8 engine]].<br> 575 PS/567 hp. Jaguar F-Type Project 7 ('16), F-Type SVR ('17).
|}
===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) 2000-2019===
* 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)
* G - Castle Bromwich, West Midlands, England, UK - S-Type 4.0 ('00-'02)
* H - Castle Bromwich, West Midlands, England, UK - S-Type 4.2 ('03-'08)
* 1 - Castle Bromwich, West Midlands, England, UK - S-Type R (4.2 supercharged) ('03-'08)
* H - Castle Bromwich, West Midlands, England, UK - XF 4.2 ('09-'10)
* 1 - Castle Bromwich, West Midlands, England, UK - XF Supercharged (4.2 supercharged) ('09)
* L - Castle Bromwich, West Midlands, England, UK - XF 5.0 ('10-'12)
* M - Castle Bromwich, West Midlands, England, UK - XF Supercharged, XFR (5.0 supercharged) ('10-'15), XFR-S (5.0 supercharged) ('13-'15)
* P - Castle Bromwich, West Midlands, England, UK - XF 2.0T ('13-'15)
* 8 - Castle Bromwich, West Midlands, England, UK - XF 3.0 supercharged ('13-'15)
* L - Browns Lane plant, Coventry, West Midlands, England, UK - XJ8 (4.0) ('00-'03), XJ8L (4.0) ('00-'01), XJ8 Vanden Plas (4.0) ('00-'03), XJ Sport (4.0) ('02-'03)
* M - Browns Lane plant, Coventry, West Midlands, England, UK - XJ8 Vanden Plas Supercharged (4.0 supercharged) ('00-'01),<br> Super V8 (4.0 supercharged) ('02-'03), XJR (4.0 supercharged) ('00-'03)
* S - Browns Lane plant, Coventry, West Midlands, England, UK - XJ8 (4.2) ('04-'06), XJ8L (4.2) ('05-'06), XJ8 Vanden Plas (4.0) ('04-'06)
* T - Browns Lane plant, Coventry, West Midlands, England, UK - Super V8 (4.2 supercharged) ('05-'06), Super V8 Portfolio (4.2 supercharged) ('06),<br> XJR (4.2 supercharged) ('04-'06)
* S - Castle Bromwich, West Midlands, England, UK - XJ8 (4.2) ('07-'09), XJ8L (4.2) ('07-'09), XJ8 Vanden Plas (4.0) ('07-'09)
* T - Castle Bromwich, West Midlands, England, UK - Super V8 (4.2 supercharged) ('07-'09), Super V8 Portfolio (4.2 supercharged) ('09),<br> XJR (4.2 supercharged) ('07-'09)
* L - Castle Bromwich, West Midlands, England, UK - XJ (5.0) ('10-'12), XJL (5.0) ('10-'11), XJL Portfolio (5.0) ('12-'13)
* M - Castle Bromwich, West Midlands, England, UK - XJ/XJL Supercharged (5.0 supercharged) ('10-'19), XJ/XJL Supersport (5.0 supercharged) ('11-'13),<br> XJL Ultimate (5.0 supercharged) ('13), XJR SWB/LWB (5.0 supercharged) ('14-'17), XJR575 LWB (5.0 supercharged) ('18-'19), XJ50 LWB (5.0 supercharged) ('19), XJ Collection Sp. Ed. LWB (5.0 supercharged) ('19)
* 8 - Castle Bromwich, West Midlands, England, UK - XJ base (3.0 supercharged) ('13-'15), XJ R-Sport (3.0 supercharged) ('16-'19),<br> XJL Portfolio AWD (3.0 supercharged) ('13-'19), XJL Portfolio RWD (3.0 supercharged) ('14-'19), XJ50 LWB (3.0 supercharged) ('19)
* N - Browns Lane plant, Coventry, West Midlands, England, UK - XK8 (4.0) ('00-'02)
* P - Browns Lane plant, Coventry, West Midlands, England, UK - XKR (4.0 supercharged) ('00-'02)
* 2 - Browns Lane plant, Coventry, West Midlands, England, UK - XK8 (4.2) ('03-'06)
* 3 - Browns Lane plant, Coventry, West Midlands, England, UK - XKR (4.2 supercharged) ('03-'06)
* 5 - Castle Bromwich, West Midlands, England, UK - XK (4.2) ('07-'09)
* 9 - Castle Bromwich, West Midlands, England, UK - XKR (4.2 supercharged) ('07-'09)
* L - Castle Bromwich, West Midlands, England, UK - XK (5.0) ('10-'15)
* M - Castle Bromwich, West Midlands, England, UK - XKR (5.0 supercharged) ('10-'15), XKR-S (5.0 supercharged) ('12-'15), XKR-S GT (5.0 supercharged) ('14)
* 8 - Castle Bromwich, West Midlands, England, UK - F-Type Base, S (3.0 supercharged) ('14-'17), F-Type Premium (3.0 supercharged) ('17)
* M - Castle Bromwich, West Midlands, England, UK - F-Type V8S (5.0 supercharged) ('14-'15), F-Type R (5.0 supercharged) ('15-'17),<br> F-Type Project 7 (5.0 supercharged) ('16), F-Type SVR (5.0 supercharged) ('17)
===Model (Position 12)===
* C - X-Type ('02-'03)
* D - X-Type ('03-'04)
* E - X-Type ('04-'06)
* J - X-Type ('06-'08)
* L - S-Type ('00-'01)
* M - S-Type ('01-'04)
* N - S-Type ('04-'08)
* R - XF ('09-'11)
* S - XF ('11-'13)
* U - XF ('13-'15)
* F - XJ ('00-'03)
* G - XJ ('04-'06) [Browns Lane plant]
* H - XJ ('06-'09) [Castle Bromwich plant]
* V - XJ ('10-'16)
* W - XJ ('16-'19)
* A - XK ('00-'06)
* B - XK ('07-'15)
* K - F-Type ('14-'17)
'''Positions 13–17, Serial Number'''
==General Template for Jaguar's VIN format (1981 - 1999)==
===Jaguar WMIs (1981-1999) (Position 1-3)===
* SAJ - Jaguar passenger car
===Model Line (Position 4)===
{| 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]].<br> 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]] modified by [[w:Tom Walkinshaw Racing|JaguarSport]]. Jaguar XJR-S ('93).
|-
| 3 || 6.0L || 60° V12 || Gas ||SOHC,<br /> 24 valve||MPI. [[w:Jaguar V12 engine|Jaguar V12]]. Jaguar 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
===Positions 12–17, Serial Number===
** 100001 and after - XJ-S/XJ-SC/XJS/XJR-S (XJ27)
** 300001 and after - XJ-series sedan Series III
** 500001 and after - XJ-series sedan (XJ40/XJ81)
** 720001 and after - XJ-series sedan (X300/X305/X306/X330)
** 810001 and after - XJ-series sedan (X308)
** 001001 and after - XK8 (X100)
9qpsklis7rvch8upn1et1ccrvxevd6l
Infrastructure Past, Present, and Future/Loudoun County Data Centers
0
485862
4676289
4672390
2026-10-15T17:59:54Z
GMK GMU
3626853
Added sections about recent development and Fiscal reality. Improved introduction
4676289
wikitext
text/x-wiki
== Introduction ==
Loudoun County Data Virginia is home to over 200 Data centers, the most of any locality in the United States. Data centers began being built in the region in 1993 with the MAE-East internet hub in Vienna. However in 1995 the location moved to Ashburn to better allow for scaling as demand increased.<ref>{{Cite web |last=Konheim |first=Orrin |title=Tyson’s Corner at the Epicenter of the Internet |url=http://vivatysons.com/blog/2019/02/15/tysons-corner-at-the-epicenter-of-the-internet/ |access-date=2026-09-25 |language=en}}</ref> Today, Ashburn is home to 133 Data Centers alone, earning it and Loudoun County the nickname "Data Center Alley."<ref>{{Cite web |title=Data Center Alley: How Ashburn became a data center hub of the world {{!}} Digital Realty |url=https://www.www.digitalrealty.com/resources/blog/northern-virginia-ashburn-data-centers?t=1792085227704?latest |access-date=2026-10-15 |website=www.www.digitalrealty.com |language=en}}</ref>
Loudoun County has the highest median household income in the United States of $181,765 in 2024.<ref>{{Cite web |title=U.S. Census Bureau QuickFacts: Loudoun County, Virginia |url=https://www.census.gov/quickfacts/fact/table/loudouncountyvirginia/PST045225 |access-date=2026-09-25 |website=www.census.gov |language=en}}</ref>
== Recent developments ==
In 2024 the County Board of Supervisors launched the Data Center Standards & Locations project to address resident's concerns regarding data centers. The plan consists of two phases.<ref>{{Cite web |title=Data Center Standards & Locations {{!}} Loudoun County, VA - Official Website |url=https://www.loudoun.gov/DataCenterStandards |access-date=2026-10-15 |website=www.loudoun.gov}}</ref>
==== Phase 1 - Approved March 18, 2025 ====
This phase focused on proposed map and text amendments to the Loudoun County 2019 Comprehensive Plan. Redesignating Data Centers in industrial zones as conditional or Special Exception (SPEX), ending the By-Right construction that had existed since 2000.<ref>{{Cite web |date=2026-07-02 |title=Data Centers in Loudoun: A Primer - The Piedmont Environmental Council |url=https://www.pecva.org/region/loudoun/data-centers-in-loudoun-a-primer/ |access-date=2026-10-15 |language=en-US}}</ref> Special Exceptions require both a public hearing and a board vote to be permitted, unlike by-right construction.
==== Phase 2 - Currently Ongoing ====
This phase is focused on creating new use-specific zoning standards for data centers and utility substations that serve them. This would create new requirements for future data centers to be approved.
=== Criticisms of the Data Center Standards & Locations Project ===
As a part of Phase 1 of the plan the Board of Supervisors also passed a grandfathering resolution that allows any Data centers that were previously approved by Feb. 12, 2025 to continue under the previous rules. This allowed 15 data center projects to continue without meeting the SPEX requirements.<ref>{{Cite news |last=Flack |first=Eric |date=11:19 PM EDT October 6, 2026 |title=Loudoun supervisors don't rollback data center grandfathering law, shelve $200,000 audit of grandfathered projects |work=Wusa9 |url=https://www.wusa9.com/article/news/community/data-centers/data-center-rollback-grandfathering-laws-loudoun-county/65-136555f2-d85b-498b-a53a-c7d0582e82e5 |access-date=3:43 PM EDT October 10, 2026}}</ref>
== Fiscal Reality of Data Centers ==
Loudoun County's largest revenue source is property taxes. As the value of property increases the county has consistently lowered the real property tax rate. The increase in property value is in part driven by the data center construction.
Additionally, data centers and related companies make up all 10 of the top 10 tax payers in Loudoun.<ref>{{Cite web |title=Popular Annual Financial Report |url=https://prcsinfo.loudoun.gov/view/952649939/6/?sharedOn= |access-date=2026-10-15 |website=prcsinfo.loudoun.gov}}</ref>
{{BookCat}}
8eadmbz8a5iw0gb55gydbeggcsdvuzs
4676290
4676289
2026-10-15T18:31:03Z
GMK GMU
3626853
Adding a Map
4676290
wikitext
text/x-wiki
== Introduction ==
Loudoun County Data Virginia is home to over 200 Data centers, the most of any locality in the United States. Data centers began being built in the region in 1993 with the MAE-East internet hub in Vienna. However in 1995 the location moved to Ashburn to better allow for scaling as demand increased.<ref>{{Cite web |last=Konheim |first=Orrin |title=Tyson’s Corner at the Epicenter of the Internet |url=http://vivatysons.com/blog/2019/02/15/tysons-corner-at-the-epicenter-of-the-internet/ |access-date=2026-09-25 |language=en}}</ref> Today, Ashburn is home to 133 Data Centers alone, earning it and Loudoun County the nickname "Data Center Alley."<ref>{{Cite web |title=Data Center Alley: How Ashburn became a data center hub of the world {{!}} Digital Realty |url=https://www.www.digitalrealty.com/resources/blog/northern-virginia-ashburn-data-centers?t=1792085227704?latest |access-date=2026-10-15 |website=www.www.digitalrealty.com |language=en}}</ref>
{{maplink|frame=yes|type=shape|id=Q495310|text=[[Loudoun County]]}}
Loudoun County has the highest median household income in the United States of $181,765 in 2024.<ref>{{Cite web |title=U.S. Census Bureau QuickFacts: Loudoun County, Virginia |url=https://www.census.gov/quickfacts/fact/table/loudouncountyvirginia/PST045225 |access-date=2026-09-25 |website=www.census.gov |language=en}}</ref>
== Recent developments ==
In 2024 the County Board of Supervisors launched the Data Center Standards & Locations project to address resident's concerns regarding data centers. The plan consists of two phases.<ref>{{Cite web |title=Data Center Standards & Locations {{!}} Loudoun County, VA - Official Website |url=https://www.loudoun.gov/DataCenterStandards |access-date=2026-10-15 |website=www.loudoun.gov}}</ref>
==== Phase 1 - Approved March 18, 2025 ====
This phase focused on proposed map and text amendments to the Loudoun County 2019 Comprehensive Plan. Redesignating Data Centers in industrial zones as conditional or Special Exception (SPEX), ending the By-Right construction that had existed since 2000.<ref>{{Cite web |date=2026-07-02 |title=Data Centers in Loudoun: A Primer - The Piedmont Environmental Council |url=https://www.pecva.org/region/loudoun/data-centers-in-loudoun-a-primer/ |access-date=2026-10-15 |language=en-US}}</ref> Special Exceptions require both a public hearing and a board vote to be permitted, unlike by-right construction.
==== Phase 2 - Currently Ongoing ====
This phase is focused on creating new use-specific zoning standards for data centers and utility substations that serve them. This would create new requirements for future data centers to be approved.
=== Criticisms of the Data Center Standards & Locations Project ===
As a part of Phase 1 of the plan the Board of Supervisors also passed a grandfathering resolution that allows any Data centers that were previously approved by Feb. 12, 2025 to continue under the previous rules. This allowed 15 data center projects to continue without meeting the SPEX requirements.<ref>{{Cite news |last=Flack |first=Eric |date=11:19 PM EDT October 6, 2026 |title=Loudoun supervisors don't rollback data center grandfathering law, shelve $200,000 audit of grandfathered projects |work=Wusa9 |url=https://www.wusa9.com/article/news/community/data-centers/data-center-rollback-grandfathering-laws-loudoun-county/65-136555f2-d85b-498b-a53a-c7d0582e82e5 |access-date=3:43 PM EDT October 10, 2026}}</ref>
== Fiscal Reality of Data Centers ==
Loudoun County's largest revenue source is property taxes. As the value of property increases the county has consistently lowered the real property tax rate. The increase in property value is in part driven by the data center construction.
Additionally, data centers and related companies make up all 10 of the top 10 tax payers in Loudoun.<ref>{{Cite web |title=Popular Annual Financial Report |url=https://prcsinfo.loudoun.gov/view/952649939/6/?sharedOn= |access-date=2026-10-15 |website=prcsinfo.loudoun.gov}}</ref>
{{BookCat}}
6dh6bplh3jbl20jb00e25r6wcf0egbq
4676292
4676290
2026-10-15T18:34:19Z
GMK GMU
3626853
Undid revision [[Special:Diff/4676290|4676290]] by [[Special:Contributions/GMK GMU|GMK GMU]] ([[User talk:GMK GMU|discuss]]) Did not mean to publish change, maplink is not supported
4676292
wikitext
text/x-wiki
== Introduction ==
Loudoun County Data Virginia is home to over 200 Data centers, the most of any locality in the United States. Data centers began being built in the region in 1993 with the MAE-East internet hub in Vienna. However in 1995 the location moved to Ashburn to better allow for scaling as demand increased.<ref>{{Cite web |last=Konheim |first=Orrin |title=Tyson’s Corner at the Epicenter of the Internet |url=http://vivatysons.com/blog/2019/02/15/tysons-corner-at-the-epicenter-of-the-internet/ |access-date=2026-09-25 |language=en}}</ref> Today, Ashburn is home to 133 Data Centers alone, earning it and Loudoun County the nickname "Data Center Alley."<ref>{{Cite web |title=Data Center Alley: How Ashburn became a data center hub of the world {{!}} Digital Realty |url=https://www.www.digitalrealty.com/resources/blog/northern-virginia-ashburn-data-centers?t=1792085227704?latest |access-date=2026-10-15 |website=www.www.digitalrealty.com |language=en}}</ref>
Loudoun County has the highest median household income in the United States of $181,765 in 2024.<ref>{{Cite web |title=U.S. Census Bureau QuickFacts: Loudoun County, Virginia |url=https://www.census.gov/quickfacts/fact/table/loudouncountyvirginia/PST045225 |access-date=2026-09-25 |website=www.census.gov |language=en}}</ref>
== Recent developments ==
In 2024 the County Board of Supervisors launched the Data Center Standards & Locations project to address resident's concerns regarding data centers. The plan consists of two phases.<ref>{{Cite web |title=Data Center Standards & Locations {{!}} Loudoun County, VA - Official Website |url=https://www.loudoun.gov/DataCenterStandards |access-date=2026-10-15 |website=www.loudoun.gov}}</ref>
==== Phase 1 - Approved March 18, 2025 ====
This phase focused on proposed map and text amendments to the Loudoun County 2019 Comprehensive Plan. Redesignating Data Centers in industrial zones as conditional or Special Exception (SPEX), ending the By-Right construction that had existed since 2000.<ref>{{Cite web |date=2026-07-02 |title=Data Centers in Loudoun: A Primer - The Piedmont Environmental Council |url=https://www.pecva.org/region/loudoun/data-centers-in-loudoun-a-primer/ |access-date=2026-10-15 |language=en-US}}</ref> Special Exceptions require both a public hearing and a board vote to be permitted, unlike by-right construction.
==== Phase 2 - Currently Ongoing ====
This phase is focused on creating new use-specific zoning standards for data centers and utility substations that serve them. This would create new requirements for future data centers to be approved.
=== Criticisms of the Data Center Standards & Locations Project ===
As a part of Phase 1 of the plan the Board of Supervisors also passed a grandfathering resolution that allows any Data centers that were previously approved by Feb. 12, 2025 to continue under the previous rules. This allowed 15 data center projects to continue without meeting the SPEX requirements.<ref>{{Cite news |last=Flack |first=Eric |date=11:19 PM EDT October 6, 2026 |title=Loudoun supervisors don't rollback data center grandfathering law, shelve $200,000 audit of grandfathered projects |work=Wusa9 |url=https://www.wusa9.com/article/news/community/data-centers/data-center-rollback-grandfathering-laws-loudoun-county/65-136555f2-d85b-498b-a53a-c7d0582e82e5 |access-date=3:43 PM EDT October 10, 2026}}</ref>
== Fiscal Reality of Data Centers ==
Loudoun County's largest revenue source is property taxes. As the value of property increases the county has consistently lowered the real property tax rate. The increase in property value is in part driven by the data center construction.
Additionally, data centers and related companies make up all 10 of the top 10 tax payers in Loudoun.<ref>{{Cite web |title=Popular Annual Financial Report |url=https://prcsinfo.loudoun.gov/view/952649939/6/?sharedOn= |access-date=2026-10-15 |website=prcsinfo.loudoun.gov}}</ref>
{{BookCat}}
8eadmbz8a5iw0gb55gydbeggcsdvuzs
4676322
4676292
2026-10-16T03:17:30Z
AngelynSJ
3626845
Narrative *to be edited further*
4676322
wikitext
text/x-wiki
== Introduction ==
In the 90s two of the largest and first internet service providers set their headquarters in Ashburn, Virginia, located within Loudoun County. America Online (AOL) in 1996 and UUNet in 1998. Context in America at the time is important to understanding how Loudoun has become the data center hub it is today. In the 90s, America was going through a technological revolution with the era of the World Wide Web (WWW), which was released to the public in 1993. By 1995, there were about 10,000 web servers online, allowing the public across America to easily use the internet. During this large growth of the internet industry, these two major companies chose to put their headquarters in Ashburn, Virginia. This was not a coincidence, but rather a very deliberate and motivated growth strategy. Loudoun County, and subsequently Ashburn, has a very advantageous geographical location in proximity to Washington, D.C., Dulles International Airport, and the IXP in Vienna. The area also had a large number of qualified workers to help build infrastructure exponentially.
The early infrastructure built up in the 1990s made it easier and more enticing for other internet companies to set up in the area. In the 2000s, AOL and UUnet were well established; Ashburn and other companies were starting to gravitate to Loudoun County. These companies started bringing more internet infrastructure into Loudoun County. The county has zoning laws that classify and categorize districts and land use for types of buildings/ infrastructure. At the time, there was no classification for data centers, but the Zoning administrator chose to allow them anywhere that office buildings were allowed. This led to data centers being built in office parks and near homes as part of “mixed-use” communities.
In 2008, the housing market crashed around the United States. This largely affected Loudoun County, as the county’s revenue came primarily from residential taxes. Loudoun County needed to diversify the tax base to make up for the loss of the primary source of revenue. With all the internet companies interested in locating to Loudoun County and the land available, the government officials saw an economic opportunity to increase commercial tax revenue. The next year, 2007, Loudoun County began expanding data center construction. 2007 to 2016, the county had the largest data center growth in the country.
== Recent developments ==
In 2024 the County Board of Supervisors launched the Data Center Standards & Locations project to address resident's concerns regarding data centers. The plan consists of two phases.<ref>{{Cite web |title=Data Center Standards & Locations {{!}} Loudoun County, VA - Official Website |url=https://www.loudoun.gov/DataCenterStandards |access-date=2026-10-15 |website=www.loudoun.gov}}</ref>
==== Phase 1 - Approved March 18, 2025 ====
This phase focused on proposed map and text amendments to the Loudoun County 2019 Comprehensive Plan. Redesignating Data Centers in industrial zones as conditional or Special Exception (SPEX), ending the By-Right construction that had existed since 2000.<ref>{{Cite web |date=2026-07-02 |title=Data Centers in Loudoun: A Primer - The Piedmont Environmental Council |url=https://www.pecva.org/region/loudoun/data-centers-in-loudoun-a-primer/ |access-date=2026-10-15 |language=en-US}}</ref> Special Exceptions require both a public hearing and a board vote to be permitted, unlike by-right construction.
==== Phase 2 - Currently Ongoing ====
This phase is focused on creating new use-specific zoning standards for data centers and utility substations that serve them. This would create new requirements for future data centers to be approved.
=== Criticisms of the Data Center Standards & Locations Project ===
As a part of Phase 1 of the plan the Board of Supervisors also passed a grandfathering resolution that allows any Data centers that were previously approved by Feb. 12, 2025 to continue under the previous rules. This allowed 15 data center projects to continue without meeting the SPEX requirements.<ref>{{Cite news |last=Flack |first=Eric |date=11:19 PM EDT October 6, 2026 |title=Loudoun supervisors don't rollback data center grandfathering law, shelve $200,000 audit of grandfathered projects |work=Wusa9 |url=https://www.wusa9.com/article/news/community/data-centers/data-center-rollback-grandfathering-laws-loudoun-county/65-136555f2-d85b-498b-a53a-c7d0582e82e5 |access-date=3:43 PM EDT October 10, 2026}}</ref>
== Fiscal Reality of Data Centers ==
Loudoun County's largest revenue source is property taxes. As the value of property increases the county has consistently lowered the real property tax rate. The increase in property value is in part driven by the data center construction.
Additionally, data centers and related companies make up all 10 of the top 10 tax payers in Loudoun.<ref>{{Cite web |title=Popular Annual Financial Report |url=https://prcsinfo.loudoun.gov/view/952649939/6/?sharedOn= |access-date=2026-10-15 |website=prcsinfo.loudoun.gov}}</ref>
{{BookCat}}
4gjq85ak68xyj9dw72pd2f19739jlqr
4676323
4676322
2026-10-16T04:16:47Z
AngelynSJ
3626845
Narrative
4676323
wikitext
text/x-wiki
== Introduction ==
MAE East, standing for Metropolitan Area Ethernet, was the first internet exchange point (IXP) not run by the government. In 1992, the first 4 points were set up in Washington, D.C. and then spread to Vienna, Reston, and then Ashburn. MAE East was created by UUNET and Metropolitan Fiber Systems. This early internet infrastructure made Northern Virginia, specifically Loudoun County, very appealing for further infrastructure development.
In the 90s, two of the largest and first internet service providers set their headquarters in Ashburn, Virginia, located within Loudoun County. America Online (AOL) in 1996 and UUNet in 1998. Context in America at the time is important to understanding how Loudoun has become the data center hub it is today. In the 90s, America was going through a technological revolution with the era of the World Wide Web (WWW), which was released to the public in 1993. By 1995, there were about 10,000 web servers online, allowing the public across America to easily use the internet. During this large growth of the internet industry, these two major companies chose to put their headquarters in Ashburn, Virginia. This was not a coincidence, but rather a very deliberate and motivated growth strategy. Loudoun County, and subsequently Ashburn, has an advantageous location near Washington, D.C., Dulles International Airport, and the IXP in Vienna. The area also had a large number of qualified workers to help build infrastructure exponentially.
The early infrastructure built up in the 1990s made it easier and more enticing for other internet companies to set up in the area. In the 2000s, AOL and UUnet were well established; Ashburn and other companies were starting to gravitate to Loudoun County. These companies started bringing more internet infrastructure into Loudoun County. The county has zoning laws that classify and categorize districts and land use for types of buildings/ infrastructure. At the time, there was no classification for data centers, but the Zoning administrator chose to allow them anywhere that office buildings were allowed. The county had a “by-right” building rule that permitted building without any further approval as long as zoning allowed for it. This led to data centers being built in office parks and near homes as part of “mixed-use” communities.
In 2008, the housing market crashed around the United States. This largely affected Loudoun County, as the county’s revenue came primarily from residential taxes. Loudoun County needed to diversify the tax base to make up for the loss of the primary source of revenue. With internet companies interested in locating in Loudoun County and land available, government officials saw an economic opportunity to increase commercial tax revenue. The next year, 2007, Loudoun County began expanding data center construction. 2007 to 2016, the county had the largest data center growth in the country. This large boom in infrastructure in Loudoun County caused many of the internet service providers to switch from MAE East IXP to Equinix Ashburn. In 2009, MAE East, one of the major draws for data centers in Loudoun County, officially shut down.
== Recent developments ==
In 2024 the County Board of Supervisors launched the Data Center Standards & Locations project to address resident's concerns regarding data centers. The plan consists of two phases.<ref>{{Cite web |title=Data Center Standards & Locations {{!}} Loudoun County, VA - Official Website |url=https://www.loudoun.gov/DataCenterStandards |access-date=2026-10-15 |website=www.loudoun.gov}}</ref>
==== Phase 1 - Approved March 18, 2025 ====
This phase focused on proposed map and text amendments to the Loudoun County 2019 Comprehensive Plan. Redesignating Data Centers in industrial zones as conditional or Special Exception (SPEX), ending the By-Right construction that had existed since 2000.<ref>{{Cite web |date=2026-07-02 |title=Data Centers in Loudoun: A Primer - The Piedmont Environmental Council |url=https://www.pecva.org/region/loudoun/data-centers-in-loudoun-a-primer/ |access-date=2026-10-15 |language=en-US}}</ref> Special Exceptions require both a public hearing and a board vote to be permitted, unlike by-right construction.
==== Phase 2 - Currently Ongoing ====
This phase is focused on creating new use-specific zoning standards for data centers and utility substations that serve them. This would create new requirements for future data centers to be approved.
=== Criticisms of the Data Center Standards & Locations Project ===
As a part of Phase 1 of the plan the Board of Supervisors also passed a grandfathering resolution that allows any Data centers that were previously approved by Feb. 12, 2025 to continue under the previous rules. This allowed 15 data center projects to continue without meeting the SPEX requirements.<ref>{{Cite news |last=Flack |first=Eric |date=11:19 PM EDT October 6, 2026 |title=Loudoun supervisors don't rollback data center grandfathering law, shelve $200,000 audit of grandfathered projects |work=Wusa9 |url=https://www.wusa9.com/article/news/community/data-centers/data-center-rollback-grandfathering-laws-loudoun-county/65-136555f2-d85b-498b-a53a-c7d0582e82e5 |access-date=3:43 PM EDT October 10, 2026}}</ref>
== Fiscal Reality of Data Centers ==
Loudoun County's largest revenue source is property taxes. As the value of property increases the county has consistently lowered the real property tax rate. The increase in property value is in part driven by the data center construction.
Additionally, data centers and related companies make up all 10 of the top 10 tax payers in Loudoun.<ref>{{Cite web |title=Popular Annual Financial Report |url=https://prcsinfo.loudoun.gov/view/952649939/6/?sharedOn= |access-date=2026-10-15 |website=prcsinfo.loudoun.gov}}</ref>
{{BookCat}}
h2edpkrct6riwvolqost7j99q2qgxsk
4676324
4676323
2026-10-16T04:21:30Z
AngelynSJ
3626845
Lessons Learned
4676324
wikitext
text/x-wiki
== Introduction ==
MAE East, standing for Metropolitan Area Ethernet, was the first internet exchange point (IXP) not run by the government. In 1992, the first 4 points were set up in Washington, D.C. and then spread to Vienna, Reston, and then Ashburn. MAE East was created by UUNET and Metropolitan Fiber Systems. This early internet infrastructure made Northern Virginia, specifically Loudoun County, very appealing for further infrastructure development.
In the 90s, two of the largest and first internet service providers set their headquarters in Ashburn, Virginia, located within Loudoun County. America Online (AOL) in 1996 and UUNet in 1998. Context in America at the time is important to understanding how Loudoun has become the data center hub it is today. In the 90s, America was going through a technological revolution with the era of the World Wide Web (WWW), which was released to the public in 1993. By 1995, there were about 10,000 web servers online, allowing the public across America to easily use the internet. During this large growth of the internet industry, these two major companies chose to put their headquarters in Ashburn, Virginia. This was not a coincidence, but rather a very deliberate and motivated growth strategy. Loudoun County, and subsequently Ashburn, has an advantageous location near Washington, D.C., Dulles International Airport, and the IXP in Vienna. The area also had a large number of qualified workers to help build infrastructure exponentially.
The early infrastructure built up in the 1990s made it easier and more enticing for other internet companies to set up in the area. In the 2000s, AOL and UUnet were well established; Ashburn and other companies were starting to gravitate to Loudoun County. These companies started bringing more internet infrastructure into Loudoun County. The county has zoning laws that classify and categorize districts and land use for types of buildings/ infrastructure. At the time, there was no classification for data centers, but the Zoning administrator chose to allow them anywhere that office buildings were allowed. The county had a “by-right” building rule that permitted building without any further approval as long as zoning allowed for it. This led to data centers being built in office parks and near homes as part of “mixed-use” communities.
In 2008, the housing market crashed around the United States. This largely affected Loudoun County, as the county’s revenue came primarily from residential taxes. Loudoun County needed to diversify the tax base to make up for the loss of the primary source of revenue. With internet companies interested in locating in Loudoun County and land available, government officials saw an economic opportunity to increase commercial tax revenue. The next year, 2007, Loudoun County began expanding data center construction. 2007 to 2016, the county had the largest data center growth in the country. This large boom in infrastructure in Loudoun County caused many of the internet service providers to switch from MAE East IXP to Equinix Ashburn. In 2009, MAE East, one of the major draws for data centers in Loudoun County, officially shut down.
== Timeline ==
== Recent developments ==
In 2024 the County Board of Supervisors launched the Data Center Standards & Locations project to address resident's concerns regarding data centers. The plan consists of two phases.<ref>{{Cite web |title=Data Center Standards & Locations {{!}} Loudoun County, VA - Official Website |url=https://www.loudoun.gov/DataCenterStandards |access-date=2026-10-15 |website=www.loudoun.gov}}</ref>
==== Phase 1 - Approved March 18, 2025 ====
This phase focused on proposed map and text amendments to the Loudoun County 2019 Comprehensive Plan. Redesignating Data Centers in industrial zones as conditional or Special Exception (SPEX), ending the By-Right construction that had existed since 2000.<ref>{{Cite web |date=2026-07-02 |title=Data Centers in Loudoun: A Primer - The Piedmont Environmental Council |url=https://www.pecva.org/region/loudoun/data-centers-in-loudoun-a-primer/ |access-date=2026-10-15 |language=en-US}}</ref> Special Exceptions require both a public hearing and a board vote to be permitted, unlike by-right construction.
==== Phase 2 - Currently Ongoing ====
This phase is focused on creating new use-specific zoning standards for data centers and utility substations that serve them. This would create new requirements for future data centers to be approved.
=== Criticisms of the Data Center Standards & Locations Project ===
As a part of Phase 1 of the plan the Board of Supervisors also passed a grandfathering resolution that allows any Data centers that were previously approved by Feb. 12, 2025 to continue under the previous rules. This allowed 15 data center projects to continue without meeting the SPEX requirements.<ref>{{Cite news |last=Flack |first=Eric |date=11:19 PM EDT October 6, 2026 |title=Loudoun supervisors don't rollback data center grandfathering law, shelve $200,000 audit of grandfathered projects |work=Wusa9 |url=https://www.wusa9.com/article/news/community/data-centers/data-center-rollback-grandfathering-laws-loudoun-county/65-136555f2-d85b-498b-a53a-c7d0582e82e5 |access-date=3:43 PM EDT October 10, 2026}}</ref>
== Fiscal Reality of Data Centers ==
Loudoun County's largest revenue source is property taxes. As the value of property increases the county has consistently lowered the real property tax rate. The increase in property value is in part driven by the data center construction.
Additionally, data centers and related companies make up all 10 of the top 10 tax payers in Loudoun.<ref>{{Cite web |title=Popular Annual Financial Report |url=https://prcsinfo.loudoun.gov/view/952649939/6/?sharedOn= |access-date=2026-10-15 |website=prcsinfo.loudoun.gov}}</ref>
== Lessons Learned ==
The Loudoun County data center situation offers a lot of lessons learned that could prevent future mistakes between infrastructure growth and policy. The first take away comes from before the boom in data centers. Loudoun County suffered greatly from the 2008 recession causing house values to plummet. A significantly large portion of the county's tax revenue came for residential housing. The county lost a large portion of their funding leaving a desprate need to find a new source of revenue. This lead to the decision to allow so many data centers into the county. This provides a value lesson for the future about diversifying the county’s tax revenue sources. Relying on one source can easily lead to disaster when that source falls through. This lesson may not have been learned fully as the county now largely relies on tax revenue from these data centers which is a very unstable and unreliable industry. The top 10 tax sources were all data centers.
Data centers in Loudoun county were constructed rapidly and expanded exponentially due to the county’s unprepared zoning ordinances. Data centers were put under the category of business centers in the early years because there was no category for them. This allowed data centers all over the county with little restriction. Finally in 2025 the county changed the zoning ordinances so data centers were no long “By-right” and limited zoning areas. Policy is an important part of shaping our society adn it needs to be able to evolve and change to keep up with new infrastructure. When policy moves and changes slowly it fails to adapt to what society needs. This is an important lesson that seems to have been learned, however, only time will tell.{{BookCat}}
ghwcvsbz0ts9xk9gn7vnu5xaoqtpv1k
Koine Greek/Declining 3rd Declension Nouns
0
486211
4676304
4675632
2026-10-15T21:24:36Z
It-is-Truly-Meet
3624460
Information was sourced from https://pressbooks.pub/ancientgreek/chapter/24/.
4676304
wikitext
text/x-wiki
==3rd Declension Noun Tables==
{| class="wikitable" style="float:right"
|+ ὁ παῖς — child
!Singular
!Plural
|-
|παῖς||'''παῖδ'''ες
|-
|'''παιδ'''óς||'''παίδ'''ων
|-
|'''παιδ'''ῐ́||παισί
|-
|'''παῖδ'''ᾰ||'''παῖδ'''ᾰς
|-
| παῖ||'''παῖδ'''ες
|}
{| class="wikitable" style="float:right"
|+ ὁ γίγας — giant
! Singular
! Plural
|-
| γίγας||γίγαντες
|-
| γίγαντος||γιγάντων
|-
| γίγαντι||γίγασι(ν)
|-
| γίγαντα||γίγαντας
|-
| γίγαν||γίγαντες
|}
{| class="wikitable" style="float:right"
|+ ὁ θής — hired man
! Singular
! Plural
|-
| θής||θῆτες
|-
| θητός||θητῶν
|-
| θητί||θησί(ν)
|-
| θῆτα||θῆτας
|-
| θής||θῆτες
|}
{| class="wikitable" style="float:right"
|+ ἡ λαμπάς — torch
! Case
! Singular
! Plural
|-
| Nom.
| λαμπάς||λαμπάδες
|-
| Gen.
| λαμπάδος||λαμπάδων
|-
| Dat.
| λαμπάδι||λαμπάσι(ν)
|-
| Acc.
| λαμπάδα||λαμπάδας
|-
| Voc.
| λαμπάς||λαμπάδες
|}
{| class="wikitable" style="float:right"
|+ ὁ/ἡ ὄρνις — bird
! Singular
! Plural
|-
| ὄρνις||ὄρνιθες
|-
| ὄρνιθος||ὀρνίθων
|-
| ὄρνιθι||ὄρνισι(ν)
|-
| ὄρνιν||ὄρνιθας
|-
| ὄρνις||ὄρνιθες
|}
{| class="wikitable" style="float:right"
|+ ἡ ἐλπίς — hope
! Singular
! Plural
|-
| ἐλπίς||ἐλπίδες
|-
| ἐλπίδος||ἐλπίδων
|-
| ἐλπίδι||ἐλπίσι(ν)
|-
| ἐλπίδα||ἐλπίδας
|-
| ἐλπί||ἐλπίδες
|}
{| class="wikitable" style="float:right"
|+ ὁ δαίμων — divinity
! Singular
! Plural
|-
| δαίμων||δαίμονες
|-
| δαίμονος||δαιμόνων
|-
| δαίμονι||δαίμοσι(ν)
|-
| δαίμονα||δαίμονας
|-
| δαῖμον||δαίμονες
|}
{| class="wikitable" style="float:right"
|+ ὁ ἄρχων — ruler
! Case
! Singular
! Plural
|-
| Nom.
| ἄρχων||ἄρχοντες
|-
| Gen.
| ἄρχοντος||ἀρχόντων
|-
| Dat.
| ἄρχοντι||ἄρχουσι(ν)
|-
| Acc.
| ἄρχοντα||ἄρχοντας
|-
| Voc.
| ἄρχον||ἄρχοντες
|}
<br clear="all">
==Masculine Nouns==
* παιδ child
* δαιμον divinity, spirit
* ἀρχοντ ruler
The first set of nouns are all MASCULINE in gender. These particular masculine nouns add the following suffixes to their stem to indicate number and case:
{| class="wikitable"
! Case||Singular||Plural
|-
|Nom.||–'''ς'''||–ες
|-
|Gen.||–ος||–ων
|-
|Dat.||–ι||–'''σ'''ι
|-
|Acc.||–α||–ας
|}
===The Trouble with Sigma===
Notice that two of the case endings involve adding a sigma to the stem: nom. sing. = –ς, dat. plu. = –σι. The set of nouns we are discussing have stems ending in a DENTAL (recall that the dental STOP consonants are –τ/-δ/-θ, and the dental NASAL is –ν). At this moment, it would be good to review some alphabet math so that we can see what pronunciation – and therefore spelling – changes arise.
Recall that when a σ follows a dental stop consonant, the dental disappears and the σ remains: e.g., δ + σ = σ. A similar process occurs when a σ follows a –ν, only sometimes (usually in the nominative singular) it is the σ that disappears: ν + σ = ν. In such instances, we often (though not always!) see the process of COMPENSATORY LENGTHENING, where a Greek vowel lengthens to make up for the loss of a consonant that follows. Note, however, that only a short vowel can be lengthened; if the vowel is already long or a diphthong, it cannot be lengthened further.
With this alphabet math in mind, take careful note of the ways that the trouble with sigma affects the spelling of our three nouns:
{| class="wikitable"
|+ ὁ παῖς, παιδός child
! Case !! Singular !! Plural
|-
| Nominative || (παιδς→ ) παῖς || παῖδες
|-
| Genitive || παιδός || παίδων
|-
| Dative || παιδί || (παιδσι→ ) παισί
|-
| Accusative || παῖδα || παῖδας
|}
{| class="wikitable"
|+ ὁ δαίμων, δαίμονος divinity
! Case !! Singular !! Plural
|-
| Nominative || (δαιμονς→ ) δαίμων || δαίμονες
|-
| Genitive || δαίμονος || δαιμόνων
|-
| Dative || δαίμονι || (δαιμονσι→ ) δαίμοσι
|-
| Accusative || δαίμονα || δαίμονας
|}
{| class="wikitable"
|+ ὁ ἄρχων, ἄρχοντος ruler
! Case !! Singular !! Plural
|-
| Nominative || (ἀρχοντς→ ) ἄρχων || ἄρχοντες
|-
| Genitive || ἄρχοντος || ἀρχόντων
|-
| Dative || ἄρχοντι || (ἀρχοντσι→ ) ἄρχουσι
|-
| Accusative || ἄρχοντα || ἄρχοντας
|}
===Spell it Like It Sounds!===
Remember: A word ending in –σι can add a final –ν (MOVABLE NU) to ease pronunciation: e.g., εἴκοσί εἰσι → εἴκοσίν εἰσι. For the noun παῖς, for example, this means the dative plural form παισί can appear as παισίν. It does not affect the parsing, meaning, or translation.
===Declining and Declensions===
The process of writing or saying all the INFLECTED forms of a noun is called DECLINING a noun. This is because ancient scholars metaphorically described noun forms as “declining” down from their nominative singular form. The other cases – Genitive, Dative, and Accusative – are sometimes referred to as OBLIQUE CASES, to distinguish them from this nominative singular form.
Almost all Greek nouns belong to one of three INFLECTION patterns, called the FIRST DECLENSION, SECOND DECLENSION, and THIRD DECLENSION. Each represents a particular set of case endings for gender, number, and case. The nouns of this lesson belong to the THIRD DECLENSION.
===Noun Vocabulary===
The vocabulary entry for Greek nouns always comprises three words: e.g., ὁ ἄρχων, ἄρχοντος. These three words represent the following:
* The DEFINITE ARTICLE, which signals the gender of the noun. The article ὁ indicates that a noun is masculine. For more on the definite article, see below.
* The NOMINATIVE SINGULAR, so you can see exactly how this form appears. This is particularly helpful if the nominative singular has been changed in response to a sigma, e.g., (ἀρχοντς→ ) ἄρχων.
* The GENITIVE SINGULAR, so you can identify the NOUN STEM, which can be found by dropping the ending –ος, e.g., ἀρχοντ-.
It is important, therefore, that all three words be memorized as the vocabulary entry for any given Greek noun.
===Nouns and the Persistent Accent===
For most Greek verbs, RECESSIVE ACCENTUATION determines which syllable receives the accent. In the case of most Greek nouns (and adjectives), PERSISTENT ACCENTUATION determines which syllable receives the accent.
The NOMINATIVE SINGULAR of each noun has a particular vowel or diphthong that receives the ACCENT. Where this accented vowel or diphthong is found – antepenult, penult, or ultima – is a matter of spelling, and must be memorized. For example, note that the accent is “born” on the alpha of ἄρχων, but on the omega of ἡγεμών. As a general principle, the accent on all the other INFLECTED forms of a noun tries to remain, or PERSIST, on the same vowel or diphthong on which it is found in the nominative singular, unless forced to change position or accent type (e.g., from circumflex to acute).
Note that the 3rd declension case ending for the nominative singular adds only a consonant (-ς) to the noun stem; the remaining case endings add ANOTHER SYLLABLE to the noun. In practice, this means that if the accented vowel or diphthong is found, say, in the ultima of the nominative singular form, the same vowel or diphthong becomes the penult in the remaining inflected forms.
There are three general PERSISTENT ACCENT situations or rules that apply to nouns of the third declension.
====1. When the accent falls on the PENULT of inflected forms…====
It stays there. If the penult is LONG, the accent is a circumflex with short ultima, acute with long ultima.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || αἰών || αἰῶνες
|-
| Genitive || αἰῶνος || αἰώνων
|-
| Dative || αἰῶνι || αἰῶσι
|-
| Accusative || αἰῶνα || αἰῶνας
|}
If the penult is SHORT, the accent remains acute throughout all forms.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || ἡγεμών || ἡγεμόνες
|-
| Genitive || ἡγεμόνος || ἡγεμόνων
|-
| Dative || ἡγεμόνι || ἡγεμόσι
|-
| Accusative || ἡγεμόνα || ἡγεμόνας
|}
Note that the rule for accents that fall on the penult is IDENTICAL to that of VERBS with only TWO SYLLABLES!
====2. When the accent is on the ANTEPENULT of inflected forms…====
The accent can only be acute on the antepenult. If the ULTIMA becomes LONG (e.g., genitive plural –ων), the accent moves to the PENULT.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || ἄρχων || ἄρχοντες
|-
| Genitive || ἄρχοντος || ἀρχόντων
|-
| Dative || ἄρχοντι || ἄρχουσι
|-
| Accusative || ἄρχοντα || ἄρχοντας
|}
Note that the rule for accents that fall on the antepenult is IDENTICAL to that of VERBS with THREE OR MORE SYLLABLES!
====3. When the accent falls on a MONOSYLLABIC nominative singular noun…====
The accent usually moves to the ULTIMA of the genitive and dative cases, singular and plural. In these situations, the accent on the ultima is ACUTE over short vowels (e.g. –ός), and circumflex over long (e.g. –ῶν). This accent pattern is irregular, and must be memorized.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || πούς || πόδες
|-
| Genitive || ποδός || ποδῶν
|-
| Dative || ποδί || ποσί
|-
| Accusative || πόδα || πόδας
|}
There are a handful of monosyllabic nouns that instead accent the penult of the genitive plural (S 252a). The most common ones are ὁ, ἡ παῖς, παιδός child (genitive plural = παίδων), declined above, φῶς, φωτός light (genitive plural = φώτων), and οὖς, ὠτός ear (genitive plural = ὤτων).
==Feminine Nouns==
In our last lesson, we learned endings for nouns that were masculine. Now we add nouns that are feminine. For the 3rd declension, feminine nouns use the same case endings as masculine nouns:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || –ς || –ες
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || –α || –ας
|}
===The Trouble with Sigma===
As noted in our discussion of masculine nouns, two of the case endings involve adding a sigma to the stem: nominative singular = –ς, dative plural = –σι. Let us take a look at the sound changes that occur when these sigmas are added to the stems for two feminine nouns:
* ἐλπιδ hope
* νυκτ night
Note that the first stem, ἐλπιδ, ends in a dental (-τ/-δ/-θ). As we know, when a sigma follows a dental, the dental disappears and the sigma remains: e.g., δ + σ = σ. The second stem, νυκτ, ends in –κτ, a stem ending that the Greeks treated as essentially the same as a palatal (-κ/-γ/-χ). Recall that when a sigma follows a palatal, the result is the double consonant ξ: e.g., κ + σ = ξ (S 241).
With these sound changes in mind, note how ἐλπιδ and νυκτ decline:
{| class="wikitable"
|+ ἡ ἐλπίς, ἐλπίδος hope
! Case !! Singular !! Plural
|-
| Nominative || (ἐλπιδς →) ἐλπίς || ἐλπίδες
|-
| Genitive || ἐλπίδος || ἐλπίδων
|-
| Dative || ἐλπίδι || (ἐλπιδσι →) ἐλπίσι
|-
| Accusative || ἐλπίδα || ἐλπίδας
|}
{| class="wikitable"
|+ ἡ νύξ, νυκτός night
! Case !! Singular !! Plural
|-
| Nominative || (νυκτς → νυκς →) νύξ || νύκτες
|-
| Genitive || νυκτός || νυκτῶν
|-
| Dative || νυκτί || (νυκτσι → νυκσι →) νυξί
|-
| Accusative || νύκτα || νύκτας
|}
===The Definite Article===
Most nouns have only one grammatical gender, such as:
ἡ ἐλπίς, ἐλπίδος hope
A handful of nouns referring to people or gods, however, can be either MASCULINE or FEMININE, depending on the gender of the person/divinity. In such instances, the vocabulary entry includes both the masculine and feminine article.
ὁ, ἡ παῖς, παιδός (male or female) child
ὁ, ἡ δαίμων, δαίμονος (male or female) divinity
==Neuter Nouns==
===Neuter Nouns===
All the nouns we have so far discussed have been either masculine or feminine in gender and have used the same endings to indicate number and case. The third and final grammatical gender, NEUTER, has similar endings, though with a few changes.
Neuter nouns of the THIRD DECLENSION add the following case endings to their stem to indicate number and case. Note that there is no ending (!) added in the NOMINATIVE and ACCUSATIVE SINGULAR.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || – || –α
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || – || –α
|}
===Word-Final Sounds===
One of the most common stem endings for NEUTER nouns of the THIRD DECLENSION is –ματ. For example:
σωματ body
ὀνοματ name
Since τ is a dental, the addition of a sigma to the stem (dat. plu. –σι) results in a sigma: τ + σ = σ.
Interestingly, it is a general rule that, unlike English, only a limited number of SOUNDS may END A WORD OF GREEK ORIGIN: a vowel sound, or the consonants –ρ/-ν/-ς (ξ, ψ). If a Greek word ended in any other consonant, that consonant would be dropped (S 133). (The only exceptions to this rule are ἐκ and οὐκ!). Since the neuter adds no ending to the nominative and accusative singular, stems ending in –ματ drop the final –τ, in order to avoid having a word end in this letter (S 258).
As a result, our two nouns decline as follows:
{| class="wikitable"
|+ τὸ σῶμα, σώματος body
! Case !! Singular !! Plural
|-
| Nominative || (σωματ →) σῶμα || σώματα
|-
| Genitive || σώματος || σωμάτων
|-
| Dative || σώματι || (σώματσι →) σώμασι
|-
| Accusative || (σωματ →) σῶμα || σώματα
|}
{| class="wikitable"
|+ τὸ ὄνομα, ὀνόματος name
! Case !! Singular !! Plural
|-
| Nominative || (ὀνοματ →) ὄνομα || ὀνόματα
|-
| Genitive || ὀνόματος || ὀνομάτων
|-
| Dative || ὀνόματι || (ὀνοματσι →) ὀνόμασι
|-
| Accusative || (ὀνοματ →) ὄνομα || ὀνόματα
|}
===The Definite Article===
Remember that when a definite article accompanies a noun, both must parse the same. In other words, they must be the same in gender, number, and case. Note the following examples:
{| class="wikitable"
|+ τὸ σῶμα, σώματος body
! Case !! Singular !! Plural
|-
| Nominative || τὸ σῶμα || τὰ σώματα
|-
| Genitive || τοῦ σώματος || τῶν σωμάτων
|-
| Dative || τῷ σώματι || τοῖς σώμασι
|-
| Accusative || τὸ σῶμα || τὰ σώματα
|}
{| class="wikitable"
|+ τὸ ὄνομα, ὀνόματος name
! Case !! Singular !! Plural
|-
| Nominative || τὸ ὄνομα || τὰ ὀνόματα
|-
| Genitive || τοῦ ὀνόματος || τῶν ὀνομάτων
|-
| Dative || τῷ ὀνόματι || τοῖς ὀνόμασι
|-
| Accusative || τὸ ὄνομα || τὰ ὀνόματα
|}
===The Neuter Laws===
Three rules apply to ALL NEUTER nouns in Greek, regardless of declension.
1. The NOMINATIVE and ACCUSATIVE SINGULAR must be IDENTICAL. This pattern applies to both the neuter noun and its definite article.
2. The NOMINATIVE and ACCUSATIVE PLURAL also must be IDENTICAL, and end in a short –α. This pattern applies to both the neuter noun and its definite article.
3. Whenever any NEUTER noun is the subject of a verb, the verb is regularly 3rd PERSON SINGULAR, even if the neuter subject is plural! The reason seems to be that neuter plurals were originally conceived to be collective nouns (S 958), much as the words army and team are collective nouns in English.
τὸ φῶς δείκνυσι….
The light shows…
τὰ φῶτα δείκνυσι….
The lights show…
==More 3rd Declension Nouns==
We have already learned how to form 3rd Declension nouns. Most of the nouns that we introduced in these lessons have stems ending in –ν (δαιμον-), –δ (ἐλπιδ-), –ντ (ἀρχοντ-) or –κτ (νυκτ-). In other words, these stems end in a NASAL, DENTAL, or PALATAL. In this lesson, we introduce 3rd Declension nouns that have stems ending in –ρ, and –εσ.
Before we look at these new nouns, let us review the 3rd Declension case endings for MASCULINE and FEMININE nouns:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || –ς || –ες
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || –α || –ας
|}
The 3rd Declension case endings for NEUTER nouns are as follows:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || – || –α
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || – || –α
|}
===Stems Ending in –ρ===
Declining most 3rd Declension nouns whose stem ends in –ρ is fairly straightforward. Greek often avoids the combination –ρσ-, usually by dropping the –ς from the NOMINATIVE SINGULAR (μάρτυς –υρος is an exception to this rule).
In the DATIVE PLURAL, the –σι ending is always intact. What happens when the –ρ– encounters the –σι can vary. Many nouns simply allow the full –ρσι– combination. For example, the dative plural of ῥήτωρ, ῥήτορος “orator,” is ῥήτορσι (S 259; GPH p. 11). There are, however, exceptions to this pattern.
μάρτυς –υρος drops the ρ for most Greek authors: μάρτυσι
χείρ, χειρός shortens its stem: χερσί
Note the inflections of the following common nouns, each with their own slight peculiarities:
{| class="wikitable"
|+ μάρτυς -υρος ὁ, ἡ witness
! Case !! Singular !! Plural
|-
| Nominative || ἡ μάρτυς || αἱ μάρτυρες
|-
| Genitive || τῆς μάρτυρος || τῶν μαρτύρων
|-
| Dative || τῇ μάρτυρι || ταῖς μάρτυσι
|-
| Accusative || τὴν μάρτυρα || τὰς μάρτυρας
|}
{| class="wikitable"
|+ χείρ, χειρός ἡ hand
! Case !! Singular !! Plural
|-
| Nominative || ἡ χείρ || αἱ χεῖρες
|-
| Genitive || τῆς χειρός || τῶν χειρῶν
|-
| Dative || τῇ χειρί || ταῖς χερσί
|-
| Accusative || τὴν χεῖρα || τὰς χεῖρας
|}
{| class="wikitable"
|+ πῦρ, πυρός τό fire
! Case !! Singular !! (No plural)
|-
| Nominative || τὸ πῦρ ||
|-
| Genitive || τοῦ πυρός ||
|-
| Dative || τῷ πυρί ||
|-
| Accusative || τὸ πῦρ ||
|}
===Stems Ending in –ερ===
More stem and accent changes occur in noun stems ending in –ερ (S 262). The good news is that the basic case endings do not change. The stem changes, however, do require memorization.
There are four common nouns of this type (S 262; cf. GPH p. 12). As you memorize the inflections for each, note the following patterns for the first three nouns:
* The vowel stem –ερ becomes –ηρ in the nominative singular, due to the loss of a sigma resulting in COMPENSATORY LENGTHENING.
* The vowel stem –ερ becomes simply –ρ in the genitive singular, and dative singular and plural.
* The accent is on the ultima in the genitive and dative singular, on the penult in the accusative singular and all forms of the plural.
* The insertion of an –α– between the ρ– and –σι in the dative plural.
{| class="wikitable"
|+ πατήρ, πατρός ὁ father (stem: πατερ-)
! Case !! Singular !! Plural
|-
| Nominative || ὁ πατήρ || οἱ πατέρες
|-
| Genitive || τοῦ πατρός || τῶν πατέρων
|-
| Dative || τῷ πατρί || τοῖς πατράσι
|-
| Accusative || τὸν πατέρα || τοὺς πατέρας
|}
{| class="wikitable"
|+ μήτηρ, μητρός ἡ mother (stem: μητερ-)
! Case !! Singular !! Plural
|-
| Nominative || ἡ μήτηρ || αἱ μητέρες
|-
| Genitive || τῆς μητρός || τῶν μητέρων
|-
| Dative || τῇ μητρί || ταῖς μητράσι
|-
| Accusative || τὴν μητέρα || τὰς μητέρας
|}
{| class="wikitable"
|+ θυγάτηρ, θυγατρός ἡ daughter (stem: θυγατερ-)
! Case !! Singular !! Plural
|-
| Nominative || ἡ θυγάτηρ || αἱ θυγατέρες
|-
| Genitive || τῆς θυγατρός || τῶν θυγατέρων
|-
| Dative || τῇ θυγατρί || ταῖς θυγατράσι
|-
| Accusative || τὴν θυγατέρα || τὰς θυγατέρας
|}
For the fourth noun, note the following patterns:
* The vowel stem –ερ becomes –ηρ in the nominative singular, due to the loss of a sigma resulting in COMPENSATORY LENGTHENING.
* The vowel stem –ερ became simply –ρ in all oblique cases!
* The resulting forms (e.g. ἀνρός, ἀνρί) gradually developed a sound change that inserted a δ between ν and ρ (S 130). (Likewise, the French word cendre, “ash,” comes from the Latin cinerem!)
* The accent pattern matches the other three –ερ nouns, with the exception of the genitive plural ending: ἀνδρῶν.
{| class="wikitable"
|+ ἀνήρ, ἀνδρός ὁ man (stem: ἀνερ-)
! Case !! Singular !! Plural
|-
| Nominative || ὁ ἀνήρ || οἱ ἄνδρες
|-
| Genitive || τοῦ ἀνδρός || τῶν ἀνδρῶν
|-
| Dative || τῷ ἀνδρί || τοῖς ἀνδράσι
|-
| Accusative || τὸν ἄνδρα || τοὺς ἄνδρας
|}
===Stems Ending in –εσ===
As we saw in our discussion of the ATTIC FUTURE, an INTERVOCALIC SIGMA – i.e., a –σ– found between two vowels – often drops out, and the surrounding vowels contract. This process often occurs in 3rd Declension noun stems ending in –εσ once personal endings are added.
Nouns of this type are usually NEUTER. Masculine and feminine nouns of this type do appear, but they are less frequent or are proper names.
====1. Proper names in –εσ====
The name Socrates, ὁ Σωκράτης, declines as follows (S 264; GPH 13). Note the following patterns:
* In the nominative singular, the loss of a sigma results in COMPENSATORY LENGTHENING, just as we see with the four –ρ stem nouns above.
* Regular and expected contractions occur in the oblique forms once the intervocalic sigma is dropped.
* Finally, in the accusative singular, a ν is added by many, though not all, authors.
{| class="wikitable"
! Case !! Form
|-
| Nominative || (Σωκράτεσς →) Σωκράτης
|-
| Genitive || (Σωκράτεσος → Σωκράτεος →) Σωκράτους
|-
| Dative || (Σωκράτεσι →) Σωκράτει
|-
| Accusative || (Σωκράτεσα → Σωκράτεα →) Σωκράτη(ν)
|}
====2. Neuter nouns in –εσ====
For neuter nouns, recognizable patterns emerge.
* First, in the nominative and accusative singular, the stem –ες becomes –ος. Otherwise, all accent and contraction rules apply normally (S 264; GPH p. 14).
* Second, the accent is usually born on the ANTEPENULT of the uncontracted, inflected forms.
For example:
{| class="wikitable"
|+ ἔτος -ους τό year (stem: ἐτεσ-)
! Case !! Singular !! Plural
|-
| Nominative || (ἔτες →) ἔτος || (ἔτεσα → ἔτεα →) ἔτη
|-
| Genitive || (ἔτεσος → ἔτεος →) ἔτους || (ἐτέσων → ἐτέων →) ἐτῶν
|-
| Dative || (ἔτεσι →) ἔτει || (ἔτεσσι → ) ἔτεσι
|-
| Accusative || (ἔτες →) ἔτος || (ἔτεσα → ἔτεα →) ἔτη
|}
{| class="wikitable"
|+ γένος -ους τό clan, generation; type, class (stem: γένεσ-)
! Case !! Singular !! Plural
|-
| Nominative || (γένες →) γένος || (γένεσα → γένεα →) γένη
|-
| Genitive || (γένεσος → γένεος →) γένους || (γενέσων → γενέων →) γενῶν
|-
| Dative || (γένεσι →) γένει || (γένεσσι → ) γένεσι
|-
| Accusative || (γένες →) γένος || (γένεσα → γένεα →) γένη
|}
===Stems Ending in –ι===
Most nouns preserve this stem vowel only in the NOMINATIVE and ACCUSATIVE SINGULAR. In the other cases and numbers, –ε replaces –ι as the stem vowel (S 268-271). This class of nouns shares a number of other attributes, including:
* These nouns are usually feminine.
* The genitive singular ending lengthens from –ος to –ως.
* Neither the –εως ending of the genitive singular nor the –εων ending of the genitive plural draw the accent off of an antepenult.
* The accusative singular uses –ν (familiar from the definite article) instead of –α.
* The nominative and accusative plural both end in –εες, which contracts to –εις.
As with nouns with –ερ stems, these changes in the noun stem and accent patterns require memorization. The good news is that all the –ι stem nouns in the vocabulary share the inflection pattern of ἡ πόλις, πόλεως city (S 268; GPH p. 15):
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || ἡ πόλις || αἱ πόλεις
|-
| Genitive || τῆς πόλεως || τῶν πόλεων
|-
| Dative || τῇ πόλει || ταῖς πόλεσι
|-
| Accusative || τὴν πόλιν || τὰς πόλεις
|}
The fact that the –εως and –εων endings do not draw the accent off of an antepenult is striking. This peculiarity is the result of changes in the pronunciation of words like πόλις. The earlier form of πόλεως was πόληος. The η and ο switched their vowel lengths over time (η shortened to ε, and ο lengthened to ω!), in a process called TRANSFERENCE OF QUANTITY (S 34). The accent, however, stayed on the antepenult during this process. The accent of the genitive plural gradually switched to the antepenult to match the genitive singular accent.
Transference of quantity is similar to METATHESIS, in which a vowel and consonant can switch places (S 128). English pronunciation has a number of such switches. For example, a vowel can switch places with an “r” in actual pronunciation for many English speakers: iron is often pronounced iern, and prescription pronounced perscription.
===Stems Ending in –υ, –ευ, –αυ, and –ου===
1. As with –ι stem nouns, –υ stem nouns preserve the stem vowel only in the NOMINATIVE and ACCUSATIVE SINGULAR. In the other cases and numbers, –ε replaces –υ as the stem vowel (S 268-271). Many –υ stem nouns share a number of other attributes with –ι stem nouns, including:
* The genitive singular ending lengthens from –ος to –ως.
* Neither the –εως ending of the genitive singular (due to transference of quantity) nor the –εων ending of the genitive plural draw the accent off of an antepenult.
* The accusative singular uses –ν instead of –α.
* The nominative and accusative plural both end in –εες, which contracts to –εις.
Note, for example, the inflection of ὁ πρέσβυς -εως old man:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || ὁ πρέσβυς || οἱ πρέσβεις
|-
| Genitive || τοῦ πρέσβεως || τῶν πρέσβεων
|-
| Dative || τῷ πρέσβει || τοῖς πρέσβεσι
|-
| Accusative || τὸν πρέσβυν || τοὺς πρέσβεις
|}
====2. Kings, Priests, and Horsemen!====
Noun stems ending in –ευ exhibit more irregularities than stems that end in just –υ. The inflection patterns of these nouns must be memorized, though some observations may help. Note the following changes that occur in the inflection of ὁ βασιλεύς -έως “king” (S 275; GPH p. 16):
* The noun stem –ευ drops the –υ before another vowel, leaving just an –ε for its stem vowel.
* The genitive singular ending lengthens from –ος to –ως, due to transference of quantity.
* The accent persists on the stem vowel, –ευ or –ε. Note that for the dative singular, the original form was βασιλέ–ι, the noun stem plus the case ending. These two vowels form a diphthong, and the resulting accent, as expected, forms a circumflex.
* The nominative plural lengthens the –ε to an –η (-έὲς = –ῆς).
* The endings for the accusative singular and plural do not contract (the α of both endings is long).
Not long after the Classical period, the NOMINATIVE and ACCUSATIVE PLURALS of these –ευ nouns change to –εῖς, in parallel with the endings shared by –ι stem nouns and –υ stem nouns such as ὁ πρέσβυς –εως. The rest of the noun inflects as it did in the Classical period.
{| class="wikitable"
|+ βασιλεύς -έως ὁ king (post-Classical forms in parentheses)
! Case !! Singular !! Plural
|-
| Nominative || ὁ βασιλεύς || οἱ βασιλῆς (βασιλεῖς)
|-
| Genitive || τοῦ βασιλέως || τῶν βασιλέων
|-
| Dative || τῷ βασιλεῖ || τοῖς βασιλεῦσι
|-
| Accusative || τὸν βασιλέα || τοὺς βασιλέας (βασιλεῖς)
|}
Also inflected on this pattern are the following two nouns:
* ἱερεύς -έως ὁ priest
* ἱππεύς -έως ὁ horseman, charioteer
====3. Ships!====
The noun ἡ ναῦς, νεώς “ship” is a common word in Greek, as might be expected for a people closely associated with seafaring. The stem for this noun ends in –αυ. Like noun stems ending in –ευ, –αυ nouns exhibit more irregularities than stems that end in just –υ. The inflection pattern of ἡ ναῦς, νεώς must be memorized, though some observations may help (S 275; GPH p. 16).
* The vowel stem –αυ drops the –υ before another vowel, resulting in a vowel stem of either –ε or –η.
* The genitive singular ending lengthens from –ος to –ως, due to transference of quantity.
* The accent pattern follows that of a monosyllabic nouns of the 3rd Declension.
* The accusative singular uses –ν instead of –α.
* The nominative singular and accusative plural are identical in form.
{| class="wikitable"
|+ ναῦς, νεώς ἡ ship
! Case !! Singular !! Plural
|-
| Nominative || ἡ ναῦς || αἱ νῆες
|-
| Genitive || τῆς νεώς || τῶν νεῶν
|-
| Dative || τῇ νηί || ταῖς ναυσί
|-
| Accusative || τὴν ναῦν || τὰς ναῦς
|}
====4. Bulls!====
The noun βοῦς, βοός bull or cow, is also a common word in Greek. These animals were important not only for farming and animal husbandry, but for sacrifices.
The stem for this noun ends in –ου (S 275; GPH p. 17). Like noun stems ending in –ευ and –αυ, –ου nouns exhibit irregularities. The inflection pattern of βοῦς, βοός must be memorized, though some observations may help (S 275-278).
* The vowel stem –ου drops the –υ before another vowel, resulting in a vowel stem of –ο.
* The genitive singular remains –ος. No transference of quantity can occur, since the stem vowel –ο is short.
* The accent pattern follows that of a monosyllabic nouns of the 3rd Declension.
* The genitive singular and nominative plural endings do not contract.
* The accusative singular uses –ν instead of –α.
* The nominative singular and accusative plural are identical in form.
{| class="wikitable"
|+ βοῦς, βοός ὁ bull, ox; ἡ cow
! Case !! Singular !! Plural
|-
| Nominative || ὁ, ἡ βοῦς || οἱ, αἱ βόες
|-
| Genitive || τοῦ, τῆς βοός || τῶν, τῶν βοῶν
|-
| Dative || τῷ, τῇ βοί || τοῖς, ταῖς βουσί
|-
| Accusative || τὸν, τὴν βοῦν || τοὺς, τὰς βοῦς
|}
===Kings, ships, cows, and the digamma===
In earlier periods, there were three additional letters in the Greek alphabet: KOPPA (ϙ), SAMPI (ϡ), and DIGAMMA (ϝ). The koppa is a K sound, and remained in use to represent the number 90 in Classical Greek. The sampi is a double-S sound, and remained in use to represent the number 900.
The digamma represents the W sound. Though the sound, and so the letter, eventually dropped from most dialects by the Classical period, its presence and subsequent loss affected a number of Greek words, particularly nouns with stems ending in –ευ, –αυ, and –ου (S 122, 278). For example, forms such as βασιλέως, βασιλεῖ, and βασιλέα ultimately derive from βασιλήϝος, βασιλήϝι, and βασιλήϝα. Gradually, the loss of the digamma, together with transference of quantity, resulted in the forms that we encounter today.
Similarly, forms such as νεώς and βοός derive ultimately from νηϝός and βοϝός. Compare these early forms with the Latin nouns navis and bovis, which preserved the W sound with the Latin letter V. Also of note: Latin preserved the letter koppa in its adaptation of the Greek alphabet, and is the source for the English letter Q.
{{BookCat}}
ki522ohklz6azhad7movssw1bnmibd7
4676307
4676304
2026-10-15T21:39:50Z
It-is-Truly-Meet
3624460
4676307
wikitext
text/x-wiki
==3rd Declension Noun Tables==
{| class="wikitable" style="float:right"
|+ ὁ παῖς — child
!Singular
!Plural
|-
|παῖς||'''παῖδ'''ες
|-
|'''παιδ'''óς||'''παίδ'''ων
|-
|'''παιδ'''ῐ́||παισί
|-
|'''παῖδ'''ᾰ||'''παῖδ'''ᾰς
|-
| παῖ||'''παῖδ'''ες
|}
{| class="wikitable" style="float:right"
|+ ὁ γίγας — giant
! Singular
! Plural
|-
| γίγας||γίγαντες
|-
| γίγαντος||γιγάντων
|-
| γίγαντι||γίγασι(ν)
|-
| γίγαντα||γίγαντας
|-
| γίγαν||γίγαντες
|}
{| class="wikitable" style="float:right"
|+ ὁ θής — hired man
! Singular
! Plural
|-
| θής||θῆτες
|-
| θητός||θητῶν
|-
| θητί||θησί(ν)
|-
| θῆτα||θῆτας
|-
| θής||θῆτες
|}
{| class="wikitable" style="float:right"
|+ ἡ λαμπάς — torch
! Singular
! Plural
|-
| λαμπάς||λαμπάδες
|-
| λαμπάδος||λαμπάδων
|-
| λαμπάδι||λαμπάσι(ν)
|-
| λαμπάδα||λαμπάδας
|-
| λαμπάς||λαμπάδες
|}
{| class="wikitable" style="float:right"
|+ ὁ/ἡ ὄρνις — bird
! Case
! Singular
! Plural
|-
| Nom.
| ὄρνις||ὄρνιθες
|-
| Gen.
| ὄρνιθος||ὀρνίθων
|-
| Dat.
| ὄρνιθι||ὄρνισι(ν)
|-
| Acc.
| ὄρνιν||ὄρνιθας
|-
| Voc.
| ὄρνις||ὄρνιθες
|}
{| class="wikitable" style="float:right"
|+ ἡ ἐλπίς — hope
! Singular
! Plural
|-
| ἐλπίς||ἐλπίδες
|-
| ἐλπίδος||ἐλπίδων
|-
| ἐλπίδι||ἐλπίσι(ν)
|-
| ἐλπίδα||ἐλπίδας
|-
| ἐλπί||ἐλπίδες
|}
{| class="wikitable" style="float:right"
|+ ὁ δαίμων — divinity
! Singular
! Plural
|-
| δαίμων||δαίμονες
|-
| δαίμονος||δαιμόνων
|-
| δαίμονι||δαίμοσι(ν)
|-
| δαίμονα||δαίμονας
|-
| δαῖμον||δαίμονες
|}
{| class="wikitable" style="float:right"
|+ ὁ ἄρχων — ruler
! Case
! Singular
! Plural
|-
| Nom.
| ἄρχων||ἄρχοντες
|-
| Gen.
| ἄρχοντος||ἀρχόντων
|-
| Dat.
| ἄρχοντι||ἄρχουσι(ν)
|-
| Acc.
| ἄρχοντα||ἄρχοντας
|-
| Voc.
| ἄρχον||ἄρχοντες
|}
<br clear="all">
==Masculine Nouns==
* παιδ child
* δαιμον divinity, spirit
* ἀρχοντ ruler
The first set of nouns are all MASCULINE in gender. These particular masculine nouns add the following suffixes to their stem to indicate number and case:
{| class="wikitable"
! Case||Singular||Plural
|-
|Nom.||–'''ς'''||–ες
|-
|Gen.||–ος||–ων
|-
|Dat.||–ι||–'''σ'''ι
|-
|Acc.||–α||–ας
|}
===The Trouble with Sigma===
Two case endings add sigma to the stem: nominative singular –ς and dative plural –σι. These nouns have stems ending in a dental consonant: stops –τ, –δ, –θ, or nasal –ν.
When σ follows a dental stop, the dental disappears (δ + σ = σ). When σ follows –ν, the σ sometimes disappears instead (ν + σ = ν), often causing compensatory lengthening of the preceding short vowel. Long vowels and diphthongs cannot be lengthened further.
These sound changes explain the spelling of the three nouns below.
{| class="wikitable"
|+ ὁ παῖς, παιδός child
! Case !! Singular !! Plural
|-
| Nominative || (παιδς→ ) παῖς || παῖδες
|-
| Genitive || παιδός || παίδων
|-
| Dative || παιδί || (παιδσι→ ) παισί
|-
| Accusative || παῖδα || παῖδας
|}
{| class="wikitable"
|+ ὁ δαίμων, δαίμονος divinity
! Case !! Singular !! Plural
|-
| Nominative || (δαιμονς→ ) δαίμων || δαίμονες
|-
| Genitive || δαίμονος || δαιμόνων
|-
| Dative || δαίμονι || (δαιμονσι→ ) δαίμοσι
|-
| Accusative || δαίμονα || δαίμονας
|}
{| class="wikitable"
|+ ὁ ἄρχων, ἄρχοντος ruler
! Case !! Singular !! Plural
|-
| Nominative || (ἀρχοντς→ ) ἄρχων || ἄρχοντες
|-
| Genitive || ἄρχοντος || ἀρχόντων
|-
| Dative || ἄρχοντι || (ἀρχοντσι→ ) ἄρχουσι
|-
| Accusative || ἄρχοντα || ἄρχοντας
|}
===Spell It Like It Sounds!===
Words ending in –σι may add a final –ν (movable nu) for easier pronunciation: εἴκοσί εἰσι → εἴκοσίν εἰσι. Thus, παισί may appear as παισίν, without changing its parsing, meaning, or translation.
===Noun Vocabulary===
Third-declension nouns are listed with the definite article, nominative singular, and genitive singular (e.g., ὁ ἄρχων, ἄρχοντος). The article indicates gender, the nominative singular provides the citation form, and the genitive singular reveals the noun stem, usually by removing –ος (ἄρχοντος → ἀρχοντ-). Memorize all three forms, since the nominative singular may conceal changes to the stem.
===Nouns and the Persistent Accent===
For most Greek verbs, RECESSIVE ACCENTUATION determines which syllable receives the accent. In the case of most Greek nouns (and adjectives), PERSISTENT ACCENTUATION determines which syllable receives the accent.
The NOMINATIVE SINGULAR of each noun has a particular vowel or diphthong that receives the ACCENT. Where this accented vowel or diphthong is found – antepenult, penult, or ultima – is a matter of spelling, and must be memorized. For example, note that the accent is “born” on the alpha of ἄρχων, but on the omega of ἡγεμών. As a general principle, the accent on all the other INFLECTED forms of a noun tries to remain, or PERSIST, on the same vowel or diphthong on which it is found in the nominative singular, unless forced to change position or accent type (e.g., from circumflex to acute).
Note that the 3rd declension case ending for the nominative singular adds only a consonant (-ς) to the noun stem; the remaining case endings add ANOTHER SYLLABLE to the noun. In practice, this means that if the accented vowel or diphthong is found, say, in the ultima of the nominative singular form, the same vowel or diphthong becomes the penult in the remaining inflected forms.
There are three general PERSISTENT ACCENT situations or rules that apply to nouns of the third declension.
====1. When the accent falls on the PENULT of inflected forms…====
It stays there. If the penult is LONG, the accent is a circumflex with short ultima, acute with long ultima.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || αἰών || αἰῶνες
|-
| Genitive || αἰῶνος || αἰώνων
|-
| Dative || αἰῶνι || αἰῶσι
|-
| Accusative || αἰῶνα || αἰῶνας
|}
If the penult is SHORT, the accent remains acute throughout all forms.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || ἡγεμών || ἡγεμόνες
|-
| Genitive || ἡγεμόνος || ἡγεμόνων
|-
| Dative || ἡγεμόνι || ἡγεμόσι
|-
| Accusative || ἡγεμόνα || ἡγεμόνας
|}
Note that the rule for accents that fall on the penult is IDENTICAL to that of VERBS with only TWO SYLLABLES!
====2. When the accent is on the ANTEPENULT of inflected forms…====
The accent can only be acute on the antepenult. If the ULTIMA becomes LONG (e.g., genitive plural –ων), the accent moves to the PENULT.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || ἄρχων || ἄρχοντες
|-
| Genitive || ἄρχοντος || ἀρχόντων
|-
| Dative || ἄρχοντι || ἄρχουσι
|-
| Accusative || ἄρχοντα || ἄρχοντας
|}
Note that the rule for accents that fall on the antepenult is IDENTICAL to that of VERBS with THREE OR MORE SYLLABLES!
====3. When the accent falls on a MONOSYLLABIC nominative singular noun…====
The accent usually moves to the ULTIMA of the genitive and dative cases, singular and plural. In these situations, the accent on the ultima is ACUTE over short vowels (e.g. –ός), and circumflex over long (e.g. –ῶν). This accent pattern is irregular, and must be memorized.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || πούς || πόδες
|-
| Genitive || ποδός || ποδῶν
|-
| Dative || ποδί || ποσί
|-
| Accusative || πόδα || πόδας
|}
There are a handful of monosyllabic nouns that instead accent the penult of the genitive plural (S 252a). The most common ones are ὁ, ἡ παῖς, παιδός child (genitive plural = παίδων), declined above, φῶς, φωτός light (genitive plural = φώτων), and οὖς, ὠτός ear (genitive plural = ὤτων).
==Feminine Nouns==
In our last lesson, we learned endings for nouns that were masculine. Now we add nouns that are feminine. For the 3rd declension, feminine nouns use the same case endings as masculine nouns:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || –ς || –ες
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || –α || –ας
|}
===The Trouble with Sigma===
As noted in our discussion of masculine nouns, two of the case endings involve adding a sigma to the stem: nominative singular = –ς, dative plural = –σι. Let us take a look at the sound changes that occur when these sigmas are added to the stems for two feminine nouns:
* ἐλπιδ hope
* νυκτ night
Note that the first stem, ἐλπιδ, ends in a dental (-τ/-δ/-θ). As we know, when a sigma follows a dental, the dental disappears and the sigma remains: e.g., δ + σ = σ. The second stem, νυκτ, ends in –κτ, a stem ending that the Greeks treated as essentially the same as a palatal (-κ/-γ/-χ). Recall that when a sigma follows a palatal, the result is the double consonant ξ: e.g., κ + σ = ξ (S 241).
With these sound changes in mind, note how ἐλπιδ and νυκτ decline:
{| class="wikitable"
|+ ἡ ἐλπίς, ἐλπίδος hope
! Case !! Singular !! Plural
|-
| Nominative || (ἐλπιδς →) ἐλπίς || ἐλπίδες
|-
| Genitive || ἐλπίδος || ἐλπίδων
|-
| Dative || ἐλπίδι || (ἐλπιδσι →) ἐλπίσι
|-
| Accusative || ἐλπίδα || ἐλπίδας
|}
{| class="wikitable"
|+ ἡ νύξ, νυκτός night
! Case !! Singular !! Plural
|-
| Nominative || (νυκτς → νυκς →) νύξ || νύκτες
|-
| Genitive || νυκτός || νυκτῶν
|-
| Dative || νυκτί || (νυκτσι → νυκσι →) νυξί
|-
| Accusative || νύκτα || νύκτας
|}
===The Definite Article===
Most nouns have only one grammatical gender, such as:
ἡ ἐλπίς, ἐλπίδος hope
A handful of nouns referring to people or gods, however, can be either MASCULINE or FEMININE, depending on the gender of the person/divinity. In such instances, the vocabulary entry includes both the masculine and feminine article.
ὁ, ἡ παῖς, παιδός (male or female) child
ὁ, ἡ δαίμων, δαίμονος (male or female) divinity
==Neuter Nouns==
===Neuter Nouns===
All the nouns we have so far discussed have been either masculine or feminine in gender and have used the same endings to indicate number and case. The third and final grammatical gender, NEUTER, has similar endings, though with a few changes.
Neuter nouns of the THIRD DECLENSION add the following case endings to their stem to indicate number and case. Note that there is no ending (!) added in the NOMINATIVE and ACCUSATIVE SINGULAR.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || – || –α
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || – || –α
|}
===Word-Final Sounds===
One of the most common stem endings for NEUTER nouns of the THIRD DECLENSION is –ματ. For example:
σωματ body
ὀνοματ name
Since τ is a dental, the addition of a sigma to the stem (dat. plu. –σι) results in a sigma: τ + σ = σ.
Interestingly, it is a general rule that, unlike English, only a limited number of SOUNDS may END A WORD OF GREEK ORIGIN: a vowel sound, or the consonants –ρ/-ν/-ς (ξ, ψ). If a Greek word ended in any other consonant, that consonant would be dropped (S 133). (The only exceptions to this rule are ἐκ and οὐκ!). Since the neuter adds no ending to the nominative and accusative singular, stems ending in –ματ drop the final –τ, in order to avoid having a word end in this letter (S 258).
As a result, our two nouns decline as follows:
{| class="wikitable"
|+ τὸ σῶμα, σώματος body
! Case !! Singular !! Plural
|-
| Nominative || (σωματ →) σῶμα || σώματα
|-
| Genitive || σώματος || σωμάτων
|-
| Dative || σώματι || (σώματσι →) σώμασι
|-
| Accusative || (σωματ →) σῶμα || σώματα
|}
{| class="wikitable"
|+ τὸ ὄνομα, ὀνόματος name
! Case !! Singular !! Plural
|-
| Nominative || (ὀνοματ →) ὄνομα || ὀνόματα
|-
| Genitive || ὀνόματος || ὀνομάτων
|-
| Dative || ὀνόματι || (ὀνοματσι →) ὀνόμασι
|-
| Accusative || (ὀνοματ →) ὄνομα || ὀνόματα
|}
===The Definite Article===
Remember that when a definite article accompanies a noun, both must parse the same. In other words, they must be the same in gender, number, and case. Note the following examples:
{| class="wikitable"
|+ τὸ σῶμα, σώματος body
! Case !! Singular !! Plural
|-
| Nominative || τὸ σῶμα || τὰ σώματα
|-
| Genitive || τοῦ σώματος || τῶν σωμάτων
|-
| Dative || τῷ σώματι || τοῖς σώμασι
|-
| Accusative || τὸ σῶμα || τὰ σώματα
|}
{| class="wikitable"
|+ τὸ ὄνομα, ὀνόματος name
! Case !! Singular !! Plural
|-
| Nominative || τὸ ὄνομα || τὰ ὀνόματα
|-
| Genitive || τοῦ ὀνόματος || τῶν ὀνομάτων
|-
| Dative || τῷ ὀνόματι || τοῖς ὀνόμασι
|-
| Accusative || τὸ ὄνομα || τὰ ὀνόματα
|}
===The Neuter Laws===
Three rules apply to ALL NEUTER nouns in Greek, regardless of declension.
1. The NOMINATIVE and ACCUSATIVE SINGULAR must be IDENTICAL. This pattern applies to both the neuter noun and its definite article.
2. The NOMINATIVE and ACCUSATIVE PLURAL also must be IDENTICAL, and end in a short –α. This pattern applies to both the neuter noun and its definite article.
3. Whenever any NEUTER noun is the subject of a verb, the verb is regularly 3rd PERSON SINGULAR, even if the neuter subject is plural! The reason seems to be that neuter plurals were originally conceived to be collective nouns (S 958), much as the words army and team are collective nouns in English.
τὸ φῶς δείκνυσι….
The light shows…
τὰ φῶτα δείκνυσι….
The lights show…
==More 3rd Declension Nouns==
We have already learned how to form 3rd Declension nouns. Most of the nouns that we introduced in these lessons have stems ending in –ν (δαιμον-), –δ (ἐλπιδ-), –ντ (ἀρχοντ-) or –κτ (νυκτ-). In other words, these stems end in a NASAL, DENTAL, or PALATAL. In this lesson, we introduce 3rd Declension nouns that have stems ending in –ρ, and –εσ.
Before we look at these new nouns, let us review the 3rd Declension case endings for MASCULINE and FEMININE nouns:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || –ς || –ες
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || –α || –ας
|}
The 3rd Declension case endings for NEUTER nouns are as follows:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || – || –α
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || – || –α
|}
===Stems Ending in –ρ===
Declining most 3rd Declension nouns whose stem ends in –ρ is fairly straightforward. Greek often avoids the combination –ρσ-, usually by dropping the –ς from the NOMINATIVE SINGULAR (μάρτυς –υρος is an exception to this rule).
In the DATIVE PLURAL, the –σι ending is always intact. What happens when the –ρ– encounters the –σι can vary. Many nouns simply allow the full –ρσι– combination. For example, the dative plural of ῥήτωρ, ῥήτορος “orator,” is ῥήτορσι (S 259; GPH p. 11). There are, however, exceptions to this pattern.
μάρτυς –υρος drops the ρ for most Greek authors: μάρτυσι
χείρ, χειρός shortens its stem: χερσί
Note the inflections of the following common nouns, each with their own slight peculiarities:
{| class="wikitable"
|+ μάρτυς -υρος ὁ, ἡ witness
! Case !! Singular !! Plural
|-
| Nominative || ἡ μάρτυς || αἱ μάρτυρες
|-
| Genitive || τῆς μάρτυρος || τῶν μαρτύρων
|-
| Dative || τῇ μάρτυρι || ταῖς μάρτυσι
|-
| Accusative || τὴν μάρτυρα || τὰς μάρτυρας
|}
{| class="wikitable"
|+ χείρ, χειρός ἡ hand
! Case !! Singular !! Plural
|-
| Nominative || ἡ χείρ || αἱ χεῖρες
|-
| Genitive || τῆς χειρός || τῶν χειρῶν
|-
| Dative || τῇ χειρί || ταῖς χερσί
|-
| Accusative || τὴν χεῖρα || τὰς χεῖρας
|}
{| class="wikitable"
|+ πῦρ, πυρός τό fire
! Case !! Singular !! (No plural)
|-
| Nominative || τὸ πῦρ ||
|-
| Genitive || τοῦ πυρός ||
|-
| Dative || τῷ πυρί ||
|-
| Accusative || τὸ πῦρ ||
|}
===Stems Ending in –ερ===
More stem and accent changes occur in noun stems ending in –ερ (S 262). The good news is that the basic case endings do not change. The stem changes, however, do require memorization.
There are four common nouns of this type (S 262; cf. GPH p. 12). As you memorize the inflections for each, note the following patterns for the first three nouns:
* The vowel stem –ερ becomes –ηρ in the nominative singular, due to the loss of a sigma resulting in COMPENSATORY LENGTHENING.
* The vowel stem –ερ becomes simply –ρ in the genitive singular, and dative singular and plural.
* The accent is on the ultima in the genitive and dative singular, on the penult in the accusative singular and all forms of the plural.
* The insertion of an –α– between the ρ– and –σι in the dative plural.
{| class="wikitable"
|+ πατήρ, πατρός ὁ father (stem: πατερ-)
! Case !! Singular !! Plural
|-
| Nominative || ὁ πατήρ || οἱ πατέρες
|-
| Genitive || τοῦ πατρός || τῶν πατέρων
|-
| Dative || τῷ πατρί || τοῖς πατράσι
|-
| Accusative || τὸν πατέρα || τοὺς πατέρας
|}
{| class="wikitable"
|+ μήτηρ, μητρός ἡ mother (stem: μητερ-)
! Case !! Singular !! Plural
|-
| Nominative || ἡ μήτηρ || αἱ μητέρες
|-
| Genitive || τῆς μητρός || τῶν μητέρων
|-
| Dative || τῇ μητρί || ταῖς μητράσι
|-
| Accusative || τὴν μητέρα || τὰς μητέρας
|}
{| class="wikitable"
|+ θυγάτηρ, θυγατρός ἡ daughter (stem: θυγατερ-)
! Case !! Singular !! Plural
|-
| Nominative || ἡ θυγάτηρ || αἱ θυγατέρες
|-
| Genitive || τῆς θυγατρός || τῶν θυγατέρων
|-
| Dative || τῇ θυγατρί || ταῖς θυγατράσι
|-
| Accusative || τὴν θυγατέρα || τὰς θυγατέρας
|}
For the fourth noun, note the following patterns:
* The vowel stem –ερ becomes –ηρ in the nominative singular, due to the loss of a sigma resulting in COMPENSATORY LENGTHENING.
* The vowel stem –ερ became simply –ρ in all oblique cases!
* The resulting forms (e.g. ἀνρός, ἀνρί) gradually developed a sound change that inserted a δ between ν and ρ (S 130). (Likewise, the French word cendre, “ash,” comes from the Latin cinerem!)
* The accent pattern matches the other three –ερ nouns, with the exception of the genitive plural ending: ἀνδρῶν.
{| class="wikitable"
|+ ἀνήρ, ἀνδρός ὁ man (stem: ἀνερ-)
! Case !! Singular !! Plural
|-
| Nominative || ὁ ἀνήρ || οἱ ἄνδρες
|-
| Genitive || τοῦ ἀνδρός || τῶν ἀνδρῶν
|-
| Dative || τῷ ἀνδρί || τοῖς ἀνδράσι
|-
| Accusative || τὸν ἄνδρα || τοὺς ἄνδρας
|}
===Stems Ending in –εσ===
As we saw in our discussion of the ATTIC FUTURE, an INTERVOCALIC SIGMA – i.e., a –σ– found between two vowels – often drops out, and the surrounding vowels contract. This process often occurs in 3rd Declension noun stems ending in –εσ once personal endings are added.
Nouns of this type are usually NEUTER. Masculine and feminine nouns of this type do appear, but they are less frequent or are proper names.
====1. Proper names in –εσ====
The name Socrates, ὁ Σωκράτης, declines as follows (S 264; GPH 13). Note the following patterns:
* In the nominative singular, the loss of a sigma results in COMPENSATORY LENGTHENING, just as we see with the four –ρ stem nouns above.
* Regular and expected contractions occur in the oblique forms once the intervocalic sigma is dropped.
* Finally, in the accusative singular, a ν is added by many, though not all, authors.
{| class="wikitable"
! Case !! Form
|-
| Nominative || (Σωκράτεσς →) Σωκράτης
|-
| Genitive || (Σωκράτεσος → Σωκράτεος →) Σωκράτους
|-
| Dative || (Σωκράτεσι →) Σωκράτει
|-
| Accusative || (Σωκράτεσα → Σωκράτεα →) Σωκράτη(ν)
|}
====2. Neuter nouns in –εσ====
For neuter nouns, recognizable patterns emerge.
* First, in the nominative and accusative singular, the stem –ες becomes –ος. Otherwise, all accent and contraction rules apply normally (S 264; GPH p. 14).
* Second, the accent is usually born on the ANTEPENULT of the uncontracted, inflected forms.
For example:
{| class="wikitable"
|+ ἔτος -ους τό year (stem: ἐτεσ-)
! Case !! Singular !! Plural
|-
| Nominative || (ἔτες →) ἔτος || (ἔτεσα → ἔτεα →) ἔτη
|-
| Genitive || (ἔτεσος → ἔτεος →) ἔτους || (ἐτέσων → ἐτέων →) ἐτῶν
|-
| Dative || (ἔτεσι →) ἔτει || (ἔτεσσι → ) ἔτεσι
|-
| Accusative || (ἔτες →) ἔτος || (ἔτεσα → ἔτεα →) ἔτη
|}
{| class="wikitable"
|+ γένος -ους τό clan, generation; type, class (stem: γένεσ-)
! Case !! Singular !! Plural
|-
| Nominative || (γένες →) γένος || (γένεσα → γένεα →) γένη
|-
| Genitive || (γένεσος → γένεος →) γένους || (γενέσων → γενέων →) γενῶν
|-
| Dative || (γένεσι →) γένει || (γένεσσι → ) γένεσι
|-
| Accusative || (γένες →) γένος || (γένεσα → γένεα →) γένη
|}
===Stems Ending in –ι===
Most nouns preserve this stem vowel only in the NOMINATIVE and ACCUSATIVE SINGULAR. In the other cases and numbers, –ε replaces –ι as the stem vowel (S 268-271). This class of nouns shares a number of other attributes, including:
* These nouns are usually feminine.
* The genitive singular ending lengthens from –ος to –ως.
* Neither the –εως ending of the genitive singular nor the –εων ending of the genitive plural draw the accent off of an antepenult.
* The accusative singular uses –ν (familiar from the definite article) instead of –α.
* The nominative and accusative plural both end in –εες, which contracts to –εις.
As with nouns with –ερ stems, these changes in the noun stem and accent patterns require memorization. The good news is that all the –ι stem nouns in the vocabulary share the inflection pattern of ἡ πόλις, πόλεως city (S 268; GPH p. 15):
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || ἡ πόλις || αἱ πόλεις
|-
| Genitive || τῆς πόλεως || τῶν πόλεων
|-
| Dative || τῇ πόλει || ταῖς πόλεσι
|-
| Accusative || τὴν πόλιν || τὰς πόλεις
|}
The fact that the –εως and –εων endings do not draw the accent off of an antepenult is striking. This peculiarity is the result of changes in the pronunciation of words like πόλις. The earlier form of πόλεως was πόληος. The η and ο switched their vowel lengths over time (η shortened to ε, and ο lengthened to ω!), in a process called TRANSFERENCE OF QUANTITY (S 34). The accent, however, stayed on the antepenult during this process. The accent of the genitive plural gradually switched to the antepenult to match the genitive singular accent.
Transference of quantity is similar to METATHESIS, in which a vowel and consonant can switch places (S 128). English pronunciation has a number of such switches. For example, a vowel can switch places with an “r” in actual pronunciation for many English speakers: iron is often pronounced iern, and prescription pronounced perscription.
===Stems Ending in –υ, –ευ, –αυ, and –ου===
1. As with –ι stem nouns, –υ stem nouns preserve the stem vowel only in the NOMINATIVE and ACCUSATIVE SINGULAR. In the other cases and numbers, –ε replaces –υ as the stem vowel (S 268-271). Many –υ stem nouns share a number of other attributes with –ι stem nouns, including:
* The genitive singular ending lengthens from –ος to –ως.
* Neither the –εως ending of the genitive singular (due to transference of quantity) nor the –εων ending of the genitive plural draw the accent off of an antepenult.
* The accusative singular uses –ν instead of –α.
* The nominative and accusative plural both end in –εες, which contracts to –εις.
Note, for example, the inflection of ὁ πρέσβυς -εως old man:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || ὁ πρέσβυς || οἱ πρέσβεις
|-
| Genitive || τοῦ πρέσβεως || τῶν πρέσβεων
|-
| Dative || τῷ πρέσβει || τοῖς πρέσβεσι
|-
| Accusative || τὸν πρέσβυν || τοὺς πρέσβεις
|}
====2. Kings, Priests, and Horsemen!====
Noun stems ending in –ευ exhibit more irregularities than stems that end in just –υ. The inflection patterns of these nouns must be memorized, though some observations may help. Note the following changes that occur in the inflection of ὁ βασιλεύς -έως “king” (S 275; GPH p. 16):
* The noun stem –ευ drops the –υ before another vowel, leaving just an –ε for its stem vowel.
* The genitive singular ending lengthens from –ος to –ως, due to transference of quantity.
* The accent persists on the stem vowel, –ευ or –ε. Note that for the dative singular, the original form was βασιλέ–ι, the noun stem plus the case ending. These two vowels form a diphthong, and the resulting accent, as expected, forms a circumflex.
* The nominative plural lengthens the –ε to an –η (-έὲς = –ῆς).
* The endings for the accusative singular and plural do not contract (the α of both endings is long).
Not long after the Classical period, the NOMINATIVE and ACCUSATIVE PLURALS of these –ευ nouns change to –εῖς, in parallel with the endings shared by –ι stem nouns and –υ stem nouns such as ὁ πρέσβυς –εως. The rest of the noun inflects as it did in the Classical period.
{| class="wikitable"
|+ βασιλεύς -έως ὁ king (post-Classical forms in parentheses)
! Case !! Singular !! Plural
|-
| Nominative || ὁ βασιλεύς || οἱ βασιλῆς (βασιλεῖς)
|-
| Genitive || τοῦ βασιλέως || τῶν βασιλέων
|-
| Dative || τῷ βασιλεῖ || τοῖς βασιλεῦσι
|-
| Accusative || τὸν βασιλέα || τοὺς βασιλέας (βασιλεῖς)
|}
Also inflected on this pattern are the following two nouns:
* ἱερεύς -έως ὁ priest
* ἱππεύς -έως ὁ horseman, charioteer
====3. Ships!====
The noun ἡ ναῦς, νεώς “ship” is a common word in Greek, as might be expected for a people closely associated with seafaring. The stem for this noun ends in –αυ. Like noun stems ending in –ευ, –αυ nouns exhibit more irregularities than stems that end in just –υ. The inflection pattern of ἡ ναῦς, νεώς must be memorized, though some observations may help (S 275; GPH p. 16).
* The vowel stem –αυ drops the –υ before another vowel, resulting in a vowel stem of either –ε or –η.
* The genitive singular ending lengthens from –ος to –ως, due to transference of quantity.
* The accent pattern follows that of a monosyllabic nouns of the 3rd Declension.
* The accusative singular uses –ν instead of –α.
* The nominative singular and accusative plural are identical in form.
{| class="wikitable"
|+ ναῦς, νεώς ἡ ship
! Case !! Singular !! Plural
|-
| Nominative || ἡ ναῦς || αἱ νῆες
|-
| Genitive || τῆς νεώς || τῶν νεῶν
|-
| Dative || τῇ νηί || ταῖς ναυσί
|-
| Accusative || τὴν ναῦν || τὰς ναῦς
|}
====4. Bulls!====
The noun βοῦς, βοός bull or cow, is also a common word in Greek. These animals were important not only for farming and animal husbandry, but for sacrifices.
The stem for this noun ends in –ου (S 275; GPH p. 17). Like noun stems ending in –ευ and –αυ, –ου nouns exhibit irregularities. The inflection pattern of βοῦς, βοός must be memorized, though some observations may help (S 275-278).
* The vowel stem –ου drops the –υ before another vowel, resulting in a vowel stem of –ο.
* The genitive singular remains –ος. No transference of quantity can occur, since the stem vowel –ο is short.
* The accent pattern follows that of a monosyllabic nouns of the 3rd Declension.
* The genitive singular and nominative plural endings do not contract.
* The accusative singular uses –ν instead of –α.
* The nominative singular and accusative plural are identical in form.
{| class="wikitable"
|+ βοῦς, βοός ὁ bull, ox; ἡ cow
! Case !! Singular !! Plural
|-
| Nominative || ὁ, ἡ βοῦς || οἱ, αἱ βόες
|-
| Genitive || τοῦ, τῆς βοός || τῶν, τῶν βοῶν
|-
| Dative || τῷ, τῇ βοί || τοῖς, ταῖς βουσί
|-
| Accusative || τὸν, τὴν βοῦν || τοὺς, τὰς βοῦς
|}
===Kings, ships, cows, and the digamma===
In earlier periods, there were three additional letters in the Greek alphabet: KOPPA (ϙ), SAMPI (ϡ), and DIGAMMA (ϝ). The koppa is a K sound, and remained in use to represent the number 90 in Classical Greek. The sampi is a double-S sound, and remained in use to represent the number 900.
The digamma represents the W sound. Though the sound, and so the letter, eventually dropped from most dialects by the Classical period, its presence and subsequent loss affected a number of Greek words, particularly nouns with stems ending in –ευ, –αυ, and –ου (S 122, 278). For example, forms such as βασιλέως, βασιλεῖ, and βασιλέα ultimately derive from βασιλήϝος, βασιλήϝι, and βασιλήϝα. Gradually, the loss of the digamma, together with transference of quantity, resulted in the forms that we encounter today.
Similarly, forms such as νεώς and βοός derive ultimately from νηϝός and βοϝός. Compare these early forms with the Latin nouns navis and bovis, which preserved the W sound with the Latin letter V. Also of note: Latin preserved the letter koppa in its adaptation of the Greek alphabet, and is the source for the English letter Q.
{{BookCat}}
n79s1vw85fvogfob2ao0tu4rgqs5oi0
4676311
4676307
2026-10-15T22:32:33Z
It-is-Truly-Meet
3624460
/* Kings, ships, cows, and the digamma */
4676311
wikitext
text/x-wiki
==3rd Declension Noun Tables==
{| class="wikitable" style="float:right"
|+ ὁ παῖς — child
!Singular
!Plural
|-
|παῖς||'''παῖδ'''ες
|-
|'''παιδ'''óς||'''παίδ'''ων
|-
|'''παιδ'''ῐ́||παισί
|-
|'''παῖδ'''ᾰ||'''παῖδ'''ᾰς
|-
| παῖ||'''παῖδ'''ες
|}
{| class="wikitable" style="float:right"
|+ ὁ γίγας — giant
! Singular
! Plural
|-
| γίγας||γίγαντες
|-
| γίγαντος||γιγάντων
|-
| γίγαντι||γίγασι(ν)
|-
| γίγαντα||γίγαντας
|-
| γίγαν||γίγαντες
|}
{| class="wikitable" style="float:right"
|+ ὁ θής — hired man
! Singular
! Plural
|-
| θής||θῆτες
|-
| θητός||θητῶν
|-
| θητί||θησί(ν)
|-
| θῆτα||θῆτας
|-
| θής||θῆτες
|}
{| class="wikitable" style="float:right"
|+ ἡ λαμπάς — torch
! Singular
! Plural
|-
| λαμπάς||λαμπάδες
|-
| λαμπάδος||λαμπάδων
|-
| λαμπάδι||λαμπάσι(ν)
|-
| λαμπάδα||λαμπάδας
|-
| λαμπάς||λαμπάδες
|}
{| class="wikitable" style="float:right"
|+ ὁ/ἡ ὄρνις — bird
! Case
! Singular
! Plural
|-
| Nom.
| ὄρνις||ὄρνιθες
|-
| Gen.
| ὄρνιθος||ὀρνίθων
|-
| Dat.
| ὄρνιθι||ὄρνισι(ν)
|-
| Acc.
| ὄρνιν||ὄρνιθας
|-
| Voc.
| ὄρνις||ὄρνιθες
|}
{| class="wikitable" style="float:right"
|+ ἡ ἐλπίς — hope
! Singular
! Plural
|-
| ἐλπίς||ἐλπίδες
|-
| ἐλπίδος||ἐλπίδων
|-
| ἐλπίδι||ἐλπίσι(ν)
|-
| ἐλπίδα||ἐλπίδας
|-
| ἐλπί||ἐλπίδες
|}
{| class="wikitable" style="float:right"
|+ ὁ δαίμων — divinity
! Singular
! Plural
|-
| δαίμων||δαίμονες
|-
| δαίμονος||δαιμόνων
|-
| δαίμονι||δαίμοσι(ν)
|-
| δαίμονα||δαίμονας
|-
| δαῖμον||δαίμονες
|}
{| class="wikitable" style="float:right"
|+ ὁ ἄρχων — ruler
! Case
! Singular
! Plural
|-
| Nom.
| ἄρχων||ἄρχοντες
|-
| Gen.
| ἄρχοντος||ἀρχόντων
|-
| Dat.
| ἄρχοντι||ἄρχουσι(ν)
|-
| Acc.
| ἄρχοντα||ἄρχοντας
|-
| Voc.
| ἄρχον||ἄρχοντες
|}
<br clear="all">
==Masculine Nouns==
* παιδ child
* δαιμον divinity, spirit
* ἀρχοντ ruler
The first set of nouns are all MASCULINE in gender. These particular masculine nouns add the following suffixes to their stem to indicate number and case:
{| class="wikitable"
! Case||Singular||Plural
|-
|Nom.||–'''ς'''||–ες
|-
|Gen.||–ος||–ων
|-
|Dat.||–ι||–'''σ'''ι
|-
|Acc.||–α||–ας
|}
===The Trouble with Sigma===
Two case endings add sigma to the stem: nominative singular –ς and dative plural –σι. These nouns have stems ending in a dental consonant: stops –τ, –δ, –θ, or nasal –ν.
When σ follows a dental stop, the dental disappears (δ + σ = σ). When σ follows –ν, the σ sometimes disappears instead (ν + σ = ν), often causing compensatory lengthening of the preceding short vowel. Long vowels and diphthongs cannot be lengthened further.
These sound changes explain the spelling of the three nouns below.
{| class="wikitable"
|+ ὁ παῖς, παιδός child
! Case !! Singular !! Plural
|-
| Nominative || (παιδς→ ) παῖς || παῖδες
|-
| Genitive || παιδός || παίδων
|-
| Dative || παιδί || (παιδσι→ ) παισί
|-
| Accusative || παῖδα || παῖδας
|}
{| class="wikitable"
|+ ὁ δαίμων, δαίμονος divinity
! Case !! Singular !! Plural
|-
| Nominative || (δαιμονς→ ) δαίμων || δαίμονες
|-
| Genitive || δαίμονος || δαιμόνων
|-
| Dative || δαίμονι || (δαιμονσι→ ) δαίμοσι
|-
| Accusative || δαίμονα || δαίμονας
|}
{| class="wikitable"
|+ ὁ ἄρχων, ἄρχοντος ruler
! Case !! Singular !! Plural
|-
| Nominative || (ἀρχοντς→ ) ἄρχων || ἄρχοντες
|-
| Genitive || ἄρχοντος || ἀρχόντων
|-
| Dative || ἄρχοντι || (ἀρχοντσι→ ) ἄρχουσι
|-
| Accusative || ἄρχοντα || ἄρχοντας
|}
===Spell It Like It Sounds!===
Words ending in –σι may add a final –ν (movable nu) for easier pronunciation: εἴκοσί εἰσι → εἴκοσίν εἰσι. Thus, παισί may appear as παισίν, without changing its parsing, meaning, or translation.
===Noun Vocabulary===
Third-declension nouns are listed with the definite article, nominative singular, and genitive singular (e.g., ὁ ἄρχων, ἄρχοντος). The article indicates gender, the nominative singular provides the citation form, and the genitive singular reveals the noun stem, usually by removing –ος (ἄρχοντος → ἀρχοντ-). Memorize all three forms, since the nominative singular may conceal changes to the stem.
===Nouns and the Persistent Accent===
For most Greek verbs, RECESSIVE ACCENTUATION determines which syllable receives the accent. In the case of most Greek nouns (and adjectives), PERSISTENT ACCENTUATION determines which syllable receives the accent.
The NOMINATIVE SINGULAR of each noun has a particular vowel or diphthong that receives the ACCENT. Where this accented vowel or diphthong is found – antepenult, penult, or ultima – is a matter of spelling, and must be memorized. For example, note that the accent is “born” on the alpha of ἄρχων, but on the omega of ἡγεμών. As a general principle, the accent on all the other INFLECTED forms of a noun tries to remain, or PERSIST, on the same vowel or diphthong on which it is found in the nominative singular, unless forced to change position or accent type (e.g., from circumflex to acute).
Note that the 3rd declension case ending for the nominative singular adds only a consonant (-ς) to the noun stem; the remaining case endings add ANOTHER SYLLABLE to the noun. In practice, this means that if the accented vowel or diphthong is found, say, in the ultima of the nominative singular form, the same vowel or diphthong becomes the penult in the remaining inflected forms.
There are three general PERSISTENT ACCENT situations or rules that apply to nouns of the third declension.
====1. When the accent falls on the PENULT of inflected forms…====
It stays there. If the penult is LONG, the accent is a circumflex with short ultima, acute with long ultima.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || αἰών || αἰῶνες
|-
| Genitive || αἰῶνος || αἰώνων
|-
| Dative || αἰῶνι || αἰῶσι
|-
| Accusative || αἰῶνα || αἰῶνας
|}
If the penult is SHORT, the accent remains acute throughout all forms.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || ἡγεμών || ἡγεμόνες
|-
| Genitive || ἡγεμόνος || ἡγεμόνων
|-
| Dative || ἡγεμόνι || ἡγεμόσι
|-
| Accusative || ἡγεμόνα || ἡγεμόνας
|}
Note that the rule for accents that fall on the penult is IDENTICAL to that of VERBS with only TWO SYLLABLES!
====2. When the accent is on the ANTEPENULT of inflected forms…====
The accent can only be acute on the antepenult. If the ULTIMA becomes LONG (e.g., genitive plural –ων), the accent moves to the PENULT.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || ἄρχων || ἄρχοντες
|-
| Genitive || ἄρχοντος || ἀρχόντων
|-
| Dative || ἄρχοντι || ἄρχουσι
|-
| Accusative || ἄρχοντα || ἄρχοντας
|}
Note that the rule for accents that fall on the antepenult is IDENTICAL to that of VERBS with THREE OR MORE SYLLABLES!
====3. When the accent falls on a MONOSYLLABIC nominative singular noun…====
The accent usually moves to the ULTIMA of the genitive and dative cases, singular and plural. In these situations, the accent on the ultima is ACUTE over short vowels (e.g. –ός), and circumflex over long (e.g. –ῶν). This accent pattern is irregular, and must be memorized.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || πούς || πόδες
|-
| Genitive || ποδός || ποδῶν
|-
| Dative || ποδί || ποσί
|-
| Accusative || πόδα || πόδας
|}
There are a handful of monosyllabic nouns that instead accent the penult of the genitive plural (S 252a). The most common ones are ὁ, ἡ παῖς, παιδός child (genitive plural = παίδων), declined above, φῶς, φωτός light (genitive plural = φώτων), and οὖς, ὠτός ear (genitive plural = ὤτων).
==Feminine Nouns==
In our last lesson, we learned endings for nouns that were masculine. Now we add nouns that are feminine. For the 3rd declension, feminine nouns use the same case endings as masculine nouns:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || –ς || –ες
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || –α || –ας
|}
===The Trouble with Sigma===
As noted in our discussion of masculine nouns, two of the case endings involve adding a sigma to the stem: nominative singular = –ς, dative plural = –σι. Let us take a look at the sound changes that occur when these sigmas are added to the stems for two feminine nouns:
* ἐλπιδ hope
* νυκτ night
Note that the first stem, ἐλπιδ, ends in a dental (-τ/-δ/-θ). As we know, when a sigma follows a dental, the dental disappears and the sigma remains: e.g., δ + σ = σ. The second stem, νυκτ, ends in –κτ, a stem ending that the Greeks treated as essentially the same as a palatal (-κ/-γ/-χ). Recall that when a sigma follows a palatal, the result is the double consonant ξ: e.g., κ + σ = ξ (S 241).
With these sound changes in mind, note how ἐλπιδ and νυκτ decline:
{| class="wikitable"
|+ ἡ ἐλπίς, ἐλπίδος hope
! Case !! Singular !! Plural
|-
| Nominative || (ἐλπιδς →) ἐλπίς || ἐλπίδες
|-
| Genitive || ἐλπίδος || ἐλπίδων
|-
| Dative || ἐλπίδι || (ἐλπιδσι →) ἐλπίσι
|-
| Accusative || ἐλπίδα || ἐλπίδας
|}
{| class="wikitable"
|+ ἡ νύξ, νυκτός night
! Case !! Singular !! Plural
|-
| Nominative || (νυκτς → νυκς →) νύξ || νύκτες
|-
| Genitive || νυκτός || νυκτῶν
|-
| Dative || νυκτί || (νυκτσι → νυκσι →) νυξί
|-
| Accusative || νύκτα || νύκτας
|}
===The Definite Article===
Most nouns have only one grammatical gender, such as:
ἡ ἐλπίς, ἐλπίδος hope
A handful of nouns referring to people or gods, however, can be either MASCULINE or FEMININE, depending on the gender of the person/divinity. In such instances, the vocabulary entry includes both the masculine and feminine article.
ὁ, ἡ παῖς, παιδός (male or female) child
ὁ, ἡ δαίμων, δαίμονος (male or female) divinity
==Neuter Nouns==
===Neuter Nouns===
All the nouns we have so far discussed have been either masculine or feminine in gender and have used the same endings to indicate number and case. The third and final grammatical gender, NEUTER, has similar endings, though with a few changes.
Neuter nouns of the THIRD DECLENSION add the following case endings to their stem to indicate number and case. Note that there is no ending (!) added in the NOMINATIVE and ACCUSATIVE SINGULAR.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || – || –α
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || – || –α
|}
===Word-Final Sounds===
One of the most common stem endings for NEUTER nouns of the THIRD DECLENSION is –ματ. For example:
σωματ body
ὀνοματ name
Since τ is a dental, the addition of a sigma to the stem (dat. plu. –σι) results in a sigma: τ + σ = σ.
Interestingly, it is a general rule that, unlike English, only a limited number of SOUNDS may END A WORD OF GREEK ORIGIN: a vowel sound, or the consonants –ρ/-ν/-ς (ξ, ψ). If a Greek word ended in any other consonant, that consonant would be dropped (S 133). (The only exceptions to this rule are ἐκ and οὐκ!). Since the neuter adds no ending to the nominative and accusative singular, stems ending in –ματ drop the final –τ, in order to avoid having a word end in this letter (S 258).
As a result, our two nouns decline as follows:
{| class="wikitable"
|+ τὸ σῶμα, σώματος body
! Case !! Singular !! Plural
|-
| Nominative || (σωματ →) σῶμα || σώματα
|-
| Genitive || σώματος || σωμάτων
|-
| Dative || σώματι || (σώματσι →) σώμασι
|-
| Accusative || (σωματ →) σῶμα || σώματα
|}
{| class="wikitable"
|+ τὸ ὄνομα, ὀνόματος name
! Case !! Singular !! Plural
|-
| Nominative || (ὀνοματ →) ὄνομα || ὀνόματα
|-
| Genitive || ὀνόματος || ὀνομάτων
|-
| Dative || ὀνόματι || (ὀνοματσι →) ὀνόμασι
|-
| Accusative || (ὀνοματ →) ὄνομα || ὀνόματα
|}
===The Definite Article===
Remember that when a definite article accompanies a noun, both must parse the same. In other words, they must be the same in gender, number, and case. Note the following examples:
{| class="wikitable"
|+ τὸ σῶμα, σώματος body
! Case !! Singular !! Plural
|-
| Nominative || τὸ σῶμα || τὰ σώματα
|-
| Genitive || τοῦ σώματος || τῶν σωμάτων
|-
| Dative || τῷ σώματι || τοῖς σώμασι
|-
| Accusative || τὸ σῶμα || τὰ σώματα
|}
{| class="wikitable"
|+ τὸ ὄνομα, ὀνόματος name
! Case !! Singular !! Plural
|-
| Nominative || τὸ ὄνομα || τὰ ὀνόματα
|-
| Genitive || τοῦ ὀνόματος || τῶν ὀνομάτων
|-
| Dative || τῷ ὀνόματι || τοῖς ὀνόμασι
|-
| Accusative || τὸ ὄνομα || τὰ ὀνόματα
|}
===The Neuter Laws===
Three rules apply to ALL NEUTER nouns in Greek, regardless of declension.
1. The NOMINATIVE and ACCUSATIVE SINGULAR must be IDENTICAL. This pattern applies to both the neuter noun and its definite article.
2. The NOMINATIVE and ACCUSATIVE PLURAL also must be IDENTICAL, and end in a short –α. This pattern applies to both the neuter noun and its definite article.
3. Whenever any NEUTER noun is the subject of a verb, the verb is regularly 3rd PERSON SINGULAR, even if the neuter subject is plural! The reason seems to be that neuter plurals were originally conceived to be collective nouns (S 958), much as the words army and team are collective nouns in English.
τὸ φῶς δείκνυσι….
The light shows…
τὰ φῶτα δείκνυσι….
The lights show…
==More 3rd Declension Nouns==
We have already learned how to form 3rd Declension nouns. Most of the nouns that we introduced in these lessons have stems ending in –ν (δαιμον-), –δ (ἐλπιδ-), –ντ (ἀρχοντ-) or –κτ (νυκτ-). In other words, these stems end in a NASAL, DENTAL, or PALATAL. In this lesson, we introduce 3rd Declension nouns that have stems ending in –ρ, and –εσ.
Before we look at these new nouns, let us review the 3rd Declension case endings for MASCULINE and FEMININE nouns:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || –ς || –ες
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || –α || –ας
|}
The 3rd Declension case endings for NEUTER nouns are as follows:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || – || –α
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || – || –α
|}
===Stems Ending in –ρ===
Declining most 3rd Declension nouns whose stem ends in –ρ is fairly straightforward. Greek often avoids the combination –ρσ-, usually by dropping the –ς from the NOMINATIVE SINGULAR (μάρτυς –υρος is an exception to this rule).
In the DATIVE PLURAL, the –σι ending is always intact. What happens when the –ρ– encounters the –σι can vary. Many nouns simply allow the full –ρσι– combination. For example, the dative plural of ῥήτωρ, ῥήτορος “orator,” is ῥήτορσι (S 259; GPH p. 11). There are, however, exceptions to this pattern.
μάρτυς –υρος drops the ρ for most Greek authors: μάρτυσι
χείρ, χειρός shortens its stem: χερσί
Note the inflections of the following common nouns, each with their own slight peculiarities:
{| class="wikitable"
|+ μάρτυς -υρος ὁ, ἡ witness
! Case !! Singular !! Plural
|-
| Nominative || ἡ μάρτυς || αἱ μάρτυρες
|-
| Genitive || τῆς μάρτυρος || τῶν μαρτύρων
|-
| Dative || τῇ μάρτυρι || ταῖς μάρτυσι
|-
| Accusative || τὴν μάρτυρα || τὰς μάρτυρας
|}
{| class="wikitable"
|+ χείρ, χειρός ἡ hand
! Case !! Singular !! Plural
|-
| Nominative || ἡ χείρ || αἱ χεῖρες
|-
| Genitive || τῆς χειρός || τῶν χειρῶν
|-
| Dative || τῇ χειρί || ταῖς χερσί
|-
| Accusative || τὴν χεῖρα || τὰς χεῖρας
|}
{| class="wikitable"
|+ πῦρ, πυρός τό fire
! Case !! Singular !! (No plural)
|-
| Nominative || τὸ πῦρ ||
|-
| Genitive || τοῦ πυρός ||
|-
| Dative || τῷ πυρί ||
|-
| Accusative || τὸ πῦρ ||
|}
===Stems Ending in –ερ===
More stem and accent changes occur in noun stems ending in –ερ (S 262). The good news is that the basic case endings do not change. The stem changes, however, do require memorization.
There are four common nouns of this type (S 262; cf. GPH p. 12). As you memorize the inflections for each, note the following patterns for the first three nouns:
* The vowel stem –ερ becomes –ηρ in the nominative singular, due to the loss of a sigma resulting in COMPENSATORY LENGTHENING.
* The vowel stem –ερ becomes simply –ρ in the genitive singular, and dative singular and plural.
* The accent is on the ultima in the genitive and dative singular, on the penult in the accusative singular and all forms of the plural.
* The insertion of an –α– between the ρ– and –σι in the dative plural.
{| class="wikitable"
|+ πατήρ, πατρός ὁ father (stem: πατερ-)
! Case !! Singular !! Plural
|-
| Nominative || ὁ πατήρ || οἱ πατέρες
|-
| Genitive || τοῦ πατρός || τῶν πατέρων
|-
| Dative || τῷ πατρί || τοῖς πατράσι
|-
| Accusative || τὸν πατέρα || τοὺς πατέρας
|}
{| class="wikitable"
|+ μήτηρ, μητρός ἡ mother (stem: μητερ-)
! Case !! Singular !! Plural
|-
| Nominative || ἡ μήτηρ || αἱ μητέρες
|-
| Genitive || τῆς μητρός || τῶν μητέρων
|-
| Dative || τῇ μητρί || ταῖς μητράσι
|-
| Accusative || τὴν μητέρα || τὰς μητέρας
|}
{| class="wikitable"
|+ θυγάτηρ, θυγατρός ἡ daughter (stem: θυγατερ-)
! Case !! Singular !! Plural
|-
| Nominative || ἡ θυγάτηρ || αἱ θυγατέρες
|-
| Genitive || τῆς θυγατρός || τῶν θυγατέρων
|-
| Dative || τῇ θυγατρί || ταῖς θυγατράσι
|-
| Accusative || τὴν θυγατέρα || τὰς θυγατέρας
|}
For the fourth noun, note the following patterns:
* The vowel stem –ερ becomes –ηρ in the nominative singular, due to the loss of a sigma resulting in COMPENSATORY LENGTHENING.
* The vowel stem –ερ became simply –ρ in all oblique cases!
* The resulting forms (e.g. ἀνρός, ἀνρί) gradually developed a sound change that inserted a δ between ν and ρ (S 130). (Likewise, the French word cendre, “ash,” comes from the Latin cinerem!)
* The accent pattern matches the other three –ερ nouns, with the exception of the genitive plural ending: ἀνδρῶν.
{| class="wikitable"
|+ ἀνήρ, ἀνδρός ὁ man (stem: ἀνερ-)
! Case !! Singular !! Plural
|-
| Nominative || ὁ ἀνήρ || οἱ ἄνδρες
|-
| Genitive || τοῦ ἀνδρός || τῶν ἀνδρῶν
|-
| Dative || τῷ ἀνδρί || τοῖς ἀνδράσι
|-
| Accusative || τὸν ἄνδρα || τοὺς ἄνδρας
|}
===Stems Ending in –εσ===
As we saw in our discussion of the ATTIC FUTURE, an INTERVOCALIC SIGMA – i.e., a –σ– found between two vowels – often drops out, and the surrounding vowels contract. This process often occurs in 3rd Declension noun stems ending in –εσ once personal endings are added.
Nouns of this type are usually NEUTER. Masculine and feminine nouns of this type do appear, but they are less frequent or are proper names.
====1. Proper names in –εσ====
The name Socrates, ὁ Σωκράτης, declines as follows (S 264; GPH 13). Note the following patterns:
* In the nominative singular, the loss of a sigma results in COMPENSATORY LENGTHENING, just as we see with the four –ρ stem nouns above.
* Regular and expected contractions occur in the oblique forms once the intervocalic sigma is dropped.
* Finally, in the accusative singular, a ν is added by many, though not all, authors.
{| class="wikitable"
! Case !! Form
|-
| Nominative || (Σωκράτεσς →) Σωκράτης
|-
| Genitive || (Σωκράτεσος → Σωκράτεος →) Σωκράτους
|-
| Dative || (Σωκράτεσι →) Σωκράτει
|-
| Accusative || (Σωκράτεσα → Σωκράτεα →) Σωκράτη(ν)
|}
====2. Neuter nouns in –εσ====
For neuter nouns, recognizable patterns emerge.
* First, in the nominative and accusative singular, the stem –ες becomes –ος. Otherwise, all accent and contraction rules apply normally (S 264; GPH p. 14).
* Second, the accent is usually born on the ANTEPENULT of the uncontracted, inflected forms.
For example:
{| class="wikitable"
|+ ἔτος -ους τό year (stem: ἐτεσ-)
! Case !! Singular !! Plural
|-
| Nominative || (ἔτες →) ἔτος || (ἔτεσα → ἔτεα →) ἔτη
|-
| Genitive || (ἔτεσος → ἔτεος →) ἔτους || (ἐτέσων → ἐτέων →) ἐτῶν
|-
| Dative || (ἔτεσι →) ἔτει || (ἔτεσσι → ) ἔτεσι
|-
| Accusative || (ἔτες →) ἔτος || (ἔτεσα → ἔτεα →) ἔτη
|}
{| class="wikitable"
|+ γένος -ους τό clan, generation; type, class (stem: γένεσ-)
! Case !! Singular !! Plural
|-
| Nominative || (γένες →) γένος || (γένεσα → γένεα →) γένη
|-
| Genitive || (γένεσος → γένεος →) γένους || (γενέσων → γενέων →) γενῶν
|-
| Dative || (γένεσι →) γένει || (γένεσσι → ) γένεσι
|-
| Accusative || (γένες →) γένος || (γένεσα → γένεα →) γένη
|}
===Stems Ending in –ι===
Most nouns preserve this stem vowel only in the NOMINATIVE and ACCUSATIVE SINGULAR. In the other cases and numbers, –ε replaces –ι as the stem vowel (S 268-271). This class of nouns shares a number of other attributes, including:
* These nouns are usually feminine.
* The genitive singular ending lengthens from –ος to –ως.
* Neither the –εως ending of the genitive singular nor the –εων ending of the genitive plural draw the accent off of an antepenult.
* The accusative singular uses –ν (familiar from the definite article) instead of –α.
* The nominative and accusative plural both end in –εες, which contracts to –εις.
As with nouns with –ερ stems, these changes in the noun stem and accent patterns require memorization. The good news is that all the –ι stem nouns in the vocabulary share the inflection pattern of ἡ πόλις, πόλεως city (S 268; GPH p. 15):
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || ἡ πόλις || αἱ πόλεις
|-
| Genitive || τῆς πόλεως || τῶν πόλεων
|-
| Dative || τῇ πόλει || ταῖς πόλεσι
|-
| Accusative || τὴν πόλιν || τὰς πόλεις
|}
The fact that the –εως and –εων endings do not draw the accent off of an antepenult is striking. This peculiarity is the result of changes in the pronunciation of words like πόλις. The earlier form of πόλεως was πόληος. The η and ο switched their vowel lengths over time (η shortened to ε, and ο lengthened to ω!), in a process called TRANSFERENCE OF QUANTITY (S 34). The accent, however, stayed on the antepenult during this process. The accent of the genitive plural gradually switched to the antepenult to match the genitive singular accent.
Transference of quantity is similar to METATHESIS, in which a vowel and consonant can switch places (S 128). English pronunciation has a number of such switches. For example, a vowel can switch places with an “r” in actual pronunciation for many English speakers: iron is often pronounced iern, and prescription pronounced perscription.
===Stems Ending in –υ, –ευ, –αυ, and –ου===
1. As with –ι stem nouns, –υ stem nouns preserve the stem vowel only in the NOMINATIVE and ACCUSATIVE SINGULAR. In the other cases and numbers, –ε replaces –υ as the stem vowel (S 268-271). Many –υ stem nouns share a number of other attributes with –ι stem nouns, including:
* The genitive singular ending lengthens from –ος to –ως.
* Neither the –εως ending of the genitive singular (due to transference of quantity) nor the –εων ending of the genitive plural draw the accent off of an antepenult.
* The accusative singular uses –ν instead of –α.
* The nominative and accusative plural both end in –εες, which contracts to –εις.
Note, for example, the inflection of ὁ πρέσβυς -εως old man:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || ὁ πρέσβυς || οἱ πρέσβεις
|-
| Genitive || τοῦ πρέσβεως || τῶν πρέσβεων
|-
| Dative || τῷ πρέσβει || τοῖς πρέσβεσι
|-
| Accusative || τὸν πρέσβυν || τοὺς πρέσβεις
|}
====2. Kings, Priests, and Horsemen!====
Noun stems ending in –ευ exhibit more irregularities than stems that end in just –υ. The inflection patterns of these nouns must be memorized, though some observations may help. Note the following changes that occur in the inflection of ὁ βασιλεύς -έως “king” (S 275; GPH p. 16):
* The noun stem –ευ drops the –υ before another vowel, leaving just an –ε for its stem vowel.
* The genitive singular ending lengthens from –ος to –ως, due to transference of quantity.
* The accent persists on the stem vowel, –ευ or –ε. Note that for the dative singular, the original form was βασιλέ–ι, the noun stem plus the case ending. These two vowels form a diphthong, and the resulting accent, as expected, forms a circumflex.
* The nominative plural lengthens the –ε to an –η (-έὲς = –ῆς).
* The endings for the accusative singular and plural do not contract (the α of both endings is long).
Not long after the Classical period, the NOMINATIVE and ACCUSATIVE PLURALS of these –ευ nouns change to –εῖς, in parallel with the endings shared by –ι stem nouns and –υ stem nouns such as ὁ πρέσβυς –εως. The rest of the noun inflects as it did in the Classical period.
{| class="wikitable"
|+ βασιλεύς -έως ὁ king (post-Classical forms in parentheses)
! Case !! Singular !! Plural
|-
| Nominative || ὁ βασιλεύς || οἱ βασιλῆς (βασιλεῖς)
|-
| Genitive || τοῦ βασιλέως || τῶν βασιλέων
|-
| Dative || τῷ βασιλεῖ || τοῖς βασιλεῦσι
|-
| Accusative || τὸν βασιλέα || τοὺς βασιλέας (βασιλεῖς)
|}
Also inflected on this pattern are the following two nouns:
* ἱερεύς -έως ὁ priest
* ἱππεύς -έως ὁ horseman, charioteer
====3. Ships!====
The noun ἡ ναῦς, νεώς “ship” is a common word in Greek, as might be expected for a people closely associated with seafaring. The stem for this noun ends in –αυ. Like noun stems ending in –ευ, –αυ nouns exhibit more irregularities than stems that end in just –υ. The inflection pattern of ἡ ναῦς, νεώς must be memorized, though some observations may help (S 275; GPH p. 16).
* The vowel stem –αυ drops the –υ before another vowel, resulting in a vowel stem of either –ε or –η.
* The genitive singular ending lengthens from –ος to –ως, due to transference of quantity.
* The accent pattern follows that of a monosyllabic nouns of the 3rd Declension.
* The accusative singular uses –ν instead of –α.
* The nominative singular and accusative plural are identical in form.
{| class="wikitable"
|+ ναῦς, νεώς ἡ ship
! Case !! Singular !! Plural
|-
| Nominative || ἡ ναῦς || αἱ νῆες
|-
| Genitive || τῆς νεώς || τῶν νεῶν
|-
| Dative || τῇ νηί || ταῖς ναυσί
|-
| Accusative || τὴν ναῦν || τὰς ναῦς
|}
====4. Bulls!====
The noun βοῦς, βοός bull or cow, is also a common word in Greek. These animals were important not only for farming and animal husbandry, but for sacrifices.
The stem for this noun ends in –ου (S 275; GPH p. 17). Like noun stems ending in –ευ and –αυ, –ου nouns exhibit irregularities. The inflection pattern of βοῦς, βοός must be memorized, though some observations may help (S 275-278).
* The vowel stem –ου drops the –υ before another vowel, resulting in a vowel stem of –ο.
* The genitive singular remains –ος. No transference of quantity can occur, since the stem vowel –ο is short.
* The accent pattern follows that of a monosyllabic nouns of the 3rd Declension.
* The genitive singular and nominative plural endings do not contract.
* The accusative singular uses –ν instead of –α.
* The nominative singular and accusative plural are identical in form.
{| class="wikitable"
|+ βοῦς, βοός ὁ bull, ox; ἡ cow
! Case !! Singular !! Plural
|-
| Nominative || ὁ, ἡ βοῦς || οἱ, αἱ βόες
|-
| Genitive || τοῦ, τῆς βοός || τῶν, τῶν βοῶν
|-
| Dative || τῷ, τῇ βοί || τοῖς, ταῖς βουσί
|-
| Accusative || τὸν, τὴν βοῦν || τοὺς, τὰς βοῦς
|}
===Kings, ships, cows, and the digamma===
Early Greek used three additional letters: KOPPA (ϙ), a K sound later retained as the numeral 90; SAMPI (ϡ), a double-S sound retained as 900; and DIGAMMA (ϝ), representing W.
Digamma disappeared from most dialects by the Classical period, affecting words with stems ending in –ευ, –αυ, and –ου. For example, βασιλέως, βασιλεῖ, and βασιλέα derive from earlier βασιλήϝος, βασιλήϝι, and βασιλήϝα. Similarly, νεώς and βοός derive from νηϝός and βοϝός. The loss of digamma and shifts in vowel quantity produced the later forms. Compare Latin ''navis'' and ''bovis'', which preserve W as V. Latin also retained koppa, which gave rise to the English letter Q.
{{BookCat}}
jt5zw1rz1x874xrgt11fjn2wp0o5mhz
4676319
4676311
2026-10-16T01:54:27Z
It-is-Truly-Meet
3624460
/* Nouns and the Persistent Accent */ Conciseness
4676319
wikitext
text/x-wiki
==3rd Declension Noun Tables==
{| class="wikitable" style="float:right"
|+ ὁ παῖς — child
!Singular
!Plural
|-
|παῖς||'''παῖδ'''ες
|-
|'''παιδ'''óς||'''παίδ'''ων
|-
|'''παιδ'''ῐ́||παισί
|-
|'''παῖδ'''ᾰ||'''παῖδ'''ᾰς
|-
| παῖ||'''παῖδ'''ες
|}
{| class="wikitable" style="float:right"
|+ ὁ γίγας — giant
! Singular
! Plural
|-
| γίγας||γίγαντες
|-
| γίγαντος||γιγάντων
|-
| γίγαντι||γίγασι(ν)
|-
| γίγαντα||γίγαντας
|-
| γίγαν||γίγαντες
|}
{| class="wikitable" style="float:right"
|+ ὁ θής — hired man
! Singular
! Plural
|-
| θής||θῆτες
|-
| θητός||θητῶν
|-
| θητί||θησί(ν)
|-
| θῆτα||θῆτας
|-
| θής||θῆτες
|}
{| class="wikitable" style="float:right"
|+ ἡ λαμπάς — torch
! Singular
! Plural
|-
| λαμπάς||λαμπάδες
|-
| λαμπάδος||λαμπάδων
|-
| λαμπάδι||λαμπάσι(ν)
|-
| λαμπάδα||λαμπάδας
|-
| λαμπάς||λαμπάδες
|}
{| class="wikitable" style="float:right"
|+ ὁ/ἡ ὄρνις — bird
! Case
! Singular
! Plural
|-
| Nom.
| ὄρνις||ὄρνιθες
|-
| Gen.
| ὄρνιθος||ὀρνίθων
|-
| Dat.
| ὄρνιθι||ὄρνισι(ν)
|-
| Acc.
| ὄρνιν||ὄρνιθας
|-
| Voc.
| ὄρνις||ὄρνιθες
|}
{| class="wikitable" style="float:right"
|+ ἡ ἐλπίς — hope
! Singular
! Plural
|-
| ἐλπίς||ἐλπίδες
|-
| ἐλπίδος||ἐλπίδων
|-
| ἐλπίδι||ἐλπίσι(ν)
|-
| ἐλπίδα||ἐλπίδας
|-
| ἐλπί||ἐλπίδες
|}
{| class="wikitable" style="float:right"
|+ ὁ δαίμων — divinity
! Singular
! Plural
|-
| δαίμων||δαίμονες
|-
| δαίμονος||δαιμόνων
|-
| δαίμονι||δαίμοσι(ν)
|-
| δαίμονα||δαίμονας
|-
| δαῖμον||δαίμονες
|}
{| class="wikitable" style="float:right"
|+ ὁ ἄρχων — ruler
! Case
! Singular
! Plural
|-
| Nom.
| ἄρχων||ἄρχοντες
|-
| Gen.
| ἄρχοντος||ἀρχόντων
|-
| Dat.
| ἄρχοντι||ἄρχουσι(ν)
|-
| Acc.
| ἄρχοντα||ἄρχοντας
|-
| Voc.
| ἄρχον||ἄρχοντες
|}
<br clear="all">
==Masculine Nouns==
* παιδ child
* δαιμον divinity, spirit
* ἀρχοντ ruler
The first set of nouns are all MASCULINE in gender. These particular masculine nouns add the following suffixes to their stem to indicate number and case:
{| class="wikitable"
! Case||Singular||Plural
|-
|Nom.||–'''ς'''||–ες
|-
|Gen.||–ος||–ων
|-
|Dat.||–ι||–'''σ'''ι
|-
|Acc.||–α||–ας
|}
===The Trouble with Sigma===
Two case endings add sigma to the stem: nominative singular –ς and dative plural –σι. These nouns have stems ending in a dental consonant: stops –τ, –δ, –θ, or nasal –ν.
When σ follows a dental stop, the dental disappears (δ + σ = σ). When σ follows –ν, the σ sometimes disappears instead (ν + σ = ν), often causing compensatory lengthening of the preceding short vowel. Long vowels and diphthongs cannot be lengthened further.
These sound changes explain the spelling of the three nouns below.
{| class="wikitable"
|+ ὁ παῖς, παιδός child
! Case !! Singular !! Plural
|-
| Nominative || (παιδς→ ) παῖς || παῖδες
|-
| Genitive || παιδός || παίδων
|-
| Dative || παιδί || (παιδσι→ ) παισί
|-
| Accusative || παῖδα || παῖδας
|}
{| class="wikitable"
|+ ὁ δαίμων, δαίμονος divinity
! Case !! Singular !! Plural
|-
| Nominative || (δαιμονς→ ) δαίμων || δαίμονες
|-
| Genitive || δαίμονος || δαιμόνων
|-
| Dative || δαίμονι || (δαιμονσι→ ) δαίμοσι
|-
| Accusative || δαίμονα || δαίμονας
|}
{| class="wikitable"
|+ ὁ ἄρχων, ἄρχοντος ruler
! Case !! Singular !! Plural
|-
| Nominative || (ἀρχοντς→ ) ἄρχων || ἄρχοντες
|-
| Genitive || ἄρχοντος || ἀρχόντων
|-
| Dative || ἄρχοντι || (ἀρχοντσι→ ) ἄρχουσι
|-
| Accusative || ἄρχοντα || ἄρχοντας
|}
===Spell It Like It Sounds!===
Words ending in –σι may add a final –ν (movable nu) for easier pronunciation: εἴκοσί εἰσι → εἴκοσίν εἰσι. Thus, παισί may appear as παισίν, without changing its parsing, meaning, or translation.
===Noun Vocabulary===
Third-declension nouns are listed with the definite article, nominative singular, and genitive singular (e.g., ὁ ἄρχων, ἄρχοντος). The article indicates gender, the nominative singular provides the citation form, and the genitive singular reveals the noun stem, usually by removing –ος (ἄρχοντος → ἀρχοντ-). Memorize all three forms, since the nominative singular may conceal changes to the stem.
===Nouns and the Persistent Accent===
Greek nouns generally use '''persistent accentuation''': the accent tends to remain on the same vowel as the noun is declined, unless accent rules require it to shift or change type. Identify the accented vowel in the nom. sg. (e.g., ἄρχων and ἡγεμών have different accent positions). In masc. and fem. nouns of this pattern, the nom. sg. ending –ς adds no syllable, but other case endings may add syllables, changing the accented vowel’s position relative to the end of the word.
Three general patterns describe accentuation in 3rd-decl. nouns:
====1. When the accent falls on the PENULT of inflected forms…====
It stays there. If the penult is '''long''', the accent is a '''circumflex''' with '''short''' ultima, '''acute''' with '''long''' ultima.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || αἰών || αἰῶνες
|-
| Genitive || αἰῶνος || αἰώνων
|-
| Dative || αἰῶνι || αἰῶσι
|-
| Accusative || αἰῶνα || αἰῶνας
|}
If the penult is '''short''', the accent remains acute throughout all forms.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || ἡγεμών || ἡγεμόνες
|-
| Genitive || ἡγεμόνος || ἡγεμόνων
|-
| Dative || ἡγεμόνι || ἡγεμόσι
|-
| Accusative || ἡγεμόνα || ἡγεμόνας
|}
The rule for accents that fall on the penult is identical to that of verbs with only two syllables!
====2. When the accent is on the antepenult of inflected forms…====
The accent can only be acute on the antepenult. If the '''ultima''' becomes '''long''' (e.g., genitive plural –ων), the accent moves to the '''penult'''.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || ἄρχων || ἄρχοντες
|-
| Genitive || ἄρχοντος || ἀρχόντων
|-
| Dative || ἄρχοντι || ἄρχουσι
|-
| Accusative || ἄρχοντα || ἄρχοντας
|}
Note that the rule for accents that fall on the antepenult is identical to that of verbs with three or more syllables!
====3. When the accent falls on a monosyllabic nominative singular noun…====
The accent usually moves to the '''ultima''' of the genitive and dative cases, singular and plural. In these situations, the accent on the ultima is '''acute''' over short vowels (e.g. –ός), and circumflex over long (e.g. –ῶν). This accent pattern is irregular, and must be memorized.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || πούς || πόδες
|-
| Genitive || ποδός || ποδῶν
|-
| Dative || ποδί || ποσί
|-
| Accusative || πόδα || πόδας
|}
There are a handful of monosyllabic nouns that instead accent the penult of the genitive plural. The most common ones are ὁ, ἡ παῖς, παιδός child (genitive plural = παίδων), declined above, φῶς, φωτός light (genitive plural = φώτων), and οὖς, ὠτός ear (genitive plural = ὤτων).
==Feminine Nouns==
In our last lesson, we learned endings for nouns that were masculine. Now we add nouns that are feminine. For the 3rd declension, feminine nouns use the same case endings as masculine nouns:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || –ς || –ες
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || –α || –ας
|}
===The Trouble with Sigma===
As noted in our discussion of masculine nouns, two of the case endings involve adding a sigma to the stem: nominative singular = –ς, dative plural = –σι. Let us take a look at the sound changes that occur when these sigmas are added to the stems for two feminine nouns:
* ἐλπιδ hope
* νυκτ night
Note that the first stem, ἐλπιδ, ends in a dental (-τ/-δ/-θ). As we know, when a sigma follows a dental, the dental disappears and the sigma remains: e.g., δ + σ = σ. The second stem, νυκτ, ends in –κτ, a stem ending that the Greeks treated as essentially the same as a palatal (-κ/-γ/-χ). Recall that when a sigma follows a palatal, the result is the double consonant ξ: e.g., κ + σ = ξ (S 241).
With these sound changes in mind, note how ἐλπιδ and νυκτ decline:
{| class="wikitable"
|+ ἡ ἐλπίς, ἐλπίδος hope
! Case !! Singular !! Plural
|-
| Nominative || (ἐλπιδς →) ἐλπίς || ἐλπίδες
|-
| Genitive || ἐλπίδος || ἐλπίδων
|-
| Dative || ἐλπίδι || (ἐλπιδσι →) ἐλπίσι
|-
| Accusative || ἐλπίδα || ἐλπίδας
|}
{| class="wikitable"
|+ ἡ νύξ, νυκτός night
! Case !! Singular !! Plural
|-
| Nominative || (νυκτς → νυκς →) νύξ || νύκτες
|-
| Genitive || νυκτός || νυκτῶν
|-
| Dative || νυκτί || (νυκτσι → νυκσι →) νυξί
|-
| Accusative || νύκτα || νύκτας
|}
===The Definite Article===
Most nouns have only one grammatical gender, such as:
ἡ ἐλπίς, ἐλπίδος hope
A handful of nouns referring to people or gods, however, can be either MASCULINE or FEMININE, depending on the gender of the person/divinity. In such instances, the vocabulary entry includes both the masculine and feminine article.
ὁ, ἡ παῖς, παιδός (male or female) child
ὁ, ἡ δαίμων, δαίμονος (male or female) divinity
==Neuter Nouns==
===Neuter Nouns===
All the nouns we have so far discussed have been either masculine or feminine in gender and have used the same endings to indicate number and case. The third and final grammatical gender, NEUTER, has similar endings, though with a few changes.
Neuter nouns of the THIRD DECLENSION add the following case endings to their stem to indicate number and case. Note that there is no ending (!) added in the NOMINATIVE and ACCUSATIVE SINGULAR.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || – || –α
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || – || –α
|}
===Word-Final Sounds===
One of the most common stem endings for NEUTER nouns of the THIRD DECLENSION is –ματ. For example:
σωματ body
ὀνοματ name
Since τ is a dental, the addition of a sigma to the stem (dat. plu. –σι) results in a sigma: τ + σ = σ.
Interestingly, it is a general rule that, unlike English, only a limited number of SOUNDS may END A WORD OF GREEK ORIGIN: a vowel sound, or the consonants –ρ/-ν/-ς (ξ, ψ). If a Greek word ended in any other consonant, that consonant would be dropped (S 133). (The only exceptions to this rule are ἐκ and οὐκ!). Since the neuter adds no ending to the nominative and accusative singular, stems ending in –ματ drop the final –τ, in order to avoid having a word end in this letter (S 258).
As a result, our two nouns decline as follows:
{| class="wikitable"
|+ τὸ σῶμα, σώματος body
! Case !! Singular !! Plural
|-
| Nominative || (σωματ →) σῶμα || σώματα
|-
| Genitive || σώματος || σωμάτων
|-
| Dative || σώματι || (σώματσι →) σώμασι
|-
| Accusative || (σωματ →) σῶμα || σώματα
|}
{| class="wikitable"
|+ τὸ ὄνομα, ὀνόματος name
! Case !! Singular !! Plural
|-
| Nominative || (ὀνοματ →) ὄνομα || ὀνόματα
|-
| Genitive || ὀνόματος || ὀνομάτων
|-
| Dative || ὀνόματι || (ὀνοματσι →) ὀνόμασι
|-
| Accusative || (ὀνοματ →) ὄνομα || ὀνόματα
|}
===The Definite Article===
Remember that when a definite article accompanies a noun, both must parse the same. In other words, they must be the same in gender, number, and case. Note the following examples:
{| class="wikitable"
|+ τὸ σῶμα, σώματος body
! Case !! Singular !! Plural
|-
| Nominative || τὸ σῶμα || τὰ σώματα
|-
| Genitive || τοῦ σώματος || τῶν σωμάτων
|-
| Dative || τῷ σώματι || τοῖς σώμασι
|-
| Accusative || τὸ σῶμα || τὰ σώματα
|}
{| class="wikitable"
|+ τὸ ὄνομα, ὀνόματος name
! Case !! Singular !! Plural
|-
| Nominative || τὸ ὄνομα || τὰ ὀνόματα
|-
| Genitive || τοῦ ὀνόματος || τῶν ὀνομάτων
|-
| Dative || τῷ ὀνόματι || τοῖς ὀνόμασι
|-
| Accusative || τὸ ὄνομα || τὰ ὀνόματα
|}
===The Neuter Laws===
Three rules apply to ALL NEUTER nouns in Greek, regardless of declension.
1. The NOMINATIVE and ACCUSATIVE SINGULAR must be IDENTICAL. This pattern applies to both the neuter noun and its definite article.
2. The NOMINATIVE and ACCUSATIVE PLURAL also must be IDENTICAL, and end in a short –α. This pattern applies to both the neuter noun and its definite article.
3. Whenever any NEUTER noun is the subject of a verb, the verb is regularly 3rd PERSON SINGULAR, even if the neuter subject is plural! The reason seems to be that neuter plurals were originally conceived to be collective nouns (S 958), much as the words army and team are collective nouns in English.
τὸ φῶς δείκνυσι….
The light shows…
τὰ φῶτα δείκνυσι….
The lights show…
==More 3rd Declension Nouns==
We have already learned how to form 3rd Declension nouns. Most of the nouns that we introduced in these lessons have stems ending in –ν (δαιμον-), –δ (ἐλπιδ-), –ντ (ἀρχοντ-) or –κτ (νυκτ-). In other words, these stems end in a NASAL, DENTAL, or PALATAL. In this lesson, we introduce 3rd Declension nouns that have stems ending in –ρ, and –εσ.
Before we look at these new nouns, let us review the 3rd Declension case endings for MASCULINE and FEMININE nouns:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || –ς || –ες
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || –α || –ας
|}
The 3rd Declension case endings for NEUTER nouns are as follows:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || – || –α
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || – || –α
|}
===Stems Ending in –ρ===
Declining most 3rd Declension nouns whose stem ends in –ρ is fairly straightforward. Greek often avoids the combination –ρσ-, usually by dropping the –ς from the NOMINATIVE SINGULAR (μάρτυς –υρος is an exception to this rule).
In the DATIVE PLURAL, the –σι ending is always intact. What happens when the –ρ– encounters the –σι can vary. Many nouns simply allow the full –ρσι– combination. For example, the dative plural of ῥήτωρ, ῥήτορος “orator,” is ῥήτορσι (S 259; GPH p. 11). There are, however, exceptions to this pattern.
μάρτυς –υρος drops the ρ for most Greek authors: μάρτυσι
χείρ, χειρός shortens its stem: χερσί
Note the inflections of the following common nouns, each with their own slight peculiarities:
{| class="wikitable"
|+ μάρτυς -υρος ὁ, ἡ witness
! Case !! Singular !! Plural
|-
| Nominative || ἡ μάρτυς || αἱ μάρτυρες
|-
| Genitive || τῆς μάρτυρος || τῶν μαρτύρων
|-
| Dative || τῇ μάρτυρι || ταῖς μάρτυσι
|-
| Accusative || τὴν μάρτυρα || τὰς μάρτυρας
|}
{| class="wikitable"
|+ χείρ, χειρός ἡ hand
! Case !! Singular !! Plural
|-
| Nominative || ἡ χείρ || αἱ χεῖρες
|-
| Genitive || τῆς χειρός || τῶν χειρῶν
|-
| Dative || τῇ χειρί || ταῖς χερσί
|-
| Accusative || τὴν χεῖρα || τὰς χεῖρας
|}
{| class="wikitable"
|+ πῦρ, πυρός τό fire
! Case !! Singular !! (No plural)
|-
| Nominative || τὸ πῦρ ||
|-
| Genitive || τοῦ πυρός ||
|-
| Dative || τῷ πυρί ||
|-
| Accusative || τὸ πῦρ ||
|}
===Stems Ending in –ερ===
More stem and accent changes occur in noun stems ending in –ερ (S 262). The good news is that the basic case endings do not change. The stem changes, however, do require memorization.
There are four common nouns of this type (S 262; cf. GPH p. 12). As you memorize the inflections for each, note the following patterns for the first three nouns:
* The vowel stem –ερ becomes –ηρ in the nominative singular, due to the loss of a sigma resulting in COMPENSATORY LENGTHENING.
* The vowel stem –ερ becomes simply –ρ in the genitive singular, and dative singular and plural.
* The accent is on the ultima in the genitive and dative singular, on the penult in the accusative singular and all forms of the plural.
* The insertion of an –α– between the ρ– and –σι in the dative plural.
{| class="wikitable"
|+ πατήρ, πατρός ὁ father (stem: πατερ-)
! Case !! Singular !! Plural
|-
| Nominative || ὁ πατήρ || οἱ πατέρες
|-
| Genitive || τοῦ πατρός || τῶν πατέρων
|-
| Dative || τῷ πατρί || τοῖς πατράσι
|-
| Accusative || τὸν πατέρα || τοὺς πατέρας
|}
{| class="wikitable"
|+ μήτηρ, μητρός ἡ mother (stem: μητερ-)
! Case !! Singular !! Plural
|-
| Nominative || ἡ μήτηρ || αἱ μητέρες
|-
| Genitive || τῆς μητρός || τῶν μητέρων
|-
| Dative || τῇ μητρί || ταῖς μητράσι
|-
| Accusative || τὴν μητέρα || τὰς μητέρας
|}
{| class="wikitable"
|+ θυγάτηρ, θυγατρός ἡ daughter (stem: θυγατερ-)
! Case !! Singular !! Plural
|-
| Nominative || ἡ θυγάτηρ || αἱ θυγατέρες
|-
| Genitive || τῆς θυγατρός || τῶν θυγατέρων
|-
| Dative || τῇ θυγατρί || ταῖς θυγατράσι
|-
| Accusative || τὴν θυγατέρα || τὰς θυγατέρας
|}
For the fourth noun, note the following patterns:
* The vowel stem –ερ becomes –ηρ in the nominative singular, due to the loss of a sigma resulting in COMPENSATORY LENGTHENING.
* The vowel stem –ερ became simply –ρ in all oblique cases!
* The resulting forms (e.g. ἀνρός, ἀνρί) gradually developed a sound change that inserted a δ between ν and ρ (S 130). (Likewise, the French word cendre, “ash,” comes from the Latin cinerem!)
* The accent pattern matches the other three –ερ nouns, with the exception of the genitive plural ending: ἀνδρῶν.
{| class="wikitable"
|+ ἀνήρ, ἀνδρός ὁ man (stem: ἀνερ-)
! Case !! Singular !! Plural
|-
| Nominative || ὁ ἀνήρ || οἱ ἄνδρες
|-
| Genitive || τοῦ ἀνδρός || τῶν ἀνδρῶν
|-
| Dative || τῷ ἀνδρί || τοῖς ἀνδράσι
|-
| Accusative || τὸν ἄνδρα || τοὺς ἄνδρας
|}
===Stems Ending in –εσ===
As we saw in our discussion of the ATTIC FUTURE, an INTERVOCALIC SIGMA – i.e., a –σ– found between two vowels – often drops out, and the surrounding vowels contract. This process often occurs in 3rd Declension noun stems ending in –εσ once personal endings are added.
Nouns of this type are usually NEUTER. Masculine and feminine nouns of this type do appear, but they are less frequent or are proper names.
====1. Proper names in –εσ====
The name Socrates, ὁ Σωκράτης, declines as follows (S 264; GPH 13). Note the following patterns:
* In the nominative singular, the loss of a sigma results in COMPENSATORY LENGTHENING, just as we see with the four –ρ stem nouns above.
* Regular and expected contractions occur in the oblique forms once the intervocalic sigma is dropped.
* Finally, in the accusative singular, a ν is added by many, though not all, authors.
{| class="wikitable"
! Case !! Form
|-
| Nominative || (Σωκράτεσς →) Σωκράτης
|-
| Genitive || (Σωκράτεσος → Σωκράτεος →) Σωκράτους
|-
| Dative || (Σωκράτεσι →) Σωκράτει
|-
| Accusative || (Σωκράτεσα → Σωκράτεα →) Σωκράτη(ν)
|}
====2. Neuter nouns in –εσ====
For neuter nouns, recognizable patterns emerge.
* First, in the nominative and accusative singular, the stem –ες becomes –ος. Otherwise, all accent and contraction rules apply normally (S 264; GPH p. 14).
* Second, the accent is usually born on the ANTEPENULT of the uncontracted, inflected forms.
For example:
{| class="wikitable"
|+ ἔτος -ους τό year (stem: ἐτεσ-)
! Case !! Singular !! Plural
|-
| Nominative || (ἔτες →) ἔτος || (ἔτεσα → ἔτεα →) ἔτη
|-
| Genitive || (ἔτεσος → ἔτεος →) ἔτους || (ἐτέσων → ἐτέων →) ἐτῶν
|-
| Dative || (ἔτεσι →) ἔτει || (ἔτεσσι → ) ἔτεσι
|-
| Accusative || (ἔτες →) ἔτος || (ἔτεσα → ἔτεα →) ἔτη
|}
{| class="wikitable"
|+ γένος -ους τό clan, generation; type, class (stem: γένεσ-)
! Case !! Singular !! Plural
|-
| Nominative || (γένες →) γένος || (γένεσα → γένεα →) γένη
|-
| Genitive || (γένεσος → γένεος →) γένους || (γενέσων → γενέων →) γενῶν
|-
| Dative || (γένεσι →) γένει || (γένεσσι → ) γένεσι
|-
| Accusative || (γένες →) γένος || (γένεσα → γένεα →) γένη
|}
===Stems Ending in –ι===
Most nouns preserve this stem vowel only in the NOMINATIVE and ACCUSATIVE SINGULAR. In the other cases and numbers, –ε replaces –ι as the stem vowel (S 268-271). This class of nouns shares a number of other attributes, including:
* These nouns are usually feminine.
* The genitive singular ending lengthens from –ος to –ως.
* Neither the –εως ending of the genitive singular nor the –εων ending of the genitive plural draw the accent off of an antepenult.
* The accusative singular uses –ν (familiar from the definite article) instead of –α.
* The nominative and accusative plural both end in –εες, which contracts to –εις.
As with nouns with –ερ stems, these changes in the noun stem and accent patterns require memorization. The good news is that all the –ι stem nouns in the vocabulary share the inflection pattern of ἡ πόλις, πόλεως city (S 268; GPH p. 15):
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || ἡ πόλις || αἱ πόλεις
|-
| Genitive || τῆς πόλεως || τῶν πόλεων
|-
| Dative || τῇ πόλει || ταῖς πόλεσι
|-
| Accusative || τὴν πόλιν || τὰς πόλεις
|}
The fact that the –εως and –εων endings do not draw the accent off of an antepenult is striking. This peculiarity is the result of changes in the pronunciation of words like πόλις. The earlier form of πόλεως was πόληος. The η and ο switched their vowel lengths over time (η shortened to ε, and ο lengthened to ω!), in a process called TRANSFERENCE OF QUANTITY (S 34). The accent, however, stayed on the antepenult during this process. The accent of the genitive plural gradually switched to the antepenult to match the genitive singular accent.
Transference of quantity is similar to METATHESIS, in which a vowel and consonant can switch places (S 128). English pronunciation has a number of such switches. For example, a vowel can switch places with an “r” in actual pronunciation for many English speakers: iron is often pronounced iern, and prescription pronounced perscription.
===Stems Ending in –υ, –ευ, –αυ, and –ου===
1. As with –ι stem nouns, –υ stem nouns preserve the stem vowel only in the NOMINATIVE and ACCUSATIVE SINGULAR. In the other cases and numbers, –ε replaces –υ as the stem vowel (S 268-271). Many –υ stem nouns share a number of other attributes with –ι stem nouns, including:
* The genitive singular ending lengthens from –ος to –ως.
* Neither the –εως ending of the genitive singular (due to transference of quantity) nor the –εων ending of the genitive plural draw the accent off of an antepenult.
* The accusative singular uses –ν instead of –α.
* The nominative and accusative plural both end in –εες, which contracts to –εις.
Note, for example, the inflection of ὁ πρέσβυς -εως old man:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || ὁ πρέσβυς || οἱ πρέσβεις
|-
| Genitive || τοῦ πρέσβεως || τῶν πρέσβεων
|-
| Dative || τῷ πρέσβει || τοῖς πρέσβεσι
|-
| Accusative || τὸν πρέσβυν || τοὺς πρέσβεις
|}
====2. Kings, Priests, and Horsemen!====
Noun stems ending in –ευ exhibit more irregularities than stems that end in just –υ. The inflection patterns of these nouns must be memorized, though some observations may help. Note the following changes that occur in the inflection of ὁ βασιλεύς -έως “king” (S 275; GPH p. 16):
* The noun stem –ευ drops the –υ before another vowel, leaving just an –ε for its stem vowel.
* The genitive singular ending lengthens from –ος to –ως, due to transference of quantity.
* The accent persists on the stem vowel, –ευ or –ε. Note that for the dative singular, the original form was βασιλέ–ι, the noun stem plus the case ending. These two vowels form a diphthong, and the resulting accent, as expected, forms a circumflex.
* The nominative plural lengthens the –ε to an –η (-έὲς = –ῆς).
* The endings for the accusative singular and plural do not contract (the α of both endings is long).
Not long after the Classical period, the NOMINATIVE and ACCUSATIVE PLURALS of these –ευ nouns change to –εῖς, in parallel with the endings shared by –ι stem nouns and –υ stem nouns such as ὁ πρέσβυς –εως. The rest of the noun inflects as it did in the Classical period.
{| class="wikitable"
|+ βασιλεύς -έως ὁ king (post-Classical forms in parentheses)
! Case !! Singular !! Plural
|-
| Nominative || ὁ βασιλεύς || οἱ βασιλῆς (βασιλεῖς)
|-
| Genitive || τοῦ βασιλέως || τῶν βασιλέων
|-
| Dative || τῷ βασιλεῖ || τοῖς βασιλεῦσι
|-
| Accusative || τὸν βασιλέα || τοὺς βασιλέας (βασιλεῖς)
|}
Also inflected on this pattern are the following two nouns:
* ἱερεύς -έως ὁ priest
* ἱππεύς -έως ὁ horseman, charioteer
====3. Ships!====
The noun ἡ ναῦς, νεώς “ship” is a common word in Greek, as might be expected for a people closely associated with seafaring. The stem for this noun ends in –αυ. Like noun stems ending in –ευ, –αυ nouns exhibit more irregularities than stems that end in just –υ. The inflection pattern of ἡ ναῦς, νεώς must be memorized, though some observations may help (S 275; GPH p. 16).
* The vowel stem –αυ drops the –υ before another vowel, resulting in a vowel stem of either –ε or –η.
* The genitive singular ending lengthens from –ος to –ως, due to transference of quantity.
* The accent pattern follows that of a monosyllabic nouns of the 3rd Declension.
* The accusative singular uses –ν instead of –α.
* The nominative singular and accusative plural are identical in form.
{| class="wikitable"
|+ ναῦς, νεώς ἡ ship
! Case !! Singular !! Plural
|-
| Nominative || ἡ ναῦς || αἱ νῆες
|-
| Genitive || τῆς νεώς || τῶν νεῶν
|-
| Dative || τῇ νηί || ταῖς ναυσί
|-
| Accusative || τὴν ναῦν || τὰς ναῦς
|}
====4. Bulls!====
The noun βοῦς, βοός bull or cow, is also a common word in Greek. These animals were important not only for farming and animal husbandry, but for sacrifices.
The stem for this noun ends in –ου (S 275; GPH p. 17). Like noun stems ending in –ευ and –αυ, –ου nouns exhibit irregularities. The inflection pattern of βοῦς, βοός must be memorized, though some observations may help (S 275-278).
* The vowel stem –ου drops the –υ before another vowel, resulting in a vowel stem of –ο.
* The genitive singular remains –ος. No transference of quantity can occur, since the stem vowel –ο is short.
* The accent pattern follows that of a monosyllabic nouns of the 3rd Declension.
* The genitive singular and nominative plural endings do not contract.
* The accusative singular uses –ν instead of –α.
* The nominative singular and accusative plural are identical in form.
{| class="wikitable"
|+ βοῦς, βοός ὁ bull, ox; ἡ cow
! Case !! Singular !! Plural
|-
| Nominative || ὁ, ἡ βοῦς || οἱ, αἱ βόες
|-
| Genitive || τοῦ, τῆς βοός || τῶν, τῶν βοῶν
|-
| Dative || τῷ, τῇ βοί || τοῖς, ταῖς βουσί
|-
| Accusative || τὸν, τὴν βοῦν || τοὺς, τὰς βοῦς
|}
===Kings, ships, cows, and the digamma===
Early Greek used three additional letters: KOPPA (ϙ), a K sound later retained as the numeral 90; SAMPI (ϡ), a double-S sound retained as 900; and DIGAMMA (ϝ), representing W.
Digamma disappeared from most dialects by the Classical period, affecting words with stems ending in –ευ, –αυ, and –ου. For example, βασιλέως, βασιλεῖ, and βασιλέα derive from earlier βασιλήϝος, βασιλήϝι, and βασιλήϝα. Similarly, νεώς and βοός derive from νηϝός and βοϝός. The loss of digamma and shifts in vowel quantity produced the later forms. Compare Latin ''navis'' and ''bovis'', which preserve W as V. Latin also retained koppa, which gave rise to the English letter Q.
{{BookCat}}
i43bxnbf2qsu5ci2o4k4dvm6u8ugtt5
4676320
4676319
2026-10-16T01:56:06Z
It-is-Truly-Meet
3624460
/* Nouns and the Persistent Accent */
4676320
wikitext
text/x-wiki
==3rd Declension Noun Tables==
{| class="wikitable" style="float:right"
|+ ὁ παῖς — child
!Singular
!Plural
|-
|παῖς||'''παῖδ'''ες
|-
|'''παιδ'''óς||'''παίδ'''ων
|-
|'''παιδ'''ῐ́||παισί
|-
|'''παῖδ'''ᾰ||'''παῖδ'''ᾰς
|-
| παῖ||'''παῖδ'''ες
|}
{| class="wikitable" style="float:right"
|+ ὁ γίγας — giant
! Singular
! Plural
|-
| γίγας||γίγαντες
|-
| γίγαντος||γιγάντων
|-
| γίγαντι||γίγασι(ν)
|-
| γίγαντα||γίγαντας
|-
| γίγαν||γίγαντες
|}
{| class="wikitable" style="float:right"
|+ ὁ θής — hired man
! Singular
! Plural
|-
| θής||θῆτες
|-
| θητός||θητῶν
|-
| θητί||θησί(ν)
|-
| θῆτα||θῆτας
|-
| θής||θῆτες
|}
{| class="wikitable" style="float:right"
|+ ἡ λαμπάς — torch
! Singular
! Plural
|-
| λαμπάς||λαμπάδες
|-
| λαμπάδος||λαμπάδων
|-
| λαμπάδι||λαμπάσι(ν)
|-
| λαμπάδα||λαμπάδας
|-
| λαμπάς||λαμπάδες
|}
{| class="wikitable" style="float:right"
|+ ὁ/ἡ ὄρνις — bird
! Case
! Singular
! Plural
|-
| Nom.
| ὄρνις||ὄρνιθες
|-
| Gen.
| ὄρνιθος||ὀρνίθων
|-
| Dat.
| ὄρνιθι||ὄρνισι(ν)
|-
| Acc.
| ὄρνιν||ὄρνιθας
|-
| Voc.
| ὄρνις||ὄρνιθες
|}
{| class="wikitable" style="float:right"
|+ ἡ ἐλπίς — hope
! Singular
! Plural
|-
| ἐλπίς||ἐλπίδες
|-
| ἐλπίδος||ἐλπίδων
|-
| ἐλπίδι||ἐλπίσι(ν)
|-
| ἐλπίδα||ἐλπίδας
|-
| ἐλπί||ἐλπίδες
|}
{| class="wikitable" style="float:right"
|+ ὁ δαίμων — divinity
! Singular
! Plural
|-
| δαίμων||δαίμονες
|-
| δαίμονος||δαιμόνων
|-
| δαίμονι||δαίμοσι(ν)
|-
| δαίμονα||δαίμονας
|-
| δαῖμον||δαίμονες
|}
{| class="wikitable" style="float:right"
|+ ὁ ἄρχων — ruler
! Case
! Singular
! Plural
|-
| Nom.
| ἄρχων||ἄρχοντες
|-
| Gen.
| ἄρχοντος||ἀρχόντων
|-
| Dat.
| ἄρχοντι||ἄρχουσι(ν)
|-
| Acc.
| ἄρχοντα||ἄρχοντας
|-
| Voc.
| ἄρχον||ἄρχοντες
|}
<br clear="all">
==Masculine Nouns==
* παιδ child
* δαιμον divinity, spirit
* ἀρχοντ ruler
The first set of nouns are all MASCULINE in gender. These particular masculine nouns add the following suffixes to their stem to indicate number and case:
{| class="wikitable"
! Case||Singular||Plural
|-
|Nom.||–'''ς'''||–ες
|-
|Gen.||–ος||–ων
|-
|Dat.||–ι||–'''σ'''ι
|-
|Acc.||–α||–ας
|}
===The Trouble with Sigma===
Two case endings add sigma to the stem: nominative singular –ς and dative plural –σι. These nouns have stems ending in a dental consonant: stops –τ, –δ, –θ, or nasal –ν.
When σ follows a dental stop, the dental disappears (δ + σ = σ). When σ follows –ν, the σ sometimes disappears instead (ν + σ = ν), often causing compensatory lengthening of the preceding short vowel. Long vowels and diphthongs cannot be lengthened further.
These sound changes explain the spelling of the three nouns below.
{| class="wikitable"
|+ ὁ παῖς, παιδός child
! Case !! Singular !! Plural
|-
| Nominative || (παιδς→ ) παῖς || παῖδες
|-
| Genitive || παιδός || παίδων
|-
| Dative || παιδί || (παιδσι→ ) παισί
|-
| Accusative || παῖδα || παῖδας
|}
{| class="wikitable"
|+ ὁ δαίμων, δαίμονος divinity
! Case !! Singular !! Plural
|-
| Nominative || (δαιμονς→ ) δαίμων || δαίμονες
|-
| Genitive || δαίμονος || δαιμόνων
|-
| Dative || δαίμονι || (δαιμονσι→ ) δαίμοσι
|-
| Accusative || δαίμονα || δαίμονας
|}
{| class="wikitable"
|+ ὁ ἄρχων, ἄρχοντος ruler
! Case !! Singular !! Plural
|-
| Nominative || (ἀρχοντς→ ) ἄρχων || ἄρχοντες
|-
| Genitive || ἄρχοντος || ἀρχόντων
|-
| Dative || ἄρχοντι || (ἀρχοντσι→ ) ἄρχουσι
|-
| Accusative || ἄρχοντα || ἄρχοντας
|}
===Spell It Like It Sounds!===
Words ending in –σι may add a final –ν (movable nu) for easier pronunciation: εἴκοσί εἰσι → εἴκοσίν εἰσι. Thus, παισί may appear as παισίν, without changing its parsing, meaning, or translation.
===Noun Vocabulary===
Third-declension nouns are listed with the definite article, nominative singular, and genitive singular (e.g., ὁ ἄρχων, ἄρχοντος). The article indicates gender, the nominative singular provides the citation form, and the genitive singular reveals the noun stem, usually by removing –ος (ἄρχοντος → ἀρχοντ-). Memorize all three forms, since the nominative singular may conceal changes to the stem.
===Nouns and the Persistent Accent===
Greek nouns generally use '''persistent accentuation''': the accent tends to remain on the same vowel as the noun is declined, unless accent rules require it to shift or change type. The accent pattern must be '''learned''' from the nom. sg. (e.g., ἄρχων and ἡγεμών have different accent positions). In masc. and fem. nouns of this pattern, the nom. sg. ending –ς adds no syllable, but other case endings may add syllables, changing the accented vowel’s position relative to the end of the word.
Three general patterns describe accentuation in 3rd-decl. nouns:
====1. When the accent falls on the PENULT of inflected forms…====
It stays there. If the penult is '''long''', the accent is a '''circumflex''' with '''short''' ultima, '''acute''' with '''long''' ultima.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || αἰών || αἰῶνες
|-
| Genitive || αἰῶνος || αἰώνων
|-
| Dative || αἰῶνι || αἰῶσι
|-
| Accusative || αἰῶνα || αἰῶνας
|}
If the penult is '''short''', the accent remains acute throughout all forms.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || ἡγεμών || ἡγεμόνες
|-
| Genitive || ἡγεμόνος || ἡγεμόνων
|-
| Dative || ἡγεμόνι || ἡγεμόσι
|-
| Accusative || ἡγεμόνα || ἡγεμόνας
|}
The rule for accents that fall on the penult is identical to that of verbs with only two syllables!
====2. When the accent is on the antepenult of inflected forms…====
The accent can only be acute on the antepenult. If the '''ultima''' becomes '''long''' (e.g., genitive plural –ων), the accent moves to the '''penult'''.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || ἄρχων || ἄρχοντες
|-
| Genitive || ἄρχοντος || ἀρχόντων
|-
| Dative || ἄρχοντι || ἄρχουσι
|-
| Accusative || ἄρχοντα || ἄρχοντας
|}
Note that the rule for accents that fall on the antepenult is identical to that of verbs with three or more syllables!
====3. When the accent falls on a monosyllabic nominative singular noun…====
The accent usually moves to the '''ultima''' of the genitive and dative cases, singular and plural. In these situations, the accent on the ultima is '''acute''' over short vowels (e.g. –ός), and circumflex over long (e.g. –ῶν). This accent pattern is irregular, and must be memorized.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || πούς || πόδες
|-
| Genitive || ποδός || ποδῶν
|-
| Dative || ποδί || ποσί
|-
| Accusative || πόδα || πόδας
|}
There are a handful of monosyllabic nouns that instead accent the penult of the genitive plural. The most common ones are ὁ, ἡ παῖς, παιδός child (genitive plural = παίδων), declined above, φῶς, φωτός light (genitive plural = φώτων), and οὖς, ὠτός ear (genitive plural = ὤτων).
==Feminine Nouns==
In our last lesson, we learned endings for nouns that were masculine. Now we add nouns that are feminine. For the 3rd declension, feminine nouns use the same case endings as masculine nouns:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || –ς || –ες
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || –α || –ας
|}
===The Trouble with Sigma===
As noted in our discussion of masculine nouns, two of the case endings involve adding a sigma to the stem: nominative singular = –ς, dative plural = –σι. Let us take a look at the sound changes that occur when these sigmas are added to the stems for two feminine nouns:
* ἐλπιδ hope
* νυκτ night
Note that the first stem, ἐλπιδ, ends in a dental (-τ/-δ/-θ). As we know, when a sigma follows a dental, the dental disappears and the sigma remains: e.g., δ + σ = σ. The second stem, νυκτ, ends in –κτ, a stem ending that the Greeks treated as essentially the same as a palatal (-κ/-γ/-χ). Recall that when a sigma follows a palatal, the result is the double consonant ξ: e.g., κ + σ = ξ (S 241).
With these sound changes in mind, note how ἐλπιδ and νυκτ decline:
{| class="wikitable"
|+ ἡ ἐλπίς, ἐλπίδος hope
! Case !! Singular !! Plural
|-
| Nominative || (ἐλπιδς →) ἐλπίς || ἐλπίδες
|-
| Genitive || ἐλπίδος || ἐλπίδων
|-
| Dative || ἐλπίδι || (ἐλπιδσι →) ἐλπίσι
|-
| Accusative || ἐλπίδα || ἐλπίδας
|}
{| class="wikitable"
|+ ἡ νύξ, νυκτός night
! Case !! Singular !! Plural
|-
| Nominative || (νυκτς → νυκς →) νύξ || νύκτες
|-
| Genitive || νυκτός || νυκτῶν
|-
| Dative || νυκτί || (νυκτσι → νυκσι →) νυξί
|-
| Accusative || νύκτα || νύκτας
|}
===The Definite Article===
Most nouns have only one grammatical gender, such as:
ἡ ἐλπίς, ἐλπίδος hope
A handful of nouns referring to people or gods, however, can be either MASCULINE or FEMININE, depending on the gender of the person/divinity. In such instances, the vocabulary entry includes both the masculine and feminine article.
ὁ, ἡ παῖς, παιδός (male or female) child
ὁ, ἡ δαίμων, δαίμονος (male or female) divinity
==Neuter Nouns==
===Neuter Nouns===
All the nouns we have so far discussed have been either masculine or feminine in gender and have used the same endings to indicate number and case. The third and final grammatical gender, NEUTER, has similar endings, though with a few changes.
Neuter nouns of the THIRD DECLENSION add the following case endings to their stem to indicate number and case. Note that there is no ending (!) added in the NOMINATIVE and ACCUSATIVE SINGULAR.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || – || –α
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || – || –α
|}
===Word-Final Sounds===
One of the most common stem endings for NEUTER nouns of the THIRD DECLENSION is –ματ. For example:
σωματ body
ὀνοματ name
Since τ is a dental, the addition of a sigma to the stem (dat. plu. –σι) results in a sigma: τ + σ = σ.
Interestingly, it is a general rule that, unlike English, only a limited number of SOUNDS may END A WORD OF GREEK ORIGIN: a vowel sound, or the consonants –ρ/-ν/-ς (ξ, ψ). If a Greek word ended in any other consonant, that consonant would be dropped (S 133). (The only exceptions to this rule are ἐκ and οὐκ!). Since the neuter adds no ending to the nominative and accusative singular, stems ending in –ματ drop the final –τ, in order to avoid having a word end in this letter (S 258).
As a result, our two nouns decline as follows:
{| class="wikitable"
|+ τὸ σῶμα, σώματος body
! Case !! Singular !! Plural
|-
| Nominative || (σωματ →) σῶμα || σώματα
|-
| Genitive || σώματος || σωμάτων
|-
| Dative || σώματι || (σώματσι →) σώμασι
|-
| Accusative || (σωματ →) σῶμα || σώματα
|}
{| class="wikitable"
|+ τὸ ὄνομα, ὀνόματος name
! Case !! Singular !! Plural
|-
| Nominative || (ὀνοματ →) ὄνομα || ὀνόματα
|-
| Genitive || ὀνόματος || ὀνομάτων
|-
| Dative || ὀνόματι || (ὀνοματσι →) ὀνόμασι
|-
| Accusative || (ὀνοματ →) ὄνομα || ὀνόματα
|}
===The Definite Article===
Remember that when a definite article accompanies a noun, both must parse the same. In other words, they must be the same in gender, number, and case. Note the following examples:
{| class="wikitable"
|+ τὸ σῶμα, σώματος body
! Case !! Singular !! Plural
|-
| Nominative || τὸ σῶμα || τὰ σώματα
|-
| Genitive || τοῦ σώματος || τῶν σωμάτων
|-
| Dative || τῷ σώματι || τοῖς σώμασι
|-
| Accusative || τὸ σῶμα || τὰ σώματα
|}
{| class="wikitable"
|+ τὸ ὄνομα, ὀνόματος name
! Case !! Singular !! Plural
|-
| Nominative || τὸ ὄνομα || τὰ ὀνόματα
|-
| Genitive || τοῦ ὀνόματος || τῶν ὀνομάτων
|-
| Dative || τῷ ὀνόματι || τοῖς ὀνόμασι
|-
| Accusative || τὸ ὄνομα || τὰ ὀνόματα
|}
===The Neuter Laws===
Three rules apply to ALL NEUTER nouns in Greek, regardless of declension.
1. The NOMINATIVE and ACCUSATIVE SINGULAR must be IDENTICAL. This pattern applies to both the neuter noun and its definite article.
2. The NOMINATIVE and ACCUSATIVE PLURAL also must be IDENTICAL, and end in a short –α. This pattern applies to both the neuter noun and its definite article.
3. Whenever any NEUTER noun is the subject of a verb, the verb is regularly 3rd PERSON SINGULAR, even if the neuter subject is plural! The reason seems to be that neuter plurals were originally conceived to be collective nouns (S 958), much as the words army and team are collective nouns in English.
τὸ φῶς δείκνυσι….
The light shows…
τὰ φῶτα δείκνυσι….
The lights show…
==More 3rd Declension Nouns==
We have already learned how to form 3rd Declension nouns. Most of the nouns that we introduced in these lessons have stems ending in –ν (δαιμον-), –δ (ἐλπιδ-), –ντ (ἀρχοντ-) or –κτ (νυκτ-). In other words, these stems end in a NASAL, DENTAL, or PALATAL. In this lesson, we introduce 3rd Declension nouns that have stems ending in –ρ, and –εσ.
Before we look at these new nouns, let us review the 3rd Declension case endings for MASCULINE and FEMININE nouns:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || –ς || –ες
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || –α || –ας
|}
The 3rd Declension case endings for NEUTER nouns are as follows:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || – || –α
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || – || –α
|}
===Stems Ending in –ρ===
Declining most 3rd Declension nouns whose stem ends in –ρ is fairly straightforward. Greek often avoids the combination –ρσ-, usually by dropping the –ς from the NOMINATIVE SINGULAR (μάρτυς –υρος is an exception to this rule).
In the DATIVE PLURAL, the –σι ending is always intact. What happens when the –ρ– encounters the –σι can vary. Many nouns simply allow the full –ρσι– combination. For example, the dative plural of ῥήτωρ, ῥήτορος “orator,” is ῥήτορσι (S 259; GPH p. 11). There are, however, exceptions to this pattern.
μάρτυς –υρος drops the ρ for most Greek authors: μάρτυσι
χείρ, χειρός shortens its stem: χερσί
Note the inflections of the following common nouns, each with their own slight peculiarities:
{| class="wikitable"
|+ μάρτυς -υρος ὁ, ἡ witness
! Case !! Singular !! Plural
|-
| Nominative || ἡ μάρτυς || αἱ μάρτυρες
|-
| Genitive || τῆς μάρτυρος || τῶν μαρτύρων
|-
| Dative || τῇ μάρτυρι || ταῖς μάρτυσι
|-
| Accusative || τὴν μάρτυρα || τὰς μάρτυρας
|}
{| class="wikitable"
|+ χείρ, χειρός ἡ hand
! Case !! Singular !! Plural
|-
| Nominative || ἡ χείρ || αἱ χεῖρες
|-
| Genitive || τῆς χειρός || τῶν χειρῶν
|-
| Dative || τῇ χειρί || ταῖς χερσί
|-
| Accusative || τὴν χεῖρα || τὰς χεῖρας
|}
{| class="wikitable"
|+ πῦρ, πυρός τό fire
! Case !! Singular !! (No plural)
|-
| Nominative || τὸ πῦρ ||
|-
| Genitive || τοῦ πυρός ||
|-
| Dative || τῷ πυρί ||
|-
| Accusative || τὸ πῦρ ||
|}
===Stems Ending in –ερ===
More stem and accent changes occur in noun stems ending in –ερ (S 262). The good news is that the basic case endings do not change. The stem changes, however, do require memorization.
There are four common nouns of this type (S 262; cf. GPH p. 12). As you memorize the inflections for each, note the following patterns for the first three nouns:
* The vowel stem –ερ becomes –ηρ in the nominative singular, due to the loss of a sigma resulting in COMPENSATORY LENGTHENING.
* The vowel stem –ερ becomes simply –ρ in the genitive singular, and dative singular and plural.
* The accent is on the ultima in the genitive and dative singular, on the penult in the accusative singular and all forms of the plural.
* The insertion of an –α– between the ρ– and –σι in the dative plural.
{| class="wikitable"
|+ πατήρ, πατρός ὁ father (stem: πατερ-)
! Case !! Singular !! Plural
|-
| Nominative || ὁ πατήρ || οἱ πατέρες
|-
| Genitive || τοῦ πατρός || τῶν πατέρων
|-
| Dative || τῷ πατρί || τοῖς πατράσι
|-
| Accusative || τὸν πατέρα || τοὺς πατέρας
|}
{| class="wikitable"
|+ μήτηρ, μητρός ἡ mother (stem: μητερ-)
! Case !! Singular !! Plural
|-
| Nominative || ἡ μήτηρ || αἱ μητέρες
|-
| Genitive || τῆς μητρός || τῶν μητέρων
|-
| Dative || τῇ μητρί || ταῖς μητράσι
|-
| Accusative || τὴν μητέρα || τὰς μητέρας
|}
{| class="wikitable"
|+ θυγάτηρ, θυγατρός ἡ daughter (stem: θυγατερ-)
! Case !! Singular !! Plural
|-
| Nominative || ἡ θυγάτηρ || αἱ θυγατέρες
|-
| Genitive || τῆς θυγατρός || τῶν θυγατέρων
|-
| Dative || τῇ θυγατρί || ταῖς θυγατράσι
|-
| Accusative || τὴν θυγατέρα || τὰς θυγατέρας
|}
For the fourth noun, note the following patterns:
* The vowel stem –ερ becomes –ηρ in the nominative singular, due to the loss of a sigma resulting in COMPENSATORY LENGTHENING.
* The vowel stem –ερ became simply –ρ in all oblique cases!
* The resulting forms (e.g. ἀνρός, ἀνρί) gradually developed a sound change that inserted a δ between ν and ρ (S 130). (Likewise, the French word cendre, “ash,” comes from the Latin cinerem!)
* The accent pattern matches the other three –ερ nouns, with the exception of the genitive plural ending: ἀνδρῶν.
{| class="wikitable"
|+ ἀνήρ, ἀνδρός ὁ man (stem: ἀνερ-)
! Case !! Singular !! Plural
|-
| Nominative || ὁ ἀνήρ || οἱ ἄνδρες
|-
| Genitive || τοῦ ἀνδρός || τῶν ἀνδρῶν
|-
| Dative || τῷ ἀνδρί || τοῖς ἀνδράσι
|-
| Accusative || τὸν ἄνδρα || τοὺς ἄνδρας
|}
===Stems Ending in –εσ===
As we saw in our discussion of the ATTIC FUTURE, an INTERVOCALIC SIGMA – i.e., a –σ– found between two vowels – often drops out, and the surrounding vowels contract. This process often occurs in 3rd Declension noun stems ending in –εσ once personal endings are added.
Nouns of this type are usually NEUTER. Masculine and feminine nouns of this type do appear, but they are less frequent or are proper names.
====1. Proper names in –εσ====
The name Socrates, ὁ Σωκράτης, declines as follows (S 264; GPH 13). Note the following patterns:
* In the nominative singular, the loss of a sigma results in COMPENSATORY LENGTHENING, just as we see with the four –ρ stem nouns above.
* Regular and expected contractions occur in the oblique forms once the intervocalic sigma is dropped.
* Finally, in the accusative singular, a ν is added by many, though not all, authors.
{| class="wikitable"
! Case !! Form
|-
| Nominative || (Σωκράτεσς →) Σωκράτης
|-
| Genitive || (Σωκράτεσος → Σωκράτεος →) Σωκράτους
|-
| Dative || (Σωκράτεσι →) Σωκράτει
|-
| Accusative || (Σωκράτεσα → Σωκράτεα →) Σωκράτη(ν)
|}
====2. Neuter nouns in –εσ====
For neuter nouns, recognizable patterns emerge.
* First, in the nominative and accusative singular, the stem –ες becomes –ος. Otherwise, all accent and contraction rules apply normally (S 264; GPH p. 14).
* Second, the accent is usually born on the ANTEPENULT of the uncontracted, inflected forms.
For example:
{| class="wikitable"
|+ ἔτος -ους τό year (stem: ἐτεσ-)
! Case !! Singular !! Plural
|-
| Nominative || (ἔτες →) ἔτος || (ἔτεσα → ἔτεα →) ἔτη
|-
| Genitive || (ἔτεσος → ἔτεος →) ἔτους || (ἐτέσων → ἐτέων →) ἐτῶν
|-
| Dative || (ἔτεσι →) ἔτει || (ἔτεσσι → ) ἔτεσι
|-
| Accusative || (ἔτες →) ἔτος || (ἔτεσα → ἔτεα →) ἔτη
|}
{| class="wikitable"
|+ γένος -ους τό clan, generation; type, class (stem: γένεσ-)
! Case !! Singular !! Plural
|-
| Nominative || (γένες →) γένος || (γένεσα → γένεα →) γένη
|-
| Genitive || (γένεσος → γένεος →) γένους || (γενέσων → γενέων →) γενῶν
|-
| Dative || (γένεσι →) γένει || (γένεσσι → ) γένεσι
|-
| Accusative || (γένες →) γένος || (γένεσα → γένεα →) γένη
|}
===Stems Ending in –ι===
Most nouns preserve this stem vowel only in the NOMINATIVE and ACCUSATIVE SINGULAR. In the other cases and numbers, –ε replaces –ι as the stem vowel (S 268-271). This class of nouns shares a number of other attributes, including:
* These nouns are usually feminine.
* The genitive singular ending lengthens from –ος to –ως.
* Neither the –εως ending of the genitive singular nor the –εων ending of the genitive plural draw the accent off of an antepenult.
* The accusative singular uses –ν (familiar from the definite article) instead of –α.
* The nominative and accusative plural both end in –εες, which contracts to –εις.
As with nouns with –ερ stems, these changes in the noun stem and accent patterns require memorization. The good news is that all the –ι stem nouns in the vocabulary share the inflection pattern of ἡ πόλις, πόλεως city (S 268; GPH p. 15):
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || ἡ πόλις || αἱ πόλεις
|-
| Genitive || τῆς πόλεως || τῶν πόλεων
|-
| Dative || τῇ πόλει || ταῖς πόλεσι
|-
| Accusative || τὴν πόλιν || τὰς πόλεις
|}
The fact that the –εως and –εων endings do not draw the accent off of an antepenult is striking. This peculiarity is the result of changes in the pronunciation of words like πόλις. The earlier form of πόλεως was πόληος. The η and ο switched their vowel lengths over time (η shortened to ε, and ο lengthened to ω!), in a process called TRANSFERENCE OF QUANTITY (S 34). The accent, however, stayed on the antepenult during this process. The accent of the genitive plural gradually switched to the antepenult to match the genitive singular accent.
Transference of quantity is similar to METATHESIS, in which a vowel and consonant can switch places (S 128). English pronunciation has a number of such switches. For example, a vowel can switch places with an “r” in actual pronunciation for many English speakers: iron is often pronounced iern, and prescription pronounced perscription.
===Stems Ending in –υ, –ευ, –αυ, and –ου===
1. As with –ι stem nouns, –υ stem nouns preserve the stem vowel only in the NOMINATIVE and ACCUSATIVE SINGULAR. In the other cases and numbers, –ε replaces –υ as the stem vowel (S 268-271). Many –υ stem nouns share a number of other attributes with –ι stem nouns, including:
* The genitive singular ending lengthens from –ος to –ως.
* Neither the –εως ending of the genitive singular (due to transference of quantity) nor the –εων ending of the genitive plural draw the accent off of an antepenult.
* The accusative singular uses –ν instead of –α.
* The nominative and accusative plural both end in –εες, which contracts to –εις.
Note, for example, the inflection of ὁ πρέσβυς -εως old man:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || ὁ πρέσβυς || οἱ πρέσβεις
|-
| Genitive || τοῦ πρέσβεως || τῶν πρέσβεων
|-
| Dative || τῷ πρέσβει || τοῖς πρέσβεσι
|-
| Accusative || τὸν πρέσβυν || τοὺς πρέσβεις
|}
====2. Kings, Priests, and Horsemen!====
Noun stems ending in –ευ exhibit more irregularities than stems that end in just –υ. The inflection patterns of these nouns must be memorized, though some observations may help. Note the following changes that occur in the inflection of ὁ βασιλεύς -έως “king” (S 275; GPH p. 16):
* The noun stem –ευ drops the –υ before another vowel, leaving just an –ε for its stem vowel.
* The genitive singular ending lengthens from –ος to –ως, due to transference of quantity.
* The accent persists on the stem vowel, –ευ or –ε. Note that for the dative singular, the original form was βασιλέ–ι, the noun stem plus the case ending. These two vowels form a diphthong, and the resulting accent, as expected, forms a circumflex.
* The nominative plural lengthens the –ε to an –η (-έὲς = –ῆς).
* The endings for the accusative singular and plural do not contract (the α of both endings is long).
Not long after the Classical period, the NOMINATIVE and ACCUSATIVE PLURALS of these –ευ nouns change to –εῖς, in parallel with the endings shared by –ι stem nouns and –υ stem nouns such as ὁ πρέσβυς –εως. The rest of the noun inflects as it did in the Classical period.
{| class="wikitable"
|+ βασιλεύς -έως ὁ king (post-Classical forms in parentheses)
! Case !! Singular !! Plural
|-
| Nominative || ὁ βασιλεύς || οἱ βασιλῆς (βασιλεῖς)
|-
| Genitive || τοῦ βασιλέως || τῶν βασιλέων
|-
| Dative || τῷ βασιλεῖ || τοῖς βασιλεῦσι
|-
| Accusative || τὸν βασιλέα || τοὺς βασιλέας (βασιλεῖς)
|}
Also inflected on this pattern are the following two nouns:
* ἱερεύς -έως ὁ priest
* ἱππεύς -έως ὁ horseman, charioteer
====3. Ships!====
The noun ἡ ναῦς, νεώς “ship” is a common word in Greek, as might be expected for a people closely associated with seafaring. The stem for this noun ends in –αυ. Like noun stems ending in –ευ, –αυ nouns exhibit more irregularities than stems that end in just –υ. The inflection pattern of ἡ ναῦς, νεώς must be memorized, though some observations may help (S 275; GPH p. 16).
* The vowel stem –αυ drops the –υ before another vowel, resulting in a vowel stem of either –ε or –η.
* The genitive singular ending lengthens from –ος to –ως, due to transference of quantity.
* The accent pattern follows that of a monosyllabic nouns of the 3rd Declension.
* The accusative singular uses –ν instead of –α.
* The nominative singular and accusative plural are identical in form.
{| class="wikitable"
|+ ναῦς, νεώς ἡ ship
! Case !! Singular !! Plural
|-
| Nominative || ἡ ναῦς || αἱ νῆες
|-
| Genitive || τῆς νεώς || τῶν νεῶν
|-
| Dative || τῇ νηί || ταῖς ναυσί
|-
| Accusative || τὴν ναῦν || τὰς ναῦς
|}
====4. Bulls!====
The noun βοῦς, βοός bull or cow, is also a common word in Greek. These animals were important not only for farming and animal husbandry, but for sacrifices.
The stem for this noun ends in –ου (S 275; GPH p. 17). Like noun stems ending in –ευ and –αυ, –ου nouns exhibit irregularities. The inflection pattern of βοῦς, βοός must be memorized, though some observations may help (S 275-278).
* The vowel stem –ου drops the –υ before another vowel, resulting in a vowel stem of –ο.
* The genitive singular remains –ος. No transference of quantity can occur, since the stem vowel –ο is short.
* The accent pattern follows that of a monosyllabic nouns of the 3rd Declension.
* The genitive singular and nominative plural endings do not contract.
* The accusative singular uses –ν instead of –α.
* The nominative singular and accusative plural are identical in form.
{| class="wikitable"
|+ βοῦς, βοός ὁ bull, ox; ἡ cow
! Case !! Singular !! Plural
|-
| Nominative || ὁ, ἡ βοῦς || οἱ, αἱ βόες
|-
| Genitive || τοῦ, τῆς βοός || τῶν, τῶν βοῶν
|-
| Dative || τῷ, τῇ βοί || τοῖς, ταῖς βουσί
|-
| Accusative || τὸν, τὴν βοῦν || τοὺς, τὰς βοῦς
|}
===Kings, ships, cows, and the digamma===
Early Greek used three additional letters: KOPPA (ϙ), a K sound later retained as the numeral 90; SAMPI (ϡ), a double-S sound retained as 900; and DIGAMMA (ϝ), representing W.
Digamma disappeared from most dialects by the Classical period, affecting words with stems ending in –ευ, –αυ, and –ου. For example, βασιλέως, βασιλεῖ, and βασιλέα derive from earlier βασιλήϝος, βασιλήϝι, and βασιλήϝα. Similarly, νεώς and βοός derive from νηϝός and βοϝός. The loss of digamma and shifts in vowel quantity produced the later forms. Compare Latin ''navis'' and ''bovis'', which preserve W as V. Latin also retained koppa, which gave rise to the English letter Q.
{{BookCat}}
m3yafvvgajjoohn6mhlh0pj3edg1u7b
4676321
4676320
2026-10-16T02:08:46Z
It-is-Truly-Meet
3624460
/* Noun Vocabulary */ Abbreviations were made for directness.
4676321
wikitext
text/x-wiki
==3rd Declension Noun Tables==
{| class="wikitable" style="float:right"
|+ ὁ παῖς — child
!Singular
!Plural
|-
|παῖς||'''παῖδ'''ες
|-
|'''παιδ'''óς||'''παίδ'''ων
|-
|'''παιδ'''ῐ́||παισί
|-
|'''παῖδ'''ᾰ||'''παῖδ'''ᾰς
|-
| παῖ||'''παῖδ'''ες
|}
{| class="wikitable" style="float:right"
|+ ὁ γίγας — giant
! Singular
! Plural
|-
| γίγας||γίγαντες
|-
| γίγαντος||γιγάντων
|-
| γίγαντι||γίγασι(ν)
|-
| γίγαντα||γίγαντας
|-
| γίγαν||γίγαντες
|}
{| class="wikitable" style="float:right"
|+ ὁ θής — hired man
! Singular
! Plural
|-
| θής||θῆτες
|-
| θητός||θητῶν
|-
| θητί||θησί(ν)
|-
| θῆτα||θῆτας
|-
| θής||θῆτες
|}
{| class="wikitable" style="float:right"
|+ ἡ λαμπάς — torch
! Singular
! Plural
|-
| λαμπάς||λαμπάδες
|-
| λαμπάδος||λαμπάδων
|-
| λαμπάδι||λαμπάσι(ν)
|-
| λαμπάδα||λαμπάδας
|-
| λαμπάς||λαμπάδες
|}
{| class="wikitable" style="float:right"
|+ ὁ/ἡ ὄρνις — bird
! Case
! Singular
! Plural
|-
| Nom.
| ὄρνις||ὄρνιθες
|-
| Gen.
| ὄρνιθος||ὀρνίθων
|-
| Dat.
| ὄρνιθι||ὄρνισι(ν)
|-
| Acc.
| ὄρνιν||ὄρνιθας
|-
| Voc.
| ὄρνις||ὄρνιθες
|}
{| class="wikitable" style="float:right"
|+ ἡ ἐλπίς — hope
! Singular
! Plural
|-
| ἐλπίς||ἐλπίδες
|-
| ἐλπίδος||ἐλπίδων
|-
| ἐλπίδι||ἐλπίσι(ν)
|-
| ἐλπίδα||ἐλπίδας
|-
| ἐλπί||ἐλπίδες
|}
{| class="wikitable" style="float:right"
|+ ὁ δαίμων — divinity
! Singular
! Plural
|-
| δαίμων||δαίμονες
|-
| δαίμονος||δαιμόνων
|-
| δαίμονι||δαίμοσι(ν)
|-
| δαίμονα||δαίμονας
|-
| δαῖμον||δαίμονες
|}
{| class="wikitable" style="float:right"
|+ ὁ ἄρχων — ruler
! Case
! Singular
! Plural
|-
| Nom.
| ἄρχων||ἄρχοντες
|-
| Gen.
| ἄρχοντος||ἀρχόντων
|-
| Dat.
| ἄρχοντι||ἄρχουσι(ν)
|-
| Acc.
| ἄρχοντα||ἄρχοντας
|-
| Voc.
| ἄρχον||ἄρχοντες
|}
<br clear="all">
==Masculine Nouns==
* παιδ child
* δαιμον divinity, spirit
* ἀρχοντ ruler
The first set of nouns are all MASCULINE in gender. These particular masculine nouns add the following suffixes to their stem to indicate number and case:
{| class="wikitable"
! Case||Singular||Plural
|-
|Nom.||–'''ς'''||–ες
|-
|Gen.||–ος||–ων
|-
|Dat.||–ι||–'''σ'''ι
|-
|Acc.||–α||–ας
|}
===The Trouble with Sigma===
Two case endings add sigma to the stem: nominative singular –ς and dative plural –σι. These nouns have stems ending in a dental consonant: stops –τ, –δ, –θ, or nasal –ν.
When σ follows a dental stop, the dental disappears (δ + σ = σ). When σ follows –ν, the σ sometimes disappears instead (ν + σ = ν), often causing compensatory lengthening of the preceding short vowel. Long vowels and diphthongs cannot be lengthened further.
These sound changes explain the spelling of the three nouns below.
{| class="wikitable"
|+ ὁ παῖς, παιδός child
! Case !! Singular !! Plural
|-
| Nominative || (παιδς→ ) παῖς || παῖδες
|-
| Genitive || παιδός || παίδων
|-
| Dative || παιδί || (παιδσι→ ) παισί
|-
| Accusative || παῖδα || παῖδας
|}
{| class="wikitable"
|+ ὁ δαίμων, δαίμονος divinity
! Case !! Singular !! Plural
|-
| Nominative || (δαιμονς→ ) δαίμων || δαίμονες
|-
| Genitive || δαίμονος || δαιμόνων
|-
| Dative || δαίμονι || (δαιμονσι→ ) δαίμοσι
|-
| Accusative || δαίμονα || δαίμονας
|}
{| class="wikitable"
|+ ὁ ἄρχων, ἄρχοντος ruler
! Case !! Singular !! Plural
|-
| Nominative || (ἀρχοντς→ ) ἄρχων || ἄρχοντες
|-
| Genitive || ἄρχοντος || ἀρχόντων
|-
| Dative || ἄρχοντι || (ἀρχοντσι→ ) ἄρχουσι
|-
| Accusative || ἄρχοντα || ἄρχοντας
|}
===Spell It Like It Sounds!===
Words ending in –σι may add a final –ν (movable nu) for easier pronunciation: εἴκοσί εἰσι → εἴκοσίν εἰσι. Thus, παισί may appear as παισίν, without changing its parsing, meaning, or translation.
===Noun Vocabulary===
3rd-decl. nouns are listed with the definite article, nominative singular, and genitive singular (e.g., ὁ ἄρχων, ἄρχοντος). The article indicates gender, the nom. sg. provides the citation form, and the gen. sg. reveals the noun stem, usually by removing –ος (ἄρχοντος → ἀρχοντ-). Memorize all three forms, since the nom. sg. may conceal changes to the stem.
===Nouns and the Persistent Accent===
Greek nouns generally use '''persistent accentuation''': the accent tends to remain on the same vowel as the noun is declined, unless accent rules require it to shift or change type. The accent pattern must be '''learned''' from the nom. sg. (e.g., ἄρχων and ἡγεμών have different accent positions). In masc. and fem. nouns of this pattern, the nom. sg. ending –ς adds no syllable, but other case endings may add syllables, changing the accented vowel’s position relative to the end of the word.
Three general patterns describe accentuation in 3rd-decl. nouns:
====1. When the accent falls on the PENULT of inflected forms…====
It stays there. If the penult is '''long''', the accent is a '''circumflex''' with '''short''' ultima, '''acute''' with '''long''' ultima.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || αἰών || αἰῶνες
|-
| Genitive || αἰῶνος || αἰώνων
|-
| Dative || αἰῶνι || αἰῶσι
|-
| Accusative || αἰῶνα || αἰῶνας
|}
If the penult is '''short''', the accent remains acute throughout all forms.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || ἡγεμών || ἡγεμόνες
|-
| Genitive || ἡγεμόνος || ἡγεμόνων
|-
| Dative || ἡγεμόνι || ἡγεμόσι
|-
| Accusative || ἡγεμόνα || ἡγεμόνας
|}
The rule for accents that fall on the penult is identical to that of verbs with only two syllables!
====2. When the accent is on the antepenult of inflected forms…====
The accent can only be acute on the antepenult. If the '''ultima''' becomes '''long''' (e.g., genitive plural –ων), the accent moves to the '''penult'''.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || ἄρχων || ἄρχοντες
|-
| Genitive || ἄρχοντος || ἀρχόντων
|-
| Dative || ἄρχοντι || ἄρχουσι
|-
| Accusative || ἄρχοντα || ἄρχοντας
|}
Note that the rule for accents that fall on the antepenult is identical to that of verbs with three or more syllables!
====3. When the accent falls on a monosyllabic nominative singular noun…====
The accent usually moves to the '''ultima''' of the genitive and dative cases, singular and plural. In these situations, the accent on the ultima is '''acute''' over short vowels (e.g. –ός), and circumflex over long (e.g. –ῶν). This accent pattern is irregular, and must be memorized.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || πούς || πόδες
|-
| Genitive || ποδός || ποδῶν
|-
| Dative || ποδί || ποσί
|-
| Accusative || πόδα || πόδας
|}
There are a handful of monosyllabic nouns that instead accent the penult of the genitive plural. The most common ones are ὁ, ἡ παῖς, παιδός child (genitive plural = παίδων), declined above, φῶς, φωτός light (genitive plural = φώτων), and οὖς, ὠτός ear (genitive plural = ὤτων).
==Feminine Nouns==
In our last lesson, we learned endings for nouns that were masculine. Now we add nouns that are feminine. For the 3rd declension, feminine nouns use the same case endings as masculine nouns:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || –ς || –ες
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || –α || –ας
|}
===The Trouble with Sigma===
As noted in our discussion of masculine nouns, two of the case endings involve adding a sigma to the stem: nominative singular = –ς, dative plural = –σι. Let us take a look at the sound changes that occur when these sigmas are added to the stems for two feminine nouns:
* ἐλπιδ hope
* νυκτ night
Note that the first stem, ἐλπιδ, ends in a dental (-τ/-δ/-θ). As we know, when a sigma follows a dental, the dental disappears and the sigma remains: e.g., δ + σ = σ. The second stem, νυκτ, ends in –κτ, a stem ending that the Greeks treated as essentially the same as a palatal (-κ/-γ/-χ). Recall that when a sigma follows a palatal, the result is the double consonant ξ: e.g., κ + σ = ξ (S 241).
With these sound changes in mind, note how ἐλπιδ and νυκτ decline:
{| class="wikitable"
|+ ἡ ἐλπίς, ἐλπίδος hope
! Case !! Singular !! Plural
|-
| Nominative || (ἐλπιδς →) ἐλπίς || ἐλπίδες
|-
| Genitive || ἐλπίδος || ἐλπίδων
|-
| Dative || ἐλπίδι || (ἐλπιδσι →) ἐλπίσι
|-
| Accusative || ἐλπίδα || ἐλπίδας
|}
{| class="wikitable"
|+ ἡ νύξ, νυκτός night
! Case !! Singular !! Plural
|-
| Nominative || (νυκτς → νυκς →) νύξ || νύκτες
|-
| Genitive || νυκτός || νυκτῶν
|-
| Dative || νυκτί || (νυκτσι → νυκσι →) νυξί
|-
| Accusative || νύκτα || νύκτας
|}
===The Definite Article===
Most nouns have only one grammatical gender, such as:
ἡ ἐλπίς, ἐλπίδος hope
A handful of nouns referring to people or gods, however, can be either MASCULINE or FEMININE, depending on the gender of the person/divinity. In such instances, the vocabulary entry includes both the masculine and feminine article.
ὁ, ἡ παῖς, παιδός (male or female) child
ὁ, ἡ δαίμων, δαίμονος (male or female) divinity
==Neuter Nouns==
===Neuter Nouns===
All the nouns we have so far discussed have been either masculine or feminine in gender and have used the same endings to indicate number and case. The third and final grammatical gender, NEUTER, has similar endings, though with a few changes.
Neuter nouns of the THIRD DECLENSION add the following case endings to their stem to indicate number and case. Note that there is no ending (!) added in the NOMINATIVE and ACCUSATIVE SINGULAR.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || – || –α
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || – || –α
|}
===Word-Final Sounds===
One of the most common stem endings for NEUTER nouns of the THIRD DECLENSION is –ματ. For example:
σωματ body
ὀνοματ name
Since τ is a dental, the addition of a sigma to the stem (dat. plu. –σι) results in a sigma: τ + σ = σ.
Interestingly, it is a general rule that, unlike English, only a limited number of SOUNDS may END A WORD OF GREEK ORIGIN: a vowel sound, or the consonants –ρ/-ν/-ς (ξ, ψ). If a Greek word ended in any other consonant, that consonant would be dropped (S 133). (The only exceptions to this rule are ἐκ and οὐκ!). Since the neuter adds no ending to the nominative and accusative singular, stems ending in –ματ drop the final –τ, in order to avoid having a word end in this letter (S 258).
As a result, our two nouns decline as follows:
{| class="wikitable"
|+ τὸ σῶμα, σώματος body
! Case !! Singular !! Plural
|-
| Nominative || (σωματ →) σῶμα || σώματα
|-
| Genitive || σώματος || σωμάτων
|-
| Dative || σώματι || (σώματσι →) σώμασι
|-
| Accusative || (σωματ →) σῶμα || σώματα
|}
{| class="wikitable"
|+ τὸ ὄνομα, ὀνόματος name
! Case !! Singular !! Plural
|-
| Nominative || (ὀνοματ →) ὄνομα || ὀνόματα
|-
| Genitive || ὀνόματος || ὀνομάτων
|-
| Dative || ὀνόματι || (ὀνοματσι →) ὀνόμασι
|-
| Accusative || (ὀνοματ →) ὄνομα || ὀνόματα
|}
===The Definite Article===
Remember that when a definite article accompanies a noun, both must parse the same. In other words, they must be the same in gender, number, and case. Note the following examples:
{| class="wikitable"
|+ τὸ σῶμα, σώματος body
! Case !! Singular !! Plural
|-
| Nominative || τὸ σῶμα || τὰ σώματα
|-
| Genitive || τοῦ σώματος || τῶν σωμάτων
|-
| Dative || τῷ σώματι || τοῖς σώμασι
|-
| Accusative || τὸ σῶμα || τὰ σώματα
|}
{| class="wikitable"
|+ τὸ ὄνομα, ὀνόματος name
! Case !! Singular !! Plural
|-
| Nominative || τὸ ὄνομα || τὰ ὀνόματα
|-
| Genitive || τοῦ ὀνόματος || τῶν ὀνομάτων
|-
| Dative || τῷ ὀνόματι || τοῖς ὀνόμασι
|-
| Accusative || τὸ ὄνομα || τὰ ὀνόματα
|}
===The Neuter Laws===
Three rules apply to ALL NEUTER nouns in Greek, regardless of declension.
1. The NOMINATIVE and ACCUSATIVE SINGULAR must be IDENTICAL. This pattern applies to both the neuter noun and its definite article.
2. The NOMINATIVE and ACCUSATIVE PLURAL also must be IDENTICAL, and end in a short –α. This pattern applies to both the neuter noun and its definite article.
3. Whenever any NEUTER noun is the subject of a verb, the verb is regularly 3rd PERSON SINGULAR, even if the neuter subject is plural! The reason seems to be that neuter plurals were originally conceived to be collective nouns (S 958), much as the words army and team are collective nouns in English.
τὸ φῶς δείκνυσι….
The light shows…
τὰ φῶτα δείκνυσι….
The lights show…
==More 3rd Declension Nouns==
We have already learned how to form 3rd Declension nouns. Most of the nouns that we introduced in these lessons have stems ending in –ν (δαιμον-), –δ (ἐλπιδ-), –ντ (ἀρχοντ-) or –κτ (νυκτ-). In other words, these stems end in a NASAL, DENTAL, or PALATAL. In this lesson, we introduce 3rd Declension nouns that have stems ending in –ρ, and –εσ.
Before we look at these new nouns, let us review the 3rd Declension case endings for MASCULINE and FEMININE nouns:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || –ς || –ες
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || –α || –ας
|}
The 3rd Declension case endings for NEUTER nouns are as follows:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || – || –α
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || – || –α
|}
===Stems Ending in –ρ===
Declining most 3rd Declension nouns whose stem ends in –ρ is fairly straightforward. Greek often avoids the combination –ρσ-, usually by dropping the –ς from the NOMINATIVE SINGULAR (μάρτυς –υρος is an exception to this rule).
In the DATIVE PLURAL, the –σι ending is always intact. What happens when the –ρ– encounters the –σι can vary. Many nouns simply allow the full –ρσι– combination. For example, the dative plural of ῥήτωρ, ῥήτορος “orator,” is ῥήτορσι (S 259; GPH p. 11). There are, however, exceptions to this pattern.
μάρτυς –υρος drops the ρ for most Greek authors: μάρτυσι
χείρ, χειρός shortens its stem: χερσί
Note the inflections of the following common nouns, each with their own slight peculiarities:
{| class="wikitable"
|+ μάρτυς -υρος ὁ, ἡ witness
! Case !! Singular !! Plural
|-
| Nominative || ἡ μάρτυς || αἱ μάρτυρες
|-
| Genitive || τῆς μάρτυρος || τῶν μαρτύρων
|-
| Dative || τῇ μάρτυρι || ταῖς μάρτυσι
|-
| Accusative || τὴν μάρτυρα || τὰς μάρτυρας
|}
{| class="wikitable"
|+ χείρ, χειρός ἡ hand
! Case !! Singular !! Plural
|-
| Nominative || ἡ χείρ || αἱ χεῖρες
|-
| Genitive || τῆς χειρός || τῶν χειρῶν
|-
| Dative || τῇ χειρί || ταῖς χερσί
|-
| Accusative || τὴν χεῖρα || τὰς χεῖρας
|}
{| class="wikitable"
|+ πῦρ, πυρός τό fire
! Case !! Singular !! (No plural)
|-
| Nominative || τὸ πῦρ ||
|-
| Genitive || τοῦ πυρός ||
|-
| Dative || τῷ πυρί ||
|-
| Accusative || τὸ πῦρ ||
|}
===Stems Ending in –ερ===
More stem and accent changes occur in noun stems ending in –ερ (S 262). The good news is that the basic case endings do not change. The stem changes, however, do require memorization.
There are four common nouns of this type (S 262; cf. GPH p. 12). As you memorize the inflections for each, note the following patterns for the first three nouns:
* The vowel stem –ερ becomes –ηρ in the nominative singular, due to the loss of a sigma resulting in COMPENSATORY LENGTHENING.
* The vowel stem –ερ becomes simply –ρ in the genitive singular, and dative singular and plural.
* The accent is on the ultima in the genitive and dative singular, on the penult in the accusative singular and all forms of the plural.
* The insertion of an –α– between the ρ– and –σι in the dative plural.
{| class="wikitable"
|+ πατήρ, πατρός ὁ father (stem: πατερ-)
! Case !! Singular !! Plural
|-
| Nominative || ὁ πατήρ || οἱ πατέρες
|-
| Genitive || τοῦ πατρός || τῶν πατέρων
|-
| Dative || τῷ πατρί || τοῖς πατράσι
|-
| Accusative || τὸν πατέρα || τοὺς πατέρας
|}
{| class="wikitable"
|+ μήτηρ, μητρός ἡ mother (stem: μητερ-)
! Case !! Singular !! Plural
|-
| Nominative || ἡ μήτηρ || αἱ μητέρες
|-
| Genitive || τῆς μητρός || τῶν μητέρων
|-
| Dative || τῇ μητρί || ταῖς μητράσι
|-
| Accusative || τὴν μητέρα || τὰς μητέρας
|}
{| class="wikitable"
|+ θυγάτηρ, θυγατρός ἡ daughter (stem: θυγατερ-)
! Case !! Singular !! Plural
|-
| Nominative || ἡ θυγάτηρ || αἱ θυγατέρες
|-
| Genitive || τῆς θυγατρός || τῶν θυγατέρων
|-
| Dative || τῇ θυγατρί || ταῖς θυγατράσι
|-
| Accusative || τὴν θυγατέρα || τὰς θυγατέρας
|}
For the fourth noun, note the following patterns:
* The vowel stem –ερ becomes –ηρ in the nominative singular, due to the loss of a sigma resulting in COMPENSATORY LENGTHENING.
* The vowel stem –ερ became simply –ρ in all oblique cases!
* The resulting forms (e.g. ἀνρός, ἀνρί) gradually developed a sound change that inserted a δ between ν and ρ (S 130). (Likewise, the French word cendre, “ash,” comes from the Latin cinerem!)
* The accent pattern matches the other three –ερ nouns, with the exception of the genitive plural ending: ἀνδρῶν.
{| class="wikitable"
|+ ἀνήρ, ἀνδρός ὁ man (stem: ἀνερ-)
! Case !! Singular !! Plural
|-
| Nominative || ὁ ἀνήρ || οἱ ἄνδρες
|-
| Genitive || τοῦ ἀνδρός || τῶν ἀνδρῶν
|-
| Dative || τῷ ἀνδρί || τοῖς ἀνδράσι
|-
| Accusative || τὸν ἄνδρα || τοὺς ἄνδρας
|}
===Stems Ending in –εσ===
As we saw in our discussion of the ATTIC FUTURE, an INTERVOCALIC SIGMA – i.e., a –σ– found between two vowels – often drops out, and the surrounding vowels contract. This process often occurs in 3rd Declension noun stems ending in –εσ once personal endings are added.
Nouns of this type are usually NEUTER. Masculine and feminine nouns of this type do appear, but they are less frequent or are proper names.
====1. Proper names in –εσ====
The name Socrates, ὁ Σωκράτης, declines as follows (S 264; GPH 13). Note the following patterns:
* In the nominative singular, the loss of a sigma results in COMPENSATORY LENGTHENING, just as we see with the four –ρ stem nouns above.
* Regular and expected contractions occur in the oblique forms once the intervocalic sigma is dropped.
* Finally, in the accusative singular, a ν is added by many, though not all, authors.
{| class="wikitable"
! Case !! Form
|-
| Nominative || (Σωκράτεσς →) Σωκράτης
|-
| Genitive || (Σωκράτεσος → Σωκράτεος →) Σωκράτους
|-
| Dative || (Σωκράτεσι →) Σωκράτει
|-
| Accusative || (Σωκράτεσα → Σωκράτεα →) Σωκράτη(ν)
|}
====2. Neuter nouns in –εσ====
For neuter nouns, recognizable patterns emerge.
* First, in the nominative and accusative singular, the stem –ες becomes –ος. Otherwise, all accent and contraction rules apply normally (S 264; GPH p. 14).
* Second, the accent is usually born on the ANTEPENULT of the uncontracted, inflected forms.
For example:
{| class="wikitable"
|+ ἔτος -ους τό year (stem: ἐτεσ-)
! Case !! Singular !! Plural
|-
| Nominative || (ἔτες →) ἔτος || (ἔτεσα → ἔτεα →) ἔτη
|-
| Genitive || (ἔτεσος → ἔτεος →) ἔτους || (ἐτέσων → ἐτέων →) ἐτῶν
|-
| Dative || (ἔτεσι →) ἔτει || (ἔτεσσι → ) ἔτεσι
|-
| Accusative || (ἔτες →) ἔτος || (ἔτεσα → ἔτεα →) ἔτη
|}
{| class="wikitable"
|+ γένος -ους τό clan, generation; type, class (stem: γένεσ-)
! Case !! Singular !! Plural
|-
| Nominative || (γένες →) γένος || (γένεσα → γένεα →) γένη
|-
| Genitive || (γένεσος → γένεος →) γένους || (γενέσων → γενέων →) γενῶν
|-
| Dative || (γένεσι →) γένει || (γένεσσι → ) γένεσι
|-
| Accusative || (γένες →) γένος || (γένεσα → γένεα →) γένη
|}
===Stems Ending in –ι===
Most nouns preserve this stem vowel only in the NOMINATIVE and ACCUSATIVE SINGULAR. In the other cases and numbers, –ε replaces –ι as the stem vowel (S 268-271). This class of nouns shares a number of other attributes, including:
* These nouns are usually feminine.
* The genitive singular ending lengthens from –ος to –ως.
* Neither the –εως ending of the genitive singular nor the –εων ending of the genitive plural draw the accent off of an antepenult.
* The accusative singular uses –ν (familiar from the definite article) instead of –α.
* The nominative and accusative plural both end in –εες, which contracts to –εις.
As with nouns with –ερ stems, these changes in the noun stem and accent patterns require memorization. The good news is that all the –ι stem nouns in the vocabulary share the inflection pattern of ἡ πόλις, πόλεως city (S 268; GPH p. 15):
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || ἡ πόλις || αἱ πόλεις
|-
| Genitive || τῆς πόλεως || τῶν πόλεων
|-
| Dative || τῇ πόλει || ταῖς πόλεσι
|-
| Accusative || τὴν πόλιν || τὰς πόλεις
|}
The fact that the –εως and –εων endings do not draw the accent off of an antepenult is striking. This peculiarity is the result of changes in the pronunciation of words like πόλις. The earlier form of πόλεως was πόληος. The η and ο switched their vowel lengths over time (η shortened to ε, and ο lengthened to ω!), in a process called TRANSFERENCE OF QUANTITY (S 34). The accent, however, stayed on the antepenult during this process. The accent of the genitive plural gradually switched to the antepenult to match the genitive singular accent.
Transference of quantity is similar to METATHESIS, in which a vowel and consonant can switch places (S 128). English pronunciation has a number of such switches. For example, a vowel can switch places with an “r” in actual pronunciation for many English speakers: iron is often pronounced iern, and prescription pronounced perscription.
===Stems Ending in –υ, –ευ, –αυ, and –ου===
1. As with –ι stem nouns, –υ stem nouns preserve the stem vowel only in the NOMINATIVE and ACCUSATIVE SINGULAR. In the other cases and numbers, –ε replaces –υ as the stem vowel (S 268-271). Many –υ stem nouns share a number of other attributes with –ι stem nouns, including:
* The genitive singular ending lengthens from –ος to –ως.
* Neither the –εως ending of the genitive singular (due to transference of quantity) nor the –εων ending of the genitive plural draw the accent off of an antepenult.
* The accusative singular uses –ν instead of –α.
* The nominative and accusative plural both end in –εες, which contracts to –εις.
Note, for example, the inflection of ὁ πρέσβυς -εως old man:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || ὁ πρέσβυς || οἱ πρέσβεις
|-
| Genitive || τοῦ πρέσβεως || τῶν πρέσβεων
|-
| Dative || τῷ πρέσβει || τοῖς πρέσβεσι
|-
| Accusative || τὸν πρέσβυν || τοὺς πρέσβεις
|}
====2. Kings, Priests, and Horsemen!====
Noun stems ending in –ευ exhibit more irregularities than stems that end in just –υ. The inflection patterns of these nouns must be memorized, though some observations may help. Note the following changes that occur in the inflection of ὁ βασιλεύς -έως “king” (S 275; GPH p. 16):
* The noun stem –ευ drops the –υ before another vowel, leaving just an –ε for its stem vowel.
* The genitive singular ending lengthens from –ος to –ως, due to transference of quantity.
* The accent persists on the stem vowel, –ευ or –ε. Note that for the dative singular, the original form was βασιλέ–ι, the noun stem plus the case ending. These two vowels form a diphthong, and the resulting accent, as expected, forms a circumflex.
* The nominative plural lengthens the –ε to an –η (-έὲς = –ῆς).
* The endings for the accusative singular and plural do not contract (the α of both endings is long).
Not long after the Classical period, the NOMINATIVE and ACCUSATIVE PLURALS of these –ευ nouns change to –εῖς, in parallel with the endings shared by –ι stem nouns and –υ stem nouns such as ὁ πρέσβυς –εως. The rest of the noun inflects as it did in the Classical period.
{| class="wikitable"
|+ βασιλεύς -έως ὁ king (post-Classical forms in parentheses)
! Case !! Singular !! Plural
|-
| Nominative || ὁ βασιλεύς || οἱ βασιλῆς (βασιλεῖς)
|-
| Genitive || τοῦ βασιλέως || τῶν βασιλέων
|-
| Dative || τῷ βασιλεῖ || τοῖς βασιλεῦσι
|-
| Accusative || τὸν βασιλέα || τοὺς βασιλέας (βασιλεῖς)
|}
Also inflected on this pattern are the following two nouns:
* ἱερεύς -έως ὁ priest
* ἱππεύς -έως ὁ horseman, charioteer
====3. Ships!====
The noun ἡ ναῦς, νεώς “ship” is a common word in Greek, as might be expected for a people closely associated with seafaring. The stem for this noun ends in –αυ. Like noun stems ending in –ευ, –αυ nouns exhibit more irregularities than stems that end in just –υ. The inflection pattern of ἡ ναῦς, νεώς must be memorized, though some observations may help (S 275; GPH p. 16).
* The vowel stem –αυ drops the –υ before another vowel, resulting in a vowel stem of either –ε or –η.
* The genitive singular ending lengthens from –ος to –ως, due to transference of quantity.
* The accent pattern follows that of a monosyllabic nouns of the 3rd Declension.
* The accusative singular uses –ν instead of –α.
* The nominative singular and accusative plural are identical in form.
{| class="wikitable"
|+ ναῦς, νεώς ἡ ship
! Case !! Singular !! Plural
|-
| Nominative || ἡ ναῦς || αἱ νῆες
|-
| Genitive || τῆς νεώς || τῶν νεῶν
|-
| Dative || τῇ νηί || ταῖς ναυσί
|-
| Accusative || τὴν ναῦν || τὰς ναῦς
|}
====4. Bulls!====
The noun βοῦς, βοός bull or cow, is also a common word in Greek. These animals were important not only for farming and animal husbandry, but for sacrifices.
The stem for this noun ends in –ου (S 275; GPH p. 17). Like noun stems ending in –ευ and –αυ, –ου nouns exhibit irregularities. The inflection pattern of βοῦς, βοός must be memorized, though some observations may help (S 275-278).
* The vowel stem –ου drops the –υ before another vowel, resulting in a vowel stem of –ο.
* The genitive singular remains –ος. No transference of quantity can occur, since the stem vowel –ο is short.
* The accent pattern follows that of a monosyllabic nouns of the 3rd Declension.
* The genitive singular and nominative plural endings do not contract.
* The accusative singular uses –ν instead of –α.
* The nominative singular and accusative plural are identical in form.
{| class="wikitable"
|+ βοῦς, βοός ὁ bull, ox; ἡ cow
! Case !! Singular !! Plural
|-
| Nominative || ὁ, ἡ βοῦς || οἱ, αἱ βόες
|-
| Genitive || τοῦ, τῆς βοός || τῶν, τῶν βοῶν
|-
| Dative || τῷ, τῇ βοί || τοῖς, ταῖς βουσί
|-
| Accusative || τὸν, τὴν βοῦν || τοὺς, τὰς βοῦς
|}
===Kings, ships, cows, and the digamma===
Early Greek used three additional letters: KOPPA (ϙ), a K sound later retained as the numeral 90; SAMPI (ϡ), a double-S sound retained as 900; and DIGAMMA (ϝ), representing W.
Digamma disappeared from most dialects by the Classical period, affecting words with stems ending in –ευ, –αυ, and –ου. For example, βασιλέως, βασιλεῖ, and βασιλέα derive from earlier βασιλήϝος, βασιλήϝι, and βασιλήϝα. Similarly, νεώς and βοός derive from νηϝός and βοϝός. The loss of digamma and shifts in vowel quantity produced the later forms. Compare Latin ''navis'' and ''bovis'', which preserve W as V. Latin also retained koppa, which gave rise to the English letter Q.
{{BookCat}}
przakq6v6g07mr6rw08pbdi5skcgtc6
4676333
4676321
2026-10-16T06:14:42Z
It-is-Truly-Meet
3624460
Color coding; vocabulary
4676333
wikitext
text/x-wiki
==3rd Declension Noun Tables==
{| class="wikitable" style="float:right"
|+ ὁ παῖς — child
!Singular
!Plural
|-
|παῖς||'''παῖδ'''ες
|-
|'''παιδ'''óς||'''παίδ'''ων
|-
|'''παιδ'''ῐ́||παισί
|-
|'''παῖδ'''ᾰ||'''παῖδ'''ᾰς
|-
| παῖ||'''παῖδ'''ες
|}
{| class="wikitable" style="float:right"
|+ ὁ γίγας — giant
! Singular
! Plural
|-
| γίγας||γίγαντες
|-
| γίγαντος||γιγάντων
|-
| γίγαντι||γίγασι(ν)
|-
| γίγαντα||γίγαντας
|-
| γίγαν||γίγαντες
|}
{| class="wikitable" style="float:right"
|+ ὁ θής — hired man
! Singular
! Plural
|-
| θής||θῆτες
|-
| θητός||θητῶν
|-
| θητί||θησί(ν)
|-
| θῆτα||θῆτας
|-
| θής||θῆτες
|}
{| class="wikitable" style="float:right"
|+ ἡ λαμπάς — torch
! Singular
! Plural
|-
| λαμπάς||λαμπάδες
|-
| λαμπάδος||λαμπάδων
|-
| λαμπάδι||λαμπάσι(ν)
|-
| λαμπάδα||λαμπάδας
|-
| λαμπάς||λαμπάδες
|}
{| class="wikitable" style="float:right"
|+ ὁ/ἡ ὄρνις — bird
! Case
! Singular
! Plural
|-
| Nom.
| ὄρνις||ὄρνιθες
|-
| Gen.
| ὄρνιθος||ὀρνίθων
|-
| Dat.
| ὄρνιθι||ὄρνισι(ν)
|-
| Acc.
| ὄρνιν||ὄρνιθας
|-
| Voc.
| ὄρνις||ὄρνιθες
|}
{| class="wikitable" style="float:right"
|+ ἡ ἐλπίς — hope
! Singular
! Plural
|-
| ἐλπίς||ἐλπίδες
|-
| ἐλπίδος||ἐλπίδων
|-
| ἐλπίδι||ἐλπίσι(ν)
|-
| ἐλπίδα||ἐλπίδας
|-
| ἐλπί||ἐλπίδες
|}
{| class="wikitable" style="float:right"
|+ ὁ δαίμων — divinity
! Singular
! Plural
|-
| δαίμων||δαίμονες
|-
| δαίμονος||δαιμόνων
|-
| δαίμονι||δαίμοσι(ν)
|-
| δαίμονα||δαίμονας
|-
| δαῖμον||δαίμονες
|}
{| class="wikitable" style="float:right"
|+ ὁ ἄρχων — ruler
! Case
! Singular
! Plural
|-
| Nom.
| ἄρχων||ἄρχοντες
|-
| Gen.
| ἄρχοντος||ἀρχόντων
|-
| Dat.
| ἄρχοντι||ἄρχουσι(ν)
|-
| Acc.
| ἄρχοντα||ἄρχοντας
|-
| Voc.
| ἄρχον||ἄρχοντες
|}
<br clear="all">
==Masculine Nouns==
* παιδ child
* δαιμον divinity, spirit
* ἀρχοντ ruler
The first set of nouns are all MASCULINE in gender. These particular masculine nouns add the following suffixes to their stem to indicate number and case:
{| class="wikitable"
! Case||Singular||Plural
|-
|Nom.||–'''ς'''||–ες
|-
|Gen.||–ος||–ων
|-
|Dat.||–ι||–'''σ'''ι
|-
|Acc.||–α||–ας
|}
===The Trouble with Sigma===
Two case endings add sigma to the stem: nominative singular –ς and dative plural –σι. These nouns have stems ending in a dental consonant: stops –τ, –δ, –θ, or nasal –ν.
When σ follows a dental stop, the dental disappears (δ + σ = σ). When σ follows –ν, the σ sometimes disappears instead (ν + σ = ν), often causing compensatory lengthening of the preceding short vowel. Long vowels and diphthongs cannot be lengthened further.
These sound changes explain the spelling of the three nouns below.
{| class="wikitable"
|+ ὁ παῖς, παιδός child
! Case !! Singular !! Plural
|-
| Nominative || (παιδς→ ) παῖς || παῖδες
|-
| Genitive || παιδός || παίδων
|-
| Dative || παιδί || (παιδσι→ ) παισί
|-
| Accusative || παῖδα || παῖδας
|}
{| class="wikitable"
|+ ὁ δαίμων, δαίμονος divinity
! Case !! Singular !! Plural
|-
| Nominative || (δαιμονς→ ) δαίμων || δαίμονες
|-
| Genitive || δαίμονος || δαιμόνων
|-
| Dative || δαίμονι || (δαιμονσι→ ) δαίμοσι
|-
| Accusative || δαίμονα || δαίμονας
|}
{| class="wikitable"
|+ ὁ ἄρχων, ἄρχοντος ruler
! Case !! Singular !! Plural
|-
| Nominative || (ἀρχοντς→ ) ἄρχων || ἄρχοντες
|-
| Genitive || ἄρχοντος || ἀρχόντων
|-
| Dative || ἄρχοντι || (ἀρχοντσι→ ) ἄρχουσι
|-
| Accusative || ἄρχοντα || ἄρχοντας
|}
===Spell It Like It Sounds!===
Words ending in –σι may add a final –ν (movable nu) for easier pronunciation: εἴκοσί εἰσι → εἴκοσίν εἰσι. Thus, παισί may appear as παισίν, without changing its parsing, meaning, or translation.
===Noun Vocabulary===
3rd-decl. nouns are listed with the definite article, nominative singular, and genitive singular (e.g., ὁ ἄρχων, ἄρχοντος). The article indicates gender, the nom. sg. provides the citation form, and the gen. sg. reveals the noun stem, usually by removing –ος (ἄρχοντος → ἀρχοντ-). Memorize all three forms, since the nom. sg. may conceal changes to the stem.
===Nouns and the Persistent Accent===
Greek nouns generally use '''persistent accentuation''': the accent tends to remain on the same vowel as the noun is declined, unless accent rules require it to shift or change type. The accent pattern must be '''learned''' from the nom. sg. (e.g., ἄρχων and ἡγεμών have different accent positions). In masc. and fem. nouns of this pattern, the nom. sg. ending –ς adds no syllable, but other case endings may add syllables, changing the accented vowel’s position relative to the end of the word.
Three general patterns describe accentuation in 3rd-decl. nouns:
====1. When the accent falls on the {{blue|penult}} of other forms…====
It stays there. If the {{blue|penult}} is '''long''', the accent is a '''circumflex''' with '''short''' {{green|ultima}}, '''acute''' with '''long''' {{green|ultima}}.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nom. || {{blue|αἰ}}{{green|ών}} || {{red|αἰ}}{{blue|ῶ}}{{green|νες}}
|-
| Gen. || {{red|αἰ}}{{blue|ῶ}}{{green|νος}} || {{red|αἰ}}{{blue|ώ}}{{green|νων}}
|-
| Dat. || {{red|αἰ}}{{blue|ῶ}}{{green|νι}} || {{red|αἰ}}{{blue|ῶ}}{{green|σι}}
|-
| Acc. || {{red|αἰ}}{{blue|ῶ}}{{green|να}} || {{red|αἰ}}{{blue|ῶ}}{{green|νας}}
|}
If the {{blue|penult}} is '''short''', the accent remains acute throughout all forms.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nom. || {{red|ἡ}}{{blue|γε}}{{green|μών}} || ἡ{{red|γε}}{{blue|μό}}{{green|νες}}
|-
| Gen. || ἡ{{red|γε}}{{blue|μό}}{{green|νος}} || ἡ{{red|γε}}{{blue|μό}}{{green|νων}}
|-
| Dat. || ἡ{{red|γε}}{{blue|μό}}{{green|νι}} || ἡ{{red|γε}}{{blue|μό}}{{green|σι}}
|-
| Acc. || ἡ{{red|γε}}{{blue|μό}}{{green|να}} || ἡ{{red|γε}}{{blue|μό}}{{green|νας}}
|}
The rule for accents that fall on the {{blue|penult}} is identical to that of verbs with only two syllables!
====2. When the accent is on the {{red|antepenult}} of other forms…====
The accent can only be acute on the {{red|antepenult}}. If the {{green|'''ultima'''}} becomes '''long''' (e.g., genitive plural –ων), the accent moves to the {{blue|'''penult'''}}.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || {{blue|ἄρ}}{{green|χων}} || {{red|ἄρ}}{{blue|χον}}{{green|τες}}
|-
| Genitive || {{red|ἄρ}}{{blue|χον}}{{green|τος}} || {{red|ἀρ}}{{blue|χόν}}{{green|των}}
|-
| Dative || {{red|ἄρ}}{{blue|χον}}{{green|τι}} || {{red|ἄρ}}{{blue|χου}}{{green|σι}}
|-
| Accusative || {{red|ἄρ}}{{blue|χον}}{{green|τα}} || {{red|ἄρ}}{{blue|χον}}{{green|τας}}
|}
Note that the rule for accents that fall on the {{red|antepenult}} is identical to that of verbs with three or more syllables!
====3. When the accent falls on a monosyllabic nominative singular noun…====
The accent usually moves to the {{green|'''ultima'''}} of the genitive and dative cases, singular and plural. In these situations, the accent on the {{green|ultima}} is '''acute''' over short vowels (e.g. –ός), and circumflex over long (e.g. –ῶν). This accent pattern is irregular, and must be memorized.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nom. || {{green|πούς}} || {{blue|πό}}{{green|δες}}
|-
| Gen. || {{blue|πο}}{{green|δός}} || {{blue|πο}}{{green|δῶν}}
|-
| Dat. || {{blue|πο}}{{green|δί}} || {{blue|πο}}{{green|σί}}
|-
| Acc. || {{blue|πό}}{{green|δα}} || {{blue|πό}}{{green|δας}}
|}
There are a handful of monosyllabic nouns that instead accent the {{blue|penult}} of the genitive plural. The most common ones are ὁ, ἡ {{green|παῖς}}, {{blue|παι}}{{green|δός}} child (genitive plural = {{blue|παί}}{{green|δων}}), declined above, {{green|φῶς}}, {{blue|φω}}{{green|τός}} light (genitive plural = {{blue|φώ}}{{green|των}}), and {{green|οὖς}}, {{blue|ὠ}}{{green|τός}} ear (genitive plural = {{blue|ὤ}}{{green|των}}).
==Feminine Nouns==
In our last lesson, we learned endings for nouns that were masculine. Now we add nouns that are feminine. For the 3rd declension, feminine nouns use the same case endings as masculine nouns:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || –ς || –ες
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || –α || –ας
|}
===The Trouble with Sigma===
As noted in our discussion of masculine nouns, two of the case endings involve adding a sigma to the stem: nominative singular = –ς, dative plural = –σι. Let us take a look at the sound changes that occur when these sigmas are added to the stems for two feminine nouns:
* ἐλπιδ hope
* νυκτ night
Note that the first stem, ἐλπιδ, ends in a dental (-τ/-δ/-θ). As we know, when a sigma follows a dental, the dental disappears and the sigma remains: e.g., δ + σ = σ. The second stem, νυκτ, ends in –κτ, a stem ending that the Greeks treated as essentially the same as a palatal (-κ/-γ/-χ). Recall that when a sigma follows a palatal, the result is the double consonant ξ: e.g., κ + σ = ξ.
With these sound changes in mind, note how ἐλπιδ and νυκτ decline:
{| class="wikitable"
|+ ἡ ἐλπίς, ἐλπίδος hope
! Case !! Singular !! Plural
|-
| Nominative || (ἐλπιδς →) ἐλπίς || ἐλπίδες
|-
| Genitive || ἐλπίδος || ἐλπίδων
|-
| Dative || ἐλπίδι || (ἐλπιδσι →) ἐλπίσι
|-
| Accusative || ἐλπίδα || ἐλπίδας
|}
{| class="wikitable"
|+ ἡ νύξ, νυκτός night
! Case !! Singular !! Plural
|-
| Nominative || (νυκτς → νυκς →) νύξ || νύκτες
|-
| Genitive || νυκτός || νυκτῶν
|-
| Dative || νυκτί || (νυκτσι → νυκσι →) νυξί
|-
| Accusative || νύκτα || νύκτας
|}
===The Definite Article===
Most nouns have only one grammatical gender, such as:
ἡ ἐλπίς, ἐλπίδος hope
A handful of nouns referring to people or gods, however, can be either MASCULINE or FEMININE, depending on the gender of the person/divinity. In such instances, the vocabulary entry includes both the masculine and feminine article.
ὁ, ἡ παῖς, παιδός (male or female) child
ὁ, ἡ δαίμων, δαίμονος (male or female) divinity
==Neuter Nouns==
All the nouns we have so far discussed have been either masculine or feminine in gender and have used the same endings to indicate number and case. The third and final grammatical gender, NEUTER, has similar endings, though with a few changes.
Neuter nouns of the THIRD DECLENSION add the following case endings to their stem to indicate number and case. Note that there is no ending (!) added in the NOMINATIVE and ACCUSATIVE SINGULAR.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || – || –α
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || – || –α
|}
===Word-Final Sounds===
One of the most common stem endings for NEUTER nouns of the THIRD DECLENSION is –ματ. For example:
σωματ body
ὀνοματ name
Since τ is a dental, the addition of a sigma to the stem (dat. plu. –σι) results in a sigma: τ + σ = σ.
Interestingly, it is a general rule that, unlike English, only a limited number of SOUNDS may END A WORD OF GREEK ORIGIN: a vowel sound, or the consonants –ρ/-ν/-ς (ξ, ψ). If a Greek word ended in any other consonant, that consonant would be dropped. (The only exceptions to this rule are ἐκ and οὐκ!). Since the neuter adds no ending to the nominative and accusative singular, stems ending in –ματ drop the final –τ, in order to avoid having a word end in this letter.
As a result, our two nouns decline as follows:
{| class="wikitable"
|+ τὸ σῶμα, σώματος body
! Case !! Singular !! Plural
|-
| Nominative || (σωματ →) σῶμα || σώματα
|-
| Genitive || σώματος || σωμάτων
|-
| Dative || σώματι || (σώματσι →) σώμασι
|-
| Accusative || (σωματ →) σῶμα || σώματα
|}
{| class="wikitable"
|+ τὸ ὄνομα, ὀνόματος name
! Case !! Singular !! Plural
|-
| Nominative || (ὀνοματ →) ὄνομα || ὀνόματα
|-
| Genitive || ὀνόματος || ὀνομάτων
|-
| Dative || ὀνόματι || (ὀνοματσι →) ὀνόμασι
|-
| Accusative || (ὀνοματ →) ὄνομα || ὀνόματα
|}
===The Definite Article===
Remember that when a definite article accompanies a noun, both must parse the same. In other words, they must be the same in gender, number, and case. Note the following examples:
{| class="wikitable"
|+ τὸ σῶμα, σώματος body
! Case !! Singular !! Plural
|-
| Nominative || τὸ σῶμα || τὰ σώματα
|-
| Genitive || τοῦ σώματος || τῶν σωμάτων
|-
| Dative || τῷ σώματι || τοῖς σώμασι
|-
| Accusative || τὸ σῶμα || τὰ σώματα
|}
{| class="wikitable"
|+ τὸ ὄνομα, ὀνόματος name
! Case !! Singular !! Plural
|-
| Nominative || τὸ ὄνομα || τὰ ὀνόματα
|-
| Genitive || τοῦ ὀνόματος || τῶν ὀνομάτων
|-
| Dative || τῷ ὀνόματι || τοῖς ὀνόμασι
|-
| Accusative || τὸ ὄνομα || τὰ ὀνόματα
|}
===The Neuter Laws===
Three rules apply to ALL NEUTER nouns in Greek, regardless of declension.
1. The NOMINATIVE and ACCUSATIVE SINGULAR must be IDENTICAL. This pattern applies to both the neuter noun and its definite article.
2. The NOMINATIVE and ACCUSATIVE PLURAL also must be IDENTICAL, and end in a short –α. This pattern applies to both the neuter noun and its definite article.
3. Whenever any NEUTER noun is the subject of a verb, the verb is regularly 3rd PERSON SINGULAR, even if the neuter subject is plural! The reason seems to be that neuter plurals were originally conceived to be collective nouns, much as the words army and team are collective nouns in English.
τὸ φῶς δείκνυσι….
The light shows…
τὰ φῶτα δείκνυσι….
The lights show…
==More 3rd Declension Nouns==
We have already learned how to form 3rd Declension nouns. Most of the nouns that we introduced in these lessons have stems ending in –ν (δαιμον-), –δ (ἐλπιδ-), –ντ (ἀρχοντ-) or –κτ (νυκτ-). In other words, these stems end in a NASAL, DENTAL, or PALATAL. In this lesson, we introduce 3rd Declension nouns that have stems ending in –ρ, and –εσ.
Before we look at these new nouns, let us review the 3rd Declension case endings for MASCULINE and FEMININE nouns:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || –ς || –ες
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || –α || –ας
|}
The 3rd Declension case endings for NEUTER nouns are as follows:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || – || –α
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || – || –α
|}
===Stems Ending in –ρ===
Declining most 3rd Declension nouns whose stem ends in –ρ is fairly straightforward. Greek often avoids the combination –ρσ-, usually by dropping the –ς from the NOMINATIVE SINGULAR (μάρτυς –υρος is an exception to this rule).
In the DATIVE PLURAL, the –σι ending is always intact. What happens when the –ρ– encounters the –σι can vary. Many nouns simply allow the full –ρσι– combination. For example, the dative plural of ῥήτωρ, ῥήτορος “orator,” is ῥήτορσι. There are, however, exceptions to this pattern.
μάρτυς –υρος drops the ρ for most Greek authors: μάρτυσι
χείρ, χειρός shortens its stem: χερσί
Note the inflections of the following common nouns, each with their own slight peculiarities:
{| class="wikitable"
|+ μάρτυς -υρος ὁ, ἡ witness
! Case !! Singular !! Plural
|-
| Nominative || ἡ μάρτυς || αἱ μάρτυρες
|-
| Genitive || τῆς μάρτυρος || τῶν μαρτύρων
|-
| Dative || τῇ μάρτυρι || ταῖς μάρτυσι
|-
| Accusative || τὴν μάρτυρα || τὰς μάρτυρας
|}
{| class="wikitable"
|+ χείρ, χειρός ἡ hand
! Case !! Singular !! Plural
|-
| Nominative || ἡ χείρ || αἱ χεῖρες
|-
| Genitive || τῆς χειρός || τῶν χειρῶν
|-
| Dative || τῇ χειρί || ταῖς χερσί
|-
| Accusative || τὴν χεῖρα || τὰς χεῖρας
|}
{| class="wikitable"
|+ πῦρ, πυρός τό fire
! Case !! Singular !! (No plural)
|-
| Nominative || τὸ πῦρ ||
|-
| Genitive || τοῦ πυρός ||
|-
| Dative || τῷ πυρί ||
|-
| Accusative || τὸ πῦρ ||
|}
===Stems Ending in –ερ===
More stem and accent changes occur in noun stems ending in –ερ. The good news is that the basic case endings do not change. The stem changes, however, do require memorization.
There are four common nouns of this type. As you memorize the inflections for each, note the following patterns for the first three nouns:
* The vowel stem –ερ becomes –ηρ in the nominative singular, due to the loss of a sigma resulting in COMPENSATORY LENGTHENING.
* The vowel stem –ερ becomes simply –ρ in the genitive singular, and dative singular and plural.
* The accent is on the ultima in the genitive and dative singular, on the penult in the accusative singular and all forms of the plural.
* The insertion of an –α– between the ρ– and –σι in the dative plural.
{| class="wikitable"
|+ πατήρ, πατρός ὁ father (stem: πατερ-)
! Case !! Singular !! Plural
|-
| Nominative || ὁ πατήρ || οἱ πατέρες
|-
| Genitive || τοῦ πατρός || τῶν πατέρων
|-
| Dative || τῷ πατρί || τοῖς πατράσι
|-
| Accusative || τὸν πατέρα || τοὺς πατέρας
|}
{| class="wikitable"
|+ μήτηρ, μητρός ἡ mother (stem: μητερ-)
! Case !! Singular !! Plural
|-
| Nominative || ἡ μήτηρ || αἱ μητέρες
|-
| Genitive || τῆς μητρός || τῶν μητέρων
|-
| Dative || τῇ μητρί || ταῖς μητράσι
|-
| Accusative || τὴν μητέρα || τὰς μητέρας
|}
{| class="wikitable"
|+ θυγάτηρ, θυγατρός ἡ daughter (stem: θυγατερ-)
! Case !! Singular !! Plural
|-
| Nominative || ἡ θυγάτηρ || αἱ θυγατέρες
|-
| Genitive || τῆς θυγατρός || τῶν θυγατέρων
|-
| Dative || τῇ θυγατρί || ταῖς θυγατράσι
|-
| Accusative || τὴν θυγατέρα || τὰς θυγατέρας
|}
For the fourth noun, note the following patterns:
* The vowel stem –ερ becomes –ηρ in the nominative singular, due to the loss of a sigma resulting in COMPENSATORY LENGTHENING.
* The vowel stem –ερ became simply –ρ in all oblique cases!
* The resulting forms (e.g. ἀνρός, ἀνρί) gradually developed a sound change that inserted a δ between ν and ρ. (Likewise, the French word cendre, “ash,” comes from the Latin cinerem!)
* The accent pattern matches the other three –ερ nouns, with the exception of the genitive plural ending: ἀνδρῶν.
{| class="wikitable"
|+ ἀνήρ, ἀνδρός ὁ man (stem: ἀνερ-)
! Case !! Singular !! Plural
|-
| Nominative || ὁ ἀνήρ || οἱ ἄνδρες
|-
| Genitive || τοῦ ἀνδρός || τῶν ἀνδρῶν
|-
| Dative || τῷ ἀνδρί || τοῖς ἀνδράσι
|-
| Accusative || τὸν ἄνδρα || τοὺς ἄνδρας
|}
===Stems Ending in –εσ===
As we saw in our discussion of the ATTIC FUTURE, an INTERVOCALIC SIGMA – i.e., a –σ– found between two vowels – often drops out, and the surrounding vowels contract. This process often occurs in 3rd Declension noun stems ending in –εσ once personal endings are added.
Nouns of this type are usually NEUTER. Masculine and feminine nouns of this type do appear, but they are less frequent or are proper names.
====1. Proper names in –εσ====
The name Socrates, ὁ Σωκράτης, declines as follows. Note the following patterns:
* In the nominative singular, the loss of a sigma results in COMPENSATORY LENGTHENING, just as we see with the four –ρ stem nouns above.
* Regular and expected contractions occur in the oblique forms once the intervocalic sigma is dropped.
* Finally, in the accusative singular, a ν is added by many, though not all, authors.
{| class="wikitable"
! Case !! Form
|-
| Nominative || (Σωκράτεσς →) Σωκράτης
|-
| Genitive || (Σωκράτεσος → Σωκράτεος →) Σωκράτους
|-
| Dative || (Σωκράτεσι →) Σωκράτει
|-
| Accusative || (Σωκράτεσα → Σωκράτεα →) Σωκράτη(ν)
|}
====2. Neuter nouns in –εσ====
For neuter nouns, recognizable patterns emerge.
* First, in the nominative and accusative singular, the stem –ες becomes –ος. Otherwise, all accent and contraction rules apply normally.
* Second, the accent is usually born on the ANTEPENULT of the uncontracted, inflected forms.
For example:
{| class="wikitable"
|+ ἔτος -ους τό year (stem: ἐτεσ-)
! Case !! Singular !! Plural
|-
| Nominative || (ἔτες →) ἔτος || (ἔτεσα → ἔτεα →) ἔτη
|-
| Genitive || (ἔτεσος → ἔτεος →) ἔτους || (ἐτέσων → ἐτέων →) ἐτῶν
|-
| Dative || (ἔτεσι →) ἔτει || (ἔτεσσι → ) ἔτεσι
|-
| Accusative || (ἔτες →) ἔτος || (ἔτεσα → ἔτεα →) ἔτη
|}
{| class="wikitable"
|+ γένος -ους τό clan, generation; type, class (stem: γένεσ-)
! Case !! Singular !! Plural
|-
| Nominative || (γένες →) γένος || (γένεσα → γένεα →) γένη
|-
| Genitive || (γένεσος → γένεος →) γένους || (γενέσων → γενέων →) γενῶν
|-
| Dative || (γένεσι →) γένει || (γένεσσι → ) γένεσι
|-
| Accusative || (γένες →) γένος || (γένεσα → γένεα →) γένη
|}
===Stems Ending in –ι===
Most nouns preserve this stem vowel only in the NOMINATIVE and ACCUSATIVE SINGULAR. In the other cases and numbers, –ε replaces –ι as the stem vowel. This class of nouns shares a number of other attributes, including:
* These nouns are usually feminine.
* The genitive singular ending lengthens from –ος to –ως.
* Neither the –εως ending of the genitive singular nor the –εων ending of the genitive plural draw the accent off of an antepenult.
* The accusative singular uses –ν (familiar from the definite article) instead of –α.
* The nominative and accusative plural both end in –εες, which contracts to –εις.
As with nouns with –ερ stems, these changes in the noun stem and accent patterns require memorization. The good news is that all the –ι stem nouns in the vocabulary share the inflection pattern of ἡ πόλις, πόλεως city:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || ἡ πόλις || αἱ πόλεις
|-
| Genitive || τῆς πόλεως || τῶν πόλεων
|-
| Dative || τῇ πόλει || ταῖς πόλεσι
|-
| Accusative || τὴν πόλιν || τὰς πόλεις
|}
The fact that the –εως and –εων endings do not draw the accent off of an antepenult is striking. This peculiarity is the result of changes in the pronunciation of words like πόλις. The earlier form of πόλεως was πόληος. The η and ο switched their vowel lengths over time (η shortened to ε, and ο lengthened to ω!), in a process called TRANSFERENCE OF QUANTITY. The accent, however, stayed on the antepenult during this process. The accent of the genitive plural gradually switched to the antepenult to match the genitive singular accent.
Transference of quantity is similar to METATHESIS, in which a vowel and consonant can switch places. English pronunciation has a number of such switches. For example, a vowel can switch places with an “r” in actual pronunciation for many English speakers: iron is often pronounced iern, and prescription pronounced perscription.
===Stems Ending in –υ, –ευ, –αυ, and –ου===
1. As with –ι stem nouns, –υ stem nouns preserve the stem vowel only in the NOMINATIVE and ACCUSATIVE SINGULAR. In the other cases and numbers, –ε replaces –υ as the stem vowel. Many –υ stem nouns share a number of other attributes with –ι stem nouns, including:
* The genitive singular ending lengthens from –ος to –ως.
* Neither the –εως ending of the genitive singular (due to transference of quantity) nor the –εων ending of the genitive plural draw the accent off of an antepenult.
* The accusative singular uses –ν instead of –α.
* The nominative and accusative plural both end in –εες, which contracts to –εις.
Note, for example, the inflection of ὁ πρέσβυς -εως old man:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || ὁ πρέσβυς || οἱ πρέσβεις
|-
| Genitive || τοῦ πρέσβεως || τῶν πρέσβεων
|-
| Dative || τῷ πρέσβει || τοῖς πρέσβεσι
|-
| Accusative || τὸν πρέσβυν || τοὺς πρέσβεις
|}
====2. Kings, Priests, and Horsemen!====
Noun stems ending in –ευ exhibit more irregularities than stems that end in just –υ. The inflection patterns of these nouns must be memorized, though some observations may help. Note the following changes that occur in the inflection of ὁ βασιλεύς -έως “king”:
* The noun stem –ευ drops the –υ before another vowel, leaving just an –ε for its stem vowel.
* The genitive singular ending lengthens from –ος to –ως, due to transference of quantity.
* The accent persists on the stem vowel, –ευ or –ε. Note that for the dative singular, the original form was βασιλέ–ι, the noun stem plus the case ending. These two vowels form a diphthong, and the resulting accent, as expected, forms a circumflex.
* The nominative plural lengthens the –ε to an –η (-έὲς = –ῆς).
* The endings for the accusative singular and plural do not contract (the α of both endings is long).
Not long after the Classical period, the NOMINATIVE and ACCUSATIVE PLURALS of these –ευ nouns change to –εῖς, in parallel with the endings shared by –ι stem nouns and –υ stem nouns such as ὁ πρέσβυς –εως. The rest of the noun inflects as it did in the Classical period.
{| class="wikitable"
|+ βασιλεύς -έως ὁ king (post-Classical forms in parentheses)
! Case !! Singular !! Plural
|-
| Nominative || ὁ βασιλεύς || οἱ βασιλῆς (βασιλεῖς)
|-
| Genitive || τοῦ βασιλέως || τῶν βασιλέων
|-
| Dative || τῷ βασιλεῖ || τοῖς βασιλεῦσι
|-
| Accusative || τὸν βασιλέα || τοὺς βασιλέας (βασιλεῖς)
|}
Also inflected on this pattern are the following two nouns:
* ἱερεύς -έως ὁ priest
* ἱππεύς -έως ὁ horseman, charioteer
====3. Ships!====
The noun ἡ ναῦς, νεώς “ship” is a common word in Greek, as might be expected for a people closely associated with seafaring. The stem for this noun ends in –αυ. Like noun stems ending in –ευ, –αυ nouns exhibit more irregularities than stems that end in just –υ. The inflection pattern of ἡ ναῦς, νεώς must be memorized, though some observations may help.
* The vowel stem –αυ drops the –υ before another vowel, resulting in a vowel stem of either –ε or –η.
* The genitive singular ending lengthens from –ος to –ως, due to transference of quantity.
* The accent pattern follows that of a monosyllabic nouns of the 3rd Declension.
* The accusative singular uses –ν instead of –α.
* The nominative singular and accusative plural are identical in form.
{| class="wikitable"
|+ ναῦς, νεώς ἡ ship
! Case !! Singular !! Plural
|-
| Nominative || ἡ ναῦς || αἱ νῆες
|-
| Genitive || τῆς νεώς || τῶν νεῶν
|-
| Dative || τῇ νηί || ταῖς ναυσί
|-
| Accusative || τὴν ναῦν || τὰς ναῦς
|}
====4. Bulls!====
The noun βοῦς, βοός bull or cow, is also a common word in Greek. These animals were important not only for farming and animal husbandry, but for sacrifices.
The stem for this noun ends in –ου. Like noun stems ending in –ευ and –αυ, –ου nouns exhibit irregularities. The inflection pattern of βοῦς, βοός must be memorized, though some observations may help.
* The vowel stem –ου drops the –υ before another vowel, resulting in a vowel stem of –ο.
* The genitive singular remains –ος. No transference of quantity can occur, since the stem vowel –ο is short.
* The accent pattern follows that of a monosyllabic nouns of the 3rd Declension.
* The genitive singular and nominative plural endings do not contract.
* The accusative singular uses –ν instead of –α.
* The nominative singular and accusative plural are identical in form.
{| class="wikitable"
|+ βοῦς, βοός ὁ bull, ox; ἡ cow
! Case !! Singular !! Plural
|-
| Nominative || ὁ, ἡ βοῦς || οἱ, αἱ βόες
|-
| Genitive || τοῦ, τῆς βοός || τῶν, τῶν βοῶν
|-
| Dative || τῷ, τῇ βοί || τοῖς, ταῖς βουσί
|-
| Accusative || τὸν, τὴν βοῦν || τοὺς, τὰς βοῦς
|}
===Kings, ships, cows, and the digamma===
Early Greek used three additional letters: KOPPA (ϙ), a K sound later retained as the numeral 90; SAMPI (ϡ), a double-S sound retained as 900; and DIGAMMA (ϝ), representing W.
Digamma disappeared from most dialects by the Classical period, affecting words with stems ending in –ευ, –αυ, and –ου. For example, βασιλέως, βασιλεῖ, and βασιλέα derive from earlier βασιλήϝος, βασιλήϝι, and βασιλήϝα. Similarly, νεώς and βοός derive from νηϝός and βοϝός. The loss of digamma and shifts in vowel quantity produced the later forms. Compare Latin ''navis'' and ''bovis'', which preserve W as V. Latin also retained koppa, which gave rise to the English letter Q.
===Vocabulary===
====Masculine Nouns====
* ὁ ἀλέκτωρ, ἀλέκτορος: rooster
* ὁ αἰών, αἰῶνος: age, era, eternity
* ὁ ἀλιεύς, ἀλιέως: fisherman
* ὁ ἀμπελών, ἀμπελῶνος: vineyard
* ὁ ἀνήρ, ἀνδρός: man, husband
* ὁ ἀρχιερεύς, ἀρχιερέως: high priest
* ὁ ἄρχων, ἄρχοντος: ruler, leader
* ὁ ἀστήρ, ἀστέρος: star
* ὁ βασιλεύς, βασιλέως: king
* ὁ γονεύς, γονέως: parent
* ὁ γραμματεύς, γραμματέως: scribe, legal expert
* ὁ δράκων, δράκοντος: dragon
* ὁ ἡγεμών, ἡγεμόνος: ruler, governor
* ὁ ἱερεύς, ἱερέως: priest
* ὁ ἰχθύς, ἰχθύος: fish
* ὁ κῆρυξ, κήρυκος: herald, proclaimer
* ὁ κύων, κυνός: dog
* ὁ λέων, λέοντος: lion
* ὁ μάρτυς, μάρτυρος: witness
* ὁ μήν, μηνός: month
* ὁ Μωϋσῆς, Μωϋσέως: Moses
* ὁ ὀδούς, ὀδόντος: tooth
* ὁ ὄφις, ὄφεως: snake, serpent
* ὁ πατήρ, πατρός: father
* ὁ ποιμήν, ποιμένος: shepherd
* ὁ πούς, ποδός: foot
* ὁ σωτήρ, σωτῆρος: savior
* ὁ Σίμων, Σίμωνος: Simon
* ὁ χαλκεύς, χαλκέως: metalworker
* ὁ θώραξ, θώρακος: breastplate
====Feminine Nouns====
* ἡ ἄνεσις, ἀνέσεως: relief, rest
* ἡ ἀνάλημψις, ἀναλήμψεως: taking up, ascension
* ἡ ἀνάστασις, ἀναστάσεως: resurrection
* ἡ ἀντίθεσις, ἀντιθέσεως: opposition
* ἡ ἀντίλημψις, ἀντιλήμψεως: help, assistance
* ἡ ἀπόκρισις, ἀποκρίσεως: answer, reply
* ἡ ἀποκάλυψις, ἀποκαλύψεως: revelation
* ἡ ἄφεσις, ἀφέσεως: release, forgiveness
* ἡ ἀσπίς, ἀσπίδος: asp, venomous snake
* ἡ αἴσθησις, αἰσθήσεως: perception, discernment
* ἡ βρῶσις, βρώσεως: eating, food
* ἡ γένεσις, γενέσεως: origin, birth
* ἡ γνῶσις, γνώσεως: knowledge
* ἡ γυνή, γυναικός: woman, wife
* ἡ δύναμις, δυνάμεως: power, mighty deed
* ἡ εἰκών, εἰκόνος: image
* ἡ ἐλπίς, ἐλπίδος: hope
* ἡ ἐπίγνωσις, ἐπιγνώσεως: knowledge, recognition
* ἡ ἔκστασις, ἐκστάσεως: astonishment, trance
* ἡ ἔνδειξις, ἐνδείξεως: proof, indication
* ἡ ἕξις, ἕξεως: habit, practice
* ἡ ἔρις, ἔριδος: strife, quarrel
* ἡ ἐπίθεσις, ἐπιθέσεως: laying on, imposition
* ἡ θλῖψις, θλίψεως: affliction, trouble
* ἡ θυγάτηρ, θυγατρός: daughter
* ἡ θρίξ, τριχός: hair
* ἡ ἰσχύς, ἰσχύος: strength
* ἡ κρίσις, κρίσεως: judgment
* ἡ κλεῖς, κλειδός: key
* ἡ κλῆσις, κλήσεως: calling
* ἡ κτίσις, κτίσεως: creation, created thing
* ἡ μάστιξ, μάστιγος: whip, scourge
* ἡ μετάθεσις, μεταθέσεως: transfer, change
* ἡ μήτηρ, μητρός: mother
* ἡ νύξ, νυκτός: night
* ἡ παράκλησις, παρακλήσεως: appeal, encouragement, consolation
* ἡ παράδοσις, παραδόσεως: tradition, handing down
* ἡ πίστις, πίστεως: faith, trust
* ἡ πόλις, πόλεως: city
* ἡ πτέρυξ, πτέρυγος: wing
* ἡ σάλπιγξ, σάλπιγγος: trumpet
* ἡ σάρξ, σαρκός: flesh
* ἡ συνείδησις, συνειδήσεως: conscience
* ἡ σύνεσις, συνέσεως: understanding
* ἡ ὑπόστασις, ὑποστάσεως: being, reality, assurance
* ἡ φανέρωσις, φανερώσεως: manifestation
* ἡ φλόξ, φλογός: flame
* ἡ χείρ, χειρός: hand
* ἡ χάρις, χάριτος: grace, favor, thanks
* ἡ χιλιάς, χιλιάδος: thousand
* ἡ ὄψις, ὄψεως: appearance, sight
* ἡ φρήν, φρενός: mind; usually found in the plural
====Neuter Nouns====
* τὸ ἅλας, ἅλατος: salt
* τὸ αἷμα, αἵματος: blood
* τὸ ἄνθος, ἄνθους: flower
* τὸ ἀνάθεμα, ἀναθέματος: anathema, something accursed
* τὸ βάθος, βάθους: depth
* τὸ βάπτισμα, βαπτίσματος: baptism
* τὸ βῆμα, βήματος: platform, judgment seat
* τὸ βρέφος, βρέφους: infant
* τὸ γάλα, γάλακτος: milk
* τὸ γένος, γένους: kind, race, family
* τὸ γόνυ, γόνατος: knee
* τὸ γράμμα, γράμματος: letter, writing
* τὸ δόγμα, δόγματος: decree, ordinance
* τὸ ἔθνος, ἔθνους: nation, people
* τὸ ἔθος, ἔθους: custom, practice
* τὸ ἔλεος, ἐλέους: mercy
* τὸ ἔτος, ἔτους: year
* τὸ θέλημα, θελήματος: will, desire
* τὸ κέρας, κέρατος: horn
* τὸ κέρδος, κέρδους: gain, profit
* τὸ κλάσμα, κλάσματος: fragment, broken piece
* τὸ κλίμα, κλίματος: region, district
* τὸ κράτος, κράτους: might, power
* τὸ κρέας, κρέως: meat, flesh
* τὸ κρίμα, κρίματος: judgment, verdict
* τὸ καύχημα, καυχήματος: boast, reason for boasting
* τὸ κήρυγμα, κηρύγματος: proclamation, preaching
* τὸ μέγεθος, μεγέθους: greatness, magnitude
* τὸ μέλι, μέλιτος: honey
* τὸ μέλος, μέλους: member, limb
* τὸ μέρος, μέρους: part, portion
* τὸ μῆκος, μήκους: length
* τὸ ὄνομα, ὀνόματος: name
* τὸ ὄνειδος, ὀνείδους: reproach, disgrace
* τὸ ὄρος, ὄρους: mountain
* τὸ οὖς, ὠτός: ear
* τὸ ὄφελος, ὀφέλους: benefit, use
* τὸ πάθος, πάθους: passion, suffering
* τὸ πένθος, πένθους: mourning, grief
* τὸ πέλαγος, πελάγους: sea, open water
* τὸ πλάτος, πλάτους: breadth, width
* τὸ πνεῦμα, πνεύματος: spirit, breath
* τὸ πλῆθος, πλήθους: multitude, crowd
* τὸ πλεόνασμα, πλεονάσματος: surplus, abundance
* τὸ πρᾶγμα, πράγματος: deed, thing, matter
* τὸ πρόσκομμα, προσκόμματος: stumbling block, offense
* τὸ πῦρ, πυρός: fire
* τὸ πλήρωμα, πληρώματος: fullness
* τὸ ῥῆμα, ῥήματος: word, saying
* τὸ σκεῦος, σκεύους: vessel, possession
* τὸ σκότος, σκότους: darkness
* τὸ σπέρμα, σπέρματος: seed, offspring
* τὸ στόμα, στόματος: mouth
* τὸ σῶμα, σώματος: body
* τὸ στίγμα, στίγματος: mark
* τὸ τέλος, τέλους: end, goal
* τὸ τέρας, τέρατος: wonder, sign
* τὸ φρέαρ, φρέατος: well
* τὸ φῶς, φωτός: light
* τὸ ὕδωρ, ὕδατος: water
* τὸ ὕψος, ὕψους: height
* τὸ χάραγμα, χαράγματος: mark, imprint
* τὸ χάσμα, χάσματος: chasm, great divide
* τὸ χρῖσμα, χρίσματος: anointing
* τὸ ψεῦδος, ψεύδους: falsehood, lie
{{BookCat}}
rvdcuxvquwne51ioqwq5ylmdnd65lyy
4676334
4676333
2026-10-16T06:15:18Z
It-is-Truly-Meet
3624460
/* More 3rd Declension Nouns */
4676334
wikitext
text/x-wiki
==3rd Declension Noun Tables==
{| class="wikitable" style="float:right"
|+ ὁ παῖς — child
!Singular
!Plural
|-
|παῖς||'''παῖδ'''ες
|-
|'''παιδ'''óς||'''παίδ'''ων
|-
|'''παιδ'''ῐ́||παισί
|-
|'''παῖδ'''ᾰ||'''παῖδ'''ᾰς
|-
| παῖ||'''παῖδ'''ες
|}
{| class="wikitable" style="float:right"
|+ ὁ γίγας — giant
! Singular
! Plural
|-
| γίγας||γίγαντες
|-
| γίγαντος||γιγάντων
|-
| γίγαντι||γίγασι(ν)
|-
| γίγαντα||γίγαντας
|-
| γίγαν||γίγαντες
|}
{| class="wikitable" style="float:right"
|+ ὁ θής — hired man
! Singular
! Plural
|-
| θής||θῆτες
|-
| θητός||θητῶν
|-
| θητί||θησί(ν)
|-
| θῆτα||θῆτας
|-
| θής||θῆτες
|}
{| class="wikitable" style="float:right"
|+ ἡ λαμπάς — torch
! Singular
! Plural
|-
| λαμπάς||λαμπάδες
|-
| λαμπάδος||λαμπάδων
|-
| λαμπάδι||λαμπάσι(ν)
|-
| λαμπάδα||λαμπάδας
|-
| λαμπάς||λαμπάδες
|}
{| class="wikitable" style="float:right"
|+ ὁ/ἡ ὄρνις — bird
! Case
! Singular
! Plural
|-
| Nom.
| ὄρνις||ὄρνιθες
|-
| Gen.
| ὄρνιθος||ὀρνίθων
|-
| Dat.
| ὄρνιθι||ὄρνισι(ν)
|-
| Acc.
| ὄρνιν||ὄρνιθας
|-
| Voc.
| ὄρνις||ὄρνιθες
|}
{| class="wikitable" style="float:right"
|+ ἡ ἐλπίς — hope
! Singular
! Plural
|-
| ἐλπίς||ἐλπίδες
|-
| ἐλπίδος||ἐλπίδων
|-
| ἐλπίδι||ἐλπίσι(ν)
|-
| ἐλπίδα||ἐλπίδας
|-
| ἐλπί||ἐλπίδες
|}
{| class="wikitable" style="float:right"
|+ ὁ δαίμων — divinity
! Singular
! Plural
|-
| δαίμων||δαίμονες
|-
| δαίμονος||δαιμόνων
|-
| δαίμονι||δαίμοσι(ν)
|-
| δαίμονα||δαίμονας
|-
| δαῖμον||δαίμονες
|}
{| class="wikitable" style="float:right"
|+ ὁ ἄρχων — ruler
! Case
! Singular
! Plural
|-
| Nom.
| ἄρχων||ἄρχοντες
|-
| Gen.
| ἄρχοντος||ἀρχόντων
|-
| Dat.
| ἄρχοντι||ἄρχουσι(ν)
|-
| Acc.
| ἄρχοντα||ἄρχοντας
|-
| Voc.
| ἄρχον||ἄρχοντες
|}
<br clear="all">
==Masculine Nouns==
* παιδ child
* δαιμον divinity, spirit
* ἀρχοντ ruler
The first set of nouns are all MASCULINE in gender. These particular masculine nouns add the following suffixes to their stem to indicate number and case:
{| class="wikitable"
! Case||Singular||Plural
|-
|Nom.||–'''ς'''||–ες
|-
|Gen.||–ος||–ων
|-
|Dat.||–ι||–'''σ'''ι
|-
|Acc.||–α||–ας
|}
===The Trouble with Sigma===
Two case endings add sigma to the stem: nominative singular –ς and dative plural –σι. These nouns have stems ending in a dental consonant: stops –τ, –δ, –θ, or nasal –ν.
When σ follows a dental stop, the dental disappears (δ + σ = σ). When σ follows –ν, the σ sometimes disappears instead (ν + σ = ν), often causing compensatory lengthening of the preceding short vowel. Long vowels and diphthongs cannot be lengthened further.
These sound changes explain the spelling of the three nouns below.
{| class="wikitable"
|+ ὁ παῖς, παιδός child
! Case !! Singular !! Plural
|-
| Nominative || (παιδς→ ) παῖς || παῖδες
|-
| Genitive || παιδός || παίδων
|-
| Dative || παιδί || (παιδσι→ ) παισί
|-
| Accusative || παῖδα || παῖδας
|}
{| class="wikitable"
|+ ὁ δαίμων, δαίμονος divinity
! Case !! Singular !! Plural
|-
| Nominative || (δαιμονς→ ) δαίμων || δαίμονες
|-
| Genitive || δαίμονος || δαιμόνων
|-
| Dative || δαίμονι || (δαιμονσι→ ) δαίμοσι
|-
| Accusative || δαίμονα || δαίμονας
|}
{| class="wikitable"
|+ ὁ ἄρχων, ἄρχοντος ruler
! Case !! Singular !! Plural
|-
| Nominative || (ἀρχοντς→ ) ἄρχων || ἄρχοντες
|-
| Genitive || ἄρχοντος || ἀρχόντων
|-
| Dative || ἄρχοντι || (ἀρχοντσι→ ) ἄρχουσι
|-
| Accusative || ἄρχοντα || ἄρχοντας
|}
===Spell It Like It Sounds!===
Words ending in –σι may add a final –ν (movable nu) for easier pronunciation: εἴκοσί εἰσι → εἴκοσίν εἰσι. Thus, παισί may appear as παισίν, without changing its parsing, meaning, or translation.
===Noun Vocabulary===
3rd-decl. nouns are listed with the definite article, nominative singular, and genitive singular (e.g., ὁ ἄρχων, ἄρχοντος). The article indicates gender, the nom. sg. provides the citation form, and the gen. sg. reveals the noun stem, usually by removing –ος (ἄρχοντος → ἀρχοντ-). Memorize all three forms, since the nom. sg. may conceal changes to the stem.
===Nouns and the Persistent Accent===
Greek nouns generally use '''persistent accentuation''': the accent tends to remain on the same vowel as the noun is declined, unless accent rules require it to shift or change type. The accent pattern must be '''learned''' from the nom. sg. (e.g., ἄρχων and ἡγεμών have different accent positions). In masc. and fem. nouns of this pattern, the nom. sg. ending –ς adds no syllable, but other case endings may add syllables, changing the accented vowel’s position relative to the end of the word.
Three general patterns describe accentuation in 3rd-decl. nouns:
====1. When the accent falls on the {{blue|penult}} of other forms…====
It stays there. If the {{blue|penult}} is '''long''', the accent is a '''circumflex''' with '''short''' {{green|ultima}}, '''acute''' with '''long''' {{green|ultima}}.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nom. || {{blue|αἰ}}{{green|ών}} || {{red|αἰ}}{{blue|ῶ}}{{green|νες}}
|-
| Gen. || {{red|αἰ}}{{blue|ῶ}}{{green|νος}} || {{red|αἰ}}{{blue|ώ}}{{green|νων}}
|-
| Dat. || {{red|αἰ}}{{blue|ῶ}}{{green|νι}} || {{red|αἰ}}{{blue|ῶ}}{{green|σι}}
|-
| Acc. || {{red|αἰ}}{{blue|ῶ}}{{green|να}} || {{red|αἰ}}{{blue|ῶ}}{{green|νας}}
|}
If the {{blue|penult}} is '''short''', the accent remains acute throughout all forms.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nom. || {{red|ἡ}}{{blue|γε}}{{green|μών}} || ἡ{{red|γε}}{{blue|μό}}{{green|νες}}
|-
| Gen. || ἡ{{red|γε}}{{blue|μό}}{{green|νος}} || ἡ{{red|γε}}{{blue|μό}}{{green|νων}}
|-
| Dat. || ἡ{{red|γε}}{{blue|μό}}{{green|νι}} || ἡ{{red|γε}}{{blue|μό}}{{green|σι}}
|-
| Acc. || ἡ{{red|γε}}{{blue|μό}}{{green|να}} || ἡ{{red|γε}}{{blue|μό}}{{green|νας}}
|}
The rule for accents that fall on the {{blue|penult}} is identical to that of verbs with only two syllables!
====2. When the accent is on the {{red|antepenult}} of other forms…====
The accent can only be acute on the {{red|antepenult}}. If the {{green|'''ultima'''}} becomes '''long''' (e.g., genitive plural –ων), the accent moves to the {{blue|'''penult'''}}.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || {{blue|ἄρ}}{{green|χων}} || {{red|ἄρ}}{{blue|χον}}{{green|τες}}
|-
| Genitive || {{red|ἄρ}}{{blue|χον}}{{green|τος}} || {{red|ἀρ}}{{blue|χόν}}{{green|των}}
|-
| Dative || {{red|ἄρ}}{{blue|χον}}{{green|τι}} || {{red|ἄρ}}{{blue|χου}}{{green|σι}}
|-
| Accusative || {{red|ἄρ}}{{blue|χον}}{{green|τα}} || {{red|ἄρ}}{{blue|χον}}{{green|τας}}
|}
Note that the rule for accents that fall on the {{red|antepenult}} is identical to that of verbs with three or more syllables!
====3. When the accent falls on a monosyllabic nominative singular noun…====
The accent usually moves to the {{green|'''ultima'''}} of the genitive and dative cases, singular and plural. In these situations, the accent on the {{green|ultima}} is '''acute''' over short vowels (e.g. –ός), and circumflex over long (e.g. –ῶν). This accent pattern is irregular, and must be memorized.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nom. || {{green|πούς}} || {{blue|πό}}{{green|δες}}
|-
| Gen. || {{blue|πο}}{{green|δός}} || {{blue|πο}}{{green|δῶν}}
|-
| Dat. || {{blue|πο}}{{green|δί}} || {{blue|πο}}{{green|σί}}
|-
| Acc. || {{blue|πό}}{{green|δα}} || {{blue|πό}}{{green|δας}}
|}
There are a handful of monosyllabic nouns that instead accent the {{blue|penult}} of the genitive plural. The most common ones are ὁ, ἡ {{green|παῖς}}, {{blue|παι}}{{green|δός}} child (genitive plural = {{blue|παί}}{{green|δων}}), declined above, {{green|φῶς}}, {{blue|φω}}{{green|τός}} light (genitive plural = {{blue|φώ}}{{green|των}}), and {{green|οὖς}}, {{blue|ὠ}}{{green|τός}} ear (genitive plural = {{blue|ὤ}}{{green|των}}).
==Feminine Nouns==
In our last lesson, we learned endings for nouns that were masculine. Now we add nouns that are feminine. For the 3rd declension, feminine nouns use the same case endings as masculine nouns:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || –ς || –ες
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || –α || –ας
|}
===The Trouble with Sigma===
As noted in our discussion of masculine nouns, two of the case endings involve adding a sigma to the stem: nominative singular = –ς, dative plural = –σι. Let us take a look at the sound changes that occur when these sigmas are added to the stems for two feminine nouns:
* ἐλπιδ hope
* νυκτ night
Note that the first stem, ἐλπιδ, ends in a dental (-τ/-δ/-θ). As we know, when a sigma follows a dental, the dental disappears and the sigma remains: e.g., δ + σ = σ. The second stem, νυκτ, ends in –κτ, a stem ending that the Greeks treated as essentially the same as a palatal (-κ/-γ/-χ). Recall that when a sigma follows a palatal, the result is the double consonant ξ: e.g., κ + σ = ξ.
With these sound changes in mind, note how ἐλπιδ and νυκτ decline:
{| class="wikitable"
|+ ἡ ἐλπίς, ἐλπίδος hope
! Case !! Singular !! Plural
|-
| Nominative || (ἐλπιδς →) ἐλπίς || ἐλπίδες
|-
| Genitive || ἐλπίδος || ἐλπίδων
|-
| Dative || ἐλπίδι || (ἐλπιδσι →) ἐλπίσι
|-
| Accusative || ἐλπίδα || ἐλπίδας
|}
{| class="wikitable"
|+ ἡ νύξ, νυκτός night
! Case !! Singular !! Plural
|-
| Nominative || (νυκτς → νυκς →) νύξ || νύκτες
|-
| Genitive || νυκτός || νυκτῶν
|-
| Dative || νυκτί || (νυκτσι → νυκσι →) νυξί
|-
| Accusative || νύκτα || νύκτας
|}
===The Definite Article===
Most nouns have only one grammatical gender, such as:
ἡ ἐλπίς, ἐλπίδος hope
A handful of nouns referring to people or gods, however, can be either MASCULINE or FEMININE, depending on the gender of the person/divinity. In such instances, the vocabulary entry includes both the masculine and feminine article.
ὁ, ἡ παῖς, παιδός (male or female) child
ὁ, ἡ δαίμων, δαίμονος (male or female) divinity
==Neuter Nouns==
All the nouns we have so far discussed have been either masculine or feminine in gender and have used the same endings to indicate number and case. The third and final grammatical gender, NEUTER, has similar endings, though with a few changes.
Neuter nouns of the THIRD DECLENSION add the following case endings to their stem to indicate number and case. Note that there is no ending (!) added in the NOMINATIVE and ACCUSATIVE SINGULAR.
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || – || –α
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || – || –α
|}
===Word-Final Sounds===
One of the most common stem endings for NEUTER nouns of the THIRD DECLENSION is –ματ. For example:
σωματ body
ὀνοματ name
Since τ is a dental, the addition of a sigma to the stem (dat. plu. –σι) results in a sigma: τ + σ = σ.
Interestingly, it is a general rule that, unlike English, only a limited number of SOUNDS may END A WORD OF GREEK ORIGIN: a vowel sound, or the consonants –ρ/-ν/-ς (ξ, ψ). If a Greek word ended in any other consonant, that consonant would be dropped. (The only exceptions to this rule are ἐκ and οὐκ!). Since the neuter adds no ending to the nominative and accusative singular, stems ending in –ματ drop the final –τ, in order to avoid having a word end in this letter.
As a result, our two nouns decline as follows:
{| class="wikitable"
|+ τὸ σῶμα, σώματος body
! Case !! Singular !! Plural
|-
| Nominative || (σωματ →) σῶμα || σώματα
|-
| Genitive || σώματος || σωμάτων
|-
| Dative || σώματι || (σώματσι →) σώμασι
|-
| Accusative || (σωματ →) σῶμα || σώματα
|}
{| class="wikitable"
|+ τὸ ὄνομα, ὀνόματος name
! Case !! Singular !! Plural
|-
| Nominative || (ὀνοματ →) ὄνομα || ὀνόματα
|-
| Genitive || ὀνόματος || ὀνομάτων
|-
| Dative || ὀνόματι || (ὀνοματσι →) ὀνόμασι
|-
| Accusative || (ὀνοματ →) ὄνομα || ὀνόματα
|}
===The Definite Article===
Remember that when a definite article accompanies a noun, both must parse the same. In other words, they must be the same in gender, number, and case. Note the following examples:
{| class="wikitable"
|+ τὸ σῶμα, σώματος body
! Case !! Singular !! Plural
|-
| Nominative || τὸ σῶμα || τὰ σώματα
|-
| Genitive || τοῦ σώματος || τῶν σωμάτων
|-
| Dative || τῷ σώματι || τοῖς σώμασι
|-
| Accusative || τὸ σῶμα || τὰ σώματα
|}
{| class="wikitable"
|+ τὸ ὄνομα, ὀνόματος name
! Case !! Singular !! Plural
|-
| Nominative || τὸ ὄνομα || τὰ ὀνόματα
|-
| Genitive || τοῦ ὀνόματος || τῶν ὀνομάτων
|-
| Dative || τῷ ὀνόματι || τοῖς ὀνόμασι
|-
| Accusative || τὸ ὄνομα || τὰ ὀνόματα
|}
===The Neuter Laws===
Three rules apply to ALL NEUTER nouns in Greek, regardless of declension.
1. The NOMINATIVE and ACCUSATIVE SINGULAR must be IDENTICAL. This pattern applies to both the neuter noun and its definite article.
2. The NOMINATIVE and ACCUSATIVE PLURAL also must be IDENTICAL, and end in a short –α. This pattern applies to both the neuter noun and its definite article.
3. Whenever any NEUTER noun is the subject of a verb, the verb is regularly 3rd PERSON SINGULAR, even if the neuter subject is plural! The reason seems to be that neuter plurals were originally conceived to be collective nouns, much as the words army and team are collective nouns in English.
τὸ φῶς δείκνυσι….
The light shows…
τὰ φῶτα δείκνυσι….
The lights show…
==More 3rd Declension Nouns==
We have already learned how to form 3rd Declension nouns. Most of the nouns that we introduced in these lessons have stems ending in –ν (δαιμον-), –δ (ἐλπιδ-), –ντ (ἀρχοντ-) or –κτ (νυκτ-). In other words, these stems end in a NASAL, DENTAL, or PALATAL. In this lesson, we introduce 3rd Declension nouns that have stems ending in –ρ, and –εσ.
Before we look at these new nouns, let us review the 3rd Declension case endings for MASCULINE and FEMININE nouns:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || –ς || –ες
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || –α || –ας
|}
The 3rd Declension case endings for NEUTER nouns are as follows:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || – || –α
|-
| Genitive || –ος || –ων
|-
| Dative || –ι || –σι
|-
| Accusative || – || –α
|}
===Stems Ending in –ρ===
Declining most 3rd Declension nouns whose stem ends in –ρ is fairly straightforward. Greek often avoids the combination –ρσ-, usually by dropping the –ς from the NOMINATIVE SINGULAR (μάρτυς –υρος is an exception to this rule).
In the DATIVE PLURAL, the –σι ending is always intact. What happens when the –ρ– encounters the –σι can vary. Many nouns simply allow the full –ρσι– combination. For example, the dative plural of ῥήτωρ, ῥήτορος “orator,” is ῥήτορσι. There are, however, exceptions to this pattern.
μάρτυς –υρος drops the ρ for most Greek authors: μάρτυσι
χείρ, χειρός shortens its stem: χερσί
Note the inflections of the following common nouns, each with their own slight peculiarities:
{| class="wikitable"
|+ μάρτυς -υρος ὁ, ἡ witness
! Case !! Singular !! Plural
|-
| Nominative || ἡ μάρτυς || αἱ μάρτυρες
|-
| Genitive || τῆς μάρτυρος || τῶν μαρτύρων
|-
| Dative || τῇ μάρτυρι || ταῖς μάρτυσι
|-
| Accusative || τὴν μάρτυρα || τὰς μάρτυρας
|}
{| class="wikitable"
|+ χείρ, χειρός ἡ hand
! Case !! Singular !! Plural
|-
| Nominative || ἡ χείρ || αἱ χεῖρες
|-
| Genitive || τῆς χειρός || τῶν χειρῶν
|-
| Dative || τῇ χειρί || ταῖς χερσί
|-
| Accusative || τὴν χεῖρα || τὰς χεῖρας
|}
{| class="wikitable"
|+ πῦρ, πυρός τό fire
! Case !! Singular !! (No plural)
|-
| Nominative || τὸ πῦρ ||
|-
| Genitive || τοῦ πυρός ||
|-
| Dative || τῷ πυρί ||
|-
| Accusative || τὸ πῦρ ||
|}
===Stems Ending in –ερ===
More stem and accent changes occur in noun stems ending in –ερ. The good news is that the basic case endings do not change. The stem changes, however, do require memorization.
There are four common nouns of this type. As you memorize the inflections for each, note the following patterns for the first three nouns:
* The vowel stem –ερ becomes –ηρ in the nominative singular, due to the loss of a sigma resulting in COMPENSATORY LENGTHENING.
* The vowel stem –ερ becomes simply –ρ in the genitive singular, and dative singular and plural.
* The accent is on the ultima in the genitive and dative singular, on the penult in the accusative singular and all forms of the plural.
* The insertion of an –α– between the ρ– and –σι in the dative plural.
{| class="wikitable"
|+ πατήρ, πατρός ὁ father (stem: πατερ-)
! Case !! Singular !! Plural
|-
| Nominative || ὁ πατήρ || οἱ πατέρες
|-
| Genitive || τοῦ πατρός || τῶν πατέρων
|-
| Dative || τῷ πατρί || τοῖς πατράσι
|-
| Accusative || τὸν πατέρα || τοὺς πατέρας
|}
{| class="wikitable"
|+ μήτηρ, μητρός ἡ mother (stem: μητερ-)
! Case !! Singular !! Plural
|-
| Nominative || ἡ μήτηρ || αἱ μητέρες
|-
| Genitive || τῆς μητρός || τῶν μητέρων
|-
| Dative || τῇ μητρί || ταῖς μητράσι
|-
| Accusative || τὴν μητέρα || τὰς μητέρας
|}
{| class="wikitable"
|+ θυγάτηρ, θυγατρός ἡ daughter (stem: θυγατερ-)
! Case !! Singular !! Plural
|-
| Nominative || ἡ θυγάτηρ || αἱ θυγατέρες
|-
| Genitive || τῆς θυγατρός || τῶν θυγατέρων
|-
| Dative || τῇ θυγατρί || ταῖς θυγατράσι
|-
| Accusative || τὴν θυγατέρα || τὰς θυγατέρας
|}
For the fourth noun, note the following patterns:
* The vowel stem –ερ becomes –ηρ in the nominative singular, due to the loss of a sigma resulting in COMPENSATORY LENGTHENING.
* The vowel stem –ερ became simply –ρ in all oblique cases!
* The resulting forms (e.g. ἀνρός, ἀνρί) gradually developed a sound change that inserted a δ between ν and ρ. (Likewise, the French word cendre, “ash,” comes from the Latin cinerem!)
* The accent pattern matches the other three –ερ nouns, with the exception of the genitive plural ending: ἀνδρῶν.
{| class="wikitable"
|+ ἀνήρ, ἀνδρός ὁ man (stem: ἀνερ-)
! Case !! Singular !! Plural
|-
| Nominative || ὁ ἀνήρ || οἱ ἄνδρες
|-
| Genitive || τοῦ ἀνδρός || τῶν ἀνδρῶν
|-
| Dative || τῷ ἀνδρί || τοῖς ἀνδράσι
|-
| Accusative || τὸν ἄνδρα || τοὺς ἄνδρας
|}
===Stems Ending in –εσ===
As we saw in our discussion of the ATTIC FUTURE, an INTERVOCALIC SIGMA – i.e., a –σ– found between two vowels – often drops out, and the surrounding vowels contract. This process often occurs in 3rd Declension noun stems ending in –εσ once personal endings are added.
Nouns of this type are usually NEUTER. Masculine and feminine nouns of this type do appear, but they are less frequent or are proper names.
====1. Proper names in –εσ====
The name Socrates, ὁ Σωκράτης, declines as follows. Note the following patterns:
* In the nominative singular, the loss of a sigma results in COMPENSATORY LENGTHENING, just as we see with the four –ρ stem nouns above.
* Regular and expected contractions occur in the oblique forms once the intervocalic sigma is dropped.
* Finally, in the accusative singular, a ν is added by many, though not all, authors.
{| class="wikitable"
! Case !! Form
|-
| Nominative || (Σωκράτεσς →) Σωκράτης
|-
| Genitive || (Σωκράτεσος → Σωκράτεος →) Σωκράτους
|-
| Dative || (Σωκράτεσι →) Σωκράτει
|-
| Accusative || (Σωκράτεσα → Σωκράτεα →) Σωκράτη(ν)
|}
====2. Neuter nouns in –εσ====
For neuter nouns, recognizable patterns emerge.
* First, in the nominative and accusative singular, the stem –ες becomes –ος. Otherwise, all accent and contraction rules apply normally.
* Second, the accent is usually born on the ANTEPENULT of the uncontracted, inflected forms.
For example:
{| class="wikitable"
|+ ἔτος -ους τό year (stem: ἐτεσ-)
! Case !! Singular !! Plural
|-
| Nominative || (ἔτες →) ἔτος || (ἔτεσα → ἔτεα →) ἔτη
|-
| Genitive || (ἔτεσος → ἔτεος →) ἔτους || (ἐτέσων → ἐτέων →) ἐτῶν
|-
| Dative || (ἔτεσι →) ἔτει || (ἔτεσσι → ) ἔτεσι
|-
| Accusative || (ἔτες →) ἔτος || (ἔτεσα → ἔτεα →) ἔτη
|}
{| class="wikitable"
|+ γένος -ους τό clan, generation; type, class (stem: γένεσ-)
! Case !! Singular !! Plural
|-
| Nominative || (γένες →) γένος || (γένεσα → γένεα →) γένη
|-
| Genitive || (γένεσος → γένεος →) γένους || (γενέσων → γενέων →) γενῶν
|-
| Dative || (γένεσι →) γένει || (γένεσσι → ) γένεσι
|-
| Accusative || (γένες →) γένος || (γένεσα → γένεα →) γένη
|}
===Stems Ending in –ι===
Most nouns preserve this stem vowel only in the NOMINATIVE and ACCUSATIVE SINGULAR. In the other cases and numbers, –ε replaces –ι as the stem vowel. This class of nouns shares a number of other attributes, including:
* These nouns are usually feminine.
* The genitive singular ending lengthens from –ος to –ως.
* Neither the –εως ending of the genitive singular nor the –εων ending of the genitive plural draw the accent off of an antepenult.
* The accusative singular uses –ν (familiar from the definite article) instead of –α.
* The nominative and accusative plural both end in –εες, which contracts to –εις.
As with nouns with –ερ stems, these changes in the noun stem and accent patterns require memorization. The good news is that all the –ι stem nouns in the vocabulary share the inflection pattern of ἡ πόλις, πόλεως city:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || ἡ πόλις || αἱ πόλεις
|-
| Genitive || τῆς πόλεως || τῶν πόλεων
|-
| Dative || τῇ πόλει || ταῖς πόλεσι
|-
| Accusative || τὴν πόλιν || τὰς πόλεις
|}
The fact that the –εως and –εων endings do not draw the accent off of an antepenult is striking. This peculiarity is the result of changes in the pronunciation of words like πόλις. The earlier form of πόλεως was πόληος. The η and ο switched their vowel lengths over time (η shortened to ε, and ο lengthened to ω!), in a process called TRANSFERENCE OF QUANTITY. The accent, however, stayed on the antepenult during this process. The accent of the genitive plural gradually switched to the antepenult to match the genitive singular accent.
Transference of quantity is similar to METATHESIS, in which a vowel and consonant can switch places. English pronunciation has a number of such switches. For example, a vowel can switch places with an “r” in actual pronunciation for many English speakers: iron is often pronounced iern, and prescription pronounced perscription.
===Stems Ending in –υ, –ευ, –αυ, and –ου===
1. As with –ι stem nouns, –υ stem nouns preserve the stem vowel only in the NOMINATIVE and ACCUSATIVE SINGULAR. In the other cases and numbers, –ε replaces –υ as the stem vowel. Many –υ stem nouns share a number of other attributes with –ι stem nouns, including:
* The genitive singular ending lengthens from –ος to –ως.
* Neither the –εως ending of the genitive singular (due to transference of quantity) nor the –εων ending of the genitive plural draw the accent off of an antepenult.
* The accusative singular uses –ν instead of –α.
* The nominative and accusative plural both end in –εες, which contracts to –εις.
Note, for example, the inflection of ὁ πρέσβυς -εως old man:
{| class="wikitable"
! Case !! Singular !! Plural
|-
| Nominative || ὁ πρέσβυς || οἱ πρέσβεις
|-
| Genitive || τοῦ πρέσβεως || τῶν πρέσβεων
|-
| Dative || τῷ πρέσβει || τοῖς πρέσβεσι
|-
| Accusative || τὸν πρέσβυν || τοὺς πρέσβεις
|}
====2. Kings, Priests, and Horsemen!====
Noun stems ending in –ευ exhibit more irregularities than stems that end in just –υ. The inflection patterns of these nouns must be memorized, though some observations may help. Note the following changes that occur in the inflection of ὁ βασιλεύς -έως “king”:
* The noun stem –ευ drops the –υ before another vowel, leaving just an –ε for its stem vowel.
* The genitive singular ending lengthens from –ος to –ως, due to transference of quantity.
* The accent persists on the stem vowel, –ευ or –ε. Note that for the dative singular, the original form was βασιλέ–ι, the noun stem plus the case ending. These two vowels form a diphthong, and the resulting accent, as expected, forms a circumflex.
* The nominative plural lengthens the –ε to an –η (-έὲς = –ῆς).
* The endings for the accusative singular and plural do not contract (the α of both endings is long).
Not long after the Classical period, the NOMINATIVE and ACCUSATIVE PLURALS of these –ευ nouns change to –εῖς, in parallel with the endings shared by –ι stem nouns and –υ stem nouns such as ὁ πρέσβυς –εως. The rest of the noun inflects as it did in the Classical period.
{| class="wikitable"
|+ βασιλεύς -έως ὁ king (post-Classical forms in parentheses)
! Case !! Singular !! Plural
|-
| Nominative || ὁ βασιλεύς || οἱ βασιλῆς (βασιλεῖς)
|-
| Genitive || τοῦ βασιλέως || τῶν βασιλέων
|-
| Dative || τῷ βασιλεῖ || τοῖς βασιλεῦσι
|-
| Accusative || τὸν βασιλέα || τοὺς βασιλέας (βασιλεῖς)
|}
Also inflected on this pattern are the following two nouns:
* ἱερεύς -έως ὁ priest
* ἱππεύς -έως ὁ horseman, charioteer
====3. Ships!====
The noun ἡ ναῦς, νεώς “ship” is a common word in Greek, as might be expected for a people closely associated with seafaring. The stem for this noun ends in –αυ. Like noun stems ending in –ευ, –αυ nouns exhibit more irregularities than stems that end in just –υ. The inflection pattern of ἡ ναῦς, νεώς must be memorized, though some observations may help.
* The vowel stem –αυ drops the –υ before another vowel, resulting in a vowel stem of either –ε or –η.
* The genitive singular ending lengthens from –ος to –ως, due to transference of quantity.
* The accent pattern follows that of a monosyllabic nouns of the 3rd Declension.
* The accusative singular uses –ν instead of –α.
* The nominative singular and accusative plural are identical in form.
{| class="wikitable"
|+ ναῦς, νεώς ἡ ship
! Case !! Singular !! Plural
|-
| Nominative || ἡ ναῦς || αἱ νῆες
|-
| Genitive || τῆς νεώς || τῶν νεῶν
|-
| Dative || τῇ νηί || ταῖς ναυσί
|-
| Accusative || τὴν ναῦν || τὰς ναῦς
|}
====4. Bulls!====
The noun βοῦς, βοός bull or cow, is also a common word in Greek. These animals were important not only for farming and animal husbandry, but for sacrifices.
The stem for this noun ends in –ου. Like noun stems ending in –ευ and –αυ, –ου nouns exhibit irregularities. The inflection pattern of βοῦς, βοός must be memorized, though some observations may help.
* The vowel stem –ου drops the –υ before another vowel, resulting in a vowel stem of –ο.
* The genitive singular remains –ος. No transference of quantity can occur, since the stem vowel –ο is short.
* The accent pattern follows that of a monosyllabic nouns of the 3rd Declension.
* The genitive singular and nominative plural endings do not contract.
* The accusative singular uses –ν instead of –α.
* The nominative singular and accusative plural are identical in form.
{| class="wikitable"
|+ βοῦς, βοός ὁ bull, ox; ἡ cow
! Case !! Singular !! Plural
|-
| Nominative || ὁ, ἡ βοῦς || οἱ, αἱ βόες
|-
| Genitive || τοῦ, τῆς βοός || τῶν, τῶν βοῶν
|-
| Dative || τῷ, τῇ βοί || τοῖς, ταῖς βουσί
|-
| Accusative || τὸν, τὴν βοῦν || τοὺς, τὰς βοῦς
|}
===Kings, ships, cows, and the digamma===
Early Greek used three additional letters: KOPPA (ϙ), a K sound later retained as the numeral 90; SAMPI (ϡ), a double-S sound retained as 900; and DIGAMMA (ϝ), representing W.
Digamma disappeared from most dialects by the Classical period, affecting words with stems ending in –ευ, –αυ, and –ου. For example, βασιλέως, βασιλεῖ, and βασιλέα derive from earlier βασιλήϝος, βασιλήϝι, and βασιλήϝα. Similarly, νεώς and βοός derive from νηϝός and βοϝός. The loss of digamma and shifts in vowel quantity produced the later forms. Compare Latin ''navis'' and ''bovis'', which preserve W as V. Latin also retained koppa, which gave rise to the English letter Q.
==Vocabulary==
===Masculine Nouns===
* ὁ ἀλέκτωρ, ἀλέκτορος: rooster
* ὁ αἰών, αἰῶνος: age, era, eternity
* ὁ ἀλιεύς, ἀλιέως: fisherman
* ὁ ἀμπελών, ἀμπελῶνος: vineyard
* ὁ ἀνήρ, ἀνδρός: man, husband
* ὁ ἀρχιερεύς, ἀρχιερέως: high priest
* ὁ ἄρχων, ἄρχοντος: ruler, leader
* ὁ ἀστήρ, ἀστέρος: star
* ὁ βασιλεύς, βασιλέως: king
* ὁ γονεύς, γονέως: parent
* ὁ γραμματεύς, γραμματέως: scribe, legal expert
* ὁ δράκων, δράκοντος: dragon
* ὁ ἡγεμών, ἡγεμόνος: ruler, governor
* ὁ ἱερεύς, ἱερέως: priest
* ὁ ἰχθύς, ἰχθύος: fish
* ὁ κῆρυξ, κήρυκος: herald, proclaimer
* ὁ κύων, κυνός: dog
* ὁ λέων, λέοντος: lion
* ὁ μάρτυς, μάρτυρος: witness
* ὁ μήν, μηνός: month
* ὁ Μωϋσῆς, Μωϋσέως: Moses
* ὁ ὀδούς, ὀδόντος: tooth
* ὁ ὄφις, ὄφεως: snake, serpent
* ὁ πατήρ, πατρός: father
* ὁ ποιμήν, ποιμένος: shepherd
* ὁ πούς, ποδός: foot
* ὁ σωτήρ, σωτῆρος: savior
* ὁ Σίμων, Σίμωνος: Simon
* ὁ χαλκεύς, χαλκέως: metalworker
* ὁ θώραξ, θώρακος: breastplate
===Feminine Nouns===
* ἡ ἄνεσις, ἀνέσεως: relief, rest
* ἡ ἀνάλημψις, ἀναλήμψεως: taking up, ascension
* ἡ ἀνάστασις, ἀναστάσεως: resurrection
* ἡ ἀντίθεσις, ἀντιθέσεως: opposition
* ἡ ἀντίλημψις, ἀντιλήμψεως: help, assistance
* ἡ ἀπόκρισις, ἀποκρίσεως: answer, reply
* ἡ ἀποκάλυψις, ἀποκαλύψεως: revelation
* ἡ ἄφεσις, ἀφέσεως: release, forgiveness
* ἡ ἀσπίς, ἀσπίδος: asp, venomous snake
* ἡ αἴσθησις, αἰσθήσεως: perception, discernment
* ἡ βρῶσις, βρώσεως: eating, food
* ἡ γένεσις, γενέσεως: origin, birth
* ἡ γνῶσις, γνώσεως: knowledge
* ἡ γυνή, γυναικός: woman, wife
* ἡ δύναμις, δυνάμεως: power, mighty deed
* ἡ εἰκών, εἰκόνος: image
* ἡ ἐλπίς, ἐλπίδος: hope
* ἡ ἐπίγνωσις, ἐπιγνώσεως: knowledge, recognition
* ἡ ἔκστασις, ἐκστάσεως: astonishment, trance
* ἡ ἔνδειξις, ἐνδείξεως: proof, indication
* ἡ ἕξις, ἕξεως: habit, practice
* ἡ ἔρις, ἔριδος: strife, quarrel
* ἡ ἐπίθεσις, ἐπιθέσεως: laying on, imposition
* ἡ θλῖψις, θλίψεως: affliction, trouble
* ἡ θυγάτηρ, θυγατρός: daughter
* ἡ θρίξ, τριχός: hair
* ἡ ἰσχύς, ἰσχύος: strength
* ἡ κρίσις, κρίσεως: judgment
* ἡ κλεῖς, κλειδός: key
* ἡ κλῆσις, κλήσεως: calling
* ἡ κτίσις, κτίσεως: creation, created thing
* ἡ μάστιξ, μάστιγος: whip, scourge
* ἡ μετάθεσις, μεταθέσεως: transfer, change
* ἡ μήτηρ, μητρός: mother
* ἡ νύξ, νυκτός: night
* ἡ παράκλησις, παρακλήσεως: appeal, encouragement, consolation
* ἡ παράδοσις, παραδόσεως: tradition, handing down
* ἡ πίστις, πίστεως: faith, trust
* ἡ πόλις, πόλεως: city
* ἡ πτέρυξ, πτέρυγος: wing
* ἡ σάλπιγξ, σάλπιγγος: trumpet
* ἡ σάρξ, σαρκός: flesh
* ἡ συνείδησις, συνειδήσεως: conscience
* ἡ σύνεσις, συνέσεως: understanding
* ἡ ὑπόστασις, ὑποστάσεως: being, reality, assurance
* ἡ φανέρωσις, φανερώσεως: manifestation
* ἡ φλόξ, φλογός: flame
* ἡ χείρ, χειρός: hand
* ἡ χάρις, χάριτος: grace, favor, thanks
* ἡ χιλιάς, χιλιάδος: thousand
* ἡ ὄψις, ὄψεως: appearance, sight
* ἡ φρήν, φρενός: mind; usually found in the plural
===Neuter Nouns===
* τὸ ἅλας, ἅλατος: salt
* τὸ αἷμα, αἵματος: blood
* τὸ ἄνθος, ἄνθους: flower
* τὸ ἀνάθεμα, ἀναθέματος: anathema, something accursed
* τὸ βάθος, βάθους: depth
* τὸ βάπτισμα, βαπτίσματος: baptism
* τὸ βῆμα, βήματος: platform, judgment seat
* τὸ βρέφος, βρέφους: infant
* τὸ γάλα, γάλακτος: milk
* τὸ γένος, γένους: kind, race, family
* τὸ γόνυ, γόνατος: knee
* τὸ γράμμα, γράμματος: letter, writing
* τὸ δόγμα, δόγματος: decree, ordinance
* τὸ ἔθνος, ἔθνους: nation, people
* τὸ ἔθος, ἔθους: custom, practice
* τὸ ἔλεος, ἐλέους: mercy
* τὸ ἔτος, ἔτους: year
* τὸ θέλημα, θελήματος: will, desire
* τὸ κέρας, κέρατος: horn
* τὸ κέρδος, κέρδους: gain, profit
* τὸ κλάσμα, κλάσματος: fragment, broken piece
* τὸ κλίμα, κλίματος: region, district
* τὸ κράτος, κράτους: might, power
* τὸ κρέας, κρέως: meat, flesh
* τὸ κρίμα, κρίματος: judgment, verdict
* τὸ καύχημα, καυχήματος: boast, reason for boasting
* τὸ κήρυγμα, κηρύγματος: proclamation, preaching
* τὸ μέγεθος, μεγέθους: greatness, magnitude
* τὸ μέλι, μέλιτος: honey
* τὸ μέλος, μέλους: member, limb
* τὸ μέρος, μέρους: part, portion
* τὸ μῆκος, μήκους: length
* τὸ ὄνομα, ὀνόματος: name
* τὸ ὄνειδος, ὀνείδους: reproach, disgrace
* τὸ ὄρος, ὄρους: mountain
* τὸ οὖς, ὠτός: ear
* τὸ ὄφελος, ὀφέλους: benefit, use
* τὸ πάθος, πάθους: passion, suffering
* τὸ πένθος, πένθους: mourning, grief
* τὸ πέλαγος, πελάγους: sea, open water
* τὸ πλάτος, πλάτους: breadth, width
* τὸ πνεῦμα, πνεύματος: spirit, breath
* τὸ πλῆθος, πλήθους: multitude, crowd
* τὸ πλεόνασμα, πλεονάσματος: surplus, abundance
* τὸ πρᾶγμα, πράγματος: deed, thing, matter
* τὸ πρόσκομμα, προσκόμματος: stumbling block, offense
* τὸ πῦρ, πυρός: fire
* τὸ πλήρωμα, πληρώματος: fullness
* τὸ ῥῆμα, ῥήματος: word, saying
* τὸ σκεῦος, σκεύους: vessel, possession
* τὸ σκότος, σκότους: darkness
* τὸ σπέρμα, σπέρματος: seed, offspring
* τὸ στόμα, στόματος: mouth
* τὸ σῶμα, σώματος: body
* τὸ στίγμα, στίγματος: mark
* τὸ τέλος, τέλους: end, goal
* τὸ τέρας, τέρατος: wonder, sign
* τὸ φρέαρ, φρέατος: well
* τὸ φῶς, φωτός: light
* τὸ ὕδωρ, ὕδατος: water
* τὸ ὕψος, ὕψους: height
* τὸ χάραγμα, χαράγματος: mark, imprint
* τὸ χάσμα, χάσματος: chasm, great divide
* τὸ χρῖσμα, χρίσματος: anointing
* τὸ ψεῦδος, ψεύδους: falsehood, lie
{{BookCat}}
ehycxb291viw988e3a6gtc1o9kewgbv
About Monsters And Angels/Questions And Answers
0
486351
4676246
4676075
2026-10-15T12:24:17Z
MathXplore
3097823
Added {{[[Template:BookCat|BookCat]]}} using [[User:1234qwer1234qwer4/BookCat.js|BookCat.js]]
4676246
wikitext
text/x-wiki
== Questions and Answers ==
'''Q: Where did the word "monster" come from?''' <br>
<br>
A: Monster derives from the Latin ''monstrum''. Monstrum is derived from the verb ''moneo'', which means "to remind, warn, instruct, or foretell." [2] <br>
The early, 14th century meaning of the word "monster" originally referred to a malformed human, animal, or to a birth defect that was interpreted as a supernatural sign, or as a warning from the divine. [3] <br>
Towards the end of the 14th century, the word expanded to include mythical beasts. In the 1520s, the word began to describe massive animals. Around the 1550s, the word started to describe evil people, characterized by their inhuman cruelty or wickedness. By the 19th century, the word "monster" was used as an adjective to describe things of gigantic size. [2]
'''Q: What are cryptids?'''<br>
<br>
A: A '''cryptid''' is an animal or creature whose existence is claimed through folklore, legends, or eyewitness accounts, but which has never been scientifically proven or verified by mainstream zoology. [1]
<br>
<br>
'''Q: What is the oldest mythical creature?''' <br>
<br>
A: There is no single oldest mythical creature. Prehistoric Art depicted hybrid beings long before written records existed. Luckily, Archaeology and ancient literature points to a few of the oldest recorded monsters. <br>
<br>
'''Earliest Prehistoric Art:'''
<br>
The Lion-Man [Hohlenstein-Stadel]: This 40,000 - to - 44,000-year-old ivory carving was discovered in Germany. It is a carving of a human body with a lion's head. [4] <br>
<br>
Indonesian Cave Art: A 44,000-year-old rock Art painting in Sulawesi, Indonesia, depicts part-human, part-animal figures. These therianthropes are shown hunting. This proves that humans imagined hybrid creatures deep in the Stone Age. [5]
<br>
<br>
'''Early Literature:''' <br>
Some of the oldest written monsters in human literature can be found in the ancient Mesopotamian ''Epic of Gilgamesh'', a piece of literature dating around 2000 BCE. Humbaba and the Scorpion-men may be some of the oldest monsters in history. [6]
<br>
<br>
<br>
==== References: ====
1. "List of Cryptids." October 13, 2026. In Wikipedia, https://en.wikipedia.org/wiki/List_of_cryptids <br>
<br>
2. "Monster." October 12, 2026. In Wikipedia, https://en.wikipedia.org/wiki/Monster <br>
<br>
3. "What is a monster?" September 7, 2015. University of Cambridge. https://www.cam.ac.uk/research/discussion/what-is-a-monster <br>
<br>
4. "Lion-man of Hohlenstein-Stadel." September 14, 2026. In Wikipedia, https://en.wikipedia.org/wiki/Lion-man_of_Hohlenstein-Stadel
<br>
<br>
5. Rigby, Sara. "44,000-year-old Cave Art Depicts Earliest-Known Mythical Beasts" December 12, 2019. BBC Science Focus Magazine https://www.sciencefocus.com/news/440000-year-old-cave-art-depicts-earliest-known-mythical-beasts <br>
<br>
6. "Epic of Gilgamesh." September 28, 2026. In Wikipedia, https://en.wikipedia.org/wiki/Epic_of_Gilgamesh <br>
<br>
{{BookCat}}
r5qj3by5tcf1owatizo2lj84mq14q88
User talk:~2026-55256-96
3
486359
4676248
2026-10-15T12:25:01Z
MathXplore
3097823
Notifying author about page tagging
4676248
wikitext
text/x-wiki
== I have added a tag to a page you created ==
Hi! I'm MathXplore, and I recently reviewed your page, [[:Strong Pseudoprimes/First Million]]. I have added a tag to the page, because it <strong>has some problems that need to be looked at.</strong> If you have any questions or concerns, please [[User talk:MathXplore|let me know]]. Thank you! <!-- Substituted from User:JJPMaster/CurateThisPage/authorMsg --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:25, 15 October 2026 (UTC)
9ukw3mr5fpo8hquckgsfy6jreion7hl
User talk:Rudrashares01
3
486360
4676250
2026-10-15T12:25:54Z
MathXplore
3097823
Notifying author of speedy deletion nomination
4676250
wikitext
text/x-wiki
== I have added a tag to a page you created ==
Hi! I'm MathXplore, and I recently reviewed your page, [[:User:Rudrashares01/sandbox]]. I have added a tag to the page, because it <strong>may meet the [[Wikibooks:Deletion policy#Speedy deletions|criteria for speedy deletion]].</strong> This means that it can be deleted at any time. If you believe that your page should not be deleted, please post a message on [[User talk:Rudrashares01/sandbox|the page's talk page]] explaining why. <strong>If your reasoning is convincing, your page may be saved.</strong> If you have any questions or concerns, please [[User talk:MathXplore|let me know]]. Thank you! <!-- Substituted from User:JJPMaster/CurateThisPage/authorMsg --> [[User:MathXplore|MathXplore]] ([[User talk:MathXplore|discuss]] • [[Special:Contributions/MathXplore|contribs]]) 12:25, 15 October 2026 (UTC)
hmdp1lyz929rm8626qe94b5tsnfxkzn
User:VastV0idInSpace0/common.js
2
486362
4676276
2026-10-15T17:13:20Z
VastV0idInSpace0
3392849
Created page with "mw.loader.load( '//www.mediawiki.org/w/load.php?modules=ext.gadget.Global-Subpages' );"
4676276
javascript
text/javascript
mw.loader.load( '//www.mediawiki.org/w/load.php?modules=ext.gadget.Global-Subpages' );
t2j11579dyvpseoqlu91fx9uz0ak5z7
4676277
4676276
2026-10-15T17:14:45Z
VastV0idInSpace0
3392849
Blanked the page
4676277
javascript
text/javascript
phoiac9h4m842xq45sp7s6u21eteeq1
Talk:Koine Greek/Declining 3rd Declension Nouns
1
486363
4676305
2026-10-15T21:25:25Z
It-is-Truly-Meet
3624460
/* Information Source */ new section
4676305
wikitext
text/x-wiki
== Information Source ==
Source: Adapted and reorganized from Wilfred E. Major and Michael Laughy, ''Ancient Greek for Everyone'', [https://pressbooks.pub/ancientgreek/chapter/24/ Chapter 24]. Original licensed under [[ccorg:licenses/by/4.0/|CC BY 4.0]]. The material has been reorganized. [[User:It-is-Truly-Meet|It-is-Truly-Meet]] ([[User talk:It-is-Truly-Meet|discuss]] • [[Special:Contributions/It-is-Truly-Meet|contribs]]) 21:25, 15 October 2026 (UTC)
bsp54g2bfcojzbndmz0njgv37vn1v6f
Wikibooks:Patrollers
4
486364
4676315
2026-10-15T23:35:33Z
Codename Noreste
3441010
Creating a basic description page, feel free to expand.
4676315
wikitext
text/x-wiki
[[File:Wikibooks Patroller Icon.svg|right|150px]]
'''Patrollers''' are a group of users with the technical ability to patrol new pages, not create redirects when moving pages, and quickly revert malicious edits using the [[WB:ROLLBACK|rollback feature]]. In addition, their edits are automatically marked as patrolled by the MediaWiki software.
[[Category:User groups]]
kph671r59m55qvnjvsuxwlntz4y8c3s
About Monsters And Angels/Chapter One Part Two
0
486365
4676318
2026-10-16T00:57:32Z
3MMPEYTON
3393808
Created page with "== Chapter One: Monsters And Their Human Origin (Part Two) == Social Conflicts That Created Monsters:"
4676318
wikitext
text/x-wiki
== Chapter One: Monsters And Their Human Origin (Part Two) ==
Social Conflicts That Created Monsters:
qmwbxyhj64lfn4l1t9ml0ytxp8scdrl
4676328
4676318
2026-10-16T06:01:37Z
3MMPEYTON
3393808
4676328
wikitext
text/x-wiki
== Chapter One: Monsters And Their Human Origin (Part Two) ==
"The old world is dying, and the new world struggles to be born: now is the time of monsters." - Antonio Gramsci.
'''Social Conflicts That Created Monsters:''' <br>
People can transform into monsters, often because of war, or social conflicts that push them beyond the extreme. History is filled with the accounts of normal people, who slowly began acting in ways they never would have before their lives, or the world changed.
True evil often has a human face. Men like Hitler, Stalin, Mao Zedong, and Vlad Tepes used their power to inflict cruelty on a massive scale.
A primary source for Bram Stoker's Dracula, was the Wallachian price Vlad Tepes, commonly known as Vlad the Impaler, a name he earned because of his habit of beheading and skewering criminals, or his enemies, on giant wooden stakes. During an era of harsh brutality, Vlad was known as a butcher! He was a ruler, and a military commander during the 15th century. Although he was the son of Vlad II Dracul, a member of the Order of the Dragon, he was sent as a political hostage to the Ottoman Empire in 1442 with his brother Radu. He spent years under Sultan Murad II, where he witnessed local political tactics. He seized political power in Wallachia in 1456. He worked to crush rival noble fractions, and to unify people under his authority. [1] <br>
He ruled with an iron fist. He was reported as being unnaturally brutal and cruel. He impaled criminals, his enemies, and political rivals. He burned people alive, and even boiled people to death in large iron cauldrons. [2] <br>
Vlad is credited with killing tens of thousands, including a mass execution of thousands of Ottoman and Saxon captives in 1462. [1]
Vlad was given the nickname Draculea, or "Son of Dragon." His father, was known as the Dragon. In his native language [Wallachia], the word Dracula meant "devil." [2]
The fictional monster, Count Dracula, clearly developed from the historical Vlad, a man who performed monstrous deeds.
'''Environmental Monsters:''' <br>
Some monsters emerge from human mistakes. <br>
Chemical spills and toxic waste are common pop-culture tropes used to explain the creation of giant mutants, and post-apocalyptic monsters. <br>
These monsters are cultural expressions, emerging in our modern era to address current issues such as pollution, or fear of radiation poisoning. <br>
<br>
A classic Japanese Toho film, ''Godzilla vs. Hedorah'' (1971) pits Godzilla against Hedorah, the Smog Monster created from industrial pollution and toxic sludge. <br>
<br>
''The Toxic Avenger'' (2023 / 1984) is a film that explores the life of Winston Gooze, a janitor who falls into a vat of toxic waste. Gooze is transformed into a deformed, unnaturally strong mutant vigilante. <br>
<br>
Godzilla, a popular radioactive monster, was originally a prehistoric sea reptile who was awakened and mutated by radiation from hydrogen bomb testing in the Pacific ocean. The monster was a modern allegory for the atomic bombing of Japan's major cities Hiroshima and Nagasaki. <br>
<br>
In films, monsters can be helpful, or cold-blooded creatures whose transformations maybe symbolic of the transformation our culture has undergone after the Industrial Revolution and World War II.
<br>
<br>
==== References: ====
1. "Vlad the Impaler." October 3, 2026 In Wikipedia https://en.wikipedia.org/wiki/Vlad_the_Impaler <br>
<br>
2. Estep, Richard. Monsters: Myths, Legends, and Real Encounters. Visible Ink Press 2026 <br>
<br>
oereo4v9k7hojfw2ssut0m7hau3zbkf
4676335
4676328
2026-10-16T07:16:00Z
3MMPEYTON
3393808
4676335
wikitext
text/x-wiki
== Chapter One: Monsters And Their Human Origin (Part Two) ==
"The old world is dying, and the new world struggles to be born: now is the time of monsters." - Antonio Gramsci.
'''Social Conflicts That Created Monsters:''' <br>
People can transform into monsters, often because of war, or social conflicts that push them beyond the extreme. History is filled with the accounts of normal people, who slowly began acting in ways they never would have before their lives, or the world changed.
True evil often has a human face. Men like Hitler, Stalin, Mao Zedong, and Vlad Tepes used their power to inflict cruelty on a massive scale.
A primary source for Bram Stoker's Dracula, was the Wallachian price Vlad Tepes, commonly known as Vlad the Impaler, a name he earned because of his habit of beheading and skewering criminals, or his enemies, on giant wooden stakes. During an era of harsh brutality, Vlad was known as a butcher! He was a ruler, and a military commander during the 15th century. Although he was the son of Vlad II Dracul, a member of the Order of the Dragon, he was sent as a political hostage to the Ottoman Empire in 1442 with his brother Radu. He spent years under Sultan Murad II, where he witnessed local political tactics. He seized political power in Wallachia in 1456. He worked to crush rival noble fractions, and to unify people under his authority. [1] <br>
He ruled with an iron fist. He was reported as being unnaturally brutal and cruel. He impaled criminals, his enemies, and political rivals. He burned people alive, and even boiled people to death in large iron cauldrons. [2] <br>
Vlad is credited with killing tens of thousands, including a mass execution of thousands of Ottoman and Saxon captives in 1462. [1]
Vlad was given the nickname Draculea, or "Son of Dragon." His father, was known as the Dragon. In his native language [Wallachia], the word Dracula meant "devil." [2]
The fictional monster, Count Dracula, clearly developed from the historical Vlad, a man who performed monstrous deeds.
'''Environmental Monsters:''' <br>
Some monsters emerge from human mistakes. <br>
Chemical spills and toxic waste are common pop-culture tropes used to explain the creation of giant mutants, and post-apocalyptic monsters. <br>
These monsters are cultural expressions, emerging in our modern era to address current issues such as pollution, or fear of radiation poisoning. <br>
<br>
A classic Japanese Toho film, ''Godzilla vs. Hedorah'' (1971) pits Godzilla against Hedorah, the Smog Monster created from industrial pollution and toxic sludge. <br>
<br>
''The Toxic Avenger'' (2023 / 1984) is a film that explores the life of Winston Gooze, a janitor who falls into a vat of toxic waste. Gooze is transformed into a deformed, unnaturally strong mutant vigilante. <br>
<br>
Godzilla, a popular radioactive monster, was originally a prehistoric sea reptile who was awakened and mutated by radiation from hydrogen bomb testing in the Pacific ocean. The monster was a modern allegory for the atomic bombing of Japan's major cities Hiroshima and Nagasaki. <br>
<br>
In films, monsters can be helpful, or cold-blooded creatures whose transformations maybe symbolic of the transformation our culture has undergone after the Industrial Revolution and World War II.
<br>
<br>
Many monster traditions can be traced to real people or real situations. Examples include: <br>
- individuals who were marginalized. <br>
- people suffering from disease. <br>
- victims of injustice or violence. <br>
- historical figures whose actions became exaggerated or symbolic. <br>
Understanding the human connection helps explain why certain monsters appear in specific cultural contexts.
<br>
<br>
==== References: ====
1. "Vlad the Impaler." October 3, 2026 In Wikipedia https://en.wikipedia.org/wiki/Vlad_the_Impaler <br>
<br>
2. Estep, Richard. Monsters: Myths, Legends, and Real Encounters. Visible Ink Press 2026 <br>
<br>
0vgsjuse4i0i5icq66ms59ny05agd53
Talk:Super Mario World/Special/Gnarly
1
486366
4676325
2026-10-16T04:27:00Z
~2026-55503-35
3628522
/* Needs more detail */ new section
4676325
wikitext
text/x-wiki
== Needs more detail ==
More details are needed. Level map? Features? [[Special:Contributions/~2026-55503-35|~2026-55503-35]] ([[User talk:~2026-55503-35|talk]]) 04:27, 16 October 2026 (UTC)
16r9yyh63tzrsv6ek1kyqsui5p0gwsf
Wikibooks:Reading room/Archives/2026/August
4
486368
4676336
2026-10-16T08:10:32Z
ArchiverBot
1227662
Bot: Archiving 1 thread from [[Wikibooks:Reading room/General]]
4676336
wikitext
text/x-wiki
{{talk archive}}
== August 2026 Wikimedia Café meetups regarding [https://meta.wikimedia.org/wiki/Next_25 Next 25] ==
<div class="border-box" style="background-color: var(--background-color-warning-subtle, #f8eaba); max-width: 875px; padding: 5px; border: 1px solid black; margin: 5px; color: var(--clr-dark)">
<div class="box" style="float:left; padding-top: 10px; padding-right: 10px; padding-left: 10px; padding-bottom: 10px;">[[File:Wikimedia Café logo in plain SVG format.svg|60px|alt=The logo for the Wikimedia Café]]</div>
Hello! There will be two '''[https://meta.wikimedia.org/wiki/Wikimedia_Caf%C3%A9 Wikimedia Café]''' discussion opportunities in August. Both sessions will focus on [https://meta.wikimedia.org/wiki/Next_25 the Next 25 initiative], including [https://meta.wikimedia.org/wiki/Next_25/A_proposal_to_frame_Next_25 framing the initiative]. Participants may attend either or both Café sessions.
#'''29 August 2026 15:00 UTC''' ([https://zonestamp.toolforge.org/1788015600 timestamp converter]), at a time friendly to the Americas, Africa, and Europe
#'''30 August 2026 03:00 UTC''' ([https://zonestamp.toolforge.org/1788058800 timestamp converter]), at a time friendly to Asia and the Pacific
Please see the [https://meta.wikimedia.org/wiki/Wikimedia_Caf%C3%A9 Café] page for more information, including [https://meta.wikimedia.org/wiki/Wikimedia_Caf%C3%A9#Agenda._This_will_be_an_approximately_1_hour_Caf%C3%A9_session agenda details] and [https://meta.wikimedia.org/wiki/Wikimedia_Caf%C3%A9#How_to_attend_the_session how to register]!
To subscribe or unsubscribe for Café notices on your talk page please [https://meta.wikimedia.org/wiki/Global_message_delivery/Targets/Wikimedia_Caf%C3%A9 go here].
<br />
[[File:Buntstifte Eberhard Faber crop 64h.jpg|860px|alt=cropped image of colored pencils]]</div>
<span style="white-space:nowrap;">[[User:Pine|<span style="color:#01796f; text-shadow:#00BFFF 0 0 1.0em">༄ᨒ𖠰 Pine</span>]] [[User talk:Pine|<span style="color:DeepSkyBlue">(<b style="color:#FFDF00;text-shadow:#FFDF00 0 0 1.0em">✉</b>)</span>]]</span> 01:32, 17 August 2026 (UTC)
gtkj2a45zwni9ggp2reu3o673fnz6yy
User:SHB2000
2
486369
4676346
2026-10-16T11:56:12Z
SHB
3332924
prevent redlinks
4676346
wikitext
text/x-wiki
#REDIRECT [[User:SHB]]
5wph98u05xy5nz35v3ad659ncdn0kvo