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á...
![:-)](/Smileys/phpbb/ds_icon_smile.gif)
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...
![:-)](/Smileys/phpbb/ds_icon_smile.gif)