< 1162253170 0 :anonfunc!n=pimaniac@wifi-c-173-4.dhcp.CSUChico.EDU JOIN :#esoteric < 1162254726 0 :GregorR-L!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out) < 1162255768 0 :Arrogant!unknown@unknown.invalid QUIT :"Leaving" < 1162259029 0 :Sgeo!unknown@unknown.invalid QUIT :"Ex-Chat" < 1162259282 0 :Sgeo!n=Sgeo@ool-18bf61f7.dyn.optonline.net JOIN :#esoteric < 1162259878 0 :Sgeo!unknown@unknown.invalid QUIT :Remote closed the connection < 1162259947 0 :Sgeo!n=Sgeo@ool-18bf61f7.dyn.optonline.net JOIN :#esoteric < 1162260267 0 :anonfunc!unknown@unknown.invalid QUIT : < 1162261099 0 :GregorR-L!n=GregorR-@host-225-189.dhcp.pdx.edu JOIN :#esoteric < 1162261235 0 :clog!unknown@unknown.invalid JOIN :#esoteric < 1162261235 0 :clog!n=nef@bespin.org JOIN :#esoteric < 1162261454 0 :oerjan!unknown@unknown.invalid QUIT :"Good night." < 1162263903 0 :clog!unknown@unknown.invalid JOIN :#esoteric < 1162263903 0 :clog_!n=nef@bespin.org JOIN :#esoteric < 1162264404 0 :clog!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out) < 1162264404 0 :clog_!unknown@unknown.invalid NICK :clog < 1162264950 0 :CakeProphet!unknown@unknown.invalid QUIT :"haaaaaaaaaa" < 1162266339 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :ACTION laughs evilly < 1162266389 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :One of my friends is in college. . . He's noted that one of his CS courses doesn't specify a language. . . < 1162266405 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :oh, jesus < 1162266419 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :He's considering doing at least one assignment in BFM, and turning in the BF-compiled result. < 1162266448 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :can he scan in the amusing comments his teacher will write on it next to his failing grade? < 1162266473 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :haha < 1162266480 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :Whats BFM? < 1162266490 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :A macro package for Brainfuck I designed. . . < 1162266495 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :hmmm < 1162266496 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :linke me < 1162266511 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :http://pikhq.nonlogic.org/bfm.tar.bz2 < 1162266539 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :http://pikhq.nonlogic.org/basm.tar.bz2 if you want an example of code written in it. < 1162266568 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :bsmntbombdood: think of it as BFBASIC on extremely powerful drugs. < 1162266588 0 :NoneGiven!n=NoneGive@82-38-206-74.cable.ubr05.shef.blueyonder.co.uk JOIN :#esoteric < 1162266612 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :yuck tcl < 1162266612 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Speaking of which, I should probably update the tarballs. . . < 1162266678 0 :GregorR-L!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: http://i15.photobucket.com/albums/a379/GregorRichards/langchoice.png < 1162266684 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :I don't get it < 1162266748 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :GregorR-L: hahaha < 1162266961 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :New tarballs up. < 1162267001 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Sounds like he's going to turn in one assignment in twice: one version in BF, one in Lisp. < 1162267054 0 :GregorR-L!unknown@unknown.invalid PRIVMSG #esoteric :ihope: URL < 1162267057 0 :GregorR-L!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: Also URL < 1162267073 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :What? Of BFM and Basm? < 1162267091 0 :GregorR-L!unknown@unknown.invalid PRIVMSG #esoteric :Does BFM use Basm? >_O < 1162267100 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :No, Basm is written in BFM. < 1162267103 0 :GregorR-L!unknown@unknown.invalid PRIVMSG #esoteric :Oh, hahah, there they are :P < 1162267128 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :I usually test code using egobfi8. . . < 1162267141 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :So, all generated code is almost guaranteed to work *there*, at least. ;) < 1162267203 0 :GregorR-L!unknown@unknown.invalid PRIVMSG #esoteric :Whoot. < 1162267380 0 :GregorR-L!unknown@unknown.invalid PRIVMSG #esoteric :ACTION can't figure out how to put bfm in EgoBot :P < 1162267382 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :basm.bfm, BTW, also demonstrates how one may have a single source file generate code for EOF=-1, EOF=0, or EOF=255. < 1162267393 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Don't try. :p < 1162267417 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :s/255/nochange/ < 1162267580 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :bsmntbombdood: Thoughts? < 1162268075 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :thoughts? < 1162268106 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :On BFM? < 1162268115 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :I didn't look at it < 1162268120 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Oh. < 1162268158 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :I will < 1162268167 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric ::) < 1162268197 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :gah < 1162268199 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :tcl is weird < 1162268212 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :My Tcl style is also a bit weird. . . < 1162268250 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :no me gusta < 1162268258 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Hmm? < 1162268364 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :hmmmmm < 1162268368 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :looks interesting < 1162268447 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :I should right a c to brainfuck compiler < 1162268463 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Maintain Gregor's. < 1162268469 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :! < 1162268471 0 :EgoBot!unknown@unknown.invalid PRIVMSG #esoteric :Huh? < 1162268478 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :he has one? < 1162268481 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Yeah. < 1162268487 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :ACTION gets excited < 1162268492 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :In need of more coding, but it does work. < 1162268505 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :link me? < 1162268532 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :http://esolangs.org/wiki/C2BF < 1162268643 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :sweet < 1162270414 0 :clog!unknown@unknown.invalid JOIN :#esoteric < 1162270414 0 :clog!n=nef@bespin.org JOIN :#esoteric < 1162270429 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Suggestion is that you understand enough hardware to be able to model an FSM and a Datapath. < 1162271902 0 :clog!unknown@unknown.invalid JOIN :#esoteric < 1162271902 0 :clog!n=nef@bespin.org JOIN :#esoteric < 1162275882 0 :GregorR-L!n=GregorR-@c-24-21-138-66.hsd1.or.comcast.net JOIN :#esoteric < 1162277317 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :You can overwrite the ROM. < 1162277334 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :It's just that, the structure of the ROM is still a real mystery, since most people rely on PalmOS hooks. < 1162277376 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Well, romeos can decompose the ROM into a small and large ROM. The large ROM is irrelevant, since it loads PDBs, so I can only guess that the actual OS code is loaded into the Small ROM. Now how is a big mystery. < 1162277459 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :The step would be to try to disassemble the ROM, and use the (seemingly irrelevant) documentation on the DragonBall (and friends) processor. < 1162281434 0 :GregorR-L!unknown@unknown.invalid QUIT :"Leaving" < 1162281599 0 :clog!unknown@unknown.invalid QUIT :ended < 1162281600 0 :clog!unknown@unknown.invalid JOIN :#esoteric < 1162283921 0 :SimonRC!unknown@unknown.invalid QUIT :Read error: 104 (Connection reset by peer) < 1162283922 0 :SimonRC!i=sc@bylands.dur.ac.uk JOIN :#esoteric < 1162286973 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Writing a Quine is so easy in Forth. < 1162286994 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :CR TIB #TIB @ TYPE CR < 1162286997 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Quine. < 1162291132 0 :ihope!unknown@unknown.invalid PRIVMSG #esoteric :Is that one of those cheating ones? < 1162291212 0 :ihope!unknown@unknown.invalid PRIVMSG #esoteric :GregorR: email? < 1162293559 0 :tgwizard!n=tgwizard@c-103fe155.178-1-64736c10.cust.bredbandsbolaget.se JOIN :#esoteric < 1162295827 0 :ihope!unknown@unknown.invalid PRIVMSG #esoteric :ACTION plays "robots" without using the "t" key < 1162295863 0 :ihope!unknown@unknown.invalid PRIVMSG #esoteric :ACTION loses < 1162295889 0 :ihope!unknown@unknown.invalid PRIVMSG #esoteric :ACTION loses again < 1162295947 0 :ihope!unknown@unknown.invalid PRIVMSG #esoteric :ACTION loses twice more < 1162295952 0 :ihope!unknown@unknown.invalid PRIVMSG #esoteric :Zero points every time. < 1162295964 0 :ihope!unknown@unknown.invalid PRIVMSG #esoteric :ACTION instead plays NetHack without using the "t" key < 1162296777 0 :xor!unknown@unknown.invalid QUIT :niven.freenode.net irc.freenode.net < 1162296874 0 :xor!n=gavin@about/copyleft/user/bsmntbombdood JOIN :#esoteric < 1162296884 0 :xor!unknown@unknown.invalid QUIT :Connection reset by peer < 1162296887 0 :bsmntbombdood!n=gavin@ananias.kwzs.be JOIN :#esoteric < 1162297427 0 :Asztal!n=asztal@cpc1-stkn2-0-0-cust919.midd.cable.ntl.com JOIN :#esoteric < 1162302068 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :back < 1162302142 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :Razor-X: I don't think you understand- many palm models used flash memory as a ROM, whereas the visor and the m100 (among some other models) use regular-old ROM. The visor ROM is non-writeable. < 1162302178 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :if you want to know more about the low-level structure of PalmOS, you might want to look into AMX, the operating system it was built on. < 1162303154 0 :jix!n=jix@L62b0.l.strato-dslnet.de JOIN :#esoteric < 1162305280 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :RodgerTheGreat: Oh? Totally unwritable? Bleh. < 1162305326 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :it was a cost-cutting measure in the design- one of the reasons they were able to sell visors for ~$160 when palms were going for nearly $300 < 1162305342 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :sorry. :( < 1162305356 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :The only thing you can do is load it into RAM PalmLoader style then... < 1162305361 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :yeah < 1162305371 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :one possibility- < 1162305390 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :do you have any cartridges for your visor? < 1162305426 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :once palmOS loads, they can automatically run a program from a cartridge, meaning you might be able to store your alternative OS on one, < 1162305434 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :dunno- it's a possibility. < 1162305753 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Yeah. To grab onto a certain hook. Hopefully. < 1162305896 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :replacing the operating system on palm-based devices can be extremely tricky. < 1162306304 0 :pgimeno!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out) < 1162307706 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :bbiab < 1162309415 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :I have returned < 1162310132 0 :kipple_!n=kipple@167.80-202-102.nextgentel.com JOIN :#esoteric < 1162314491 0 :calamari!n=calamari@ip72-200-73-175.tc.ph.cox.net JOIN :#esoteric < 1162314501 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :hi < 1162314544 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :hey, calamari. < 1162315137 0 :Sph1nx!n=sphinx@89-178-26-1.broadband.corbina.ru JOIN :#esoteric < 1162316335 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :I thought I had a clever way to have predicatble pauses in bf.. but it didn't work out :P < 1162316363 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :I was hoping that I could play a very low note using ansi and that it wouldn't print until it was done playing < 1162316374 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :but of course it printed right away < 1162316402 0 :lament!unknown@unknown.invalid PRIVMSG #esoteric :just do a long loop. < 1162316418 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :lament: the problem is this: how long? < 1162316453 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :I could ask the user to push entewr then push enter again after a second has passed, but that's clunky < 1162316528 0 :lament!unknown@unknown.invalid PRIVMSG #esoteric :well............add interrupts to brainfuck :) < 1162316539 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :heh < 1162317658 0 :RodgerTheGreat!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1162319524 0 :pgimeno!n=pgimeno@124.Red-80-59-211.staticIP.rima-tde.net JOIN :#esoteric < 1162320309 0 :wooby!n=alan@cpe-66-67-60-51.rochester.res.rr.com JOIN :#esoteric < 1162320475 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :calamari: Pause for clock cycles, not seconds. :p < 1162320751 0 :oerjan!n=oerjan@hagbart.nvg.ntnu.no JOIN :#esoteric < 1162321460 0 :calamari!unknown@unknown.invalid QUIT :"Leaving" < 1162322329 0 :Asztal!unknown@unknown.invalid QUIT :Read error: 54 (Connection reset by peer) < 1162324426 0 :Asztal!n=asztal@cpc1-stkn2-0-0-cust919.midd.cable.ntl.com JOIN :#esoteric < 1162324804 0 :ihope!unknown@unknown.invalid PRIVMSG #esoteric :Pause for one clock cycle? < 1162324814 0 :ihope!unknown@unknown.invalid PRIVMSG #esoteric :How... useful. < 1162324844 0 :ihope!unknown@unknown.invalid PRIVMSG #esoteric :(And what is this "ansi" you speak of? Surely you're not asking the American National Standards Whatever to play the note for you.) < 1162325118 0 :lament!unknown@unknown.invalid PRIVMSG #esoteric :actually he probably is. < 1162325219 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ansi escape characters i assume < 1162325673 0 :Sgeo!n=Sgeo@ool-18bf61f7.dyn.optonline.net JOIN :#esoteric < 1162325942 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Maybe we could write the specs on YouOS? < 1162325946 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :ACTION is Sgeo < 1162326000 0 :ihope_!n=foo@c-71-205-100-59.hsd1.mi.comcast.net JOIN :#esoteric < 1162326006 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Hi ihope < 1162326024 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :ACTION thinks that the Factory specs thing could be written in YouOS < 1162326033 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :ACTION is shamelessly promoting it right now :/ < 1162326203 0 :pgimeno!unknown@unknown.invalid QUIT :Read error: 104 (Connection reset by peer) < 1162326425 0 :ihope_!unknown@unknown.invalid PRIVMSG #esoteric :ANSI escape characters can play music? < 1162326526 0 :Asztal!unknown@unknown.invalid PRIVMSG #esoteric :\x7 < 1162326548 0 :Asztal!unknown@unknown.invalid PRIVMSG #esoteric :not exactly music, but then, they didn't have music back in those days < 1162326604 0 :ihope_!unknown@unknown.invalid PRIVMSG #esoteric :How can you play a very low note with that? < 1162326897 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :If you mean the ASCII character BEL (codepoint 7), I wouldn't call it (or any other ASCII control chars, like linefeed) an ANSI escape sequence. (Admittedly it's listed in the same standard, though.) < 1162327013 0 :ihope!unknown@unknown.invalid QUIT :Connection timed out < 1162327136 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :(I don't see any other sound functions in 5th edition of ECMA-48, which should be approximately the same as ANSI X3.64.) < 1162327207 0 :pgimeno!n=pgimeno@124.Red-80-59-211.staticIP.rima-tde.net JOIN :#esoteric < 1162327615 0 :ihope_!unknown@unknown.invalid PRIVMSG #esoteric :ANSI escape sequences are defined in the same place as ASCII? < 1162327819 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :The ANSI standard (or at least that ECMA-48, which should be the same thing) lists also the ASCII control characters and their semantics. < 1162327849 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :http://en.wikipedia.org/wiki/ANSI_escape_code < 1162328302 0 :Sph1nx!unknown@unknown.invalid QUIT :Remote closed the connection < 1162330362 0 :jix!unknown@unknown.invalid QUIT :"Bitte waehlen Sie eine Beerdigungnachricht" < 1162333492 0 :kipple_!unknown@unknown.invalid QUIT :"See you later" < 1162334412 0 :bsmntbombdood!unknown@unknown.invalid NICK :xor_ < 1162334567 0 :xor_!unknown@unknown.invalid NICK :xor < 1162337348 0 :ihope_!unknown@unknown.invalid PRIVMSG #esoteric :Hey, what happened to GregorR? < 1162337389 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :he was whisked away by flesh-eating zombies. < 1162337438 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :I should learn an HDL < 1162338120 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Yes you should :D < 1162338148 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :Which one < 1162338205 0 :ihope_!unknown@unknown.invalid PRIVMSG #esoteric :HDL? < 1162338212 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Verilog, my suggestions. < 1162338213 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :hardware description language < 1162338213 0 :ihope_!unknown@unknown.invalid PRIVMSG #esoteric :High development language? < 1162338220 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :*suggestion < 1162338221 0 :ihope_!unknown@unknown.invalid PRIVMSG #esoteric :Ah. < 1162338238 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :Maybe just because I'm C (god-forsaken language) biased. < 1162338623 0 :xor!unknown@unknown.invalid PRIVMSG #esoteric :Razor-X: Have you coded in verilog? < 1162338648 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :xor: Somewhat. < 1162338655 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :But I need better books for more. < 1162338680 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :VHDL looks like some weird mix of FORTRAN and K&R C. < 1162338691 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Razor-X: I recommend coding a lot and hoping you don't screw it up. :p < 1162338706 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: ... :P < 1162338744 0 :Razor-X!unknown@unknown.invalid PRIVMSG #esoteric :If you come by a good Verilog tutorial, please tell me!