summaryrefslogtreecommitdiffstats
path: root/open.asm
diff options
context:
space:
mode:
Diffstat (limited to 'open.asm')
-rw-r--r--open.asm85
1 files changed, 85 insertions, 0 deletions
diff --git a/open.asm b/open.asm
new file mode 100644
index 0000000..db5e7c2
--- /dev/null
+++ b/open.asm
@@ -0,0 +1,85 @@
+/* -----------------------------------------------------------------------
+ *
+ * Copyright 2013 H. Peter Anvin - All Rights Reserved
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom
+ * the Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall
+ * be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * ----------------------------------------------------------------------- */
+
+/* ------------------------------------------------------------------------- *
+ * fxn_create
+ * ------------------------------------------------------------------------- */
+
+GPROC(fxn_create)
+ lfsw dos_sdafn,%si
+ movb $0x21,%al /* Action: create or truncate */
+ testb $1,F_TOSH
+ jz 1f
+ movb $0x01,%al /* Action: create only (= O_EXCL) */
+ movw $0x0002,%dx /* Open mode: compatibility + read/write */
+ call do_open
+ retw
+END(fxn_create)
+
+/* ------------------------------------------------------------------------- *
+ * fxn_open
+ * ------------------------------------------------------------------------- */
+
+GPROC(fxn_open)
+ lfsw dos_sdafcb,%bx
+ movb $0x10,%al /* Action: open */
+ movw %fs:SDF_OPENMODE(%bx),%dx /* Open mode */
+ call do_open
+ retw
+END(fxn_open)
+
+/* ------------------------------------------------------------------------- *
+ * fxn_spopenfile
+ * ------------------------------------------------------------------------- */
+
+GPROC(fxn_spopenfile)
+ lfsw dos_sdafcb,%si
+ movw %fs:SPN_SPCACTION(%si),%ax /* Open action */
+ movw %fs:SPN_SPCMODE(%si),%dx /* Open mode */
+ call do_open
+ andw %ax,%ax
+ jnz 1f
+ movw %cx,F_CX /* Status return */
+1:
+ retw
+END(fxn_spopenfile)
+
+/* ------------------------------------------------------------------------- *
+ * do_open
+ *
+ * Common interface to all the open variants. Take the extended open
+ * action code in %ax and the open mode in %dx. SDN_FN1 contains the
+ * fully qualified filename.
+ *
+ * On return, the status code is in %(e)ax and on success an extended
+ * open result code is in %cx.
+ * ------------------------------------------------------------------------- */
+
+LPROC(do_open)
+ movw $0x08030002,%eax
+ retw
+END(do_open)