Jump to content
gregallenwarner

SAMS usage in Assembly

Recommended Posts

7 hours ago, Lee Stewart said:

 

The only thing faster would be INC, , but that, of course, cannot be done to the left byte of a word without time-consuming manipulation. Presuming the registers are in Scratchpad RAM, it looks like you hit upon the most efficient code right out of the gate!

 

...lee

Thanks for the review Lee.  To be honest I went through a couple of other versions before landing on this one. I am always amazed at the ideas that come out of the minds assembled here so I put it out in the wild.

Regarding registers, each task has a separate work space so only one of them will get the scratchpad RAM. :)  

This code makes my context switch 10X slower so the number of tasks I can run this way will be less but I could in theory still run the old version in this environment and call them threads.

I have created a new user variable that sets the base of SAMS pages for each of these tasks. It's manually assigned at the moment by the programmer when a task is created.

The plan is to keep LOW RAM normal. This would allow tasks to use >3000..>3FFF as a 64K SAMS data segment. >2000 is where the task workspaces live.

If I am really clever I may be able to get it running with ALL 4K blocks swapped out giving something like a virtual machine for each task. (minus scratchpad of course.)

 

I guess my opinion now of SAMS architecture is that it is missing a block of memory on the card that can be used to hold multiple (256? 16) pre-configured register configurations.

Organizing the SAMS registers like workspaces would do the trick.

Those register configurations could be preloaded and then made the "active register set" with one CRU write to a control register. 

That would would allow rapid memory swaps of big blocks of memory very quickly.

 

 

 

 

  • Like 3

Share this post


Link to post
Share on other sites

I have always said when Chris at ASGARD first told me about the AMS memory card (then gave me his 7th one made) that how do you keep track of pages he said in DSR space.

In RXB I uses XB variables to keep track so the SAMS map is in Numeric Variables.

In XB and in EA carts the best place to store the map of pages is >A000 to >A03F in XB and >A000 to >AFFF in EA cart.

Yea I know the loader has to bypass this area, but all SAMS programs in the future will not crash older software and future software for SAMS will have a standard.

 

I have explained in previous post that >F000 to >FFFF is a really bad idea for several reasons especially for XB, but similar issues for EA cart.

  • Like 1

Share this post


Link to post
Share on other sites

I'll have to try to figure out what this means. Me and numbers..gees..

Rich thanks for sharing this.

I'm actually over on the SNP topic trying to figure out DSR and Saving/loading methods, but it's going hand in hand with this topic, because rt now my user "pages" 1-8 are in local RAM I call it, not sure what the term is, basically not in paged Sam's pages, boy the word pages is easily misconstrued, but anyway, I've got CPU address>23A4 through 6020 bytes of data, contiguous.

And I wanted to use address >FE00 for a couple K and make it a swap address to page in and out to represent my physical user pages of 9-?? Maybe 100 let's say.

Is that not a good way?

Swehooo....do you kinda see what I'm talking about? Lol im not surprised if not... sometimes it's hard to explain without being in person, im using my hands a lot.....lol

Better yet, I'm one of those people that needs a video. Lol.. is that something you can share? With a working example of how to page in and out using Sam's from the assembly side?

I understand initializing the card, turning it on and off, but I haven't grasped the way paging and which pages to use as best practice etc..

I'd really gain a lot from a working example.

Thx

Edited by GDMike
  • Like 1

Share this post


Link to post
Share on other sites

Yes DSR space works fine but there should be multiple page tables that are switchable with one CRU instruction to make a practical memory paging system IMHO.

 

I have a little more freedom to use RAM as I see fit since I use the EA loader to start and then take over.

  • Like 1

Share this post


Link to post
Share on other sites
1 hour ago, GDMike said:

And I wanted to use address >FE00 for a couple K and make it a swap address to page in and out to represent my physical user pages of 9-?? Maybe 100 let's say.

Is that not a good way?

