5MB/s Propeller to Propeller Data Transfer with 9 Bits
dat
'{
'-----------------------------------------------------------------------------------
' 5MB/s Propeller to Propeller parallel bus transfer is possible using bits P[noparse][[/noparse]0:8]
' This requires $1xx on P[noparse][[/noparse]0:8] for continuing transfer and $0 to stop.
' A pull-up is used on P8 to control the transfer (pullup because rdbyte 0-extends).
' Use djnz and comparisons to do pointer decrement.
' These are code fragments illustrating the principle and will not compile as is.
'-----------------------------------------------------------------------------------
' Read Propeller/COG
'
readprop org 0
' all bits start as input
mov t0, #0 ' make sure all bits are clear
mov ptr, addr ' set the base address
add ptr, len ' add the length
:read
movs t0, ina wz ' looking for 0 on all bits and P[noparse][[/noparse]0:8]
wrbyte t0, ptr ' write to ptr = address + length
if_nz djnz ptr, #:read ' if t0 <> 0, continue with ptr-1; else stop
'-----------------------------------------------------------------------------------
' Write Propeller/COG using djnz pointer
'
writeprop org 0
or dira, #$ff ' P[noparse][[/noparse]0:7] are outputs, P8 starts as input
mov ptr, addr ' set the base address
add ptr, len ' add the length
andn dira, #$100 ' start write ... bit 9 is pulled high externally
:write
rdbyte outa, ptr ' get byte from djnz controlled pointer
cmp ptr, addr wz ' test for end condition
if_nz djnz ptr, #:write ' if ptr > addr, decrement pointer and repeat
andn outa, #$1ff ' clear bits
or dira, #$100 ' signal finished with bits[noparse][[/noparse]0:8] == 0
'-----------------------------------------------------------------------------------
' Write Propeller/COG using more familiar pointer decrement, djnz len method
'
write2prop org 0
or dira, #$ff ' P[noparse][[/noparse]0:7] are outputs, P8 starts as input
mov ptr, addr ' set the base address
add ptr, len ' add the length
andn dira, #$100 ' start write ... bit 9 is pulled high externally
:write
rdbyte outa, ptr ' get byte from djnz controlled pointer
sub ptr, #1
djnz len, #:write ' jmp if dec len > 0
andn outa, #$1ff ' clear bits
or dira, #$100 ' signal finished with bits[noparse][[/noparse]0:8] == 0
'-----------------------------------------------------------------------------------
'}
I considered a similar idea using PHSA, but found using PHSA as a pointer to be impractical.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
--Steve
Propeller Tools

Comments
I was thinking of something similar, but was considering 10 pins (separate REQ/GRANT).
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Please use mikronauts _at_ gmail _dot_ com to contact me off-forum, my PM is almost totally full
Morpheus & Mem+dual Prop SBC w/ 512KB kit $119.95, 2MB memory IO board kit $89.95, both kits $189.95
www.mikronauts.com - my site 6.250MHz custom Crystals for running Propellers at 100MHz
Las - Large model assembler for the Propeller Largos - a feature full nano operating system for the Propeller
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
--Steve
Propeller Tools