perinoid napisał/a:Myślisz zbyt "szablonowo" - język wejściowy to jedno, kod generowany to drugie.
To, że kompilatory istnieją, to jedno, a jaki generują kod, to drugie. Problem jest wielowarstwowy, ale chyba kwintesencją mogłoby być to, że języki programowania ewoluowały razem z procesorami w swoistym sprzężeniu zwrotnym i współczesny kod w C, taki jak się robi go zgodnie ze sztuką nijak ma się do możliwości 6502, za to świetnie współgra z możliwościami współczesnych procesorów. Ja jestem pod wielkim wrażeniem jakie cuda potrafi wygenerować Clang na x64, arm, czy riscv, ale podejrzewam, że backend na 6502 mógłby nie być już taki spektakularny, gdyż 6502 może nie spełniać minimalnych wymagań maszyny na jaką Clang jest w stanie cokolwiek sensownego wygenerować. Jako konkretne problemy można wymienić chociażby kwestie zarządzania pamięcią na tymczasowe zmienne lokalne (naturalny jest stos, który na 6502 trzeba emulować, bo sprzętowy jest mały i trudno dostępny), popularne wzorce adresowania pamięci (które nie mają wsparcia w 6502 przez jego dość specyficzne tryby adresowania), czy rozmiar operandów (dla 6502 nawet 16-bitów jest trudne i pisząc w asemblerze unika się tego sztuczkami, na które niekoniecznie możne sobie pozwolić kompilator nie znający kontekstu i tego co programista miał na myśli).
@mormon
Oczywiście da się zrobić tak jak zaproponowałeś. Tak się nie robi tylko dlatego, że programując w asemblerze nie używa się do tego stosu, a programując w języku wysokiego poziomu nie używa się do tego stosu sprzętowego, bo jest niebezpiecznie mały.