###sysinclude standard.uh ###sysinclude args.uh ###sysinclude str.uh ###sysinclude io.uh #g argc 3 < { ."Usage: peri brainfuck02.upu brainfuckfile\n" }{ 2 argv getfile sto bfpgm tick sto startingtick @bfpgm '< >><< @bfpgm '> >><< @bfpgm '+ >><< @bfpgm '- >><< 100000 mem dup maximize sto bfmem // Memóriaallokáció a brainfuck memóriaterület számára sbr §brainfuck NL tick @startingtick #g - ."Time = " print ." tick\n" @bfmem inv mem // A lefoglalt munkamemória felszabadítása } end // =================================================== brainfuck: #g bfpgm~ inv { rts } // Ha nulla a brainfuck progi hossza, semmit se kell csinálni. zero pp zero mm // Indexregiszterek lenullázása (inicializálás) mainloop: @pp bfpgm~ >= { rts } @bfpgm @pp [] // Az épp aktuális brainfuck utasítás kódja $ffffffff & goto §jumpingtable[] // Ugrás a megfelelő brainfuck funkció rutinjára ____: ++() pp goto §mainloop _3c_: @mm inv { rts } @bfpgm @pp [] 32 >> inv sum mm goto §____ // < _3e_: @mm bfmem~ >= { rts } @bfpgm @pp [] 32 >> sum mm goto §____ // > _2b_: @bfmem @mm [] @bfpgm @pp [] 32 >> #c + goto §minusba // + _2d_: @bfmem @mm [] @bfpgm @pp [] 32 >> #c - minusba: @bfmem @mm inv rot inv [] #g goto §____ // - _2c_: @bfmem @mm getchar inv [] goto §____ _2e_: @bfmem @mm [] printchar goto §____ _5b_: @bfmem @mm [] then §____ zero dd @pp ++ bfpgm~ {{ , @bfpgm {{}} [] '[ == { ++() dd {{<}} } @bfpgm {{}} [] '] == { @dd inv { {{+}} sto pp {{>}} } --() dd } }} goto §mainloop _5d_: zero dd 1 @pp {{ , @bfpgm {{-}} [] '] == { ++() dd {{<}} } @bfpgm {{-}} [] '[ == { @dd inv { {{}} inv sum pp {{>}} } --() dd } }} goto §mainloop // =================================================== { „startingtick” } { „bfpgm” } { „bfmem” } { „pp” /* index az épp végrehajtandó brainfuck mnemonikra */ } { „mm” /* index a brainfuck memóriaterületre */ } { „dd” /* munkaváltozó */ } // ======================================== jumpingtable: // 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f /* 00 */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ /* 01 */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ /* 02 */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §_2b_ §_2c_ §_2d_ §_2e_ §____ /* 03 */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §_3c_ §____ §_3e_ §____ /* 04 */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ /* 05 */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §_5b_ §____ §_5d_ §____ §____ /* 06 */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ /* 07 */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ /* 08 */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ /* 09 */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ /* 0a */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ /* 0b */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ /* 0c */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ /* 0d */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ /* 0e */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ /* 0f */ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____ §____