Jump to content
IGNORED

Graphic .o files - ROM or RAM?


GadgetUK

Recommended Posts

This is probably a stupid question, I suspect the answer is that they are RAM, but when you link a .o bitmap, when the executable is running on the Lynx, where does it reference the image - is it stored in RAM?

 

I've hit a problem I just didnt expect, i've got to round 3 of my game and bang the game doesnt run any more when I add another image - I am guessing ive run out of RAM already? If I remove the .o file from the make file the game runs OK, as soon as I add the image back in it black screens on load.

 

EDIT: Hmmm, I've switched collision detection off to see if the additional RAM makes a difference and it does - it runs with it off, presumably because ive got a screensize worth of RAM available at that point now. The other strange thing is even with the new image removed I was getting palette issues on another image - now with collision detection turned off the palette is OK and all 3 rounds display properly.

 

I could do with some pointers on how to get bitmaps from ROM rather than have them all preloaded into RAM - assuming they are in RAM...

Edited by GadgetUK
Link to comment
Share on other sites

Thanks, I got this out of it:-

 

Segment list:

-------------

Name Start End Size Align

----------------------------------------------------

DIRECTORY 000000 000007 000008 00001

EXEHDR 000000 00003F 000040 00001

ZEROPAGE 000000 000019 00001A 00001

EXTZP 00001A 000032 000019 00001

BOOTLDR 000200 0002CA 0000CB 00001

STARTUP 000200 00027C 00007D 00001

INIT 00027D 0002AB 00002F 00001

CODE 0002AC 0054E9 00523E 00001

RODATA 0054EA 009F3A 004A51 00001

DATA 009F3B 00A263 000329 00001

BSS 00A264 00A69E 00043B 00001

 

 

Don't really know what I am looking for? Is it the DATA or RODATA I am concerned with?

Link to comment
Share on other sites

If its not a case of running out of RAM, I am wondering if its how I am using collision detection:-

 

Can I mix SCB types? I have some sprites with the header depository (int) and some without? I wonder if the collision detection is overwritting the preceeding bytes of SCB suzi has blitted where I didnt pass a depository holder for collisions?

Edited by GadgetUK
Link to comment
Share on other sites

That's with it causing problems. It's only afterwards I started messing turning off collision detection - where it works, but I would prefer to use collision detection. Just not sure if its me being stupid using too many resources here or if there's a problem with collision detection or something or a bug elsewhere. I am also wondering if its because the ROM image is over 32Kb - approx 41Kb. Not sure how it automatically builds the lnx file, presuably to 128Kb or 256Kb size?

 

 

EDIT: Here's the more detailed info:-

 

Modules list:

-------------

lynx-160-102-16.o:

CODE Offs=000000 Size=0006E4 Align=00001 Fill=0000

BSS Offs=000000 Size=0000BD Align=00001 Fill=0000

DATA Offs=000000 Size=000059 Align=00001 Fill=0000

lynx-stdjoy.o:

CODE Offs=0006E4 Size=000028 Align=00001 Fill=0000

level1bg.o:

RODATA Offs=000000 Size=0007AA Align=00001 Fill=0000

level2bg.o:

RODATA Offs=0007AA Size=000852 Align=00001 Fill=0000

level3bg.o:

RODATA Offs=000FFC Size=000755 Align=00001 Fill=0000

target.o:

RODATA Offs=001751 Size=00004B Align=00001 Fill=0000

titlescreen.o:

RODATA Offs=00179C Size=000B85 Align=00001 Fill=0000

soldier0.o:

RODATA Offs=002321 Size=0000E2 Align=00001 Fill=0000

soldier1.o:

RODATA Offs=002403 Size=0000CE Align=00001 Fill=0000

soldier2.o:

RODATA Offs=0024D1 Size=0000F2 Align=00001 Fill=0000

mapscreen.o:

RODATA Offs=0025C3 Size=00076D Align=00001 Fill=0000

pixel.o:

RODATA Offs=002D30 Size=000007 Align=00001 Fill=0000

levelselected.o:

RODATA Offs=002D37 Size=0000D9 Align=00001 Fill=0000

bullethole.o:

RODATA Offs=002E10 Size=000034 Align=00001 Fill=0000

tank0.o:

RODATA Offs=002E44 Size=000091 Align=00001 Fill=0000

tank1.o:

RODATA Offs=002ED5 Size=000091 Align=00001 Fill=0000

