Hello, I have prepared some double-length words for your convenience:
Probably some could be more optimized. --Marcin ; ( d -- ) Compiler ; R( -- ) ; create a named constant VE_2CONSTANT: .dw $ff09 .db "2constant",0 .dw VE_HEAD .set VE_HEAD = VE_2CONSTANT XT_2CONSTANT: .dw DO_COLON PFA_2CONSTANT: .dw XT_DOCREATE .dw XT_COMPILE .dw PFA_DO2VARIABLE .dw XT_SWAP .dw XT_COMMA .dw XT_COMMA .dw XT_EXIT ; ( d -- ) Stack ; R( -- ) ; drop TOS VE_2DROP: .dw $ff05 .db "2drop",0 .dw VE_HEAD .set VE_HEAD = VE_2DROP XT_2DROP: .dw PFA_2DROP PFA_2DROP: loadtos loadtos jmp DO_NEXT ; ( d1 -- d1 d1 ) Stack ; R( -- ) ; stack manipulation VE_2DUP: .dw $ff04 .db "2dup" .dw VE_HEAD .set VE_HEAD = VE_2DUP XT_2DUP: .dw PFA_2DUP PFA_2DUP: savetos ldd tosl, Y+2 ldd tosh, Y+3 savetos ldd tosl, Y+2 ldd tosh, Y+3 jmp DO_NEXT ; ( addr -- d ) Memory ; R( -- ) ; read 2 cells from RAM (or IO or CPU register) ; byte order is little-endian 44 33 22 11 -> 11223344. VE_2FETCH: .dw $ff02 .db "2@" .dw VE_HEAD .set VE_HEAD = VE_2FETCH XT_2FETCH: .dw PFA_2FETCH PFA_2FETCH: movw zl, tosl ld tosl, z+ ld tosh, z+ savetos ld tosl, z+ ld tosh, z+ jmp DO_NEXT ; ( d addr -- ) Memory ; R( -- ) ; write 32bit to RAM memory (or IO or CPU registers) ; words are stored little-endian, so 12345678. becomes ; 78 56 34 12 VE_2STORE: .dw $ff02 .db "2!" .dw VE_HEAD .set VE_HEAD = VE_2STORE XT_2STORE: .dw PFA_2STORE PFA_2STORE: movw zl, tosl loadtos std Z+2, tosl std Z+3, tosh loadtos std Z+0, tosl std Z+1, tosh loadtos jmp DO_NEXT ; ( -- ) Compiler ; R( -- ) ; create a variable entry and allocate RAM space for it VE_2VARIABLE: .dw $ff09 .db "2variable",0 .dw VE_HEAD .set VE_HEAD = VE_2VARIABLE XT_2VARIABLE: .dw DO_COLON PFA_2VARIABLE: .dw XT_HERE .dw XT_CONSTANT .dw XT_DOLITERAL .dw 4 .dw XT_ALLOT .dw XT_EXIT ; ( -- addr ) ; R( -- ) ; puts content of parameter field (2 cells) to TOS ;VE_DO2VARIABLE: ; .dw $ff0b ; .db "(2variable)",0 ; .dw VE_HEAD ; .set VE_HEAD = VE_DO2VARIABLE XT_DO2VARIABLE: .dw PFA_DO2VARIABLE PFA_DO2VARIABLE: savetos movw zl, wl adiw zl,1 readflashcell tosl,tosh savetos movw zl, wl adiw zl,2 readflashcell tosl,tosh jmp DO_NEXT ------------------------------------------------------------------------------ This SF.net email is sponsored by Make an app they can't live without Enter the BlackBerry Developer Challenge http://p.sf.net/sfu/RIM-dev2dev _______________________________________________ Amforth-devel mailing list Amforth-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/amforth-devel