Previous day | Jump to hour: 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | Next day

Seconds: Show Hide | Joins: Show Hide | View raw
Font: Serif Sans-Serif Monospace | Size: Small Medium Large

Click in the nick column to highlight everything a person has said.
The Logo icon identifies that the person is a core developer (has commit access).

Notice: Only Gecko based browsers prior to FF4 support the multipart/mixed "server push" method used by this log reader to auto-update. Since you do not appear to use such a browser, this page will simply show the current log, and not automatically update.

#rockbox log for 2005-04-17

00:00:08HCland next to that, being able to process the conditions efficiently
00:00:17preglowrasher: if you do it that way, you'll need tons of memory anyway
00:00:19HClno point in thinking about it yet.
00:00:43Bagdertons of file seeks at least ;-)
00:00:45HCli had thoughts about an array whether a song is in or out *shrugs*
00:00:47preglowwill probably have to apply all the conditions simulteneously for all files
00:01:11rasherit'll pretty much have to look at all files I guess
00:01:23rasherwell except for some condition that can be "tabled"
00:01:29preglowwhy a ton of file seeks?
00:01:46Bagderwell, hopefully the runtimedb is not all files
00:02:00rasherthat's helpful
00:02:15rasherso looking at conditions that apply to the runtimedb
00:02:32rasheris a good thing to do quick/first
00:02:41rasherbut if none of them do :-
00:02:46rasheroh well
00:02:50rasherthey'll just have to wait :)
00:02:53preglowrasher: if you apply the conditions partially, you will probably need a ton of memory
00:02:56rashera progress bar would probably be nice
00:03:24Bagderif the music isn't playing, I know a big buffer we can use! ;-)
00:03:32preglowoh well
00:03:36preglowi really don't care about this stuff
00:03:45preglowi know my own music collection in and out
00:03:55preglowand know pretty much exactly where what i want is
00:04:06rasherbut what about the things you don't know that you want?
00:04:20preglowlike i said, i know my music in and out
00:04:23preglowi know what i want :P
00:04:26BagderI like the idea of stats
00:04:35preglowi don't care about stats either
00:04:35Bagderwhat songs do I usually skip?
00:04:48preglowi don't skip songs, i choose what i want to listen to and then listen to it
00:04:57rashera thing like "average play percent"
00:05:15rashera song that's played 5% usually isn't going to gain much respect from me :)
00:05:25BagderI usually play my 4000 entries playlist in shuffle...
00:05:34rasherbut could make for an interesting playlist :)
00:05:38preglowis there an album shuffle? :P
00:05:52preglowfind random album, play it, find random album, play it
00:06:18Bagderpreglow: we leave that feature for you to write
00:06:24rasherHurray, Debian release! (of Woody - r5) :(
00:06:33*preglow hugs ubuntu
00:06:58rasherI keep coming back to Debian..
00:07:03rasherIt just feels more like home
00:07:12preglowwindows feels like home to me
00:07:24rasherUbuntu's like visiting a fancy house.. it all looks nice, but I dare not touch anything
00:07:39BagderI have windows in my home too... .-P
00:07:53preglowi'm in linux for easy development right now
00:07:59preglowbut for ordinary use i like windows, for some reason
00:08:05rasherwell I run windows on my laptop
00:08:14preglowlinux also sucks for sound applications
00:08:21preglowbecause it hasn't got any good ones, mainly...
00:08:25rashermostly because my wifi nic is a bitch, and I'm stuck in the world of IM
00:08:27preglowand i do a lot of sound
00:09:02rasherBagder: did you see -">
00:09:23*Bagder runs over there
00:10:09 Quit BBub (""Fange nie an aufzuhören. Höre nie auf anzufangen." - Tiki")
00:10:32preglowwhy, there he goes proving why he's the /me king ;)
00:10:58 Quit zezayer ("Chatzilla 0.9.67 [Firefox 1.0.1/20050311]")
00:11:52Bagderwell, 1138 /me is about one per day ;-)
00:12:01 Join [1]MoosCamaro [0] (
00:12:35 Quit [1]MoosCamaro (Client Quit)
00:12:41rasherthere are 1000 days of logs, in fact
00:13:00rasheror 1001 if I updated now :)
00:13:09t0masok, bmp loading tomorrow :)
00:13:21Bagderls -1 rockbox-200*txt | wc -l
00:13:27t0masI have it loading correctly.. and displaying in * with debugf()
00:13:38rasherstrange.. maybe pisg limits to 1000 days
00:13:51Bagderthe first ones aren't dancer ones
00:13:53*t0mas is away: tv
00:14:00rasherthat's it then
00:15:24rasherwhat, no wiki updates on saturday!?
00:26:39preglowwhy doesn't the rockbox list have a subject prefix?
00:29:06Bagderbecause we don't like prefixes
00:29:23preglowit's the first list i've ever been on that doesn't have them :/
00:29:26Bagderwe use procmail
00:29:38Bagderman, you haven't been on many lists ;-)
00:29:59preglowi'm on about five at the moment
00:30:11preglowtwo of them digest
00:30:38BagderI've lost count
00:32:01BagderI get >700 emails per day
00:32:28Bagderhalf of them are spam of course
00:32:51 Quit asdsd_ (Read error: 131 (Connection reset by peer))
00:32:55preglowhow do you ever get things done :P
00:33:26BagderI just avoid real work ;-)
00:34:17 Join asdsd_ [0] (
00:34:34preglowi think we've got nick of the year contest winner right here
00:36:34rasherI have a handy procmail rule
00:37:24rasher* ^(X-(Mailing-)?[Ll]ist(-Id)?: <?|Sender: owner-|X-BeenThere: |Delivered-To: mailing list |X-Loop: )\/[-A-Za-z0-9_ ]
00:37:37rashercatches most mailing lists
00:37:40rasherit's like magic
00:37:52*preglow vomits
00:38:00rasherI know
00:38:03rasherbut it works
00:38:10rasherand I didn't write it :)
00:40:04preglowgotta love regex
01:05:58t0masI have a working bmp loader...
01:06:08t0masonly.. I don't understand the rockbox format..
01:07:09Bagderit is simple: the first byte is top left, column 0 eight pixels high
01:08:48t0masyeah, got that from comments
01:09:00t0masnow thinking of a nice way to convert...
01:09:39t0masI have two for loops... for (row) { for (col) { ... } }
01:09:57t0masis there a calculation from row, col to what byte + bit I need to set?
01:09:58Bagderdoesn't the conversion in the original bmp.c work?
01:10:03t0mas(I have a setbit function too)
01:10:42t0mas(*bitmap)[ (row/8) * bitmap_width + col ] |=
01:10:42t0mas 1<<(row&7);
01:11:07Bagderyes that
01:11:22t0masDon't understand the 1<<(row&7) part
01:11:28t0mas1 shifted by what?
01:11:58Bagderthe lowest three bits of the row
01:12:05Bagderwhat else can I say?
01:12:13Bagderthe other bits are used already
01:12:15t0mashmz... I'll just test it
01:12:21Bagderrow/8 uses the other bits
01:12:35t0masah ok
01:13:24 Join Camilo [0] (
01:14:08Bagderso row 7 becomes (1<<7) and row 0 is (1<<0)
01:14:22Bagder0 being the top
01:15:20t0masand can you explain the if here:
01:15:21t0mas if(bmp[(bitmap_height-1 -row) * PaddedWidth + col]) {
01:15:21t0mas bitmap[ (row/8) * bitmap_width + col ] &= ~ (1<<(row&7));
01:15:21t0mas }
01:15:21t0mas else {
01:15:22***Alert Mode level 1
01:15:22t0mas bitmap[ (row/8) * bitmap_width + col ] |= 1<<(row&7);
01:15:24t0mas }
01:15:37Bagderthe first condition clears the bit, the other sets it
01:15:46Bagderthe first block
01:16:20Bagderso it checks in the bmp if the byte is zero or non-zero to figure that out
01:18:11 Quit asdsd_ (Read error: 60 (Operation timed out))
01:18:22t0maswell.. the rockbox conversion makes a mess of it
01:19:04BagderI think the math there is right
01:19:26t0masghehe... and I'm sure the image given to it is correct... as it's displayed in debug :)
01:19:39t0masso something else is wrong
01:19:43Bagderthen the input data to the math is wrong
01:20:02Bagderis the bmp 8 bit or 1 bit?
01:20:29t0maswait... there is no input data like that
01:20:35t0masI have a row, col and bit
01:20:38t0masbit = 1 or 0
01:20:44t0masrow = y and col = x
01:21:13Bagderright, that code is for 8bit bmp
01:21:20Bagdercheck bmp2rb.c for a 1bit one
01:21:50t0masbyte = (bitmap_width * (row/8)) + col;
01:21:50t0masbit = (row % 8);
01:21:51t0masbitmap[byte] = bitmap[byte] + (1 << bit);
01:22:02t0masisn't that the right way too?
01:22:06Bagder+ ?
01:22:17Bagderyou mean |
01:22:46Bagderbut if you had it cleared from start it makes no diff I guess
01:22:46t0masit's getting a little late...
01:23:48Bagderbut that doesn't show how you use the variables
01:23:58Bagderagain, there is working code in bmp2rb.c
01:25:23t0mastesting takes some time...
01:25:24***Alert Mode OFF
01:25:47Bagderdon't you use the sim?
01:25:52t0masyes I doo
01:26:20t0masbut compiling + make install takes some time with cygwin
01:27:20t0masbitmap[ (row/8) * bitmap_width + col ] &= ~ (1<<(row&7));
01:27:24t0masthat sets a bit?
01:27:31Bagderno, that clears it
01:27:35t0masah ok
01:27:35t0masbitmap[ (row/8) * bitmap_width + col ] |= 1<<(row&7);
01:27:38t0masand this is set?
01:31:53 Join _Lucretia_ [0] (
01:31:55 Quit _Lucretia (Read error: 110 (Connection timed out))
01:32:54*Bagder got another runtimedb idea
01:33:20t0mashow big is the statusbar?
01:33:38Bagdersystem font height
01:35:23t0mashm... how can i test it from a plugin?
01:35:56Bagdertest what?
01:35:57t0mas(or add something to debug?)
01:36:01 Join _ferenczy [0] (
01:36:02t0masmy loading code
01:36:38Bagderyou mean the code is not accessible via the plugin API?
01:36:54t0masdon't know.. is it automatically?
01:37:05***Saving seen data "./dancer.seen"
01:37:10Bagderno, you need to add it in apps/plugin.h and plugin.c
01:38:26t0mas#define PLUGIN_API_VERSION 37
01:38:29t0masshould I raise that?
01:42:06t0mashm.. just add the name in the .h?
01:42:11t0masand what in the .c ?
01:42:15t0masjust the name too?
01:42:28Bagderjust as all the other functions
01:42:37Bagderadd it last in the struct
01:43:19Bagderbut you're only adding it there for testing, aren't you?
01:44:10t0maswell... maybe it is usefull for plugin's if it works
01:44:38t0masmaybe a viewer plugin... or some game wants to use it
01:44:40Bagdertrue, and if the code is there anyway it could as well be accessible
01:44:57t0masplugin.c:297: warning: excess elements in struct initializer
01:44:57t0masplugin.c:297: warning: (near initialization for `rockbox_api')
01:45:01t0maswhat did I do wrong?
01:45:19Bagderyou didn't do the .h part right probably
01:45:54t0mas#ifdef HAVE_LCD_BITMAP
01:45:54t0masint read_bmp_file(char* filename,
01:45:54t0mas int *get_width,
01:45:54t0mas int *get_height,
01:45:54t0mas char *bitmap);
01:45:54***Alert Mode level 1
01:45:58t0masthat's in there...
01:46:12Bagdercompare with the others
01:46:17Bagderthey don't look like that
01:46:27t0masI see
01:46:44t0masint (read_bmp_file)(char* filename, int *get_width, int *get_height, char *bitmap);
01:46:51Bagderbecause the struct contains function pointers
01:46:52t0masint (*read_bmp_file)(char* filename, int *get_width, int *get_height, char *bitmap);
01:46:55t0maslike that?
01:47:38t0masI know function pointers... but I'm still bad at recognizing things like these...
01:47:52t0masdon't know what * is either...
01:47:55t0maseh **
01:48:11t0mas* = pointer.... but what's a ** (saw Linus using it somewhere)
01:48:19Bagdera pointer to a pointer
01:48:26t0massounds weird to me?
01:48:35Bagdervery common C thing
01:48:50t0mashmz... I should do more C...
01:50:07 Part MoosCamaro
01:51:30t0masjust one mistake...
01:51:38t0masit's displaying upside down
01:52:35pregloware we talking about regular bmps here?
01:52:45preglowthey're saved upside down, no surprises there
01:52:53t0masI know
01:52:59t0masthat's why I reversed it...
01:53:35preglowbut i'd better get to bed
01:53:39preglownite, all
01:53:49 Quit preglow ("leaving")
01:54:50t0mashmz... this reversing thing is a problem with the bit setting lines...
01:55:07t0masthe for loop is reversed... to display it ok...
01:55:14t0masbut when setting it.. that doesn't matter...
01:55:15t0masbitmap[ (row/8) * bitmap_width + col ] &= ~ (1<<(row&7));
01:55:55***Alert Mode OFF
01:56:03BagderI'd say your check is wrong, not the part that clears the bit
01:56:07Bagderbut that's me
01:56:11Bagderyou could change either one
01:56:13t0masbitmap[ ((bitmap_height - row)/8) * bitmap_width + col ] &= ~ (1<<(row&7));
01:56:25 Part gromit` ("Client exiting")
01:56:32t0masis that ok?
01:56:49Bagder if((bmp[(bitmap_height - row - 1) * PaddedWidth + byte] & (1 << bit))) {
01:56:57Bagderthe code in bmp2rb
01:56:58 Join gromit` [0] (~gromit`
01:57:40Bagderdoing the flip in the check makes the adjustment on one place
01:57:46Bagderdoing it in the bit set/clear puts it on two
01:58:22Bagderthinking about it, the clear (or the set) should be done on byte-level anyway
01:58:23Bagderfor speed
01:58:47Bagderbut we can save that for later ;-)
01:59:04t0masyeah, I have getbit() and setbit() functions
01:59:22t0maswrote em some time ago for calculating primes... and storing in bit array...
01:59:22Bagderno clearbit?
01:59:39t0masnope, never had to remove a prime ;)
02:01:07t0masif(bmpbuf[(bitmap_height-1 -row) * PaddedWidth + col]) {
02:01:08t0mas bitmap[ (row/8) * bitmap_width + col ] &= ~ (1<<(row&7));
02:01:08t0mas} else {
02:01:08t0mas bitmap[ (row/8) * bitmap_width + col ] |= 1<<(row&7);
02:01:12t0masthat's making a mess of it...
02:01:50t0masbut my bmpbuf[] is a 1 bit / pixel
02:01:56t0masand this looks like 8?
02:03:21Bagderyou need to and out the pixels on 1bit bmps
02:03:41t0mas& (1 << bit)
02:04:10Bagderyes, if bit is set right
02:04:35Bagderas the bytes are horizonal in bmp
02:05:36Bagdersleep time now, see ya around
02:06:50t0masI'm gonna sleep too...
02:07:41t0masWORKING :D
02:29:58t0masmy code
02:30:11t0masit load's a bmp from file and returns a rockbox format image
02:30:43t0masjust tested it in wps :D
02:31:10t0masIt auto loads an image ./rockbox/wpsbg.bmp and displays it on the wps, or just ignores it when the image isn't present :D
02:31:16 Quit Sucka ("a bird in the bush is worth two in your house")
02:32:57t0mashope it compiles on archos too...
02:33:07t0masbut that's for tomorrow :)
02:33:22rashertest in the sim?
02:33:33t0masbut not at 2:30 in the night :P
02:34:05_ferenczyt0mas> where are you from???
02:34:24_ferenczywell ;)
02:34:42_ferenczyI'm from Czech republic... ;)
02:35:49Shagnarnice work!
02:35:52Shagnargn8 cya
02:38:23 Quit Shagnar ("( :: NoNameScript 3.81 :: )")
02:48:27rasherregarding my file-hash experiment: 512byte from start of file 512 kb from end of file produced no duplicates.. 256 256 produced one
02:48:42rasher(using crc32)
02:48:57t0masmaybe use a #define for it?
02:49:09t0masso when people have problem's they can change it?
02:50:01rashermaybe.. or just grab 1kb from start and end to be on the safe side
02:50:13rasherand try to skip tags
02:50:25t0mashow did kazaa do it?
02:50:32t0masthey had a very simple hash thing?
02:50:40rasherThey didn't hash anything
02:50:56rasheras witnessed by the posibility of polluting files
02:51:01t0masno, they did hash something... but only some part..
02:51:18rashermaybe this was after I last tried it
02:51:34t0maswell.. I haven't used it for at least year
02:51:57t0masthe pollution was possible because they hashed just a part of the file
02:52:20rasherwell what I'm thinking is this: for mpeg files, seek to the first frame and start hashing from there, seek back to id3v1 tag 1kb longer, then hash a kb from there
02:52:27rasherand similar for other formats
02:52:42rasherit's sortof costly, but very efficient
02:54:01rasherbut being able to re-tag and still have it recognised as the same file would be great
02:55:31t0masoriginal firmware not booting == empty batt :)
02:56:08*t0mas is going to charge his iriver
02:56:13t0masand sleep while it is :)
02:56:28 Quit t0mas ("goodnight")
03:02:23 Quit rasher ("CGI:IRC (EOF)")
03:12:04*HCl goes to sleep
03:12:06 Quit cYmen ("zZz")
03:18:58 Quit thegeek (Read error: 54 (Connection reset by peer))
03:23:48 Join asdsd_ [0] (
03:24:10 Part asdsd_
03:34:01 Quit courtc (Remote closed the connection)
03:37:07***Saving seen data "./dancer.seen"
03:39:02 Join karim [0] (
03:39:13 Join courtc [0] (
04:02:41 Join ashridah [0] (
04:05:35 Join QT [0] (as@area51.users.madwifi)
04:08:40 Quit QT_ (Read error: 60 (Operation timed out))
04:12:25 Quit Camilo ("Chatzilla 0.9.67 [Mozilla rv:1.8b2/20050404]")
04:13:42 Quit _ferenczy (Read error: 60 (Operation timed out))
04:17:25 Quit karim (Remote closed the connection)
04:40:29 Join TCK [0] (
05:37:09***Saving seen data "./dancer.seen"
06:35:32 Join stevenm [0] (
06:35:43stevenmHello people. anyone here ?
06:40:58 Part kergoth ("Leaving")
06:57:55stevenmHello. Does anyone feel like running a speed check on the MIDI codec for me?
06:58:31stevenmit's some new code, not in CVS yet
06:59:06stevenmoh rasher, where art thou
06:59:28 Join Strath [0] (
07:03:10stevenmanyone ?
07:03:21Strathguess not
07:03:29stevenmthat's a shame..
07:03:41stevenmI really hoped at least this would run above 10% realtime this time....
07:03:55stevenmmaybe 11% ?
07:06:30Strathkeep in mind i have no idea what you're talking about :)
07:08:11stevenmah.. I am looking for someone to test my latest code on target
07:08:21stevenmand tell me just HOW painfully slow it runs
07:08:42stevenmunoptimized, we got 10%. I just put some stuff into iram..
07:08:55Strathoy ;)
07:09:18Strathsupper time
07:09:25 Nick Strath is now known as StrathAFK (
07:31:45 Join booper [0] (~boop@nat01-silvers-ext.Rutgers.EDU)
07:37:10***Saving seen data "./dancer.seen"
08:22:47 Quit Rob- (Read error: 145 (Connection timed out))
08:30:17stevenmOoo, a some more optimization..
08:30:40stevenmcan someone possibly do me a favor and test a new version of this thing on target, see how fast it runs ?
08:44:17stevenmis everyone asleep or something?
08:50:59 Join darkstar147 [0] (
08:51:34 Quit darkstar147 (Client Quit)
09:09:06 Join Harpy [0] (
09:22:21 Quit Stryke` ("Friends don't let friends listen to Anti-Flag")
09:37:14***Saving seen data "./dancer.seen"
09:38:42 Join t0mas [0] (
09:39:27t0masdoes anybody know the stacksize of the iriver?
09:41:48t0masnot like 45kb i guess? :)
10:04:32 Quit _Lucretia_ (Read error: 60 (Operation timed out))
10:04:32 Quit booper (Read error: 54 (Connection reset by peer))
10:12:00t0mastestplugin.c:54: error: structure has no member named `fprintf'
10:12:15t0masisn't fprintf() in the plugin arg?
10:20:22 Join _Lucretia_ [0] (
10:33:05 Join Mirfle [0] (
10:42:59 Join berserker [0] (a@
10:47:58 Part berserker
11:13:39 Join muesli- [0] (
11:19:30stevenmgood morning people
11:19:42stevenm(I am still awake from the 'night')
11:35:02muesli-well done stevenm
11:35:24 Quit muesli- (Read error: 104 (Connection reset by peer))
11:35:31 Join muesli- [0] (
11:37:15***Saving seen data "./dancer.seen"
11:41:37stevenmyea I been waiting for rasher to come on
11:41:54stevenmand maybe test and tell me just HOW inefficient this code is
11:42:23stevenmfeels like I been awake forever
11:43:00t0masmy code isn't working on iriver...
11:43:04t0masbut it is on simulator...
11:45:14t0masproblem 1: How can I debug on iRiver? (like write debugf() info to file?)
11:45:28t0masproblem 2: What's the stacksize of the Iriver?
11:49:57ashridahprobably as big as whatever the heap hasn't taken up :)
11:50:34t0mascan I output it someway?
11:51:10 Join Querty [0] (
11:51:52Quertystevenm: can I relieve you of your sleep deprived misery by testing something?
11:51:55ashridahi doubt it. the heap has no clear boundary. the stack typically just grows until it overwrites something vital and things blow up (at least, from my vague knowledge of 68k style cpus)
11:53:20t0masok, then I know what's happening :P
11:54:24t0masand problem 1?
11:54:35t0massome simple way to make debugf() write a file?
11:54:41ashridahdamned if i know. i'm just a groupie
11:55:01t0masghehe ok
11:57:03 Quit stevenm ("Leaving")
12:05:55HClyou can look at the dynarec core in rockboy, it debugs to file
12:06:07t0masok, tnx
12:06:30HClit has to, because it typically crashes all the time
12:14:55t0mashmz... nice... now I can look at my own error message... and start thinking what the **** caused that :)
12:16:05*t0mas thanks Linus for RoLo :D
12:19:20*t0mas slaps t0mas with a really BIG-endian :P
12:24:30 Join preglow [0] (
12:24:36 Quit Mirfle ("Chatzilla 0.9.67 [Firefox 1.0.2/20050317]")
12:24:41preglowthe stack is not very big
12:24:50t0masnope, but it works now :)
12:24:54t0masjust need 2,5 KB
12:24:55 Quit muesli- (Read error: 60 (Operation timed out))
12:24:56t0masis that ok?
12:24:59preglow2.5k it has
12:25:06t0masoh ow :P
12:25:21t0masso nothing else works when I use 2.5?
12:25:46preglowyou can probably use more than 2.5
12:25:52preglowbut try not to use the stack for large things
12:25:52t0masoh ok
12:26:05preglowi crushed it with 100k, that's all i know :P
12:26:17t0masI did with 40 :)
12:26:21t0masbut 2.5 works
12:26:26t0mas2560 bytes
12:26:44t0masfor iriver... on archos it uses less... as the LCD is smaller
12:27:23preglowthe stack on the archos might very, very well be smaller
12:27:33preglowi have no idea
12:28:09t0maswell... on the archos with LCD_BITMAP it uses (LCD_HEIGHT * LCD_WIDTH) / 8
12:31:04 Quit Harpy (Read error: 60 (Operation timed out))
12:36:37t0masok, it load's a bmp... and writes the contents as an "ascii art" to file... and display's it :D
12:36:43t0mastime to remove some debug code...
12:39:02 Join MoosCamaro [0] (
12:39:13 Part MoosCamaro
12:39:30 Join matsl [0] (
12:41:06 Join MoosCamaro [0] (
12:41:17MoosCamaroHi all
12:45:11MoosCamaroyour bmp works it's done?
12:45:26t0masit can load images... and display
12:45:41t0masbut it uses a lot of memory... so I'll need to optimize some things there
12:50:18 Join cYmen [0] (
13:05:08HClbmp loading stuff?
13:05:28t0masloading a bmp into a rockbox native format buffer
13:06:35HClwell, uncompressed bmps are fairly simple...
13:06:41HClbut i dunno about compressed ones :/
13:06:51t0mascompressed ones are never used..
13:07:02t0masbut rockbox format isn't that simple :)
13:07:08*HCl once wrote a bit of code to write a bmp from some image data
13:07:25HClonly annoying thing was the alignment stuff
13:07:37t0masit's weird order...
13:07:42t0masand stored upside down
13:08:05HClmmm, forgot about that, i guess, at least, i don't remember it being upside down
13:08:08HClbut i'll take your word for it :
13:08:09HCl :P
13:10:59t0masonly one issue left... I'm having some weird pixels in simulator...
13:14:57 Quit Querty ("Leaving")
13:15:37t0mashow do you do this in a plugin: fd=open(meow,O_WRONLY|O_CREAT|O_TRUNC);
13:23:42HClum. same thing.
13:23:44HCllook at rockmacros.h
13:23:48HClrockboy is a plugin
13:24:01HClwe just used macros to not have to rewrite every posix function it uses.
13:37:18***Saving seen data "./dancer.seen"
13:40:09 Join belgarath [0] (
13:43:18 Join Sucka [0] (
13:43:28HClmy kitty recognises the cats in this movie
13:43:31HClits cute
13:58:06 Nick Sucka is now known as Sucka`away (
13:59:42preglowcats are superior animals
14:05:49 Join rasher [0] (
14:15:32t0mashi rasher
14:17:08 Join _ferenczy [0] (
14:17:38preglowcats + babies = not good
14:17:56 Quit _ferenczy (Client Quit)
14:26:53 Join edx [0] (
14:35:25 Quit rasher (Read error: 110 (Connection timed out))
14:39:33t0mas ret = getbit((PaddedWidth * row * 8) + col - (col % 8) + (7 - (col % 8)));
14:39:33t0mas if (ret == 1)
14:39:33t0mas {
14:39:33DBUGEnqueued KICK t0mas
14:39:33t0masbitmap[ ((bitmap_height - row)/8) * bitmap_width + col ] &= ~ (1<<((bitmap_height - row)&7));
14:39:33***Alert Mode level 1
14:39:33t0mas }
14:39:35t0mas else if(ret == 0)
14:39:37t0mas {
14:39:41t0mas bitmap[ ((bitmap_height - row)/8) * bitmap_width + col ] |= 1<<((bitmap_height - row)&7);
14:39:45t0mas }
14:40:06t0masthe debugf() part prints the image correctly... only upside down...
14:40:18t0masthe bitmap part (by Bagder) makes a mess :)
14:40:25t0masanybody sees why?
14:46:35CtcpIgnored 1 channel CTCP requests in 0 seconds at the last flood
14:46:35*HCl is too tired :p
14:49:34***Alert Mode OFF
14:51:13*t0mas just doesn't really understand it :P
15:01:40 Join Harpy [0] (
15:07:59HCli must be odd
15:08:15HClt0mas: you know what the bitmap format is like internally?
15:08:29t0maswell... sort off
15:08:43t0masI have a paper laying around here...
15:08:55t0maswhat bits in which byte are what pixels
15:09:08t0masbut I don't have calculations for it at hand...
15:09:41HClevery byte stores 8 pixels
15:09:47HCltop pixel being top bit
15:09:54HClyou can try using setpixel for now
15:10:00HClor check the rockboy implementation
15:10:19t0maswell... I want em in an array...
15:10:37t0masso I need a calculation for what bit to set in the array for what piel
15:11:39t0masI had this: Byte: (width * (row/8)) + col
15:11:56t0masBit: col % 8
15:12:28HClyou need row % 8
15:12:42t0masI have em as X and Y here :)
15:12:44HCltake a look at sys_rockbox.c
15:12:50HClit pretty much has the same thing
15:12:50t0masX = col, Y = row?
15:13:08HClexcept rockboy processes them one row at a tyime
15:13:16HClit might be a good place to start for an example
15:13:28HCldunno how much of the old code is still there and not removed
15:13:40t0masfor (row) { for (col) { ... } }
15:13:44t0masis what I have
15:13:48HClit started with a setpixel or clearpixel function
15:13:55HCland evolved from there for speed
15:15:10 Join rasher [0] (
15:15:16t0mashi rasher
15:15:23t0masHCl: what function?
15:16:07rasherexcellent.. cgi:irc didn't tell me of any activity here
15:16:26HClawesome :3
15:17:14*HCl has been watching the same 1 minute 38 seconds long movie for over an hour and a half :3
15:18:41t0mashmz... HCl... that function is an ASM hell...
15:18:47HClbrowse down.
15:18:51HClthere's a c version
15:19:20*t0mas is to stupid to understand...
15:19:45HClit seems the old version was removed since our optimized versions worked fine
15:20:01HClit should prolly still be in cvs somewhere
15:20:02HClhold on
15:20:51t0masI have 4 vars... ret (1 or 0, for the bit to set), row, col, and a bitmap buffer where it should be set in..
15:21:11t0mas(ret = 1 -> set bit, ret = 0 -> clear bit)
15:21:48HCli guess the old version was lost... odd.
15:23:18HClside effect of rockboy being developed outside of cvs for a long time
15:23:55HCli'm not really up to looking at it at the moment
15:25:09HClbut its something like
15:25:44HCl(byte = width * (row/8) + col) |= 1<<(row%8)
15:26:06HClmake sure your array is of the type byte..
15:26:19t0masok, next problem :)
15:26:22t0masit's unsingned char
15:26:29HClthat'll do
15:26:57 Quit belgarath ("CGI:IRC (EOF)")
15:27:09t0masand the byte in your calculation is what?
15:27:24HCljust the location of the byte to change for that pixel
15:28:04t0masso buffer[width * (row/8) + col] |= 1<<(row%8)
15:28:47t0masthat's what I had... only written more complicated...
15:29:07HClsorry, not really up to coding for rockbox at the moment.
15:29:20HClstill feeling a bit nauseous from lunch
15:29:52t0maswell... you have helped me some way
15:29:58t0masas I have a new idea now :D
15:37:22***Saving seen data "./dancer.seen"
15:41:08t0masunsigned char bitmap[100];
15:41:18t0masI have a pointer to something like that
15:41:27t0masand I want to know the size (100 here)
15:41:31t0masdoesn't work?
15:41:46HCli'd say sizeof(bitmap)
15:42:08t0masthat returns 1
15:42:16t0masas an unsigned char is 1 in size...
15:42:27HClmaybe you need to omit the ( ) ?
15:56:08t0mas##C : "It's impossible to get the size of an array from it's pointer."
15:56:45preglowof course
16:03:09t0masunsigned char = 1 byte?
16:04:09preglowon most platforms, yes
16:08:37 Nick Sucka`away is now known as Sucka (
16:18:45*rasher yawns
16:22:25 Quit rasher ("CGI:IRC")
16:27:22 Quit ashridah (Read error: 113 (No route to host))
16:46:28HClddr ish fun
17:14:44t0masok... now I have a weird problem...
17:15:16t0maswhen I call rb->read_bmp_file("/test.bmp", &BMPWIDTH_plaatje, &BMPHEIGHT_plaatje, plaatje, 2560);
17:15:37t0masthe last argument is comming out like this: 2089879603
17:18:36HClwhats your definition of read_bmp_file ?
17:18:46t0masint read_bmp_file(char* filename,
17:18:46t0mas int *get_width, /* in pixels */
17:18:46t0mas int *get_height, /* in pixels */
17:18:46t0mas char *bitmap,
17:18:46t0mas int bufsize) /* the size off bitmap in bytes. */
17:19:32HCldunno then
17:19:43t0masand then: debugf("Size: %d \n", bufsize) gives 2089879603
17:21:08HCli'd say you're either getting a random value or a pointer.
17:24:36 Join biggoof [0] (
17:25:30 Join asdsd_ [0] (
17:29:32 Quit TCK (Read error: 54 (Connection reset by peer))
17:32:46 Join TCK [0] (
17:37:23***Saving seen data "./dancer.seen"
17:41:49t0masnew size...
17:42:09*t0mas is going mad...
17:43:04 Quit matsl (Remote closed the connection)
17:51:33 Join muesli- [0] (
17:53:10muesli-hi t0mas
18:02:22 Quit biggoof (Read error: 131 (Connection reset by peer))
18:03:02 Join thegeek [0] (
18:15:59 Join XShocK [0] (
18:21:05t0masok, anybody with an archos and a buildenvironment here?
18:32:27t0masit compiles... but I can't confirm it's really working...
18:34:38 Join Stryke` [0] (
18:36:02 Join rasher [0] (
18:36:10rashercan't you test it in the sim?
18:53:47*rasher prods t0mas
18:57:10 Quit thegeek (Read error: 60 (Operation timed out))
19:05:41 Quit muesli- (Read error: 145 (Connection timed out))
19:11:23rasherDamn straight
19:11:39HCllack of sleep sucks...
19:12:08t0masrasher: I was eating :)
19:12:34t0masbut the first version worked in iriver sim... and didn't work on iriver
19:12:44*HCl doesn't trust the sims.
19:12:46t0masnow it works on iriver, iriver sim, recorder sim and player sim...
19:12:58t0masbut I can't test the real archos things
19:13:01HClfirst rockboy version ran on iriver, but not on sim
19:13:19*rasher has no archos either
19:14:38t0maswell.. It compiles for player and recorder...
19:15:14t0masshould I test for all recorder versions?
19:16:06rasherno idea how much different hey are
19:18:50 Quit asdsd_ (Read error: 54 (Connection reset by peer))
19:23:37 Join thegeek [0] (
19:23:56 Join muesli- [0] (
19:29:25 Quit DMJC ("Leaving")
19:33:50t0maseverybody seen that one?
19:37:24***Saving seen data "./dancer.seen"
19:59:24 Join amiconn [0] (
20:01:37HClits amiconn!
20:01:42HClquick, think the other way.
20:05:06 Join Shagnar [0] (
20:23:02 Join zezayer [0] (
20:23:03 Quit muesli- (Read error: 104 (Connection reset by peer))
20:35:24t0mashm.. "ld: region FLASH is full"
20:35:47t0masfor an archos recorder v2
20:35:49t0mas2mb mem
20:35:59t0masdoes that exist?
20:36:02t0masor was it 8?
20:40:28 Join pfavr [0] (
20:46:29 Join stevenm [0] (
20:46:48stevenmHello people
20:47:01 Join TCK- [0] (
20:47:40stevenmmorning here :)
20:47:42stevenmwell, afternoon
20:47:57stevenmah, just the person I am looking for. Feel like running another time test "
20:49:46stevenmrasher, I think this time it may run at say, 11% instead of 10. I moved a bunch of stuff to iram
20:50:35rasherwell sure
20:51:35stevenmuntar that into apps/plugins/ .. I haven't dared to commit that yet
20:52:54amiconnt0mas: "region FLASH is full" is to be expected.
20:53:17t0masout of mem?
20:53:26amiconnThis only says that RomBox (rockbox executing directly from flash rom) isn't possible
20:53:35amiconn...because it doesn't fit.
20:54:52 Quit TCK (Read error: 145 (Connection timed out))
20:55:00amiconnArchos uses a somewhat complex boot procedure. The point is that the archos firmware (even if it is the version in the rom, not loaded from disk) is copied to ram before execution
20:55:10rashertest starting...
20:55:16stevenmrasher, ooh sweet
20:55:22stevenmrasher, 120Mhz ?
20:56:11amiconnt0mas: [IDC]Dragon's boot loader allows having 2 firmware images in flash rom (archos and rockbox), by using compression
20:56:21rashernow, then
20:56:39amiconnThe compression is optional, so when the rockbox image is uncompressed, it can be executed directly from flash rom
20:57:25amiconnUnfortunately this isn't possible for all units any more, because of continually increasing rockbox size
20:57:52amiconnSee if you want to read more
20:58:08stevenmrasher, I cut slow ram access by 75% or so. there's only 5 places it happens now
21:00:33rasher4 minutes and counting
21:00:53rasherif you were aiming for 11% :)
21:01:04stevenmI don't expect it to be down to 1 minute after iram, but maybe at least maybe 8 instead of 10
21:02:09stevenmall the function variables were in slow ram.. now all but the sample data is in iram
21:02:44rasherit would be nice to have some kind of indicator of how far in the file you were
21:03:29stevenmi guess i can have it splash every 100 events or so
21:04:06stevenmyou did rebuild the source from that tarfile, right ?
21:04:12rasher7 minutes
21:04:49rasher8:15 or so
21:05:06HClhow long was the song supposed to be?
21:05:27stevenmrasher, heh, 18 %
21:05:34HCli never thought midi would be that hard on cpu.
21:05:41stevenmrasher, I had another thing to try
21:05:44HCldidn't they work on basic cpus that couldn't even play mp3? :/
21:05:55rasherwell this is doing wavetable thingy
21:05:58stevenmwell.. it's a lot of work
21:06:03HClbut i guess those had hardware synths..
21:06:07stevenmrasher, try this.. in synth.c
21:06:10rasherthat sure didn't happen on those kind of cpus
21:06:26HClif we can't manage to get it to run fast...
21:06:31HClwe might have to drop down to lesser quality..
21:06:34HCl :/
21:06:41stevenmrasher, put a /* on line 347 in synth.c
21:06:55stevenmrasher, and a */ on line 384
21:07:20stevenmthat ought to disable ADSR and all the if statements and shift/mul associated with it. it doesn't make a significant difference
21:07:38stevenmmaybe we'll get 7 out of this
21:08:41rasherstarting... now
21:08:45rasheruh, not
21:08:52stevenmhm ?
21:08:58stevenmcompile error ?
21:09:05rasherno, just hit the wrong button :)
21:09:45stevenmrasher, just out of curiosity, how long does it take to go from start to "START PLAYING" ?
21:10:04rashera couple of seconds
21:10:10stevenmoh wow, that's it?
21:10:21stevenmi guess the slow ram isn't as slow as I thought
21:10:22rasherhm.. 5-6 seconds maybe
21:10:34stevenmduring that time it loads about 7 megs of data into slow ram
21:10:40stevenmand does a bunch of other random access
21:10:44stevenmand HD access too
21:10:52rasherI'll try and time it
21:11:04stevenmnah, don't bother
21:11:14stevenmas long as it's not like, a minute
21:11:31stevenmrasher, now.. is this timing with write to disk, or no ?
21:11:42rasherdidn't make much of a difference did it?
21:11:51stevenmi dont remember.. dont think so though
21:12:07stevenmrasher, well I know how to double the speed :)
21:12:15stevenmcut the sampling rate in half
21:13:14stevenmsounds a bit different when I do that... like the higher sampling rate better though
21:14:06amiconnstevenm: It's probably a good idea to change the sample rate anyway, to 44100 Hz (or 22050 Hz)
21:14:34stevenmamiconn, ah, all right
21:14:48stevenmamiconn, I had it at 48000. i guess i switch to 41
21:14:50stevenmer 441
21:15:05rasheryeah, that's what we'll be able to output on iriver anyway isn't it?
21:15:12amiconnIirc the iriver hardware isn't capable of 48000 Hz, so 48000 would require resampling
21:15:31stevenmah I see
21:15:51stevenmrasher, still going ?
21:17:09*stevenm cries. 'i don't know asm!! waah'
21:17:29stevenmman there's gotta be a way to get this thing faster than THAT
21:18:01stevenmstill not done ?
21:18:05stevenmok WHAT ?
21:18:06rasherand counting
21:18:12stevenm.. how is THAT possible
21:18:36stevenmwwwait a second ....
21:19:08stevenmrasher, sequencer.c line 179 is NOT commented out, is it ?
21:19:42rashershould it be?
21:19:53stevenmif it were, the thing would NEVER finish
21:19:57stevenmrasher, is this 120Mhz ?
21:20:21stevenmOkay, what the hell ?
21:20:38rashermaybe whatever I commented out was causing a later operation to complete faster?
21:20:46stevenmyou COMMENTED OUT all the ADSR crap
21:20:54stevenmI doubt it.
21:21:07rasherI could try a clean build.. but it did rebuild it
21:21:49stevenmtry if you want..
21:21:54stevenmbut that is the strangest thing.
21:22:09stevenmmaybe some sort of synth bug where it doesnt cut voices off.. but it works fine here
21:22:15stevenmhere, lemme tar this up again
21:23:44stevenmrasher, stevenm/midi.tbz2">
21:23:50rasher7-8 seconds until it starts playing
21:24:09stevenmrasher, there I took out a bunch of other crap, so all it does is synthesize
21:26:26HClever had it when you like.
21:26:33HClbought 5 kilos of your favorite candy
21:26:46HCland at the end, it ending up not being your favorite candy anymore
21:27:03HCl? o.o
21:27:16rasherno, really
21:27:19HCli feared so :/
21:28:16HCli think that once the midi codec is all finished..
21:28:31HCli'm gonna try to take a look at a really low quality one, and see if i can get it to run at 11mhz
21:29:22HClit'd be nice to have the option between quality and batterylife :)
21:30:04stevenmwell it would be a matter of #define SAMPLING_RATE 8000
21:30:31stevenmyea you tell it how fast to sample
21:30:38rashercould it even be runtime-configurable?
21:30:47stevenmoh yea
21:31:01rasherthat'd be cute
21:31:54stevenmI have it running at 8000 sampling rate right now
21:32:06stevenmruns realtime on a Pentium M clocked at 78 Mhz
21:32:30stevenmand it's actually not as bad as I had expected
21:33:35rasherit was a correct build I used - 9:40 again (not the one you gave me last)
21:33:47stevenm9:40 ? BAH
21:33:51stevenmw e i r d.
21:33:57stevenmtry the new one ?
21:34:02rasherbuilding now
21:34:16stevenmI was thinking, maybe I ought to optimize the sequencer itself as well
21:34:27stevenmthere is a huge division operation here that I am seeing
21:34:51stevenmsequencer code is only called once like, every 400 samples or so, depending on file
21:35:21stevenmbut there is kind of a lot of it
21:35:28stevenmmaybe that's something to work on next
21:35:45rashertrying your latest now
21:37:26***Saving seen data "./dancer.seen"
21:38:04stevenmrunning realtime at 150 Mhz and 22050 sampling rate
21:38:14stevenmbut again, pentium M
21:38:44 Join muesli- [0] (
21:40:47rasherthink it has crashed
21:40:54stevenmwhat .. ?
21:41:02rasherno hdd activity and showing "start playing"
21:41:06stevenmthats fine
21:41:08stevenmI took taht out
21:41:53stevenmI am curious now. is the sequencer causing THAT much slowdown
21:42:23rasher6:30 now
21:42:28stevenmdone ?
21:42:43stevenmah ok
21:42:51rasherno, I mean
21:42:58stevenmfark ...
21:43:04Shagnarperhaps it helps, i d/l the patch-file yesterday and opened a midi with "midi2wave", after over half an hour, just "start playing" on the screen
21:43:23rasherthat's to be expected
21:43:41rasherespecially if it's a complicated file, and long
21:43:45stevenmShagnar, you decompress it into .rockbox?
21:44:07stevenmwell yea I guess it would have yelled at you otherwise
21:44:24stevenmrasher, still going ?
21:44:39stevenmrasher, let's try this instead
21:44:51stevenmcomment out, midi2wav.c, line 190
21:44:57stevenmwow that didnt make any difference at all
21:45:05stevenmso its not the ADSR slowing it down
21:45:22stevenmyea, comment out midi2wav.c, line 190
21:45:47HClwouldn't it be easier to profile it in the sim? :X
21:45:52stevenmthis will be meaningless sound-wise but it will tell the slowdown due to sequencer alone
21:46:00stevenmHCl, don't know how to do that ..
21:46:06HClfair enough
21:46:08HClneither do i :)
21:46:11HClbut i know its possible
21:47:07stevenmrasher, with that commented out, it should take seconds. I hope it takes longer though
21:47:20stevenmso I have something else to optimize
21:49:14rasherI'll try
21:50:03rasherthat didn't take long
21:50:09rasher10 seconds or so
21:50:16stevenmI see
21:50:21stevenmso its all in the synth code
21:50:57rasherfrom start playing to finished playing: 2 seconds
21:51:25stevenmI guess going to 22050 sampling rate will take us to 4 and a half minutes
21:51:33Shagnarno more endless loop?
21:51:49stevenmwell it's not TECHNICALLY endless....
21:51:56stevenmit's just THAT slow
21:52:37stevenmI guess 22050 gives us say 34% realtime.
21:52:51stevenmcan we really expect a 3x boost from ASM stuff ?
21:53:23 Quit muesli- (Read error: 54 (Connection reset by peer))
21:55:39stevenmAnyway, I am going to go get breakfast
21:55:41stevenmat 4 PM
21:55:46stevenmrasher, thanks a lot for the help
21:56:21stevenmbye all
21:56:34 Quit stevenm ("Leaving")
21:57:54 Join matsl [0] (
22:07:59 Quit Shagnar ("( :: NoNameScript 3.81 :: )")
22:15:24 Quit t0mas (Read error: 110 (Connection timed out))
22:19:16 Quit pfavr ("ChatZilla 0.9.61 [Mozilla rv:1.7.6/20050324]")
22:27:18 Quit zezayer ("Chatzilla 0.9.67 [Firefox 1.0.1/20050311]")
22:29:57 Join Kafka [0] (~meh@
22:37:33 Join t0mas [0] (
22:38:27t0masping timed out
22:38:49Kafkahappens to the best of us
22:38:51*amiconn has been really lazy lately :(
22:38:51t0maslinux uptime: 22:27:47 up 119 days, 10:29, 2 users, load average: 0.03, 23.81, 42.70
22:39:06t0masload was over 50 for a moment... and it started killing random processes...
22:39:13t0masbye bye pptp connection
22:40:39*HCl hands amiconn coffee.
22:40:48HClmeh, i got class again tomorrow... no more vacation.. :/
22:40:55*preglow hands amiconn speed
22:52:02 Quit Harpy (Read error: 60 (Operation timed out))
23:00:20rasherevening preglow
23:00:27rasherand HCl
23:00:41HClhow's your cat? (if you have one)
23:01:38*HCl likes to ask unordinary questions to confuse people :3
23:02:20rasherMy cat is experiencing a severe existence failure
23:02:29 Quit matsl (Read error: 54 (Connection reset by peer))
23:02:44HCl :(
23:02:48HClyou should get one :3
23:02:49 Join Rob- [0] (
23:04:19Kafkacats are evil
23:04:59 Join matsl [0] (
23:05:47Kafkathey scratch
23:05:52Kafkaand meh
23:05:53HClthey cuddle
23:06:02 Join stevenm [0] (
23:06:09zeand purr
23:06:24Kafkathey don't show any emotion
23:06:37stevenmare these, kittens ?
23:06:41HClo.o; they do here.
23:06:56zethey show it in bucketloads here
23:06:58Kafkadogs are cool
23:07:12HCldogs drool :/
23:07:18HCland smell :/
23:07:26HCland have to be walked cause they're too dumb to walk theirselves :/
23:07:37 Join TCK [0] (
23:07:39HClthey're happy.
23:07:40HCland loyal.
23:07:42stevenmcan they optimize midi2wav in asm for realtime performance ? heh
23:08:15Kafkacan you?
23:08:33stevenmI don't know ASM... can optimize in C as much as I can but ASM.. i do not know :(
23:08:57Kafkai know a little
23:09:06Kafkahanded in a project last year for school
23:09:22Kafka2 digit +/- calculator
23:09:32Kafkano negative numbers
23:09:34HClasm compared to optimized C isn't that much better
23:09:37rasherHeh.. midi synth in coldfire sound fun?
23:10:01HClprobably only if you use the emac instructions, cause gcc doesn't utilize them.
23:11:57Kafkai'm off
23:13:26preglowstevenm: minimize functions calls, branches, utilize iram where you can, use the emac unit for multiplication
23:13:43preglowi wish i had time to do it, but i don't
23:13:54stevenmpreglow, emac ?
23:14:08preglowyes, unit for multiplication and addition
23:14:15stevenmI don't think it is ready for ASM optimization yet
23:14:22stevenmthere are still things in C I can do
23:14:23preglowthat might also very much be true
23:14:26preglowthen do that
23:14:34stevenmI will.. I was saying, in the future
23:14:44stevenmbecause at this moment, i need at least a 3x speed boost
23:14:56preglowyou need lots more than that
23:15:07preglowbut ok
23:15:10preglowthis midi file you use
23:15:11HClyea, we're not gonna run midi at 120mhz..
23:15:20preglowhow many voices does it use simultaenously?
23:15:32stevenmI do not remember. I want to say, medium.
23:15:45stevenmit can be checked
23:15:53preglow'medium''s not much of a number
23:15:58preglowdo so, if you can
23:17:36stevenmpreglow, checking now
23:18:00 Quit Kafka (Read error: 54 (Connection reset by peer))
23:18:06stevenmo far peak is 23, still going
23:18:29 Quit TCK- (Read error: 110 (Connection timed out))
23:18:47preglowbut ok
23:18:55preglowwhat do you do with each voice?
23:18:59preglowinterpolate and amplify?
23:19:13stevenmpeak is 27 voices for that file
23:19:28stevenmthere is more work than it seems
23:19:32preglowthen explain
23:19:52stevenma check to see which direction to go - if it's looped
23:20:00stevenma looping check, looping reversal if needed
23:20:08stevenmthen shift it foreward
23:20:23stevenmthen check to see if it is being 'ramped down' after it's been killed
23:20:31preglowdirection check? why don't you just make the delta be negativ
23:20:33stevenmthis only lasts for 255 samples fortunately, and eliminates annoing clicks
23:20:44preglowthat you can do on note on
23:21:04stevenmit starts out positive
23:21:18stevenmif the loop is pingping, it needs to switch to negative, then back to positive, etc
23:21:28stevenmthen get 2 samples, interpolate
23:21:53stevenmdo envelope stuff to it, ie, check which way the rate should go, do the rate stuff
23:22:00stevenmif the rate or the offset ran out, kill the voice
23:22:11stevenmamplify based on current offset
23:22:18stevenm(for envelope)
23:22:29stevenmand shift back accordingly
23:22:37preglowyou've got an if where you check for direction
23:22:40preglowthat can be eliminated
23:22:56stevenmthen amplify based on channel volume and note volume
23:23:00stevenmand again shift accordingly
23:23:11preglowjust do so->delta = -so->delta each time you reach a backwards loop
23:23:41stevenmI guess channel and note volume can be combined, but then iut has to be recomputed everywhere for every note on that channel the minute channel volume changes
23:24:02preglowa mul is nothing
23:24:12preglowremoving one mul isn't going to do much
23:24:14stevenmI was thinking about combining the several shifts into one but I run out of bit percision
23:24:44stevenmbecause the number varies so much.. I make it bigger, I make it smaller, then bigger again
23:25:02stevenmie, here s = (s * (so->curOffset >> 22) >> 6);
23:25:07preglowfor volume muls, interpolation and so on, you should use the emac unit
23:25:17stevenmpreglow, how do I use the emac unit ?
23:25:27stevenmis it a #define or something or what ?
23:25:52stevenmthen there's the whole loop outside the synth. ie, run thru all the voices, etc
23:25:54preglowi've made a file with macros
23:25:59preglowbut you need to learn how to use it first
23:26:18stevenmI made that variable a global variable and in iram, so that it eliminates the overhead of copying the variable and putting it in plaes
23:26:49 Join Aison [0] (
23:26:55preglowall this shifting also takes a lot of cpu
23:26:57stevenmeverything synth related is in iram except for the samples. and it went from 10 minutes to 8 minutes
23:27:04stevenmshifting is expensive ?
23:27:12preglowwell, no, but you do a lot of it
23:27:21preglowand when the shift is above 8 bits, the shift takes two instructions
23:27:28preglowbecause the shift number has to be put in a register
23:27:34stevenmah right
23:27:48stevenmI am also using signed ints but I went to signed short ints as much as possible
23:27:56stevenmwhat is the relation between speed and variable size
23:27:57preglowthat won't save you much
23:28:02preglowgo for ints
23:28:24preglowgimme a sec
23:28:55amiconnstevenm: Using short on a 32 bit cpu is most often slower than using int
23:29:09preglowstevenm: not on coldfire
23:29:16amiconnUsing short only pays off if you need to save space
23:29:16stevenmwhat do you recommend on coldfire ?
23:29:17preglowamiconn, i mean
23:29:28preglowbut it is also like amiconn says
23:29:34preglowthe only place you save cycles is with muls
23:29:39amiconnpreglow: I guess this is also true for coldfire
23:29:39stevenmwhat should I aim for? int? short int? unsigned char ?
23:29:40preglowwhere shorts are a wee bit faster
23:30:06stevenmi converted a bunch of ints to unsigned chars. did I make it better or worse ?
23:30:20preglowwhat were they used for?
23:30:56preglowfor coldfire, you're better off using ints, the coldfire instruction set often doesn't support byte and word operations
23:30:56amiconnThe ops will most likely be the same speed regardless of short or int, but loading a short from memory often needs additional instructions (signed/unsigned extend)
23:31:59stevenmsigned/unsigned extend? waht do you mean
23:32:19preglowwhen it loads a 8 bit value into a 32 bit register, it has to move and extend bits
23:32:29preglowthe sign needs to be moved to bit 31, for instance
23:32:43preglowand all the other top 23 bits need to be set if it's negative
23:32:53stevenmah. so I should declare it unsigned ?
23:33:00preglowno, you should use ints
23:33:12amiconnBtw, this is even more 'fun' on sh1, because the sh1 sign-extends by default. So loading an 'unsigned short' into a register is real fun....
23:33:54amiconn(Well, not too much, since there is a special instruction for this)
23:34:08stevenmwow you guys know a lot of asm
23:34:10preglowstevenm: but no, bottom line, ints are fine, mostly
23:34:22amiconnStill, loading a byte or short needs 2 instructions, loading an int (long) takes 1
23:34:37stevenmso I should declare stuff LONG ?
23:34:42preglow'int' will do
23:34:49preglowbut i don't know
23:34:51amiconnThere are some simple rules
23:34:56preglowmaybe long is prefered
23:35:12stevenmis there a way to find out ?
23:35:18preglowthat depends on rockbox
23:35:21preglowand the other targets
23:35:26preglowint is 16 bit on some archs
23:35:31amiconnUse 'int' wherever a 'short' would suffice range-wise, but space is not an issue. This is usually the fastest
23:35:44stevenmokay, so I stick to int
23:36:00stevenmpreglow, now.. do you believe this emac unit would make life much faster ?
23:36:04preglowstevenm: you must also make sure that all the data you use are aligned to a 32 bit boundary
23:36:10amiconnUse 'long' only when the value might exceed the range of 'short'. Of course this is only necessary in case we're compiling for a 16 bit target cpu
23:36:20stevenmpreglow, what do you mean ?
23:36:22amiconnUse 'short' only when space is an issue
23:36:32stevenmamiconn, okay
23:37:24preglowstevenm: all data you access should be placed at an address that is divisible by four
23:37:27***Saving seen data "./dancer.seen"
23:37:41amiconnOf course, the 'long' rule should be obeyed in rockbox, because we do have a 16-bit target. (Although it seems that development for that has come to a (temporary?) halt)
23:37:57preglowstevenm: you try to access a 32 bit int and it is not thusly aligned, the cpu will have to do two moves and combine it to a single 32 bit value, this takes time
23:38:17preglowamiconn: it's worth heeding anyway, that arch seems to be semi-popular
23:38:20stevenmamiconn, this thing would never be for archos I dont think ..
23:38:29preglowstevenm: gmini
23:38:33amiconnstevenm: Talking Archos _gmini_ here
23:38:43stevenmamiconn, ah.... I see
23:38:51preglowjyp actually did port libmad to the gmini
23:38:54amiconnThe archos jukeboxes are 32 bit
23:38:55preglownever heard if it worked
23:39:00preglowgod, that sounds like nightmare
23:39:38stevenmpreglow, data aligned to 32 bits... when I declare a variable in C, does that automatically happen?
23:39:47stevenmdoes this only apply to malloc'd stuff or to everything I declare
23:40:03stevenmbecause I can easily enough modify the malloc to return things divisible by 4
23:40:09stevenmjust skip a few bytes
23:40:10preglowstevenm: variables in c should be auto aligned if the compiler knows what it's doing, malloc i don't know about
23:40:24preglowbut yes
23:40:32preglowmodifying malloc should be easy, you just do what you're saying
23:40:56thegeekamiconn : got your h140 yet?
23:40:56stevenmpreglow, but m68k-gcc is smart enough to align declared variables?
23:40:57amiconnKeeping 32 bit alignment is also important. Some cpus don't only get slower on unaligned accesses (like the coldfire does), but count unailgned accesses as a severe error
23:41:01preglowstevenm: i don't know
23:41:13preglowstevenm: i really would think so
23:41:53amiconnIn fact, m68k is the only architecture I know of that does *not* throw an address exception on unaligned accesses
23:42:06preglowx86? :P
23:42:06amiconnstevenm: yes it is
23:42:24preglowx86 only tosses exceptions if you use movaps and the like
23:43:21amiconnI must admit that although I played with x86 asm a little (waaay back in the past, at the time of the '286), I never really understood it
23:43:47preglowand movaps is an sse extension
23:43:58preglowx86 is very simple
23:44:02preglowa pain to program
23:44:29preglowthe number of registers make you want to cry
23:44:59stevenmouch.. at least it aint a PIC16F877
23:45:14 Join Strath [0] (
23:45:30stevenmpreglow, now if I do all this emac stuff.. will I still be able to use the Simulator to see it it worked ?
23:45:50preglowstevenm: no
23:45:57stevenmpreglow, ... ! bah
23:46:07preglowso you stick to c for now
23:46:11stevenmpreglow, is there a way to at least tell if I am adding the right numbers?
23:46:11preglowthere's more to be done anyway
23:46:16stevenmpreglow, yes.
23:46:35preglowif you haven't got a player, then no, you can't do emac without having to bother someone else excessively to test the code
23:46:49stevenmconvert everything back to long, make the delta signed, possibly rearrange the loop conditions
23:47:04stevenmyea I think I bugged rasher way too much already
23:47:28rasherhaha, no that's just fine
23:47:32rasherglad to help
23:47:37stevenm:) thanks
23:47:58preglowi was planning to write an emac howto to help familiarise other people with it
23:48:04rasherbut doing emac optimization tests would take ages I guess
23:48:57stevenmpreglow, if emac are functions, how hard would it be to write c equivalents of them for the sim ?
23:49:06preglowthey're not function
23:49:12preglowthey're assembly level instructions
23:49:24preglowbut i guess what you say could be done
23:49:27stevenmI guess that is for last then
23:49:35preglowif we access them through macros
23:49:40stevenmmaybe, #define something?
23:49:43stevenmyea yea exactly
23:50:06preglowi made those macros when i first tried to learn how it worked
23:50:10preglowbut since then i've never even used them
23:50:33preglowto truly utilize it, you have to write in assembly, to use the instructions with parallell loads
23:50:57t0masyour memory idea..
23:51:04stevenmpreglow, woah, that is the sound of a bunch of code going so far over my head I cant even see it
23:51:30t0masI had a "new" idea, but I meight be the way you wanted it...
23:51:43preglowstevenm: here's an example use of it:
23:51:50t0masadding a pointer to the place to start saving the file, and a size for how far to save
23:51:51preglowstevenm: in sine() i do linear interpolation
23:51:58t0mas(just return error if the image doesn't fit.)
23:52:25t0masthat way it should be possible to make plugins load images subsequent... in the pluginbuffe
23:52:42preglowstevenm: the nice thing with it is that you can do 32 bit x 32 bit multiplies with a 64 bit answer
23:53:13stevenmoh no I dont need ant=ything that big
23:54:19preglowit can also do ordinary muls, but it does them faster
23:54:27preglowand i can add the result to another register
23:54:49preglowspecial registers...
23:55:20preglowbut if you haven't got a device, don't bother
23:55:25stevenmi guess i can jump off that bridge what I come to it
23:55:26preglowjust do what you can in c
23:55:37stevenmyea definitely
23:55:44preglowi'd love to help, but i need to finish libmad first
23:55:46stevenmI was considering buying an H3x0 for this
23:55:49preglowand now i need to get back to work
23:55:54stevenmpreglow, oh definitely, that is more important
23:56:17stevenmbut since 3x0 is nowhere near supported, I am waiting.. plus I already have an ajbrec
23:56:23*amiconn fiddles with add_dir_entry()
23:56:33thegeekamiconn : got your h140 yet?
23:57:00amiconnStill no iriver here :( Need to mail the dealer....
23:57:10preglowuse a loud voice ;)
23:57:15stevenmSpeaking of... if you wired a CF card into an ajbrec, to the HD connector, would it work? ie, assuming the wiring is right, would the software work with it?
23:57:21thegeekthat's a loong time

Previous day | Next day