tank2.o:

RODATA Offs=002F66 Size=000092 Align=00001 Fill=0000

tank3.o:

RODATA Offs=002FF8 Size=000092 Align=00001 Fill=0000

life.o:

RODATA Offs=00308A Size=00002A Align=00001 Fill=0000

enemiesleft.o:

RODATA Offs=0030B4 Size=000030 Align=00001 Fill=0000

house1.o:

RODATA Offs=0030E4 Size=0001C6 Align=00001 Fill=0000

bullet.o:

RODATA Offs=0032AA Size=000013 Align=00001 Fill=0000

enemybullet.o:

RODATA Offs=0032BD Size=000029 Align=00001 Fill=0000

intro1.o:

RODATA Offs=0032E6 Size=000251 Align=00001 Fill=0000

intro2.o:

RODATA Offs=003537 Size=000257 Align=00001 Fill=0000

intro3.o:

RODATA Offs=00378E Size=000259 Align=00001 Fill=0000

intro4.o:

RODATA Offs=0039E7 Size=00020D Align=00001 Fill=0000

intro5.o:

RODATA Offs=003BF4 Size=000211 Align=00001 Fill=0000

intro6.o:

RODATA Offs=003E05 Size=000231 Align=00001 Fill=0000

uzislightleft.o:

RODATA Offs=004036 Size=0000D4 Align=00001 Fill=0000

uzifarleft.o:

RODATA Offs=00410A Size=0000FD Align=00001 Fill=0000

uzislightright.o:

RODATA Offs=004207 Size=0000D2 Align=00001 Fill=0000

uzifarright.o:

RODATA Offs=0042D9 Size=0000FF Align=00001 Fill=0000

heli0.o:

RODATA Offs=0043D8 Size=000092 Align=00001 Fill=0000

heli1.o:

RODATA Offs=00446A Size=000093 Align=00001 Fill=0000

heli2.o:

RODATA Offs=0044FD Size=00007A Align=00001 Fill=0000

heli3.o:

RODATA Offs=004577 Size=00007A Align=00001 Fill=0000

wall10.o:

RODATA Offs=0045F1 Size=000091 Align=00001 Fill=0000

wall11.o:

RODATA Offs=004682 Size=000099 Align=00001 Fill=0000

wall12.o:

RODATA Offs=00471B Size=0000AD Align=00001 Fill=0000

wall13.o:

RODATA Offs=0047C8 Size=0000B7 Align=00001 Fill=0000

wall14.o:

RODATA Offs=00487F Size=0000AA Align=00001 Fill=0000

wall15.o:

RODATA Offs=004929 Size=0000A4 Align=00001 Fill=0000

vblank.o:

CODE Offs=00070C Size=000024 Align=00001 Fill=0000

game.o:

CODE Offs=000730 Size=003D8B Align=00001 Fill=0000

RODATA Offs=0049CD Size=000027 Align=00001 Fill=0000

BSS Offs=0000BD Size=000330 Align=00001 Fill=0000

DATA Offs=000059 Size=000238 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(add.o):

CODE Offs=0044BB Size=000019 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(addysp.o):

CODE Offs=0044D4 Size=00000E Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(aslax1.o):

CODE Offs=0044E2 Size=000008 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(aslax3.o):

CODE Offs=0044EA Size=00000E Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(aslax4.o):

CODE Offs=0044F8 Size=000011 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(axlong.o):

CODE Offs=004509 Size=000012 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(bneg.o):

CODE Offs=00451B Size=00000E Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(callirq.o):

DATA Offs=000291 Size=00001E Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(callmain.o):

CODE Offs=004529 Size=000017 Align=00001 Fill=0000

BSS Offs=0003ED Size=000004 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(condes.o):

CODE Offs=004540 Size=00000C Align=00001 Fill=0000

DATA Offs=0002AF Size=000025 Align=00001 Fill=0000

INIT Offs=000000 Size=00000C Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(decax1.o):

CODE Offs=00454C Size=000007 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(decax2.o):

CODE Offs=004553 Size=000007 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(decax8.o):

CODE Offs=00455A Size=000007 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(decaxy.o):

CODE Offs=004561 Size=000009 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(decsp4.o):

CODE Offs=00456A Size=00000D Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(div.o):

CODE Offs=004577 Size=000018 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(icmp.o):

CODE Offs=00458F Size=00002E Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(imul16x16r32.o):

