Jump to content

swapd0

Members
  • Content Count

    702
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by swapd0


  1. Compiled but I still have the same errors, I've tried both libraries, I've seen that the library defines functions like cadd and cmult but I got undefined references to ___addsf3, ___multdf3, etc At least the cos, sin, round, errors are fixed.

     

     


  2. On 11/28/2018 at 6:29 PM, ggn said:

    Also I totally forgot I have packaged up gcc 8.2 for macs (built on El Capitan) here: http://d-bug.mooo.com/various/brownart.tar.bz2. So worst case you could give this a shot!

    IIRC I've this version installed with a very strip down version of the C libraries, and if I've a float in the sources I get a lot of linker errors (undefined references to ___addsf3, ___muldf3, etc), where can I find the source of the floating point library?

     

    I know that floating point it's very slow but it's better to have project running and then make changes to remove the floating point part.

     


  3. On 9/29/2020 at 8:15 PM, SCPCD said:

    In the most up to date JTRM, the YPOS for GPU Object was removed.

    In the netlist, there is no use of YPOS for Gpu object (the state machine always execute gpuint).

     

    I think I have read somewhere that this feature was removed from the specification and replaced by the use of branch object.

     

     

    Big mistake, it's easier to write a GPU object with YPOS and even HEIGHT than adding more objects to the list.

     

    I think that they never asked to some game developers (where's the vertical mirror in bitmapped objects?...)


  4. Ok, I've done all the changes except .text -> TEXT, .data -> DATA and .bss -> BSS.

     

    After a clean make both versions of the game are the same!!!

     

    Thanks a lot for all the work!

    • Like 1

  5. I've downloaded the latest version 2.0.20 (sorry but I think that I was using 2.0.16), and I've done the modifications.

     

    Almost the same size.

     

    swapd0$ rmac-old -fe -o brownboot-old.o brownboot.s
    swapd0$ rmac-new -fe -o brownboot-new.o brownboot.s
    swapd0$ ls -l brownboot*
    -rw-------  1 swapd0  wheel  18548 13 ago 16:59 brownboot-new.o
    -rw-------  1 swapd0  wheel  18552 13 ago 16:58 brownboot-old.o

     

    brownboot-new.o brownboot-old.o


  6. 9 minutes ago, ggn said:

    Sorry, but the invocation is wrong, it should be:

     

    swapd0$ rmac-old -fe -o brownboot-old.o brownboot.s
    swapd0$ rmac-new -fe -o brownboot-new.o brownboot.s

     

    (yes, it's a remnant from the old MadMac times, the idea behind this is that you can assemble multiple files from the command line that have different options you can switch on and off. So whenever rmac encounters an input file, it goes and assembles without parsing the rest of the arguments)

     

    (I still believe there's an issue since the register clashing is real fwiw)

    Ok, I will fix all the makefiles

     

    Edit:It was correct in the makefiles...


  7. 34 minutes ago, ggn said:

    Similarly, in gpu.o:

     

    image.thumb.png.52b9c575d9a8f6e230125c65382e4fb7.png

     

    A "0000 0000" is inserted at offset $78 which seems to derail the whole binary afterwards.

     

     

    I'm 100% that the extra "0000 0000" are from a .long directive to align a data. It' this part of the code.

     

        movei #_gpu_events_list,list_ptr
        movei #.execute_list,r1
        jump (r1)
        load (list_ptr),events
    
        .long
    _gpu_events_list::
        dc.l 0  ; pointer to events list

    "D020" it's the jump (r1) and the "A672" it's the load (list_ptr),events, then two bytes with zeros for the alignment but in the new version it appends 4 extra bytes.


  8. 20 minutes ago, ggn said:

    The other two sets of .o files seem to be an identical match, but I'm puzzled about these two. It seems like they're assembled from a different version of the source codes. Is it possible that this is the case?

    I have only a version of the source code, and I've made a make clean of each project. Anyway I've done this just to be sure.

    swapd0$ rmac-old -fe brownboot.s -o brownboot-old.o
    swapd0$ rmac-new -fe brownboot.s -o brownboot-new.o

     

    brownboot-new.o brownboot-old.o


  9. I've only changed the rmac version, same compiler options.

    old rmac output size is 309,872 bytes

    new rmac output size is 290,760 bytes

     

    There are a lot of labels that are shifted.

    I don't understand this, old rmac

    00f0323c A _GPU_MAX_VIDEO_X
    00f03240 A _GPU_MAX_VIDEO_Y
    00f03234 a _GPU_SPRITE_OFFSETS
    00f03234 A _GPU_SPRITE_OFFSET_X
    00f03238 A _GPU_SPRITE_OFFSET_Y

    New rmac

    00f03228 A _GPU_MAX_VIDEO_X
    00f03228 A _GPU_MAX_VIDEO_Y
    00f03228 a _GPU_SPRITE_OFFSETS
    00f03228 A _GPU_SPRITE_OFFSET_X
    00f03228 A _GPU_SPRITE_OFFSET_Y

     

    On the new version the labels are in a lower memory address and they are from an assembly file, so they are using the same instructions (same size). Also, why _GPU_SPRITE_OFFSET_Y are at the same address as _GPU_SPRITE_OFFSET_X? They are defined like this.

    	.long
    _gpu_sprite_dst::		dc.l 0,0		; destination address
    
    _GPU_SPRITE_OFFSETS:
    _GPU_SPRITE_OFFSET_X::		dc.l 0
    _GPU_SPRITE_OFFSET_Y::		dc.l 0
    
    _GPU_MAX_VIDEO_X::		dc.l 0
    _GPU_MAX_VIDEO_Y::		dc.l 0

     

     

    Any tool for the binary-diff? I've my own but the output it's something like this.

    out-new.bin and out-old.bin has different sizes.
    differs at offset 0x22 5 4f
    differs at offset 0x23 38 e0
    differs at offset 0x46 8 53
    differs at offset 0x47 c4 64
    differs at offset 0x4a a6 eb
    differs at offset 0x4b ac 4c
    differs at offset 0x201f b8 bc
    differs at offset 0x2061 0 1
    differs at offset 0x2062 0 e5
    differs at offset 0x2063 0 48
    differs at offset 0x213d d0 d4
    differs at offset 0x2142 49 4b
    differs at offset 0x2143 50 20
    differs at offset 0x2148 49 4b
    differs at offset 0x2149 8a 5a
    differs at offset 0x214e 73 7d
    differs at offset 0x214f 4e 2
    differs at offset 0x2158 90 9a
    differs at offset 0x2159 62 16
    differs at offset 0x2471 0 1
    differs at offset 0x2472 0 e5
    differs at offset 0x2473 0 50
    differs at offset 0x2477 0 1
    differs at offset 0x2478 0 e5
    differs at offset 0x2479 0 50
    differs at offset 0x247e 49 4b

     

    out-new.map.txt out-new.txt out-old.map.txt out-old.txt

    • Thanks 1

  10. With the older version it runs, at the start I print this through the skunk board, with the new version it hangs after the Starting console... message.

     

    I'll have a look later at the symbol table.

     

    Starting console...
    init memory alloc at 00032c00
    find_file_system at 00802000 Found at 0080209c
    init_file_system at 0080209c with 26 files
    NTSC Jaguar

     


  11. I've done a full compile for BurgerTime and my engine library and It looks that there are something wrong.

     

    I'm using gcc and rmac, I've a some .c and .s files for the gcc boot code (brownboot.s, zerocrtfini.c, zerolib.cpp, etc) I've included into this "library" the skunk.s, also I've my c/asm library common to all my games, and then I've the current game that I'm developing.

     

    With the latest rmac version I've the following errors when I compile BurgerTime.

    /opt/local/bin/gcc68k/lib/libcxx-jaguar/zerocrtfini.o: In function `_exit':
    zerocrtfini.c:(.text.exit+0x0): multiple definition of `_exit'
    /opt/local/bin/gcc68k/lib/libcxx-jaguar/tinyalloc.o: In function `_ta_init':
    tinyalloc.c:(.text.ta_init+0x0): multiple definition of `_ta_init'
    /opt/local/bin/gcc68k/lib/libcxx-jaguar/skunk.o: In function `_skunkRESET':
    (.text+0x0): multiple definition of `_skunkRESET'
    /opt/local/bin/gcc68k/lib/libcxx-jaguar/skunk.o: In function `_skunkNOP':
    (.text+0x3a): multiple definition of `_skunkNOP'
    /opt/local/bin/gcc68k/lib/libcxx-jaguar/skunk.o: In function `_skunkCONSOLEWRITE':
    (.text+0x6e): multiple definition of `_skunkCONSOLEWRITE'
    obj/main.o: In function `_main':
    main.c:(.text.startup.main+0x0): multiple definition of `_main'
    /Users/Shared/apps/Jaguar/projects/lib/libkatu.a(debug_asm.o): In function `_skunkCONSOLEWRITE':
    (*ABS*+0x0): multiple definition of `_skunkFILEOPEN'
    /opt/local/bin/gcc68k/lib/libcxx-jaguar/skunk.o:(.text+0x170): first defined here
    /Users/Shared/apps/Jaguar/projects/lib/libkatu.a(debug_asm.o): In function `_skunkCONSOLEWRITE':
    (*ABS*+0x0): multiple definition of `_skunkFILECLOSE'
    /opt/local/bin/gcc68k/lib/libcxx-jaguar/skunk.o:(.text+0x2a0): first defined here
    /Users/Shared/apps/Jaguar/projects/lib/libkatu.a(debug_asm.o): In function `_skunkCONSOLEWRITE':
    (*ABS*+0x0): multiple definition of `_skunkFILEWRITE'
    /opt/local/bin/gcc68k/lib/libcxx-jaguar/skunk.o:(.text+0x1ca): first defined here
    /Users/Shared/apps/Jaguar/projects/lib/libkatu.a(gpu_asm.o): In function `DRAM':
    (*ABS*+0x0): multiple definition of `_gpu_events_list'
    /Users/Shared/apps/Jaguar/projects/lib/libkatu.a(sprite.o):(.bss._op_start+0x0): multiple definition of `__op_start'

    Ok, let's have a look at _skunkRESET, it's defined in skunk.s like this.

    ; skunkRESET()
    ; Resets the library, waits for the PC, and marks the console up or down
    _skunkRESET::
    		movem.l	a1-a2,-(sp)
    
    		move.w	#$4001,_skunkReadMode	; ensure normal 4MB mode set
    
    continueRESET:
    		move.l	#-1,_skunkConsoleUp		; optimistic!
    
    		bsr		setAddresses		; get HPI addresses into a1 & a2
    		; try and get both buffers, that tells us the console is up
    		bsr		getBothBuffers		; also sets skunkConsoleUp
    		bsr		restoreMode			; set correct flash mode
    		movem.l (sp)+,a1-a2			; Restore regs
    		rts

    And it's referenced in brownboot.s with a .extern _skunkRESET and somewhere in the same file I've a jsr _skunkRESET, it's not called from my engine library, neither from my game, and it's only defined in skunk.s... so why I've a "multiple definition" error?

     

    edit:

    After some testing looks like the symbol must be referenced from at least two different files to get the error of multiple definitions, and must be defined in a third file.

     

    nm dump for skunk.o and brownboot.o

     

    swapd0$ nm skunk.o
    000000b0 T _skunkCONSOLECLOSE
    000000f6 T _skunkCONSOLEREAD
    0000006e T _skunkCONSOLEWRITE
    000004a4 t _skunkConsoleUp
    000002a0 T _skunkFILECLOSE
    00000170 T _skunkFILEOPEN
    00000214 T _skunkFILEREAD
    000001ca T _skunkFILEWRITE
    000002dc T _skunkMEMREAD
    00000356 T _skunkMEMWRITE
    0000003a T _skunkNOP
    00000000 T _skunkRESET
    00000028 T _skunkRESET6MB
    000004a4 t _skunkReadMode
    000004a4 t _skunkTimeout
    000003dc t checkBuffer1
    000003e8 t checkBuffer2
    000003ba t checkbuffer
    0000000c t continueRESET
    00000436 t getBothBuffers
    000003f4 t getBuffer
    000003b2 t restoreMode
    000003a0 t setAddresses
    0000047e t waitforbufferack
    
    swapd0$ nm brownboot.o
    00f02200 a A1_BASE
    00f02208 a A1_CLIP
    ...
    00000152 T __exit
    00000000 A _exit
    000004c8 T _init_debugger
    000004c2 T _jaguar_reset
    00000000 A _main
    00000154 T _memcpy
    000002e2 T _memmove
    00000272 T _memset
    00000466 T _putchar
    0000047c T _rand
    00000000 A _skunkCONSOLEWRITE
    00000000 A _skunkNOP
    00000000 A _skunkRESET
    0000049e T _srand

    If I use the old rmac I get an 'U' for _skunkRESET instead of an 'A'

     

×
×
  • Create New...