From 84b1e343b5c538aadc6116d0cb603a49fde4fe86 Mon Sep 17 00:00:00 2001 From: cpg Date: Sat, 1 May 2010 22:33:25 +0000 Subject: [PATCH] syschdir by Stefan Haubenthal git-svn-id: svn://svn.cc65.org/cc65/trunk@4658 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- libsrc/atari/Makefile | 2 + libsrc/atari/initcwd.s | 33 ++++++++++++++++ libsrc/atari/syschdir.s | 88 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 123 insertions(+) create mode 100644 libsrc/atari/initcwd.s create mode 100644 libsrc/atari/syschdir.s diff --git a/libsrc/atari/Makefile b/libsrc/atari/Makefile index 349e6d9f5..93eec9f2b 100644 --- a/libsrc/atari/Makefile +++ b/libsrc/atari/Makefile @@ -88,6 +88,7 @@ OBJS = _scrsize.o \ gotoy.o \ gotoxy.o \ graphics.o \ + initcwd.o \ inviocb.o \ joy_stddrv.o \ kbhit.o \ @@ -107,6 +108,7 @@ OBJS = _scrsize.o \ scroll.o \ setcolor.o \ siocall.o \ + syschdir.o \ sysmkdir.o \ sysremove.o \ sysrmdir.o \ diff --git a/libsrc/atari/initcwd.s b/libsrc/atari/initcwd.s new file mode 100644 index 000000000..54afeb127 --- /dev/null +++ b/libsrc/atari/initcwd.s @@ -0,0 +1,33 @@ +; +; Stefan Haubenthal, 2008-04-29 +; + + .export initcwd + .import findfreeiocb + .import __cwd + .include "atari.inc" + + .segment "INIT" + +.proc initcwd + + jsr findfreeiocb + bne oserr + lda #48 + sta ICCOM,x + lda #<__cwd + sta ICBLL,x + lda #>__cwd + sta ICBLH,x + jsr CIOV + bmi oserr + ldx #0 ; ATEOL -> \0 +: lda __cwd,x + inx + cmp #ATEOL + bne :- + lda #0 + sta __cwd-1,x +oserr: rts + +.endproc diff --git a/libsrc/atari/syschdir.s b/libsrc/atari/syschdir.s new file mode 100644 index 000000000..901c15e4c --- /dev/null +++ b/libsrc/atari/syschdir.s @@ -0,0 +1,88 @@ +; +; Stefan Haubenthal, 2005-12-24 +; Based on on code by Christian Groessler +; +; unsigned char __fastcall__ _syschdir (const char* name); +; for SpartaDOS and MyDOS +; + + .include "atari.inc" + .import findfreeiocb + .import __dos_type + .import initcwd + .importzp tmp4 +.ifdef UCASE_FILENAME + .importzp tmp3 + .import addysp + .import ucase_fn +.endif + .export __syschdir + +.proc __syschdir + + pha ; save input parameter + txa + pha + + jsr findfreeiocb + beq iocbok ; we found one + + pla + pla ; fix up stack + + lda #TMOF ; too many open files + rts + +iocbok: stx tmp4 ; remember IOCB index + pla + tax + pla ; get argument again + +.ifdef UCASE_FILENAME + + jsr ucase_fn + bcc ucok1 + + lda #182 ; see oserror.s + rts +ucok1: + +.endif ; defined UCASE_FILENAME + + ldy tmp4 ; IOCB index + sta ICBAL,y ; store pointer to filename + txa + sta ICBAH,y + tya + tax + lda __dos_type + cmp #SPARTADOS + beq :+ + lda #41 + .byte $2C ; BIT +: lda #44 + sta ICCOM,x + lda #0 + sta ICAX1,x + sta ICAX2,x + sta ICBLL,x + sta ICBLH,x + jsr CIOV + +.ifdef UCASE_FILENAME + tya + pha + ldy tmp3 ; get size + jsr addysp ; free used space on the stack + pla + tay +.endif ; defined UCASE_FILENAME + + bmi cioerr + jsr initcwd + lda #0 + rts +cioerr: tya + rts + +.endproc ; __syschdir -- 2.39.5