RAM Size ROM Routine

If you have feature requests, this is the place to post them. Please note your idea may already be something we have already discussed and decided against, or something we are working on privately, and we cannot be held responsible for any similarities in such instance. Whilst we cannot respond to every suggestion, your idea will be read and responded to where possible. Thank you for your input!
Post Reply
m00dawg
Posts: 346
Joined: Wed Jul 08, 2020 12:41 am
Contact:

RAM Size ROM Routine

Post by m00dawg »


Per this post, it could be very convenient to have a standard routine, say in ROM, that folks can call in their program that will report the available amount of RAM on the system. This avoids folks having to program this into their own programs and provides a standard method for reporting the RAM usage. Many types of programs could use this feature. In the case of the linked post, it was for a text edit / word processor; but games, trackers, really many apps that are using banked RAM.

The perk of the routine in ROM is it only has to be used if needed; but another thought was to have the system scan the available RAM at boot and report this as a variable within the BASIC RAM area. Then programs, upon startup, can look at this address and know the amount. And it could be a fun start-up sequence that is much like older PC BIOS startups, in a small twist of irony given the X16 is a VIC-20 spiritual successor ?

One or both methods would allow programs to have less duplication and more standardization. Certainly a nice to have, but not a need to have though would certainly add creature comforts, particularly given how much ROM space is available.

Author of Dreamtracker (https://www.dreamtracker.org/)
Check Out My Band: https://music.victimcache.com/
User avatar
desertfish
Posts: 1096
Joined: Tue Aug 25, 2020 8:27 pm
Location: Netherlands

RAM Size ROM Routine

Post by desertfish »


Exhaustively checking all RAM like in that 'pc bios startup' adds a significant startup delay that should not be there for a machine that was meant to be instantly ready after poweron.

But just probing a single address in all 64 possible banks is a really fast way I think to determine how many banks are available... (and just assume the ram isn't bad)

m00dawg
Posts: 346
Joined: Wed Jul 08, 2020 12:41 am
Contact:

RAM Size ROM Routine

Post by m00dawg »



7 minutes ago, desertfish said:




Exhaustively checking all RAM like in that 'pc bios startup' adds a significant startup delay that should not be there for a machine that was meant to be instantly ready after poweron.



But just probing a single address in all 64 possible banks is a really fast way I think to determine how many banks are available... (and just assume the ram isn't bad)



There's a few methods outlined in the other post. There's certainly a few tricks, though that said, given the speed of the system, I did some quick math and I don't think it'd take more than a handful of seconds. It would also verify the RAM is in a known good state. Time permitting, I might write a quick program to see how fast it takes to scan all of memory.

But that said, a kernel routine could be useful to do either an exhaustive or probe check that programs can use if the instant-on was highly desirable (I personally don't have a problem if it takes a few extra seconds on a cold power on but also don't have strong opinions there).

Author of Dreamtracker (https://www.dreamtracker.org/)
Check Out My Band: https://music.victimcache.com/
Ender
Posts: 220
Joined: Sat May 09, 2020 9:32 pm

RAM Size ROM Routine

Post by Ender »


Ramtas currently does as desertfish says at bootup to probe all 64 possible banks to get the number of RAM banks.  Taken from the ROM source, in kernal/drivers/x16/memory.s:


Quote




 ; detect number of RAM banks

 ;

     stz d1pra

     ldx $a000

     inx

     lda #1

 :   sta d1pra

     ldy $a000

     stx $a000

     stz d1pra

     cpx $a000

     sta d1pra

     sty $a000

     beq :+

     asl

     bne :-

 :   tay

     stz d1pra

     dex

     stx $a000

 

     tya ; number of RAM banks



Unfortunately, this routine also does a bunch of initialization stuff that you wouldn't want to call outside of bootup.  However, the value gotten in the routine above is ultimately stored in $25B.  As my post in the thread you linked says, memtop ($ff99) returns the RAM banks available in A by retrieving $25B, as long as you set the carry flag first.  So, you can currently get the number of RAM banks by calling memtop, which is the safe way since its address is always guaranteed to be $ff99, or you can look at $25B directly, but this is less safe since kernal development is not over so this address could change. However, this is an easy way to do it in BASIC, and once development is over the address won't change.

Sorry if this isn't what you're asking for. I'm a little confused, since memtop seems to fit your request.

m00dawg
Posts: 346
Joined: Wed Jul 08, 2020 12:41 am
Contact:

RAM Size ROM Routine

Post by m00dawg »


Ah admittedly the back and forth in the other post got me a little confused, since there may also be a bug / issue with it being after boot? But yeah it sounds like this is already implemented if I understood you correctly, which is aces!

But that does confuse me in the other post - correct me if I'm wrong, there wouldn't then be a need to do any work to figure this out within an app? If my app needs to know how much memory is available, I just use memtop as you suggest (by calling $ff99) or optionally looking at $25B (or whatever the final address will be) and I'm good to go?

Author of Dreamtracker (https://www.dreamtracker.org/)
Check Out My Band: https://music.victimcache.com/
User avatar
JimmyDansbo
Posts: 476
Joined: Sun Apr 26, 2020 8:10 pm
Location: Denmark
Contact:

RAM Size ROM Routine

Post by JimmyDansbo »



53 minutes ago, m00dawg said:




I just use memtop as you suggest (by calling $ff99) or optionally looking at $25B (or whatever the final address will be) and I'm good to go?



That should do it ?

Visit my Github repo
or my personal site with CX16/C64/6502 related information.
Feel free to contact me regarding any of my projects or even about meeting up somewhere near Denmark
Ender
Posts: 220
Joined: Sat May 09, 2020 9:32 pm

RAM Size ROM Routine

Post by Ender »



2 hours ago, m00dawg said:




Ah admittedly the back and forth in the other post got me a little confused, since there may also be a bug / issue with it being after boot? But yeah it sounds like this is already implemented if I understood you correctly, which is aces!



But that does confuse me in the other post - correct me if I'm wrong, there wouldn't then be a need to do any work to figure this out within an app? If my app needs to know how much memory is available, I just use memtop as you suggest (by calling $ff99) or optionally looking at $25B (or whatever the final address will be) and I'm good to go?



Yup, you'd just set the carry flag, call $ff99, and it sets A, X, and Y. A contains the number of banks, and X and Y contain the address of the end of lower memory (which is currently $9F00).  Or if you're in BASIC, you can just do "PRINT PEEK($25B)".  The confusion in the other thread arose because Slithymatt hadn't set the carry flag first (if you don't set the carry flag before calling it, it sets the RAM bank number and address of the end of lower RAM to the passed in A, X, and Y instead of getting it).

SlithyMatt
Posts: 913
Joined: Tue Apr 28, 2020 2:45 am

RAM Size ROM Routine

Post by SlithyMatt »



5 hours ago, m00dawg said:




Ah admittedly the back and forth in the other post got me a little confused, since there may also be a bug / issue with it being after boot?



It got me confused as well, which is why I mistakenly labeled it a bug. I was not aware of the carry bit behavior, which messes things up. If you call MEMTOP with the carry bit cleared, it will erase the value at $25B, so you just have to make sure it was last called with C set first.

 

Post Reply