diff --git a/libsrc/cbm/Makefile b/libsrc/cbm/Makefile index 66d08522d..c25d06830 100644 --- a/libsrc/cbm/Makefile +++ b/libsrc/cbm/Makefile @@ -86,6 +86,7 @@ S_OBJS = c_acptr.o \ scratch.o \ sysremove.o \ sysrename.o \ + telldir.o \ toascii.o \ wherex.o \ wherey.o \ diff --git a/libsrc/cbm/dir.inc b/libsrc/cbm/dir.inc index 481492313..ffab6c20c 100644 --- a/libsrc/cbm/dir.inc +++ b/libsrc/cbm/dir.inc @@ -10,7 +10,7 @@ .struct DIR fd .word - offs .word + off .word name .byte 16+1 .endstruct diff --git a/libsrc/cbm/telldir.s b/libsrc/cbm/telldir.s new file mode 100644 index 000000000..dc1822dfd --- /dev/null +++ b/libsrc/cbm/telldir.s @@ -0,0 +1,35 @@ +; +; Ullrich von Bassewitz, 2012-06-03 +; +; Based on C code by Groepaz +; +; long __fastcall__ telldir (DIR *dir); +; + + + .include "dir.inc" + .include "zeropage.inc" + + +.proc _telldir + + sta ptr1 + stx ptr1+1 + +; Clear high word of returned value + + lda #0 + sta sreg + sta sreg+1 + +; Return dir->off + + ldy #DIR::off+1 + lda (ptr1),y + tax + dey + lda (ptr1),y + rts + +.endproc +