13 June 2008, 03:25 | #1 | ||||||||||||||
Computer Nerd
Join Date: Sep 2007
Location: Rotterdam/Netherlands
Age: 47
Posts: 3,767
|
Misc programming discussion (from pms).
This discussion has been moved from pm to thread (hence the double quoting), hoping it will be interesting to others, and giving everyone a chance to come up with sugestions.
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
|
||||||||||||||
18 June 2008, 09:11 | #2 | |||||
son of 68k
Join Date: Nov 2007
Location: Lyon / France
Age: 51
Posts: 5,323
|
Quote:
Quote:
Quote:
If you want my flac player, in fact you already have it. Remember my little player which did waves and aiffs ? Quote:
Quote:
|
|||||
18 June 2008, 17:18 | #3 | |||||
Computer Nerd
Join Date: Sep 2007
Location: Rotterdam/Netherlands
Age: 47
Posts: 3,767
|
Quote:
Quote:
Quote:
That one? Cool, I think I'm going to make some hq flacs, and try it out. Quote:
Quote:
Here's the code. It handles the zlib stream header and makes the two fixed Huffman tables. That code should work properly. The expand table code makes a look up table from the large Huffman table, but it isn't well tested yet; seems to work, though. Code:
;----------------------------------------------------------------------------------- ;Inflate. ;----------------------------------------------------------------------------------- incdir "include:" include "exec/exec_lib.i" include "dos/dos_lib.i" ;----------------------------------------------------------------------------------- ;Allocmem flags: ;----------------------------------------------------------------------------------- Mem_Public =$00001 Mem_Chip =$00002 Mem_Fast =$00004 Mem_Public_Clear=$10001 Mem_Chip_Clear =$10002 Mem_Fast_Clear =$10004 ;----------------------------------------------------------------------------------- ;Inflate constants: ;----------------------------------------------------------------------------------- MAXBITS=15 ;maximum bits in a code. MAXLCODES=286 ;maximum number of literal/length codes. MAXDCODES=30 ;maximum number of distance codes. MAXCODES=MAXLCODES+MAXDCODES ;maximum codes lengths to read. FIXLCODES=288 ;number of fixed literal/length codes. ;----------------------------------------------------------------------------------- ;Inflate state structure (may not be needed after optimization): ;----------------------------------------------------------------------------------- state.out =00 ;/* output buffer */ state.outlen =04 ;/* available space at out */ state.outcnt =08 ;/* bytes written to out so far */ state.in =12 ;/* input buffer */ state.inlen =16 ;/* available input at in */ state.incnt =20 ;/* bytes read so far */ state.bitbuf =24 ;/* bit buffer */ state.bitcnt =28 ;/* number of bits in bit buffer */ ;----------------------------------------------------------------------------------- Start movem.l d0-a6,-(sp) move.l #In,a0 move.l #InData+12,00(a0) bsr InflateInit movem.l (sp)+,d0-a6 rts ;----------------------------------------------------------------------------------- InflateInit ;Initalization for Inflate. ;----------------------------------------------------------------------------------- ;In 00=data ; ;Out 00=Error value ;----------------------------------------------------------------------------------- movem.l d0-a6,-(sp) move.l #In,a0 move.l #Out,a6 move.l 00(a0),a1 ;Input data. InlateInit_Handle_Header moveq #0,d1 move.b (a1),d1 ;Read CMF (Compression Method and flags). move.b d1,d2 and.b #15,d1 ;Get CM (compression mode). lsr.b #4,d2 ;Get CINFO (compression info). move.l #-1,00(a6) cmp.l #8,d1 ;Check is stream is valid. bne InflateInit_Error ;Error: Invalid stream. move.l #-2,00(a6) cmp.l #7,d2 ;Check if sliding window size is valid. bgt InflateInit_Error ;Error: Invalid sliding window size. move.l #-3,00(a6) move.w (a1)+,d3 ;Check CMF+FCHECK to be multiple of 31---> btst.l #5,d3 ;Test if FLG.FDICT is set. bne .cnt ;If so... move.l (a1)+,dictid ;...store DICTID from stream. .cnt divu.w #31,d3 ;---> swap.w d3 ; cmp.w #0,d3 ; bne InflateInit_Error ;Error: Invalid CMF+FCHECK. move.l #0,00(a6) addq.l #8,d2 ;Calculate sliding window size... moveq #1,d3 ;... lsl.l d2,d3 ;... move.l d3,winsize InflateInit_Long_Table .make_fixed move.l #fixed_data,a0 move.l #fixed1_lens,a1 moveq #3,d0 .make_fixed_lp move.l (a0)+,d1 move.l (a0)+,d2 .make_fixed_lp1 move.l d1,(a1)+ dbra d2,.make_fixed_lp1 dbra d0,.make_fixed_lp ; ; The follwing three loops are from inflates huffman table generator. ; Original code: ; ;1) Count the number of codes for each code length. Let bl_count[N] be the ;number of codes of length N, N >= 1. ; ;2) Find the numerical value of the smallest code for each code length: ; ; code = 0; ; bl_count[0] = 0; ; for (bits = 1; bits <= MAX_BITS; bits++) { ; code = (code + bl_count[bits-1]) << 1; ; next_code[bits] = code; ; } ; ;3) Assign numerical values to all codes, using consecutive values for all ;codes of the same length with the base values determined at step 2. Codes ;that are never used (which have a bit length of zero) must not be assigned ;a value. ; ; for (n = 0; n <= max_code; n++) { ; len = tree[n].Len; ; if (len != 0) { ; tree[n].Code = next_code[len]; ; next_code[len]++; ; } ; } ; ; This code is also going to be in the inflate loop. ; .count_len move.l #fixed1_lens,a6 move.l a6,a0 move.l #fixed1_bl_count,a1 move.l #fixlcodes,d7 move.l d7,d1 subq.l #1,d1 .count_len_lp move.l (a0)+,d0 addq.l #1,(a1,d0.l*4) dbra d1,.count_len_lp .count_len_end .find_smalest move.l #fixed1_next_code,a5 moveq #0,d0 move.l d0,(a1) move.l a5,a2 addq.l #4,a2 moveq #1,d1 moveq #maxbits-1,d3 .find_smalest_lp add.l (a1)+,d0 add.l d0,d0 move.l d0,(a2)+ dbra d3,.find_smalest_lp .find_smalest_end .assign_val move.l #fixed1_tree-4,a1 .assign_val_lp addq.l #4,a1 subq.l #1,d7 beq .assign_val_end move.l (a6)+,d2 beq .assign_val_lp move.l (a5,d2.l*4),(a1) addq.l #1,(a5,d2.l*4) bra .assign_val_lp .assign_val_end ; ; Because the Huffman codes in the zlib stream are reversed, a streight ; look-up table is calculated here. ; .expand_table move.l #fixed1_tree+(fixlcodes*4)-4,a0 move.l #fixed1_table,a1 move.l #fixed1_lens,a2 move.l #fixlcodes,d0 move.w #$cccc,d7 ;11001100 move.w #$3333,d6 ;00110011 move.w #$aaaa,d5 ;10101010 move.w #$5555,d4 ;01010101 moveq #8,d2 sub.l a5,a5 .expand_table_lp subq.l #1,d0 beq .expand_table_exit move.l -(a0),d1 move.l (a2)+,a3 sub.l a4,a4 cmp.l d2,a3 bgt .expand_table_9 beq .expand_table_8 .expand_table_7 addq.l #2,a4 .expand_table_8 addq.l #2,a4 .expand_table_9 .expand_table_reverse ror.w #1,d1 ;byte 'swap' (works because above there was lsl.w #7,d1 move.w d1,d3 and.w d4,d1 ;swap 1x1 add.w d1,d1 and.w d5,d3 lsr.w #1,d3 or.w d3,d1 move.w d1,d3 and.w d6,d1 ;swap 2x1 lsl.w #2,d1 and.w d7,d3 lsr.w #2,d3 or.w d3,d1 rol.b #4,d1 ;swap 4x1 rol.w #8,d1 rol.b #4,d1 rol.w #8,d1 move.l a4,d3 beq .expand_table2 subq.l #1,d3 move.l d1,a5 .expand_table_lp2 move.l a5,d1 or.l d3,d1 move.l d0,(a1,d1.l*4) subq.l #1,d3 bne .expand_table_lp2 move.l a5,d1 or.l d3,d1 move.l d0,(a1,d1.l*4) bra .expand_table_lp .expand_table2 move.l d0,(a1,d1.l*4) bra .expand_table_lp .expand_table_exit ; ; Because the short table uses almost all possible five bit combinations ; it's impossible to make Huffman codes for them, so this loop should be ; enough. ; InflateInit_Short_Table .make_tree move.l #fixed2_tree,a1 moveq #maxdcodes-1,d0 moveq #0,d1 .make_tree_lp move.l d1,(a1)+ addq.l #1,d1 dbra d0,.make_tree_lp InflateInit_Error InflateInit_Exit movem.l (sp)+,d0-a6 rts ;----------------------------------------------------------------------------------- In dcb.l 32 Out dcb.l 32 ;----------------------------------------------------------------------------------- section data,data_f InData incbin "pngdata.deflate" InDataEnd InDataSize =InDataEnd-InData even section out_data,data_f OutData ;dcb.b 2*1024*1024 section data2,data_f fixed_data dc.l 8,143-0 dc.l 9,255-143 dc.l 7,279-256 dc.l 8,287-280 fixed1_lens dcb.l 512 fixed1_tree dcb.l 1024 fixed1_bl_count dcb.l 1024 fixed1_next_code dcb.l 1024 fixed1_table dcb.l 1024 fixed2_tree dcb.l 1024 winsize dc.l 0 dictid dc.l 0 ;----------------------------------------------------------------------------------- By the way, hows your internet conncetion? Still what you had, or have you sorted out something better? For your sake I hope it's getting fixed; being stuck with a slow/bad connection sucks (although, better slow and stable, than fast and down half the time) Have fun Last edited by Thorham; 18 June 2008 at 17:30. |
|||||
21 June 2008, 19:53 | #4 | |||||
son of 68k
Join Date: Nov 2007
Location: Lyon / France
Age: 51
Posts: 5,323
|
Quote:
But the speed gain is tiny : something like 1.33 seconds out of 1 minute, which is far from enough to be able to play in stereo high quality But what I prefer is to quicken that stuff as much as possible to reach higher quality settings, not to decrease quality further. Anyway this made another equ setting at the beginning... Yes. But it wasn't hard : long muls are deadly slow Quote:
If you meant high frequency, then you'd better not, as they won't play (too slow). The better the compression ratio, the slower it will be. No big deal if stream is in mono or of a frequency lower than 28 khz, but in 44.1 stereo I had to limit lpc to 5 (you probably need to limit further because of 70ns ram). Quote:
Quote:
Quote:
|
|||||
21 June 2008, 20:19 | #5 | ||||
Computer Nerd
Join Date: Sep 2007
Location: Rotterdam/Netherlands
Age: 47
Posts: 3,767
|
Quote:
Of course making it an option is possible, too Yeah, those stinkers suck big time. The 'advantage' is that they can be very well optimized, though Quote:
Quote:
Quote:
Well, as long as it isn't dial-up, how bad can it be? |
||||
25 June 2008, 12:27 | #6 | |||||
son of 68k
Join Date: Nov 2007
Location: Lyon / France
Age: 51
Posts: 5,323
|
Quote:
So I prefer to be mistrustful about that, and look for the binary equivalence first. Also, I can't say I listen on those on a hi-fi system, so some differences might escape And it's done. Like the removal of the frequency filter Quote:
On the other hand longs muls are very practical if speed isn't an issue. Quote:
Of course they operate on small blocks. There probably is a lot of litterature about this on the net, google it if you want more detailed information than mine. I'm not an expert Also see the "shorten" program on Aminet, it's pretty much the same. Quote:
However, maybe a 256-byte table could spare some work ? Quote:
Errrhm... ahem... It is dial-up... Then again I don't use it a lot, so to get my emails and post here, it's enough. And I'm using the miggy to do all that Knowing myself if I had a quick connection I would be over the net all day long |
|||||
02 July 2008, 02:38 | #7 | ||||||||
Computer Nerd
Join Date: Sep 2007
Location: Rotterdam/Netherlands
Age: 47
Posts: 3,767
|
Quote:
Good, the more options for users to play with, the better. Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
I think I can finish the inflater this week, if only I wouldn't spend so much time online. I'll try to cutback and do some work for a change |
||||||||
04 July 2008, 11:19 | #8 | |||||||
son of 68k
Join Date: Nov 2007
Location: Lyon / France
Age: 51
Posts: 5,323
|
Quote:
Options at source level only I'm afraid... Quote:
I thought about some sort of a JIT to generate multiply code on-the-fly when reading that coefficient array (which is 32 entries at maximum). Gosh. Just too much work. Quote:
Quote:
Personnally I hunted for a lossless coding when I wanted to reduce disk space occupied by my wave files. I found flac to be good for me because it only uses integer maths. I just hate floating-point stuff Quote:
(was used to reverse the gfx horizontally). Quote:
Quote:
Last edited by meynaf; 04 July 2008 at 11:58. |
|||||||
16 July 2008, 20:02 | #9 | |||||||
Computer Nerd
Join Date: Sep 2007
Location: Rotterdam/Netherlands
Age: 47
Posts: 3,767
|
Sorry for taking so looooong to reply
Quote:
And I'd keep it that way. First debug the software properly, then write an option parser. These are simple, of course, but you still only want to make one once the software works, and also only once; one properly written parser can be reused over and over again. Quote:
Quote:
Yes, indeed, but it does increase the challenge. Quote:
Quote:
As for disk space, I have a 40gig hd and I'm now using sfs with ide fix (gonna register it) so I can use the whole disk. Yep, I finally took the time to set this up. Seemed like a waste, especially because I bought the drive new for my miggy; it's not some old spare hd (don't use old drives as work drives, new is large and cheap) so I basically had 36gigs of brand new, unused disk space. This size is rediculous for an Amiga, so I thought, why not just fill it up with wavs? Quote:
Quote:
Code:
;----------------------------------------------------------------------------------- Decode_Png_24 ;Decodes a decompressed 24bit png image. ;----------------------------------------------------------------------------------- movem.l d0-a6,-(sp) move.l #rgb_out,a0 move.l #png_image,a1 move.l png_width,d7 mulu.w #3,d7 move.l png_height,d1 addq.l #1,d1 .loop_y subq.l #1,d1 beq .end move.b (a1)+,d2 cmp.b #3,d2 bgt .case4 beq .case3 cmp.b #1,d2 bgt .case2 beq .case1 .case0 move.l png_width,d3 lsr.l #2,d3 subq.l #1,d3 .case0_loop move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ move.l (a1)+,(a0)+ dbra d3,.case0_loop bra .loop_y .case1 move.l png_width,d3 subq.l #1,d3 moveq #0,d4 moveq #0,d5 moveq #0,d6 .case1_loop add.b (a1)+,d4 move.b d4,(a0)+ add.b (a1)+,d5 move.b d5,(a0)+ add.b (a1)+,d6 move.b d6,(a0)+ dbra d3,.case1_loop bra .loop_y .case2 move.l png_width,d3 subq.l #1,d3 move.l a0,a2 sub.l d7,a2 .case2_loop move.b (a2)+,d4 add.b (a1)+,d4 move.b d4,(a0)+ move.b (a2)+,d4 add.b (a1)+,d4 move.b d4,(a0)+ move.b (a2)+,d4 add.b (a1)+,d4 move.b d4,(a0)+ dbra d3,.case2_loop bra .loop_y .case3 move.l png_width,d3 subq.l #1,d3 move.l a0,a2 sub.l d7,a2 moveq #0,d2 moveq #0,d4 moveq #0,d5 moveq #0,d6 .case3_loop move.b (a2)+,d2 add.w d2,d4 lsr.w #1,d4 add.b (a1)+,d4 move.b d4,(a0)+ move.b (a2)+,d2 add.w d2,d5 lsr.w #1,d5 add.b (a1)+,d5 move.b d5,(a0)+ move.b (a2)+,d2 add.w d2,d6 lsr.w #1,d6 add.b (a1)+,d6 move.b d6,(a0)+ dbra d3,.case3_loop bra .loop_y ; If y>0 Then c=Point(x,y-1) Else c=0 ; r2=c\65536:g2=(c\256) And 255:b2=c And 255 ; If y>0 And x>0 Then c=Point(x-1,y-1) Else c=0 ; r3=c\65536:g3=(c\256) And 255:b3=c And 255 ; ; r=dat(adr+0)+Paeth(r1,r2,r3) ; g=dat(adr+1)+Paeth(g1,g2,g3) ; b=dat(adr+2)+Paeth(b1,b2,b3) ; PSet(x,y),RGB(r,g,b) ;The following loop needs to be unrolled once. Also, because decoding a whole pixel in one go makes. ;the loop too large for the cache, it's going to handle the date per gun color, and just get executed ;three times per scan line. .case4 move.l png_width,d3 subq.l #1,d3 move.l a0,a2 sub.l d7,a2 ;x,y-1 move.l a2,a3 subq.l #3,a3 ;x-1,y-1 movem.l d1/d7,-(sp) moveq #0,d0 moveq #0,d2 moveq #0,d4 .case4_loop move.b (a2),d2 ;r2 move.b (a3),d0 ;r3 .case4_peath move.l d4,d1 add.l d2,d1 sub.l d0,d1 move.l d1,d5 sub.l d4,d5 bge .case4_peath1 neg.l d5 .case4_peath1 move.l d1,d6 sub.l d2,d6 bge .case4_peath2 neg.l d6 .case4_peath2 move.l d1,d7 sub.l d0,d7 bge .case4_peath3 neg.l d7 .case4_peath3 cmp.l d6,d5 bgt .case4_peath4 cmp.l d7,d5 bgt .case4_peath4 add.b (a1),d4 bra .case4_peati .case4_peath4 move.b (a1),d4 cmp.l d7,d6 bgt .case4_peath5 add.b d2,d4 bra .case4_peati .case4_peath5 add.b d0,d4 .case4_peati move.b d4,(a0) addq.l #3,a0 addq.l #3,a1 addq.l #3,a2 addq.l #3,a3 .end movem.l (sp)+,d0-a6 rts ;----------------------------------------------------------------------------------- png_width dc.l 640 png_height dc.l 512 png_image rgb_out ;----------------------------------------------------------------------------------- Last edited by Thorham; 16 July 2008 at 20:16. |
|||||||
16 July 2008, 20:07 | #10 | ||
Computer Nerd
Join Date: Sep 2007
Location: Rotterdam/Netherlands
Age: 47
Posts: 3,767
|
The above code is besed on the algorithms in the following freebasic code:
Code:
function Paeth(a As integer, b As integer, c As Integer) As integer Dim As Integer p,pa,pb,pc ' a = left, b = above, c = upper Left p = a + b - c ' initial estimate pa = abs(p - a) ' distances to a, b, c pb = abs(p - b) pc = abs(p - c) ' return nearest of a,b,c, ' breaking ties in order a,b,c. if pa <= pb AND pa <= pc Then return a elseif pb <= pc then return b Else return c EndIf End function ScreenRes 1280,1024,32 Dim As Integer f,l f = FreeFile Open "e:\out.inf" For Binary As #f l=Lof(f) Dim As UByte dat(l) Get #f, , dat() Close #f Dim As uInteger x,y,adr,c Dim As Ubyte r,g,b Dim As ubyte r1,g1,b1 Dim As ubyte r2,g2,b2 Dim As ubyte r3,g3,b3 For y=0 To 768-1 If InKey$<>"" Then stop f=dat(adr) adr=adr+1 r=0:g=0:b=0 For x=0 To 500-1 r1=r:g1=g:b1=b If f=0 Then PSet(x,y),RGB(dat(adr+0),dat(adr+1),dat(adr+2)) End if If f=1 Then r=r1+dat(adr+0):g=g1+dat(adr+1):b=b1+dat(adr+2) PSet(x,y),RGB(r,g,b) End if If f=2 Then If y>0 Then c=Point(x,y-1) Else c=0 r2=c\65536:g2=(c\256) And 255:b2=c And 255 r=dat(adr+0)+r2 g=dat(adr+1)+g2 b=dat(adr+2)+b2 PSet(x,y),RGB(r,g,b) EndIf If f=3 Then If y>0 Then c=Point(x,y-1) Else c=0 r2=c\65536:g2=(c\256) And 255:b2=c And 255 r=dat(adr+0)+(r1+r2)\2 g=dat(adr+1)+(g1+g2)\2 b=dat(adr+2)+(b1+b2)\2 PSet(x,y),RGB(r,g,b) End if If f=4 Then If y>0 Then c=Point(x,y-1) Else c=0 r2=c\65536:g2=(c\256) And 255:b2=c And 255 If y>0 And x>0 Then c=Point(x-1,y-1) Else c=0 r3=c\65536:g3=(c\256) And 255:b3=c And 255 r=dat(adr+0)+Paeth(r1,r2,r3) g=dat(adr+1)+Paeth(g1,g2,g3) b=dat(adr+2)+Paeth(b1,b2,b3) PSet(x,y),RGB(r,g,b) End if adr=adr+3 Next Next sleep So I haven't been doing nothing, the progress is just a little slow. Quote:
Quote:
Last edited by Thorham; 16 July 2008 at 20:20. |
||
17 July 2008, 14:16 | #11 | ||||||||||||
son of 68k
Join Date: Nov 2007
Location: Lyon / France
Age: 51
Posts: 5,323
|
Happy to see you're still alive
Quote:
Quote:
Say, if we selected "low" quality, we don't bother about a frequency filter About the option parser : for now dos.library's ReadArgs() is enough for me... But as a general rule, when I have something that works well, I keep it for reusing. My "sysbtm.i" include is full of that stuff Quote:
Quote:
Quote:
I don't think we need this to get a challenge if you ask me Quote:
Anyway this may well be the future of sound compression. If you listen at the average song you will discover it is very repetitive, and actual compressors aren't removing this redundancy ! Quote:
Quote:
Then again I've got a huge collection of MP3's that need to be sorted Not to mention the 2 Gb of -ahem- jpegs. Quote:
Quote:
I admit I haven't worked on my viewer recently ; even the mpeg audio project is rather sleepy these days (even though Don Adan - whom I helped quite a lot with his ADPCM player and is helping me in return here - sometimes wakes it up with opt ideas). I'm actually attempting to design a custom dungeon for good old DM1 and it takes a lot of time Quote:
Quote:
|
||||||||||||
18 July 2008, 03:38 | #12 | ||||||||||||||
Computer Nerd
Join Date: Sep 2007
Location: Rotterdam/Netherlands
Age: 47
Posts: 3,767
|
Thank you
In my opinion, peath is also not too hard. They did a great job explaining it with pseudo code that was very easy to get to work if freebasic. The only problem with it is that the code won't fit inside the cache if you try to do whole pixels in one go. But that's no problem seeing how png works on bytes, not pixels. Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
You're right, of course. Some people do like challenges I'm one of them, but not always. Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
As for that dungeon, if it turns out to be a good dungeon, upload to the zone, please. All the time in the universe. But still, I'd really like to finish something sometime soon. Quote:
And how come you don't have a peecee? Do you hate them that much |
||||||||||||||
20 July 2008, 10:11 | #13 |
Global Moderator
Join Date: Nov 2001
Location: Derby, UK
Age: 48
Posts: 9,355
|
Guys why don't you just reply here instead of wasting that little bit of bandwidth of posting the PMs twice (as a PM and here!)
|
20 July 2008, 13:33 | #14 |
Computer Nerd
Join Date: Sep 2007
Location: Rotterdam/Netherlands
Age: 47
Posts: 3,767
|
|
21 July 2008, 11:47 | #15 |
son of 68k
Join Date: Nov 2007
Location: Lyon / France
Age: 51
Posts: 5,323
|
|
21 July 2008, 12:08 | #16 | ||||||||||||||||||||||
son of 68k
Join Date: Nov 2007
Location: Lyon / France
Age: 51
Posts: 5,323
|
Quote:
Quote:
Quote:
Besides, there is no significant speed difference between 8 and 16 bits. Just the size changes, and most of the code is common for both. Quote:
The sound is slightly clearer with it, and it roughly takes 3% cpu. An option to be kept for high quality setting and dropped for low and medium, I think. Quote:
It appeared in 2.0 roms, and is perhaps among the things that made arp.library obsolete. See docs if you want to know more about it ; must have been a pain to write. Quote:
Quote:
Quote:
Quote:
I am unsure it wouldn't be better to store the code in the decoder itself or in a data file giver with it ; decoding would simply fetch the relevant entry. Quote:
And zsnes won't bring those on your miggy but on your peecee. That's not the same thing Quote:
Quote:
Trying to emulate brain functions isn't a waste according to me. It may be evil, but it's not a pure waste. Quote:
Quote:
Converting mp3 to flac is probably a waste, since you wouldn't gain anything in quality and use much more space - of course you can do it for cpu usage only, but it would either periodically read from disk, or use more memory to load the file. Unsure it is a winner... Quote:
Quote:
Quote:
Also, I remember beating the DM2 boss just by sending him attack minions like he does I have tried one, and I still prefer using 4 characters. Even 4 isn't enough for me. But it may be simply because those games aren't challenging enough for hardcore dungeoneers like you Quote:
Quote:
However, what makes me think I'll never finish the dungeon is simply because I ran into some of the game's limitations. I ran out of actuators, man, and that's bad Quote:
On the other hand I can do a preview for your own use, so that I'll know which areas must be expanded first. Anyway I am not the judge to say it is a good dungeon Quote:
Quote:
Yeah. PC sucks. |
||||||||||||||||||||||
03 August 2008, 15:01 | #17 | ||||||||||||||
Computer Nerd
Join Date: Sep 2007
Location: Rotterdam/Netherlands
Age: 47
Posts: 3,767
|
Quote:
Quote:
Quote:
Quote:
Wow, thats short I always thought that these things were a pain to write. Yes, I suppose I am. But why write code thats not even close to how well you can make it? With programming I certainly am a perfectionist, and I usually try to do my best. Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
But he who goes too slow, goes no where at all Quote:
Quote:
You are absolutely right. I think I'm going to stick with the code I'm doing for your viewer for now instead of wasting my time on a million and one things. But why? They are so faaaaaaast |
||||||||||||||
03 August 2008, 17:32 | #18 |
Registered User
Join Date: Dec 2007
Location: The World
Age: 50
Posts: 476
|
I will be pleased to help test your player on 060/66 if this is any assistance? I'd be very interested to play with flac on my Amiga!
|
07 August 2008, 14:23 | #19 | ||||||||||||
son of 68k
Join Date: Nov 2007
Location: Lyon / France
Age: 51
Posts: 5,323
|
Apparently we have someone for 060
Not to mention it wouldn't gain much... Quote:
You ask if there is any good way to optimize this... but every good way I could think about is already there. And even more, as Don Adan helped me a lot on the IMDCT part. Now what we couldn't play at all can be played at high quality (in mono). And with that extra help we gained a further 10%, playing with 89% cpu what we previously played in 99% (still mono though). Quote:
Yeah, that's what all women tell m... errh... never mind Oh it was a pain to write, yes. This code originated in an old version of my picture viewer. I got it out of there and made it more generic. And as always I planned more features than I actually did Quote:
Quote:
Quote:
Quote:
The SPC700 (Snes soundchip) emulation could be much more annoying if you ask me. Quote:
A brain without connections is pretty like a baby, and it can still do something no computer can do : it can learn. See above... Consider how complex a tongue (e.g. English) can be to learn. Consider the time it takes to a baby to actually speak it - just by listening at it. Can a computer do this ??? Quote:
Quote:
No. Most of them are just floppy images I got long ago. Yes, if you have enough memory. But Dm1 was made to work in 512 kb Quote:
LOL Quote:
As all other things that go in a dungeon and are not tiles, they are limited to 1024 per dungeon. Why this limitation? you might ask. It's because they are referenced with a 16-bit word which is some sort of a pointer and looks like that : 2 bits for direction, 4 bits for type, 10 bits for number. There are 4 directions, 16 types (of which only 13 are used : doors, teleports, texts, actuators, monsters, weapons, clothing, scrolls, potions, chests, misc. objects, projectiles, explosions)... and a maximum of 1024 objects of each type because of the 10-bit field. So hacking isn't that easy. Besides, this would mean that no other version of the game but mine can use that dungeon file. Oh, well. I'll do it anyway. That thing may seem off-topic, but it really will end up with a lot of programming. And although the game was cleverly designed, Megamax Laser C made a mess out of it... Look in the zone, there's something for you ! Please tell me how your journey looked like, say, something such as "I got surrounded by monsters and was killed", or "I fell into a pit, had two deaths out of 4 characters - then some monsters came and it was the end" Quote:
Fast ? Depends on what they do. They are grandmas doped with transgenic kryptonite. |
||||||||||||
07 August 2008, 14:28 | #20 | |
son of 68k
Join Date: Nov 2007
Location: Lyon / France
Age: 51
Posts: 5,323
|
Quote:
http://meynaf.free.fr/tmp/p.zip It's a simple command-line player. Very crude I'm afraid. Maybe still full of bugs (probably ). On your 060 you should have no problem playing flacs, unless the long muls are really too slow. Also, there may be several other things I need to test on 060, e.g. my picture viewer. |
|
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
Thread Tools | |
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Old KGLoad Discussion | killergorilla | project.KGLoad | 357 | 20 January 2011 16:08 |
Castlevania Discussion | john4p | Retrogaming General Discussion | 30 | 30 January 2009 02:10 |
ROM Discussion... | derSammler | project.EAB | 41 | 29 January 2008 23:36 |
General Discussion | Zetr0 | project.Amiga Game Factory | 12 | 15 December 2005 13:53 |
|
|