Przeczytałem wpis pana Chena o procesorach, które nie miały skoku do subrutyny i stosu: https://devblogs.microsoft.com/oldnewthing/20240401-00/?p=109599
Potem przeczytałem komentarz o kimś kto miał podobne przygody, ponieważ stworzył układ multipleksera portów szeregowych na Z80 i nie chciał używać RAM: https://news.ycombinator.com/item?id=39921674
Oczywiście źle go zrozumiałem. Myślałem, że w Z80 można przetransferować wartość z PC do jakiejś pary rejestrów. Siedziałem rano i szukałem instrukcji takiego transferu w spisie.
Kiedy okazało się, że to niemożliwe, pomyślałem że coś źle zrozumiałem. Może podłączył Z80 SIO do magistrali pamięci i jakieś jego 2 rejestry używał jako stosu skoków.
Oczywiście potem ponownie przeczytałem ten komentarz i zrozumiałem, że podczas kodowania wpisywał przed skokiem do par rejestrów adres powrotu (pewnie adres :etykiety za skokiem). Po zakończeniu subrutyny robił skok na adres w parze tych rejestrów (prawdopodobnie JP (HL)).
Jak dobrze, że RISC-V zapisuje adres powrotu w rejestrze. Można go używać bez RAMu :_>
Hm, nie wiedziałem, że istniały procesory, które wpisywały adres powrotu na początku funkcji.
Współczesne CPU też działają bez RAMu. Emulują go pamięcią podręczną. :-)
Czytałem, że cache jako RAM jest tylko w jakiś modelach Xeon.
Czy na etapie rozruchu każdy procesor tak ma?
Dawniej na płycie głównej był osobny SRAM chyba 32kB dla rozruchu, przed skonfigurowaniem kontrolera pamięci. Dzisiaj tyle bez problemu by umieścili jako pamięć lokalna dla procesora rozruchu/trybu rzeczywistego w samym CPU.
Na pewno każdy współczesny Intel tak ma.