\ noForth -- an 30 maart 2021
\ jeroen
: BBLSORT ( -- )                        \ sorts array with n cells using bubblesort
    1 medlen do                         \ put 1 on top of n & start outer do
        i 1+ 1 ?do                      \ start innner loop
            i 1- 2* tmpary + @ dup      \ get value from 1st address & dup
            i 2* tmpary + @             \ get value from 2nd address
            swap over > if
                i 1- 2* tmpary + !      \ store 1st value at 2nd
                i 2* tmpary + !         \ store 2nd value at 1st
            else 2drop then
        loop
    -1 +loop ;

\ an
\ Met 2@ en 2!
: BUBBEL ( lijstadres aantalcellen -- )
    for dup i
        for dup 2@ <                    \ x1 > x2 ?
            if dup dup 2@ swap rot 2!
            then cell+
        next drop
    next drop ;

\ Zonder 2@ en 2!
: SORTEER ( lijstadres aantalcellen -- )
    for dup @ over                  \ ladr x1 adr
        i for                       \ ladr x1 adr )
            >r  r@ cell+ @          \ volgende element
                2dup < if swap then \ grootste kleinste
                r@ !                \ kleinste naar lijst
            r> cell+
        next !                      \ het laatste element staat nu zeker goed
    next drop ;

create LIJST 8 cells allot
lijst 8 over !
cell+ 7 over !
cell+ 6 over !
cell+ 5 over !
cell+ -4 over !
cell+ 3 over !
cell+ 2 over !
cell+ 1 swap !

lijst 8 sorteer


\ -------- voor noForth risc-v
create SORT ( lijst #cellen -- )
chere >r
v: also assembler
chere cell+ , ( adr -- adr ) \ rangschik celpaar op adr.
    sun tos ) .mov          moon 4 tos x) .mov
    sun moon >?
    if, tos ) moon .mov     4 tos x) sun .mov
    then, next
v: previous
does> drop
    for dup i for [ r> compile, ] cell+
    next drop next drop ;


\ -------- voor noForth msp430
create SORT ( lijst #cellen -- )
chere >r
v: also assembler
chere cell+ , ( adr -- adr ) \ rangschik celpaar op adr.
    tos ) sun mov           2 tos x) moon mov
    sun moon cmp
    >? if, moon tos ) mov   sun 2 tos x) mov
    then, next
v: previous
does> drop
    for dup i for [ r> , ] cell+
    next drop next drop ;

\ <><>
