Itt a javított bf compiler:
http://ep.lgb.hu/jsep/demo/?disk=http%3A%2F%2Fbeac.uw.hu%2Fbf3&mem=128&zt=no&autostart=yes&skiplogo=yesEbben már bőven van verem, de jelenleg maximum 255 egymásba ágyazott ciklus lehet, ha ennél több van, fordításkor hibaüzenettel megáll. Ugyancsak hibaüzenettel megáll, ha páratlan "[", vagy "]" utasítás van a forráskódban (ez már az előző verzióban is meg volt).
A lefordított kódnak 16kB-ba bele kell férnie, de ha ennél nagyobb, nem kapunk hibaüzenetet, de nem fog működni. A fordított kód a 0x4000 - 0x7fff cím között kell lennie, ha ennél nagyobb, átlóg már 0x8000 fölé, ott pedig a Brainfuck definició szerint 30000 byte-os adatmemória kezdődik.
Szóval az az igazság, hogy maga a fordító baromi egyszerű, de ahhoz, hogy hülyebiztos legyen nagyon sok sallangot kell még írni hozzá...
Egyébként azon is gondolkodom, hogy vajon ez fordító, vagy assembler? Van egy fickó, aki épített CPU-t FPGA-ból, ami közvetlenül futtatta a BF kódot.
Elég egyértemű a Bf utasítások és a Z80 utasítások között a megfeleltetés:
+ inc (hl)
- dec (hl)
> inc hl
< dec hl
. call outchar
, call inchar
[ ld a,(hl)
or a
jp z,matching_address
] jp matching_address
Még a teljesítményre lehetne rámenni, hogy ha pl. több "+" utasítás van egymás után, akkor azt ne inc (hl)-ek sorozatára fordítsa, hanem:
ld a,(hl)
add a,number
ld (hl),a
már két inc (hl) helyett is megéri, 22T helyett csak 21T (a fordítóm egyébként pontosan így fordít) -> de ezt majd a többi utasításra is meg kéne csinálni...