CODE Offs=0045BD Size=00002B Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(incax2.o):

CODE Offs=0045E8 Size=000007 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(incax7.o):

CODE Offs=0045EF Size=000005 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(incax8.o):

CODE Offs=0045F4 Size=000005 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(incaxy.o):

CODE Offs=0045F9 Size=00000B Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(incsp1.o):

CODE Offs=004604 Size=000007 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(incsp2.o):

CODE Offs=00460B Size=000015 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(incsp4.o):

CODE Offs=004620 Size=000005 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(ladd.o):

CODE Offs=004625 Size=000024 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(laddeq.o):

CODE Offs=004649 Size=00002D Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(lcmp.o):

CODE Offs=004676 Size=00003B Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(ldaxi.o):

CODE Offs=0046B1 Size=00000D Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(ldeaxi.o):

CODE Offs=0046BE Size=000017 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(ldec.o):

CODE Offs=0046D5 Size=00001A Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(leq.o):

CODE Offs=0046EF Size=000006 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(linc.o):

CODE Offs=0046F5 Size=000011 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(lne.o):

CODE Offs=004706 Size=000006 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(lneg.o):

CODE Offs=00470C Size=00001E Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(lpush.o):

CODE Offs=00472A Size=000021 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(lsave.o):

CODE Offs=00474B Size=00001C Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(luge.o):

CODE Offs=004767 Size=000006 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(lugt.o):

CODE Offs=00476D Size=000006 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(makebool.o):

CODE Offs=004773 Size=000031 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(mod.o):

CODE Offs=0047A4 Size=000014 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(mul.o):

CODE Offs=0047B8 Size=000045 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(mul8.o):

CODE Offs=0047FD Size=00003A Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(neg.o):

CODE Offs=004837 Size=00000E Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(popa.o):

CODE Offs=004845 Size=00000A Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(popsreg.o):

CODE Offs=00484F Size=00000F Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(pusha.o):

CODE Offs=00485E Size=000016 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(pushax.o):

CODE Offs=004874 Size=00001A Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(pushw.o):

CODE Offs=00488E Size=00000F Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(return1.o):

CODE Offs=00489D Size=000005 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(shelp.o):

CODE Offs=0048A2 Size=00001E Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(shrax4.o):

CODE Offs=0048C0 Size=000011 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(staspidx.o):

CODE Offs=0048D1 Size=000016 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(staxspi.o):

CODE Offs=0048E7 Size=00001B Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(steaxspi.o):

CODE Offs=004902 Size=000026 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(sub.o):

CODE Offs=004928 Size=000014 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(udiv.o):

CODE Offs=00493C Size=00004F Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(udiv32by16r16.o):

CODE Offs=00498B Size=000031 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(umul16x16r32.o):

CODE Offs=0049BC Size=00002C Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(umul8x16r24.o):

CODE Offs=0049E8 Size=00002E Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(zeropage.o):

ZEROPAGE Offs=000000 Size=00001A Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(bootldr.o):

BOOTLDR Offs=000000 Size=0000CB Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(crt0.o):

CODE Offs=004A16 Size=000011 Align=00001 Fill=0000

RODATA Offs=0049F4 Size=00002C Align=00001 Fill=0000

STARTUP Offs=000000 Size=00007D Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(defdir.o):

DIRECTORY Offs=000000 Size=000008 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(exehdr.o):

EXEHDR Offs=000000 Size=000040 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(extzp.o):

EXTZP Offs=000000 Size=000019 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(kbhit.o):

CODE Offs=004A27 Size=000038 Align=00001 Fill=0000

DATA Offs=0002D4 Size=000006 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(tgi_colors.o):

E:\CC65\lib/lynx.lib(toascii.o):

CODE Offs=004A5F Size=000003 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(_hextab.o):

RODATA Offs=004A20 Size=000010 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(_longminstr.o):

RODATA Offs=004A30 Size=00000C Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(itoa.o):

CODE Offs=004A62 Size=000094 Align=00001 Fill=0000

RODATA Offs=004A3C Size=000007 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(ltoa.o):

CODE Offs=004AF6 Size=0000AF Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(memcpy.o):

CODE Offs=004BA5 Size=000041 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(rand.o):

CODE Offs=004BE6 Size=00004C Align=00001 Fill=0000

DATA Offs=0002DA Size=000004 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(strlen.o):

CODE Offs=004C32 Size=000016 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(zerobss.o):

