Milyen okok vehették vajon rá őket ilyen módosításokra ? Felteszem elég nyomós okok kellett legyenek, ha megérte nekik inkompatibilissé tenni a korábbi forrásokat ...
Ez a Sjasm egyébként az ismert legnagyobb tudással rendelkező z80 cross compiler, vagy ismerünk másokat is a ligában ?
Tegnapi napomat a galaga valagának elméleti fényezésével töltöttem, pár dolog átsúlyozódott bennem a mikéntekkel kapcsolatban, és lépek kicsit a kevésbé elborultabban optimalizáló irányba, inkább elvesztve 10-30% futási időt, de a memóriát lapozhatóra, kényelmesebben menedzselhetővé téve.
Ennek mellékhatásaként úgy döntöttem, hogy azt hiszem elhagyom a C fordítót és Assembler -re térek át.
Annak idején, mikor a C keresztfordítót kezdtem keresni, a következőket reméltem tőle:
- Kényelem. (Hát ez van, sosem leszek olyan fajta örömprogramozó, aki direkt kitalál magának egy olyan nyelvet, melyben szándékoltan iszonyat nehéz a kódolás ...)
Ez az egy dolog egyébként majdnem működött is, a C az nem assembly, sokkal kényelmesebb, és végülis az SDCC fordít és működik. Csak hát a többi elrontja az összképet.
- Enterprise oldali inicializálás, precomputing. Hogy ne kelljen külön kis programokat írni PC -re az egyes előreszámított adatok, táblázatok kiszámításához, hanem kényelmesen lehessen ilyeneket a programba tenni, amik az EP oldalon lefutnak indításkor és kiszámolják a táblázatokat. A paramétereiket ott helyben a kódban lehet módosítani, ugyanazokkal a konstansokkal megy az összes fordítás, nem kell őket több helyen módosítani, nem kell töltögetéseket írni EP oldalon, stb ... Ez a dolog természetesen a méreten és a sebességen bukott el, túl lassú is az EP+C kombó az inicializálásokhoz, ráadásul a kód is elég sok lesz, feleslegesen foglalja csak a helyet. Simán el tudna foglalni egy szegmenst vagy akár kettőt is egy ilyen C -ről fordított játék inicializálásokat tartalmazó kód, és értéke a felhasználói oldalon meg semmi, hisz a program a generált adatokból dolgozik, ráadásul még lassú is. Szóval marad a PC előreszámolás, EP töltögetés módszer.
- Lokális változók. A PC (win32,msdev) inline assembly -ben jól megszoktam és megszerettem, hogy a C lokális változókhoz az inline assembly -ben használható offset konstansokat generál a fordító, és egy regiszter (ha jól emlékszem ebp, vagy mifranc) tiszteletben tartásával az ember könnyen elérte őket. Namost itt az SDCC -ben nem találtam meg ezeket az offset -eket, nekem kellett megnézzem milyen kódot fordít, és kézzel kell felvegyem a valtozókhoz az offset -eket, melyek egy esetleges fordító változtatásnál ugye invalidálódhatnak is ... meg a kényelmet ugye eléggé csapja agyonfele, hogy felveszel/törölsz/típusmódosítasz egy paramétert vagy lokált, és offszetelgetheted újra őket ... szal ez sem jött be.
Szóval igazából fentiek feladása után nem sok okom maradt a C megtartására, és azzal az assembler -rel akarom folytatni, ami legtöbb lehetőséget nyújtja.
Nem mondom hogy elsőre megértettem az Sjasm doksijában mindent, inkább csak egy benyomásom lett, hogy EP -s assembler -ekhez képest korszerű fogalmakkal és eszközkészlettel dolgozó valami lehet. Most ettől remélem, hogy megkapom azt a lehetőséget, hogy nyilvantart egy "struktúrát", melynek member offset -jeit és hosszát használva könnyen tudok majd stack -et manipulálni és elérni azt, a függvény paramétereim és lokális változóim használatához. Jó ilyenre a Sjasm véleményetek szerint ?