millfork/examples/a8/bubble_sort.mfk

62 lines
973 B
Plaintext

pointer screen @ $84
byte i @ $80, n1 @ $81, n2 @ $82, t @ $83
array(byte) sorttable align(fast) = [for x,255,downto,1 [x]]
asm void pause() {
lda os_RTCLOK.b2
.rt_check:
cmp os_RTCLOK.b2
beq .rt_check
rts
}
// print in HEX
void printScore(byte val) {
array(byte) tmp[2]
byte iter
tmp[0] = val >> 4
tmp[1] = val & %00001111
for iter:tmp {
if tmp[iter] < 10 {
screen[0] = tmp[iter] + $10
} else {
screen[0] = tmp[iter] + $17
}
screen += 1
}
screen[0] = 0
screen += 1
}
void main(){
screen = os_SAVMSC
for i:sorttable {
printScore(sorttable[i])
}
pause()
os_RTCLOK.b2 = 0
for t,253,downto,0{
for i,0,to,253{
n1 = sorttable[i]
n2 = sorttable[i+1]
if n1>n2 {
sorttable[i] = n2
sorttable[i+1] = n1
}
}
}
t = os_RTCLOK.b2
screen = os_SAVMSC
for i:sorttable {
printScore(sorttable[i])
}
// print jiffies
printScore(t)
while true {}
}