You can swap in a 4K SAMS page at >F000 (not >FE00) by setting the SAMS register at >401E to the SAMS page number you want to swap in.

Edited by Asmusr
  • Like 1

Share this post


Link to post
Share on other sites

Understood. I just got to learn how to do pages of >2A00? I'd like to use only >2A00 actually for my swapout., Paging or whatever it's called. 

The real address I'll use,  because my page 1 Begins at  >2A00 and no one will go to that address unless they need to physical change to page 1, the user data 1. I understand how to exit from Sam's, and return to normal pages but how do I get sam pages from that?

I understand the swap to the new paged memory, but how do i increment through the whole SAMs card.

Like if my SAMs page is 1 pointing to the first 4k, how to move to the next, new 4k of >2A00 providing me another 4K?

Thx so much

Edited by GDMike
Typo

Share this post


Link to post
Share on other sites
7 hours ago, TheBF said:

I have created a new user variable that sets the base of SAMS pages for each of these tasks. It's manually assigned at the moment by the programmer when a task is created.

 

So when a task is created, could you set 5 data words to the values needed for the SAMS registers? Then before calling the HIMAPPER code set R4 to point to the first of those words, and change HIMAPPER to 5 lines of MOV *R4+, *R1+? You could then do away with the AI R4,>0100 instructions.

Share this post


Link to post
Share on other sites

How about an example that are in RXB documents:

 In PASS mode the mapper register setup is equivalent to:
 
     mapper address  mapper  page num            address range
     --------------  ------  --------            -------------
      HEX     Dec            HEX  Dec             memory area
      ---     ---            ---  ---             -----------
     >4004 = 16388 is MR02 = >02 = 02 points to >2000 - >2FFF range
     >4006 = 16390 is MR03 = >03 = 03 points to >3000 - >3FFF range
 
     >4014 = 16404 is MR10 = >0A = 10 points to >A000 - >AFFF range
     >4016 = 16406 is MR11 = >0B = 11 points to >B000 - >BFFF range
     >4018 = 16408 is MR12 = >0C = 12 points to >C000 - >CFFF range
     >401A = 16410 is MR13 = >0D = 13 points to >D000 - >DFFF range
     >401C = 16412 is MR14 = >0E = 14 points to >E000 - >EFFF range
     >401E = 16414 is MR15 = >0F = 15 points to >F000 - >FFFF range
 
     (MR=Mapper Register)
 
     In MAP mode the mapper register setup is equivalent to: EXAMPLE1
 
     mapper address  mapper  page num            address range
     --------------  ------  --------            -------------
      HEX     Dec            HEX  Dec             memory area
      ---     ---            ---  ---             -----------
     >4004 = 16388 is MR02 = >10 = 16 points to >2000 - >2FFF range
     >4006 = 16390 is MR03 = >11 = 17 points to >3000 - >3FFF range
 
     >4014 = 16404 is MR10 = >12 = 18 points to >A000 - >AFFF range
     >4016 = 16406 is MR11 = >13 = 19 points to >B000 - >BFFF range
     >4018 = 16408 is MR12 = >14 = 20 points to >C000 - >CFFF range
     >401A = 16410 is MR13 = >15 = 21 points to >D000 - >DFFF range
     >401C = 16412 is MR14 = >16 = 22 points to >E000 - >EFFF range
     >401E = 16414 is MR15 = >17 = 23 points to >F000 - >FFFF range
 
     (MR=Mapper Register)
Just an example of how you could set up SAMS:

     In MAP mode the mapper register setup is equivalent to: 
     EXAMPLE2
 
     mapper address  mapper  page num            address range
     --------------  ------  --------            -------------
      HEX     Dec            HEX  Dec             memory area
      ---     ---            ---  ---             -----------
     >4004 = 16388 is MR02 = >19 = 31 points to >2000 - >2FFF range
     >4006 = 16390 is MR03 = >01 = 01 points to >3000 - >3FFF range
 
     >4014 = 16404 is MR10 = >09 = 09 points to >A000 - >AFFF range
     >4016 = 16406 is MR11 = >00 = 00 points to >B000 - >BFFF range
     >4018 = 16408 is MR12 = >07 = 07 points to >C000 - >CFFF range
     >401A = 16410 is MR13 = >18 = 30 points to >D000 - >DFFF range
     >401C = 16412 is MR14 = >05 = 05 points to >E000 - >EFFF range
     >401E = 16414 is MR15 = >04 = 04 points to >F000 - >FFFF range
 
     (MR=Mapper Register)