INIT Offs=00000C Size=000023 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(joy-kernel.o):

CODE Offs=004C48 Size=000062 Align=00001 Fill=0000

RODATA Offs=004A43 Size=000004 Align=00001 Fill=0000

BSS Offs=0003F1 Size=00000A Align=00001 Fill=0000

DATA Offs=0002DE Size=00000F Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(joy_read.o):

E:\CC65\lib/lynx.lib(tgi-kernel.o):

CODE Offs=004CAA Size=000083 Align=00001 Fill=0000

RODATA Offs=004A47 Size=000004 Align=00001 Fill=0000

BSS Offs=0003FB Size=000028 Align=00001 Fill=0000

DATA Offs=0002ED Size=00003C Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(tgi_clear.o):

E:\CC65\lib/lynx.lib(tgi_clippedline.o):

CODE Offs=004D2D Size=0001E3 Align=00001 Fill=0000

BSS Offs=000423 Size=000008 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(tgi_curtoxy.o):

CODE Offs=004F10 Size=000015 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(tgi_done.o):

CODE Offs=004F25 Size=00000E Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(tgi_gettextwidth.o):

CODE Offs=004F33 Size=000057 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(tgi_getxres.o):

CODE Offs=004F8A Size=000007 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(tgi_getyres.o):

CODE Offs=004F91 Size=000007 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(tgi_imulround.o):

CODE Offs=004F98 Size=000025 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(tgi_init.o):

CODE Offs=004FBD Size=000058 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(tgi_ioctl.o):

CODE Offs=005015 Size=00000A Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(tgi_outcode.o):

CODE Offs=00501F Size=000041 Align=00001 Fill=0000

BSS Offs=00042B Size=000008 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(tgi_outtext.o):

CODE Offs=005060 Size=000091 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(tgi_outtextxy.o):

CODE Offs=0050F1 Size=000021 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(tgi_setcolor.o):

CODE Offs=005112 Size=00000E Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(tgi_setpalette.o):

CODE Offs=005120 Size=000007 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(tgi_settextstyle.o):

CODE Offs=005127 Size=000042 Align=00001 Fill=0000

E:\CC65\lib/lynx.lib(tgi_vectorchar.o):

CODE Offs=005169 Size=0000D5 Align=00001 Fill=0000

BSS Offs=000433 Size=000008 Align=00001 Fill=0000

Edited by GadgetUK
Link to comment
Share on other sites

I was flying along today as well... =( Had depeche mode blasting out 'Enjoy the Silence', looped since around 10:00am lol, everything was going so well I could see the light at the end of the tunnel - then noticed it was a train coming towards me lol

Edited by GadgetUK
Link to comment
Share on other sites

=\. I almost dont want to ask the next question, and I certainly dont expect a quick reply... Does anyone know of any examples of switching segments? Its really annoying, Ive pretty much finished the mechanics of my first Lynx game and now find that I am effectively screwed...

Link to comment
Share on other sites

Anything you want the lynx to run or display needs to be in RAM, as ROM cannot be accessed except a byte at a time.

 

I'm also curious why you didn't get a linker error saying you overran your segments. There must be an error in your linker config file, or some statically assigned memory area (you should really use the linker config to define all memory areas you are using.)

 

If you never had any problems you wouldn't learn anything right? That's my programming method! :)

  • Like 1
Link to comment
Share on other sites

Anything you want the lynx to run or display needs to be in RAM, as ROM cannot be accessed except a byte at a time.

 

I'm also curious why you didn't get a linker error saying you overran your segments. There must be an error in your linker config file, or some statically assigned memory area (you should really use the linker config to define all memory areas you are using.)

 

If you never had any problems you wouldn't learn anything right? That's my programming method! :)

 

Yes, that was why - it wasn't using the .cfg file, it took me a while to work it out but it wasnt using it at all. Now it's a little more friendly as its is occasionally telling me when ive used too much RAM. That said, it didnt give me an error but lynx_load being in the code (not called, just present) was causing it to hang on start up. I moved another bitmap out of the RODATA segment and into another segment in the directory and it then worked fine. Cant be a memory leak in code because there was no code at that point that could possibly leak, so I must still have been using too much RAM.

 

Anyway, thanks for the comment about the pragma directive, and thanks to Karris help and code ive managed to get around this problem. It's been a real learning curve for me but that said its not as complex as it first looked in retrospective, but I wouldnt have known where to begin.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...