diff --git a/test-programs/subroutines.asm b/test-programs/subroutines.asm index 2264517..137e951 100644 --- a/test-programs/subroutines.asm +++ b/test-programs/subroutines.asm @@ -1,5 +1,10 @@ ;; sketching around subroutines with return stack +; I think the sketching below contains some useful ideas, +; but the new `*ADDR` assembly op should make this a whole lot simpler + +; sketches follow .......... + ; jump table ; ---------- ; each function has a label @@ -10,53 +15,59 @@ ; then when the subroutine ends, it jumps here ; where that number gets mapped back onto the function's label -lda $1 +=*reentryPoint +=routine1 $1 + +lda =routine1 sto $19 ; contains ID # for the next fn to jump to @jump_table -hop $1 - jmp @jt2 -jmp @example_computation -@jt2 -hop $2 - ; jmp @jt3 - nop -; etc … -jmp @end + hop $1 + jmp @jt2 + jmp @example_computation + + @jt2 + hop $2 + ; jmp @jt3 + nop + ; etc … + + jmp @end @example_computation -lda 5 -sto $20 -lda 3 -sto $21 -; $19 still has the # for this routine -; but let’s pretend it doesn’t and demonstrate updating it -lda $1 -sto $19 -jmp @greater? + lda 5 + sto $20 + lda 3 + sto $21 + ; $19 still has the # for this routine + ; but let’s pretend it doesn’t and demonstrate updating it + lda $1 + sto $19 + jmp @greater? ; call with numbers to test in $20 and $21 ; result is stored in acc @greater? -; lda ($20) -; sub ($21) -; todo… -; wouldn’t it be great to have a “hop if neg” op… -; do we have to just subtract numbers until we get 0? + ; lda ($20) + ; sub ($21) + ; todo… + ; wouldn’t it be great to have a “hop if neg” op… + ; do we have to just subtract numbers until we get 0? -; no! -; here’s an approach that’s at least better than that -lda ($21) -sto $22 ; stash -@loop -lda ($21) -sub $1 -sto $22 ; stash -sub ($20) -hop $0 - jmp @loop -sto $1 -jmp $jmp_table -; ok this isn’t quite it… we also need to chexk if we hit 0 by just deceementinf and if so retuen 0 + ; no! + ; here’s an approach that’s at least better than that + lda ($21) + sto $22 ; stash + @loop + lda ($21) + sub $1 + sto $22 ; stash + sub ($20) + hop $0 + jmp @loop + sto $1 + jmp $jmp_table + ; ok this isn’t quite it… we also need to chexk if we hit 0 by just deceementinf and if so retuen 0 -jmp @jump_table +@end +END \ No newline at end of file