Just to clear up that you can only change SAMS memory at 4K set boundries i.e. >2000 to >2FFF or >A000 to >AFFF or >D000 to >DFFF

You can not use any other boundries.

Share this post


Link to post
Share on other sites
8 hours ago, GDMike said:

Understood. I just got to learn how to do pages of >2A00? I'd like to use only >2A00 actually for my swapout., Paging or whatever it's called. 

The real address I'll use,  because my page 1 Begins at  >2A00 and no one will go to that address unless they need to physical change to page 1, the user data 1. I understand how to exit from Sam's, and return to normal pages but how do I get sam pages from that?

I understand the swap to the new paged memory, but how do i increment through the whole SAMs card.

Like if my SAMs page is 1 pointing to the first 4k, how to move to the next, new 4k of >2A00 providing me another 4K?

Thx so much

 

You cannot use just any memory location for SAMS mapping. As has been pointed out by several folks, you are limited to 4 KiB boundaries. The only places you can map SAMS pages are >2000, >3000, >A000, >B000, >C000, >D000, >E000 and >F000. It would be easiest for you to rearrange memory so you could use, perhaps, >E000 – >FFFF for both your first 9 SNP pages as well as for mapping two 4 KiB pages of SAMS memory (9 SNP pages) each swap.

 

...lee

  • Like 2

Share this post


Link to post
Share on other sites
1 hour ago, Stuart said:

So when a task is created, could you set 5 data words to the values needed for the SAMS registers? Then before calling the HIMAPPER code set R4 to point to the first of those words, and change HIMAPPER to 5 lines of MOV *R4+, *R1+? You could then do away with the AI R4,>0100 instructions.

That sounds interesting.  Thanks Stuart. 

Share this post


Link to post
Share on other sites
1 hour ago, Stuart said:

So when a task is created, could you set 5 data words to the values needed for the SAMS registers? Then before calling the HIMAPPER code set R4 to point to the first of those words, and change HIMAPPER to 5 lines of MOV *R4+, *R1+? You could then do away with the AI R4,>0100 instructions.

And by doing it that way I can store the pages with bytes in the correct order so that removes another instruction.  :) 

So my MEM variable will be a pointer to a short array.

Thanks again.

 

 

Share this post


Link to post
Share on other sites
1 hour ago, RXB said:

How about an example that are in RXB documents:

 In PASS mode the mapper register setup is equivalent to:
 
     mapper address  mapper  page num            address range
     --------------  ------  --------            -------------
      HEX     Dec            HEX  Dec             memory area
      ---     ---            ---  ---             -----------
     >4004 = 16388 is MR02 = >02 = 02 points to >2000 - >2FFF range
     >4006 = 16390 is MR03 = >03 = 03 points to >3000 - >3FFF range
 
     >4014 = 16404 is MR10 = >0A = 10 points to >A000 - >AFFF range
     >4016 = 16406 is MR11 = >0B = 11 points to >B000 - >BFFF range
     >4018 = 16408 is MR12 = >0C = 12 points to >C000 - >CFFF range
     >401A = 16410 is MR13 = >0D = 13 points to >D000 - >DFFF range
     >401C = 16412 is MR14 = >0E = 14 points to >E000 - >EFFF range
     >401E = 16414 is MR15 = >0F = 15 points to >F000 - >FFFF range
 
     (MR=Mapper Register)
 
     In MAP mode the mapper register setup is equivalent to: EXAMPLE1
 
     mapper address  mapper  page num            address range
     --------------  ------  --------            -------------
      HEX     Dec            HEX  Dec             memory area
      ---     ---            ---  ---             -----------
     >4004 = 16388 is MR02 = >10 = 16 points to >2000 - >2FFF range
     >4006 = 16390 is MR03 = >11 = 17 points to >3000 - >3FFF range
 
     >4014 = 16404 is MR10 = >12 = 18 points to >A000 - >AFFF range
     >4016 = 16406 is MR11 = >13 = 19 points to >B000 - >BFFF range
     >4018 = 16408 is MR12 = >14 = 20 points to >C000 - >CFFF range
     >401A = 16410 is MR13 = >15 = 21 points to >D000 - >DFFF range
     >401C = 16412 is MR14 = >16 = 22 points to >E000 - >EFFF range
     >401E = 16414 is MR15 = >17 = 23 points to >F000 - >FFFF range
 
     (MR=Mapper Register)
