Jump to content


New Members
  • Content Count

  • Joined

  • Last visited

Community Reputation

40 Excellent

Profile Information

  • Location
    Prague, CZ

Recent Profile Visitors

209 profile views
  1. Yes, slowly getting somewhere By solving this, all tricky low level stuff should be done so I can concentrate more on actual game. Planning to release another two level demo in month with automapping, inventory and freely world placeable items.
  2. After all, it was really linker issue but different one than I thought. When trying to make sample projects to upload here, i discovered that cause of misalignment was ALL segment(Although no clue why). After making it optional and stopped bundling data inside during linking, it was possible to link RMT in normal way and also remove that mysterious FILES and FORMAT sections. Thanks for help
  3. Sorry, maybe i wasn't clear enough. There is no relation with my code at all, this is reproducible easily with some minimal program example. Both player binary, features and linker config(except that one part) are identical. Issue is definitely caused by linker directives FILES and FORMAT part I did outline. It is likely not bug at all, rather my misunderstanding of CC65 linker I guess. There are two variants, both same code and player & song addresses. Working one: standalone XEX, no special linker directives Not working one: XEX with extra linker directives(which are needed for some reason to be run from ATR) bundled to ATR + xbios Will post sample projects later though i dont really need to investigate this any further right now. Dumped ram sections are ugly but good enough for me.
  4. There is possible workaround - just dump player and song ram sections of working variant and load them as file into ram during start. Not nice but only functional one I've found so far.
  5. Found it I guess. My linker.cfg: FEATURES { STARTADDRESS: default = $0d00; } SYMBOLS { __EXEHDR__: type = import; __SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk __AUTOSTART__: type = import; # force inclusion of autostart "trailer" __STACKSIZE__: type = weak, value = $0100; # 2k stack __STARTADDRESS__: type = export, value = %S; __RESERVED_MEMORY__: type = weak, value = $0000; } MEMORY { ZP: file = "", define = yes, start = $0082, size = $006B; HEADER: file = %O, start = $0000, size = $0002; DATA: file = "", define = yes, start = $0400, size = $0400; DATA2: file = "", define = yes, start = $0800, size = $0100; SYSCHKHDR: file = %O, start = $0000, size = $0004; SYSCHKCHNK: file = %O, start = $2E00, size = $0300; SYSCHKTRL: file = %O, start = $0000, size = $0006; MAINHDR: file = %O, start = $0000, size = $0004; MAIN: file = %O, define = yes, start = %S, size = $6700; TRAILER: file = %O, start = $0000, size = $0006; RMTSONGBUF: start = $7600, size = $0300, file = %O, define = yes; RMTPLAYERBUF: start = $7982, size = $08FE, file = %O, define =yes; DATA3: define = yes, start = 32768, size = 15136, file = %O; } FILES { %O: format = atari; } FORMATS { atari: runad = start, initad = SYSCHKCHNK: __SYSTEM_CHECK__; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; EXTZP: load = ZP, type = zp, optional = yes; EXEHDR: load = HEADER, type = ro; DATA_LOWER: load = DATA, type = rw, optional = yes; DATA_BUFFER: load = DATA2, type = rw, optional = yes; SYSCHKHDR: load = SYSCHKHDR, type = ro, optional = yes; SYSCHK: load = SYSCHKCHNK, type = rw, define = yes, optional = yes; SYSCHKTRL: load = SYSCHKTRL, type = ro, optional = yes; MAINHDR: load = MAINHDR, type = ro; STARTUP: load = MAIN, type = ro, define = yes; LOWBSS: load = MAIN, type = rw, optional = yes; # not zero initialized LOWCODE: load = MAIN, type = ro, define = yes, optional = yes; ONCE: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro, define = yes; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = rw, optional = yes; BSS: load = MAIN, type = bss, define = yes; AUTOSTRT: load = TRAILER, type = ro; RMTSONG: load = RMTSONGBUF, type = rw, define = yes; RMTPLAYER: load = RMTPLAYERBUF, type = rw, define = yes; ALL: load = DATA3, type = rw, define= yes; } FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, count = __CONSTRUCTOR_COUNT__, segment = ONCE; CONDES: type = destructor, label = __DESTRUCTOR_TABLE__, count = __DESTRUCTOR_COUNT__, segment = RODATA; CONDES: type = interruptor, label = __INTERRUPTOR_TABLE__, count = __INTERRUPTOR_COUNT__, segment = RODATA, import = __CALLIRQ__; } Tricky is this part FILES { %O: format = atari; } FORMATS { atari: runad = start, initad = SYSCHKCHNK: __SYSTEM_CHECK__; } When is present, it is possible for program to boot via XBIOS from ATR but RMT layout gets messed up. After removing memory layout looks ok(though there is few bytes different in RMTplayr which i presume is caused by some sort selfmodifying code). However both resulting ATR and XEX are useless. There is XBIOS crash when booting from ATR and running standalone XEX ends up in some infinite loop( with empty MAIN func).
  6. Yep, song file can be readjusted but still there is this strange corruption of memory even inside rmtplayr. Gotta check my linker config with working program and test every used linker directive. Indeed, actually yours culomin was my starting point with CC65 - thanks for providing source code . It helped me alot but still linker stuff feels pretty much like rocket science. Will look into it definitely, thats a great tip.
  7. Ok, spent two weeks trying figure this out and I am pretty much done. I have two cc65 projects with same relevant linker configuration options but failing to get this work. On Irgendwers RMT example i got is everything ok but on my song and player data get weirdly misaligned. In case of RMT file its probably DOS header but with RMTplayr it makes no sense to me. MD5 sums of every used blob are correct ... I've attached binary diff file, on 0x0100 should start RMT data and on 0x0700 player. Any suggestion welcome, thanks. dump.txt
  8. Thanks for help, got it working somehow but only on RMT sfx example. Get it running with my cc65 code will be another thing i guess. And it wasnt caused by improper emulation - real atari was giving wrong sound also.
  9. Hello, i am trying to make some sounds with RMT and when are played in emulator they do get messed up in various ways. Mostly are cut off when in middle or sounding quite different from original. I am using for tests slightly modified sfx test bundled with RMT. Any tips what might be a problem? Thanks.
  10. Kind of figured out right xbios settings after all, thanks.
  11. Thanks alot for detailed answer, i forgot to adjust my base offset for xbios area. It seems that it has something to do with I/O location which by value reported by xbios menu - gets configured to pretty random address which is often occupied my program after load. This address can be overridden in config, default one seem to be 0x03C0 which possibly can cause overlap but there is no documentation and bit too low level stuff for me unfortunately. With this xbios.cfg which should equal xbios defaults you wrote I can get program loaded but keyboard is not working at all. Without xbios.cfg, just with xbios builtin defaults is everything ok. 00000000 43 58 41 55 54 4f 52 55 4e 20 20 20 08 07 e2 02 |CXAUTORUN ....| 00000010 e0 02 00 00 00 00 ff 40 80 |[email protected]|
  12. Hello, i would like to move xbios to start on page 4 instead of default 7. My guess is that it can be done according memory layout but i just cant figure out any xbios.cfg settings which do work same as default one plus shift. Thanks.
  13. Hi, depends on definition of realtime It is tile based from hand drawn tiles.
  14. Hi, thanks. By chance i've played this one quite a bit Its controls have interesting approach but bit too gamepad driven - it would be nice to have full control on joystick/gamepad but it is not possible on stock atari joystick. I do plan more keyboard oriented way with tabbed screens with menus.
  15. Thanks alot, looks really handy. Definitely will save lot of time instead of reinventing wheel
  • Create New...