Tak on ten ASM pro I8080 (a odvozený Z80) nebyl moc složitý. Stačilo vědět, jak se bity instrukce dešifrují v řadiči.
MOV X, Y bylo tuším 01xxxyyy, čísla regisrů postupně A, M*), B, C, D, E, H, L. Takže MOV A,M bylo 01000001 -> 0x71. Z80 to mělo značený LD A,(HL)
A některý instrukce si pamatuju doteď - 0x00=NOP, 0xC9=RET, 0xCD=CALL,..
*) M byl fiktivní registr - ve skutečnosti se použil byte v paměti na adrese 256*H+L
Místo MOV M,M alias LD (HL),(HL) je HLT. A vždycky mi vrtalo hlavou, co by to na Z80ce udělalo s prefixem DD nebo FD čili (IX+d) nebo (IY+d) :-)
VĚDĚL jsem to, čestný slovo, ale přiznám se, že pro sichr jsem si to napřed ověřil, abych nenapsal koninu, už je to nějakých 30 let :)
Přesně tak, gratuluju!
Co to dělá s prefixem taky netuším, ale cross assembler pro Z80 existuje a emulátorů je taky hafo, takže to vyzkouším ASAP :-)
PS: Já si to pamatuju hlavně kvůli Aleškovi a jeho perfektnímu vyučování a písemkám. Když jsme začínali s assemblerem, tak vysvětlil registry, vysvětlil instrukci MOV a řekl "tak a teď znáte už přes čtvrtinu instrukcí 8080, to šlo rychle co?" :-)
No a další blok byl aritmetika, tam to jeden operand bralo z A, výsledek šel taky do A a 3b byly pro druhý registr, něco pro operaci (ADD, ADC, SUB, SBC, CMP,...). A takhle se to dělilo na menší a menší bloky...
Z80 to pak pěkně rozšířila o věci jako MOV L,(IX+A), SET 7,C, EX AF a podobný cheaty... Navíc proti 8080 uspořila dva brouky, dva levely napájení, na stejné frekvenci 3x vyšší výkon a vestavěný refresh DRAM... Z80 přišla o rok pozděj než I8080.
My jsme měli smůlu, že v rámci RVHP se U880A a U880B dělala v NDR a MHB8080A s tím marastem okolo v Bratislavě. Soudruzi upřednostňovali tuzemskou součástkovou základnu. Pro jednočipy taky, kralovaly obvody MHB8035, MHB8048 a MHB8748 z Tesly Piešťany... Vzpomene si někdo na rozdíl mezi nima?
Ne. 8035 pez ROM, 8048 s 1kB OTP, 8748 s 1kB EEPROM
Kouzlit s velikostí RAM u předka 8051? To je zajímavá představa...
Neumím si představit výuku na 8048 jinak, než teoreticky. Stylem "vypal a zahoď" u studenta, který si plete instrukce, by tam muselo být sakra hodně dotací z EU...
"Kouzlit s velikostí RAM u předka 8051? To je zajímavá představa..." a přece to tak je, protože existuje 8039 a 8040, kde první má 128 bajtů a druhá dokonce 256 bajtů, asi známejší je 8049 taky se 128 bajty a 2kB EPROM.
"Neumím si představit výuku na 8048 jinak, než teoreticky." - proč? To se přece normálně používalo, teď z hlavy nedám zapojení, ale v ROM byl systém (nějakej monitor) a přes sériák se nahrávaly programy do expanded RAM. Takže napíšeš v ASM na PC, přeložíš pořád ještě na PC, přes sériák přeneses do expanded RAM a jumpneš na tu novou rutinu (to zařídí monitor).
V praxi:
Program Memory is expanded beyond the resident 1K or
2K words by using the 8058 BUS feature of the MCS-48.
All program memory fetches from addresses less than
1024 (2048) occur internally with no external signals being
generated (except ALE which is always present). At
address 1024 the 8048 automatically initiates external
program memory fetches.
No, u téhle architektury je vždycky něco za něco. Je to Harvard, takže toto řešení předpokládá oddělenou paměť dat a programu (signály RD vs PSEN) a uměle spojit tyhle dva adresní prostory. Myslím, že tohle bude pro studenty pěkně matoucí, zapsat u Harvarda program do RAMky a hips, najednou je to v paměti programu, která je přece jinde...
Další věc, obětovýní dvou portů ze čtyř a zpomalenívykonávání programu.
V neposlední řadě, externí RAM je jiná, než interní (nedá se tam hodit stack,..) a jsou tam i další limitace. Třeba komplikace s předáváník parametrů funkcí na zásobníku u Cčka.
Samo rozdělení u těchhle starých plaček na ROM, XROM, RAM, IRAM, XRAM, BIT a SFR bylo pro mě na ASM 51 to nejtěžší... Šest fyzicky oddělených adresních prostorů (6x víc než u ARMu, 3x víc než u I8080 / Z80, 2x víc než u PCI). Prostě mazec.
Ono se to tak používalo, asi nejblíž tomu PMI-80 zmíněného v článku je starobylý http://www.old-computers.com/museum/computer.asp?st=1&c=564 (té kapacitě RAM nevěřte, interní byla samozřejmě menší).
http://www.root.cz/clanky/mikroradice-a-jejich-aplikace-v-jednoduchych-mikropocitacich-2/#k02
Bohužel nemůžu najít, jak vypadal kit, který se používal na střední škole u nás. Mělo to taky klávesničku, sedmisegmentový display a propojení s PC přes sériový port (což byl oproti PMI-80 luxus :-).
Jako učební pomůcka mě to přijde fajn, je to tak jednoduchý, že to pochopí skoro každej, v porovnání s Atmely si dovolím říct, že 8048 má o dost jednodušší instrukční sadu.
Presne tak.
Podle me, k vyuce naprosto nevhodne, protoze to ve studentech vyvola pocit, ze snad vsechny ty obskurni konstrukce jsou pro pocitac v nejakem skrytem smyslu podstatne. Krome toho spotrebuji spoustu usili na prekonavani tehle nastrah, takze na samotny algoritmus, pristup k reseni ulohy a to co se vlastne maji naucit uz mnoho casu nezbyde.
To je jako kdyby se na skolach tvrde vyzadovalo umet nasobit cisla v reprezentaci pomoci rimskych cislic (primo, bez prevodu). Jiste ze to procvici pamet a soustredeni, ale na druhou stranu tim zabijete cas, kdy jste se mohli naucit neco uzitecneho.
Tenkrat, kdyz nic jineho nebylo tak se da pochopit ze ucili na tom co meli, ale dnes neco takoveho ucit je zlocnin, kdyz muzete vzit ARM ktery je elegantni, prehledny a temer minimalisticky a v praxi se pouziva vic nez x48 a x51 dohromady.
To jo, ale v osmdesátých a na začátku devadesátých let to bylo jinak, to sice již 8048 byla překonaná věc, ale stále však trošku jednodušší než 8051 (my jsme dělali oboje, takže se vlastně vysvětlovali jen rozdíly). Dneska by nějaký kit s ARMem (mikrořadičová varianta) byl zajímavej, kdyby se to pojalo rozumným způsobem.
Jasne, v te dobe to schvaluju. Nic lepsiho nebylo.
Taky jsme to meli ve skole a trapili na na tom, uz ted ani nevim jestli to byla 8048 nebo 8051 (melo to instrukci nasobeni, coz mi prislo oproti 6502 jako docela pokrok).
Ale bylo to uz trochu modernizovane, kod se psal normalne na PC, dokonce to umelo krokovat program ktery bezel v tom jednocipu a na PC ukazovat hodnoty registru.
Tak to byla 8051, když to umělo násobit, protože 8048 neuměla vlastně ani odečítat :-) [tedy uměla, ale ne jedinou instrukcí, člověk si musel vyhrát s doplňkem].
Vlastně je typické, že ta násobička byla v 8051 "přilepena" navíc k jádru, na výsledky se používal speciální registr B doplňující A, trošku mě to připomíná MIPS.
No jo, uz jsem tyhle nepotrebne znalosti zapomel, koukam ;)
Prilepit nasobicku k hlavni pipeline neni uplne jednoduche. Treba na PPC to vyresili vyslovene nevhodne (z dnesniho pohledu, kdyz je mozna aby se v kazdem cyklu dokoncilo jedno nasobeni). Ale zase diky tomu zachovali stejnou sirku vsech sbernic v CPU a kod zustal 3 adresovy.
Musím souhlasit. Takový Cortex M0 s matiovou klávesnicí a sedmisegmentovkou by byla fajn.
- Jeden adresní prostor pro adresy, data a periferie. Není rozdíl, jestli appka běží v RAMce nabo v ROMce
- OpenOCD, GDB, GCC, FT2232,... - velmi levný debug
- Nemá to módy jádra jako USR, SVC, SYS,...
- Vždycky je k dispozici UART pro výpisy
Stačí napsat knihovny se správnou mírou abstrakce jako pro Arduino (stačí pro periferky na kitu) a tradá, ideální prostředek pro seznámení s C je na světě.
A k ASM jsem si osobně na ARMu čuchl jenom při psaní vlastního crt.s (nestandardní využití FIQ pro synchronizaci několika brouků), což je tak specifická věc, že se bez toho student v klidu obejde. Škola má dát základy, kdo potřebuje, ten se holt musí ponořit do hloubky.