Just an example of how you could set up SAMS:

     In MAP mode the mapper register setup is equivalent to: 
     EXAMPLE2
 
     mapper address  mapper  page num            address range
     --------------  ------  --------            -------------
      HEX     Dec            HEX  Dec             memory area
      ---     ---            ---  ---             -----------
     >4004 = 16388 is MR02 = >19 = 31 points to >2000 - >2FFF range
     >4006 = 16390 is MR03 = >01 = 01 points to >3000 - >3FFF range
 
     >4014 = 16404 is MR10 = >09 = 09 points to >A000 - >AFFF range
     >4016 = 16406 is MR11 = >00 = 00 points to >B000 - >BFFF range
     >4018 = 16408 is MR12 = >07 = 07 points to >C000 - >CFFF range
     >401A = 16410 is MR13 = >18 = 30 points to >D000 - >DFFF range
     >401C = 16412 is MR14 = >05 = 05 points to >E000 - >EFFF range
     >401E = 16414 is MR15 = >04 = 04 points to >F000 - >FFFF range
 
     (MR=Mapper Register)

Just to clear up that you can only change SAMS memory at 4K set boundries i.e. >2000 to >2FFF or >A000 to >AFFF or >D000 to >DFFF

You can not use any other boundries.

Yes. This is exactly what I am doing too Rich.  The only difference is I will start these CODE SAMS pages at >FF and work down like stack and I am only swapping out the Hi RAM pages at A000...

I have another system for DATA that makes 64K  segments and it starts at SAMS >10 and goes upwards.  The programmer has to keep them from crashing. :)  

 

Clearly you have been here already. :) 

 

  • Like 1

Share this post


Link to post
Share on other sites

Stuart's idea works great.

 

For the curious here is my test code to see if it works.  The SWAPMEM is assigned to task USER1. It is an endless loop that switches the HI RAM pages and plays with some memory locations in SAMS pages, restores the pass-through pages and then PAUSE returns to the Forth task.  The video shows me compiling some tools code while USER1 is running and trying the console. :) 

The concept works. Now I have to make it part of the PAUSE routine.

 

Spoiler
\ Multi-User memory management with SUPER CART
\ Method: Map contiguous pages into HI RAM

\ NEEDS DUMP  FROM DSK1.TOOLS
NEEDS FORK  FROM DSK1.MTASK99
NEEDS MALLOC FROM DSK1.MALLOC
NEEDS MOV,  FROM DSK1.ASM9900

CREATE MAP1  0B00 , 0C00 , 0D00 , 0E00 , 0F00 ,
CREATE MAP2  FB00 , FC00 , FD00 , FE00 , FF00 ,

CODE HIMAPPER ( pages[] --) \ Maps B000..FFFF into SAMS
         R12 1E00  LI,
         0 SBO,          \ card on
         R0  4016  LI,   \ HI ram SAMS register for B000

        *TOS+  R0 *+ MOV,  \ MAP B000
        *TOS+  R0 *+ MOV,  \ MAP C000
        *TOS+  R0 *+ MOV,  \ MAP D000
        *TOS+  R0 *+ MOV,  \ MAP E000
        *TOS+  R0 ** MOV,  \ MAP F000

         0 SBZ,           \ card off
         TOS POP,         \ refill Forth top of stack register
         NEXT,            \ run Forth
         ENDCODE

