From e0aaac008824b697773b86810e9103441f014f58 Mon Sep 17 00:00:00 2001 From: Christian Groessler Date: Tue, 16 Jul 2013 01:29:49 +0200 Subject: [PATCH] fix '_sysrmdir' for SpartaDOS --- asminc/atari.inc | 1 + libsrc/atari/sysrmdir.s | 89 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 89 insertions(+), 1 deletion(-) diff --git a/asminc/atari.inc b/asminc/atari.inc index 4992807f8..1fff3ebae 100644 --- a/asminc/atari.inc +++ b/asminc/atari.inc @@ -55,6 +55,7 @@ NOTE = $26 ;note sector GETFL = $27 ;get file length CHDIR_MYDOS = $29 ;change directory (MyDOS) MKDIR = $2A ;make directory (MyDOS/SpartaDOS) +RMDIR = $2B ;remove directory (SpartaDOS) CHDIR_SPDOS = $2C ;change directory (SpartaDOS) FORMAT = $FE ;format diff --git a/libsrc/atari/sysrmdir.s b/libsrc/atari/sysrmdir.s index 9c057ba44..2a2b160c1 100644 --- a/libsrc/atari/sysrmdir.s +++ b/libsrc/atari/sysrmdir.s @@ -1,10 +1,97 @@ ; ; Stefan Haubenthal, 2005-12-24 +; Christian Groessler, 2013-07-16 ; ; unsigned char __fastcall__ _sysrmdir (const char* name); +; +; for SpartaDOS and MyDOS ; + .include "atari.inc" + .include "errno.inc" .export __sysrmdir .import __sysremove + .import __dos_type + .import ucase_fn + .import findfreeiocb + .import addysp + .importzp sreg + .importzp tmp3 + .importzp tmp4 -__sysrmdir := __sysremove +.proc __sysrmdir + + pha + lda __dos_type + beq not_impl ; AtariDOS + cmp #OSADOS+1 + bcc do_sparta ; OS/A and SpartaDOS + pla + jmp __sysremove ; MyDOS and others (TODO: check XDOS) + +not_impl: + pla + lda #NVALID + rts + +iocberr: + pla ; cleanup stack + pla + lda #TMOF + rts + +do_sparta: + txa + pha + jsr findfreeiocb + bne iocberr ; no IOCB available + + stx tmp4 ; remember IOCB + pla + tax + pla + +.ifdef UCASE_FILENAME + + jsr ucase_fn + bcc ucok1 + + lda #183 ; 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 #RMDIR + sta ICCOM,x + lda #0 + sta ICAX1,x + lda #0 + 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 + lda #0 + rts + +cioerr: tya + rts + +.endproc ; __sysrmdir