From d1aad57b9865caa61641bbd20557958790b66a84 Mon Sep 17 00:00:00 2001
From: "ol.sc"
Date: Sun, 14 Feb 2010 23:12:54 +0000
Subject: [PATCH] Initialize _curunit from the zeropage value DEVNUM (aka First
Address) in a constructor with a very high priority to be called before
DEVNUM gets overwritten by other constructors.
git-svn-id: svn://svn.cc65.org/cc65/trunk@4588 b7a2c559-68d2-44c3-8de9-860c34a00d81
---
asminc/c16.inc | 9 +++++++++
asminc/cbm510.inc | 5 +++--
asminc/cbm610.inc | 3 ++-
asminc/pet.inc | 9 +++++++++
libsrc/c128/Makefile | 1 +
libsrc/c128/devnum.s | 7 +++++++
libsrc/c16/Makefile | 1 +
libsrc/c16/devnum.s | 7 +++++++
libsrc/c64/Makefile | 1 +
libsrc/c64/devnum.s | 7 +++++++
libsrc/cbm/filevars.s | 26 ++++++++++++++++++++++----
libsrc/cbm510/Makefile | 1 +
libsrc/cbm510/devnum.s | 7 +++++++
libsrc/cbm610/Makefile | 1 +
libsrc/cbm610/devnum.s | 7 +++++++
libsrc/pet/Makefile | 1 +
libsrc/pet/devnum.s | 7 +++++++
libsrc/plus4/Makefile | 1 +
libsrc/plus4/devnum.s | 7 +++++++
libsrc/vic20/Makefile | 1 +
libsrc/vic20/devnum.s | 7 +++++++
21 files changed, 109 insertions(+), 7 deletions(-)
create mode 100644 asminc/c16.inc
create mode 100644 asminc/pet.inc
create mode 100644 libsrc/c128/devnum.s
create mode 100644 libsrc/c16/devnum.s
create mode 100644 libsrc/c64/devnum.s
create mode 100644 libsrc/cbm510/devnum.s
create mode 100644 libsrc/cbm610/devnum.s
create mode 100644 libsrc/pet/devnum.s
create mode 100644 libsrc/plus4/devnum.s
create mode 100644 libsrc/vic20/devnum.s
diff --git a/asminc/c16.inc b/asminc/c16.inc
new file mode 100644
index 000000000..9372e72c0
--- /dev/null
+++ b/asminc/c16.inc
@@ -0,0 +1,9 @@
+;
+; C16 generic definitions.
+;
+
+
+; ---------------------------------------------------------------------------
+; Zero page, Commodore stuff
+
+DEVNUM := $AE ; Device number
diff --git a/asminc/cbm510.inc b/asminc/cbm510.inc
index 0aad95f49..e98ed4a14 100644
--- a/asminc/cbm510.inc
+++ b/asminc/cbm510.inc
@@ -9,8 +9,9 @@
;-----------------------------------------------------------------------------
; Zeropage stuff
-ExecReg = $0000
-IndReg = $0001
+ExecReg = $00
+IndReg = $01
+DEVNUM = $9F
; ---------------------------------------------------------------------------
; Screen size
diff --git a/asminc/cbm610.inc b/asminc/cbm610.inc
index ea85cd50d..62d0c6a42 100644
--- a/asminc/cbm610.inc
+++ b/asminc/cbm610.inc
@@ -7,10 +7,11 @@
; ---------------------------------------------------------------------------
-; Zeropage registers
+; Zeropage stuff
ExecReg = $00
IndReg = $01
+DEVNUM = $9F
; ---------------------------------------------------------------------------
; Screen size
diff --git a/asminc/pet.inc b/asminc/pet.inc
new file mode 100644
index 000000000..524e83511
--- /dev/null
+++ b/asminc/pet.inc
@@ -0,0 +1,9 @@
+;
+; PET generic definitions.
+;
+
+
+; ---------------------------------------------------------------------------
+; Zero page, Commodore stuff
+
+DEVNUM := $D4 ; Device number
diff --git a/libsrc/c128/Makefile b/libsrc/c128/Makefile
index 248c36fd2..a5c4dde82 100644
--- a/libsrc/c128/Makefile
+++ b/libsrc/c128/Makefile
@@ -53,6 +53,7 @@ OBJS = _scrsize.o \
crt0.o \
color.o \
cputc.o \
+ devnum.o \
fast.o \
get_tv.o \
joy_stddrv.o \
diff --git a/libsrc/c128/devnum.s b/libsrc/c128/devnum.s
new file mode 100644
index 000000000..72007a516
--- /dev/null
+++ b/libsrc/c128/devnum.s
@@ -0,0 +1,7 @@
+;
+; Oliver Schmidt, 2010-02-14
+;
+
+ .include "c128.inc"
+
+ .exportzp devnum := DEVNUM
diff --git a/libsrc/c16/Makefile b/libsrc/c16/Makefile
index 6aa5275dd..06bea22f9 100644
--- a/libsrc/c16/Makefile
+++ b/libsrc/c16/Makefile
@@ -49,6 +49,7 @@ OBJS = _scrsize.o \
conio.o \
cputc.o \
crt0.o \
+ devnum.o \
get_tv.o \
joy_stddrv.o \
kbhit.o \
diff --git a/libsrc/c16/devnum.s b/libsrc/c16/devnum.s
new file mode 100644
index 000000000..105c9bda8
--- /dev/null
+++ b/libsrc/c16/devnum.s
@@ -0,0 +1,7 @@
+;
+; Oliver Schmidt, 2010-02-14
+;
+
+ .include "c16.inc"
+
+ .exportzp devnum := DEVNUM
diff --git a/libsrc/c64/Makefile b/libsrc/c64/Makefile
index 0b3eddeea..073bdcb33 100644
--- a/libsrc/c64/Makefile
+++ b/libsrc/c64/Makefile
@@ -53,6 +53,7 @@ OBJS = _scrsize.o \
color.o \
conio.o \
cputc.o \
+ devnum.o \
get_ostype.o \
get_tv.o \
joy_stddrv.o \
diff --git a/libsrc/c64/devnum.s b/libsrc/c64/devnum.s
new file mode 100644
index 000000000..e7b5f94b2
--- /dev/null
+++ b/libsrc/c64/devnum.s
@@ -0,0 +1,7 @@
+;
+; Oliver Schmidt, 2010-02-14
+;
+
+ .include "c64.inc"
+
+ .exportzp devnum := DEVNUM
diff --git a/libsrc/cbm/filevars.s b/libsrc/cbm/filevars.s
index 54f247d4c..3b6bdb750 100644
--- a/libsrc/cbm/filevars.s
+++ b/libsrc/cbm/filevars.s
@@ -4,15 +4,33 @@
; Variables used for CBM file I/O
;
- .export __curunit
.export __filetype
+ .export __curunit
+ .constructor initcurunit, 30
+ .importzp devnum
.data
-__curunit:
- .byte 8 ; Default is disk
-
__filetype:
.byte 'u' ; Create user files by default
+
+.bss
+
+__curunit:
+ .res 1
+
+
+.segment "INIT"
+
+.proc initcurunit
+
+ lda devnum
+ bne @L0
+ lda #8 ; Default is disk
+ sta devnum
+@L0: sta __curunit
+ rts
+
+.endproc
diff --git a/libsrc/cbm510/Makefile b/libsrc/cbm510/Makefile
index 0eadda41b..e92683dce 100644
--- a/libsrc/cbm510/Makefile
+++ b/libsrc/cbm510/Makefile
@@ -56,6 +56,7 @@ OBJS = _scrsize.o \
color.o \
cputc.o \
crt0.o \
+ devnum.o \
extzp.o \
kbhit.o \
kclose.o \
diff --git a/libsrc/cbm510/devnum.s b/libsrc/cbm510/devnum.s
new file mode 100644
index 000000000..0c6bf2130
--- /dev/null
+++ b/libsrc/cbm510/devnum.s
@@ -0,0 +1,7 @@
+;
+; Oliver Schmidt, 2010-02-14
+;
+
+ .include "cbm510.inc"
+
+ .exportzp devnum := DEVNUM
diff --git a/libsrc/cbm610/Makefile b/libsrc/cbm610/Makefile
index ac0293ed6..1eea7f31f 100644
--- a/libsrc/cbm610/Makefile
+++ b/libsrc/cbm610/Makefile
@@ -47,6 +47,7 @@ OBJS = _scrsize.o \
cputc.o \
crt0.o \
crtc.o \
+ devnum.o \
extzp.o \
get_tv.o \
kbhit.o \
diff --git a/libsrc/cbm610/devnum.s b/libsrc/cbm610/devnum.s
new file mode 100644
index 000000000..75fa4cd2a
--- /dev/null
+++ b/libsrc/cbm610/devnum.s
@@ -0,0 +1,7 @@
+;
+; Oliver Schmidt, 2010-02-14
+;
+
+ .include "cbm610.inc"
+
+ .exportzp devnum := DEVNUM
diff --git a/libsrc/pet/Makefile b/libsrc/pet/Makefile
index 911f9b3ab..b44c383b0 100644
--- a/libsrc/pet/Makefile
+++ b/libsrc/pet/Makefile
@@ -47,6 +47,7 @@ OBJS = _scrsize.o \
conio.o \
cputc.o \
crt0.o \
+ devnum.o \
get_tv.o \
kbhit.o \
kbsout.o \
diff --git a/libsrc/pet/devnum.s b/libsrc/pet/devnum.s
new file mode 100644
index 000000000..82d6b6bc6
--- /dev/null
+++ b/libsrc/pet/devnum.s
@@ -0,0 +1,7 @@
+;
+; Oliver Schmidt, 2010-02-14
+;
+
+ .include "pet.inc"
+
+ .exportzp devnum := DEVNUM
diff --git a/libsrc/plus4/Makefile b/libsrc/plus4/Makefile
index b3a3c4eee..51ef6ef80 100644
--- a/libsrc/plus4/Makefile
+++ b/libsrc/plus4/Makefile
@@ -49,6 +49,7 @@ OBJS = _scrsize.o \
conio.o \
cputc.o \
crt0.o \
+ devnum.o \
get_tv.o \
joy_stddrv.o \
kacptr.o \
diff --git a/libsrc/plus4/devnum.s b/libsrc/plus4/devnum.s
new file mode 100644
index 000000000..d369476e7
--- /dev/null
+++ b/libsrc/plus4/devnum.s
@@ -0,0 +1,7 @@
+;
+; Oliver Schmidt, 2010-02-14
+;
+
+ .include "plus4.inc"
+
+ .exportzp devnum := DEVNUM
diff --git a/libsrc/vic20/Makefile b/libsrc/vic20/Makefile
index 67433999f..50fb0152b 100644
--- a/libsrc/vic20/Makefile
+++ b/libsrc/vic20/Makefile
@@ -46,6 +46,7 @@ OBJS = _scrsize.o \
color.o \
conio.o \
cputc.o \
+ devnum.o \
get_tv.o \
joy_stddrv.o \
kbhit.o \
diff --git a/libsrc/vic20/devnum.s b/libsrc/vic20/devnum.s
new file mode 100644
index 000000000..23a9c3808
--- /dev/null
+++ b/libsrc/vic20/devnum.s
@@ -0,0 +1,7 @@
+;
+; Oliver Schmidt, 2010-02-14
+;
+
+ .include "vic20.inc"
+
+ .exportzp devnum := DEVNUM
--
2.39.5