INIT-MULTI
( syntax sugar word to create a task in heap, FORK and name the address)
: TASK:  ( size -- )  MALLOC DUP FORK  CONSTANT ;

USIZE TASK: USER1   \ USIZE is default memory block size for a user task

: SWAPMEM
        BEGIN
            MAP2 HIMAPPER  \ switch to local memory space
           -2 C000 +!    \ play with SAMS memory
           -3 D000 +!    \ play with SAMS memory
            E000 1+!     \ play with SAMS memory
            F000 1+!     \ play with SAMS memory

            MAP1 HIMAPPER  \ MAP back to Forth memory space
            PAUSE          \ change tasks
        AGAIN
;

' SWAPMEM USER1 ASSIGN   \ Execution token of SWAPMEM -> USER1

 

 

  • Like 1

Share this post


Link to post
Share on other sites
1 hour ago, TheBF said:

And by doing it that way I can store the pages with bytes in the correct order so that removes another instruction.  :) 

So my MEM variable will be a pointer to a short array.

Thanks again.

 

I did think of doing it this way, but was not sure whether you would need to set up the array for each swap. If you can afford the space at setup time for all of the arrays you may need, it saves 6 clock cycles and 2 memory accesses (before wait-state calculation) over AI, use, plus, it is neater and more compact, of course. If, on the other hand, you need to set up the array for each call, it will cost more time than AI, use.

 

...lee

  • Like 2

Share this post


Link to post
Share on other sites

For now I will go this way because context switch time is a big deal on the old 9900. :)

 

As you correctly point out, its always about the tradeoffs.  Great to have some good minds here to shepherd me along. Thanks

  • Like 2

Share this post


Link to post
Share on other sites

I did a test of copying data from a 1 mb Sam's card  bank to the next higher bank. My test kept copying past bank 245, well because I wanted to see how the console would handle my loop. And my tests kept performing as if the higher banks existed.

Do these banks roll over, as in start writing to bank 1 if it can't find bank 247,248,250 or something similar?

 

Edited by GDMike

Share this post


Link to post
Share on other sites
9 hours ago, GDMike said:

I did a test of copying data from a 1 mb Sam's card  bank to the next higher bank. My test kept copying past bank 248. Do these banks roll over, as in start writing to bank 1 if it can't find bank 247,248,250 or something similar?

 

Without seeing your code, it is impossible to tell. You may know all this stuff, but you do not explicitly write to SAMS banks, you write to addresses in the 32 KiB Expansion RAM. It happens that you are swapping 4 KiB SAMS pages in and out of 4 KiB blocks of those Expansion RAM addresses. If stuff gets written to a higher bank than you expect, it is because your code mapped that bank into the address space written. The SAMS card does not swap banks in and out on its own.

 

[EDIT: My response, though not wrong, is largely irrelevant. :dunce: At times, I have the bad habit of getting mired in irrelevant details. Your thoughts about what was happening implied higher bank numbers were actually being written, partly because you did not mention the magic number, 255, in “past bank 248”  You were onto the answer (see @Ksarul’s post following) with “Do these banks roll over”, but your musing about SAMS not being able to find a bank triggering the rollover sent my weird mind in a different direction. Sorry about that. |:)]

 

...lee

Edited by Lee Stewart
  • Like 1

Share this post


Link to post
Share on other sites

