peek, poke, bptr to move blocks in ram

lbenson

Senior Member
<OFFTOPIC>My 2,000th post</OFFTOPIC>

This may have been noted before, or may have been obvious to some, but you can use peek and poke with bptr to easily move blocks of data in ram.

The following code first puts "A"-"Z" in upper ram at byte 56 (incidentally, why can't "poke" take a string?). Then the "poke 128,@bptrinc ..." command moves 26 bytes from ram 56 to ram 128. The "sertxd" then prints the values starting at ram byte 128.

Code:
symbol scratch=b3
  bptr = 56
'  poke bptr, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  scratch="A"
  do while scratch <= "Z" : @bptrinc = scratch : inc scratch : loop ' put A=Z in upper ram
  bptr = 56
  ' move ram bytes 56-81 to 128-153
  poke 128,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc, _
           @bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc, _
           @bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc
  bptr = 128
  sertxd(@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc, _
           @bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc, _
           @bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc,@bptrinc)
Instead of "poke", "bptr = 128 : peek 56,@bptrinc ... " accomplishes the same thing--moves bytes from 56 to 128.
 

inglewoodpete

Senior Member
I like it! It makes the routine very efficient on registers.

I tried the code in the simulator and it works well. Then, I remembered that PE6 allows string substitution by using DEFINE. Here is a simple example of reducing the size of those bptrinc's. It works the same but the code is less bulky.
Code:
[color=Blue]Symbol [/color][color=Purple]Scratch [/color][color=DarkCyan]= [/color][color=Purple]b3[/color]
[color=Navy]#Define [/color][color=Black]bpi bptrinc
  [/color][color=Purple]bptr [/color][color=DarkCyan]= [/color][color=Navy]56
  [/color][color=Green]'poke bptr, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  [/color][color=Purple]Scratch [/color][color=DarkCyan]= [/color][color=Red]"A"
  [/color][color=Blue]Do Until [/color][color=Purple]Scratch [/color][color=DarkCyan]> [/color][color=Red]"Z"[/color][color=Black]: @bpi [/color][color=DarkCyan]= [/color][color=Purple]Scratch[/color][color=Black]: [/color][color=Blue]Inc [/color][color=Purple]Scratch[/color][color=Black]: [/color][color=Blue]Loop [/color][color=Green]' put A-Z in upper ram
  '
  [/color][color=Purple]bptr [/color][color=DarkCyan]= [/color][color=Navy]56  [/color][color=Green]'Reinitialise pointer
  ' Move 26 RAM bytes from 56-81 to 128-153
  [/color][color=Blue]Poke [/color][color=Navy]128[/color][color=Black], @bpi,@bpi,@bpi,@bpi,@bpi,@bpi,@bpi,@bpi,@bpi,@bpi,@bpi,@bpi,@bpi, _
            @bpi,@bpi,@bpi,@bpi,@bpi,@bpi,@bpi,@bpi,@bpi,@bpi,@bpi,@bpi,@bpi
  [/color][color=Blue]Do[/color][color=Black]: [/color][color=Blue]Loop[/color]
 
Last edited:
Top