-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On 13-Nov-06, at 7:27 PM, Andrew Lentvorski wrote:
Marc Feeley wrote:
You mean arbitrary peek/poke to an address?
Yes.
Some of the DS memory areas have restrictions on how they are used. Video memory cannot be accessed by byte operations, for example. It must be accessed by 16-bit or better.
Thanks, -a
Not fully tested:
(define peek-u8 (c-lambda (unsigned-int32) unsigned-int8 "___result = *___CAST(___U8*,___arg1);"))
(define poke-u8 (c-lambda (unsigned-int32 unsigned-int8) void "*___CAST(___U8*,___arg1) = ___arg2;"))
(define peek-u16 (c-lambda (unsigned-int32) unsigned-int16 "___result = *___CAST(___U16*,___arg1);"))
(define poke-u16 (c-lambda (unsigned-int32 unsigned-int16) void "*___CAST(___U16*,___arg1) = ___arg2;"))
(define peek-u32 (c-lambda (unsigned-int32) unsigned-int32 "___result = *___CAST(___U32*,___arg1);"))
(define poke-u32 (c-lambda (unsigned-int32 unsigned-int32) void "*___CAST(___U32*,___arg1) = ___arg2;"))
(define vec '#(1 2 3))
(define enc (##object->encoding vec))
(define (hex n) (pp (number->string n 16)))
(hex enc) (hex (modulo enc 4)) ; will be 1 (hex (peek-u32 (+ enc -1 4))) (hex (peek-u32 (+ enc -1 8))) (hex (peek-u32 (+ enc -1 12)))