In answer to the question, it effectively rolls the banks over, as you suspected @GDMike. This is because the card addressing only supports bank numbers from 0 to 255. As soon as you advanve your counter to 256, you are setting a higher-order bank bit than is decoded by the card--so that bit is ignored, but the rest of the bank address you are trying to set is still valid, setting the card back to bank 0. This process continues for each subsequent bank. Note that on a 4M card, two additional higher-order bits are decoded, and on a 16M card, all four of the higher-order bits of the 74LS612 are decoded. This has been tested on 4M boards (and since Classic99 supports a larger SAMS memory space, the functionality can also be verified there for the 16M SAMS space (or even 32M, since it supports a fifth high-order bit which doesn't exist on the 74LS612)).

  • Thanks 1

Share this post


Link to post
Share on other sites
8 hours ago, GDMike said:

I did a test of copying data from a 1 mb Sam's card  bank to the next higher bank. My test kept copying past bank 245, well because I wanted to see how the console would handle my loop. And my tests kept performing as if the higher banks existed.

Do these banks roll over, as in start writing to bank 1 if it can't find bank 247,248,250 or something similar?

 

Thanks strange. I was doing the same thing.

I was testing how fast I could copy pages  using only one 4K buffer in CPU RAM.  I was blitting into VDP RAM, switching pages and blitting back to SAMS.

It took about 3 seconds to copy 64K that way using Assembler VMBW,VMBR inside a Forth loop.

 

If I used a 4K buffer in CPU RAM I could get it to 2 seconds for 64K by using a custom copy routine that moved 16 bit cells at a time instead of bytes. By extension then I should be able to speed that up by moving 2 or maybe even 4 cells inside the assembler loop.

 

The VDP method is not bad for performance and means I can don't need to play with CPU RAM for the copy buffer. Still deciding which way I want to go.

  • Thanks 1

Share this post


Link to post
Share on other sites
2 hours ago, TheBF said:

Thanks strange. I was doing the same thing.

I was testing how fast I could copy pages  using only one 4K buffer in CPU RAM.  I was blitting into VDP RAM, switching pages and blitting back to SAMS.

It took about 3 seconds to copy 64K that way using Assembler VMBW,VMBR inside a Forth loop.

 

If I used a 4K buffer in CPU RAM I could get it to 2 seconds for 64K by using a custom copy routine that moved 16 bit cells at a time instead of bytes. By extension then I should be able to speed that up by moving 2 or maybe even 4 cells inside the assembler loop.

 

The VDP method is not bad for performance and means I can don't need to play with CPU RAM for the copy buffer. Still deciding which way I want to go.

Ahh, lucky for me, my user data is all in ram to start with, so my mov's are pretty fast. But I had a feeling, well I read somewhere that it rolls over like KSARUL said previously, but the article I found, and sorry but I can't find it now, but it talked regarding the older AMS? Not sure it was the same for my 1MB card, but KSARUL put it in perspective for me.

It's my first time working with larger data all at once with this card and I'm enjoying the heck out of It. I'm actually at a point where I'm importing just short of 8K of user data from what they create in the 8K of the supercart, but in order to import, I have to push everything in SAMs,(>3000->3FFF) lower banks to the right or up, to higher banks by 9 banks so that pages 1-9 of my SNP pages are actually SNE pages imported/merged into existing SAMs at end up at the lower part of SAMs bank because I want them to show up as SNP pages 1-9 and what was SNP pages 1-9 are now pages 10-19 if that makes sense...

And I've got that done, but I wanted to run a test while I was here and I bumped my loop up and outside the limit of banks available and saw no issues like a crash, so it led me to look into this.

Thx everyone for chiming in. 

I appreciate that.

 

 

Edited by GDMike
Added Clarification
  • Like 1

Share this post


Link to post
Share on other sites

TheBF,

Talking about VMBR and VMBW.

Could rewriting and using a different VMBR and BW code work better than those built in referenced code? I thought maybe I should use something that wasnt a built in reference too.

Share this post


Link to post
Share on other sites

Sorry about that. |:)]

Shoot lee, no apologies are needed for asking for more information, I get that.

And the information I provided was surely lack of details, as I usually just figure that base of the question is merely enough, and to some people it's not, communication is a tricky thing as there's a lot of guess work involved between communicator and receiver sometimes especially when there is no video supporting the question and lack of  non verbal queues exists. If anyone needs to apologise, usually it's the communicator who leaves out information.

Sorry for lack or proper sentencing.

But I value your input regardless, of course, shoot. Nothing worse for me than typing up a question when I'm new, or kinda new to the subject without proper terminology, take Banks for example, I talked with opa lately regarding what is bank vs what is a frame vs a page, and his response was..

 

I already let opa know I might share his response one day..

From opa.

"but generally, 'pages' are small blocks of ram 2k or 4k normally that can be mapped where you want them, so you could have page 00 at >2000 or page 00 at >3000 or even at >E000, they don't have to be in order either, so page 00 at >2000 and page 10 at >3000 and page 5 at >4000 etc.

whereas 'banks' are fixed, they always at the same place, for example 4 banks of 8k at >6000 in cartridge, you can't have that bank someplace else in memory, or change the order around.

so pages are more flexable, mappable, and banks can just be switch from one to the other.

that is how i see it, not sure if there is official setup or not, but i always treated them like that".

So I'm trying to understand what you may already know and my question may come off from left field.

Sorry for making this so darn long, that's actually another one of my pet peeves is to try NOT to make a question long with details.

I find that writing code, well in assembly anyway, is just like writing a book, using code objects in place of nouns or verbs..neat

 

 

 

  • Like 1

Share this post


Link to post
Share on other sites
2 hours ago, GDMike said:

Ahh, lucky for me, my user data is all in ram to start with, so my mov's are pretty fast. But I had a feeling, well I read somewhere that it rolls over like KSARUL said previously, but the article I found, and sorry but I can't find it now, but it talked regarding the older AMS? Not sure it was the same for my 1MB card, but KSARUL put it in perspective for me.

It's my first time working with larger data all at once with this card and I'm enjoying the heck out of It. I'm actually at a point where I'm importing just short of 8K of user data from what they create in the 8K of the supercart, but in order to import, I have to push everything in SAMs,(>3000->3FFF) lower banks to the right or up, to higher banks by 9 banks so that pages 1-9 of my SNP pages are actually SNE pages imported/merged into existing SAMs at end up at the lower part of SAMs bank because I want them to show up as SNP pages 1-9 and what was SNP pages 1-9 are now pages 10-19 if that makes sense...

And I've got that done, but I wanted to run a test while I was here and I bumped my loop up and outside the limit of banks available and saw no issues like a crash, so it led me to look into this.

Thx everyone for chiming in. 

I appreciate that.

 

 

Doesn't matter if all the data is RAM. To copy from SAMS page to SAMS page you need to have :

 

1. two different SAMS "windows" in your RAM space, switch in source and destination SAMS pages and copy from one to the other.

-or-

2. use one SAMS window , copy SAMS to a RAM buffer , switch the page in the window and copy the buffer back to SAMS

-or-

3. or as I tried, one SAMS windows, copied to VDP, switch the page in the window copy VDP back to SAMS.

 

 

That's all the options I can think of.  (well I suppose you could write to file and then copy back but that's not practical)

 

  • Thanks 1

Share this post


Link to post
Share on other sites
2 hours ago, GDMike said:

TheBF,

Talking about VMBR and VMBW.

Could rewriting and using a different VMBR and BW code work better than those built in referenced code? I thought maybe I should use something that wasnt a built in reference too.

For sure but they work fine until you need to go faster.

Share this post


Link to post
Share on other sites
3 hours ago, GDMike said:

TheBF, Talking about VMBR and VMBW.

Could rewriting and using a different VMBR and BW code work better than those built in referenced code? I thought maybe I should use something that wasnt a built in reference too.

 

55 minutes ago, TheBF said:

For sure but they work fine until you need to go faster.

 

Yeah, BLWP is slower than BL is slower than inline. Of course, inline code takes the most space.

 

...lee

  • Like 3

Share this post


Link to post
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.

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...