From a57deeb58ad43b9c8daa48a77d7ac7557b6bc744 Mon Sep 17 00:00:00 2001
From: cuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Date: Thu, 11 Mar 2004 21:54:22 +0000
Subject: [PATCH] Reworked version by Oliver Schmidt

git-svn-id: svn://svn.cc65.org/cc65/trunk@2913 b7a2c559-68d2-44c3-8de9-860c34a00d81
---
 include/apple2.h                 | 112 ++++++++---------
 include/apple2enh.h              |  94 ++++++++++++++
 libsrc/apple2/Makefile           |   1 +
 libsrc/apple2/_scrsize.s         |   4 +-
 libsrc/apple2/apple2-280-192-6.s | 210 +++++++++++++++----------------
 libsrc/apple2/apple2-40-40-16.s  |  56 ++++-----
 libsrc/apple2/apple2-lc.s        |   6 +-
 libsrc/apple2/apple2-stdjoy.s    |   4 +-
 libsrc/apple2/apple2.inc         |  94 +++++++-------
 libsrc/apple2/cclear.s           |  17 +--
 libsrc/apple2/cgetc.s            |   8 +-
 libsrc/apple2/chline.s           |  17 ++-
 libsrc/apple2/color.s            |   4 +-
 libsrc/apple2/cputc.s            |  34 +++--
 libsrc/apple2/crt0.s             |  52 ++++----
 libsrc/apple2/cvline.s           |  12 +-
 libsrc/apple2/dosdetect.s        |  46 +++++++
 libsrc/apple2/get_ostype.s       |  54 ++++++--
 libsrc/apple2/kbhit.s            |   4 +-
 libsrc/apple2/mainargs.s         |   6 +-
 libsrc/apple2/read.s             |   6 +-
 libsrc/apple2/revers.s           |  16 +--
 libsrc/apple2/wherex.s           |   2 +-
 libsrc/apple2/wherey.s           |   2 +-
 libsrc/apple2/write.s            |   2 +-
 25 files changed, 499 insertions(+), 364 deletions(-)
 create mode 100644 include/apple2enh.h
 create mode 100644 libsrc/apple2/dosdetect.s

diff --git a/include/apple2.h b/include/apple2.h
index 18b42a863..16fcaedd2 100644
--- a/include/apple2.h
+++ b/include/apple2.h
@@ -1,32 +1,32 @@
 /*****************************************************************************/
-/*                                                                           */
-/*				   apple2.h                                  */
-/*                                                                           */
-/*		     Apple ][ system specific definitions                    */
-/*                                                                           */
-/*                                                                           */
-/*                                                                           */
-/* (C) 2000  Kevin Ruland, <kevin@rodin.wustl.edu>                           */
-/* (C) 2003  Ullrich von Bassewitz, <uz@cc65.org>                            */
-/*                                                                           */
-/*                                                                           */
-/* This software is provided 'as-is', without any expressed or implied       */
+/*									     */
+/*				   apple2.h				     */
+/*									     */
+/*		     Apple ][ system specific definitions		     */
+/*									     */
+/*									     */
+/*									     */
+/* (C) 2000  Kevin Ruland, <kevin@rodin.wustl.edu>			     */
+/* (C) 2003  Ullrich von Bassewitz, <uz@cc65.org>			     */
+/*									     */
+/*									     */
+/* This software is provided 'as-is', without any expressed or implied	     */
 /* warranty.  In no event will the authors be held liable for any damages    */
-/* arising from the use of this software.                                    */
-/*                                                                           */
+/* arising from the use of this software.				     */
+/*									     */
 /* Permission is granted to anyone to use this software for any purpose,     */
 /* including commercial applications, and to alter it and redistribute it    */
-/* freely, subject to the following restrictions:                            */
-/*                                                                           */
+/* freely, subject to the following restrictions:			     */
+/*									     */
 /* 1. The origin of this software must not be misrepresented; you must not   */
 /*    claim that you wrote the original software. If you use this software   */
 /*    in a product, an acknowledgment in the product documentation would be  */
-/*    appreciated but is not required.                                       */
+/*    appreciated but is not required.					     */
 /* 2. Altered source versions must be plainly marked as such, and must not   */
-/*    be misrepresented as being the original software.                      */
-/* 3. This notice may not be removed or altered from any source              */
-/*    distribution.                                                          */
-/*                                                                           */
+/*    be misrepresented as being the original software. 		     */
+/* 3. This notice may not be removed or altered from any source 	     */
+/*    distribution.							     */
+/*									     */
 /*****************************************************************************/
 
 
@@ -43,8 +43,15 @@
 
 
 
+/* Load the system specific files here, if needed */
+#if defined(__APPLE2ENH__) && !defined(_APPLEENH_H)
+#  include <apple2enh.h>
+#endif
+
+
+
 /*****************************************************************************/
-/*	       	   	  	     Data				     */
+/*				     Data				     */
 /*****************************************************************************/
 
 
@@ -54,60 +61,45 @@
  * used to get the library to compile correctly.  They should not be used
  * in user code
  */
-#define COLOR_BLACK 	0x00
-#define COLOR_WHITE 	0x01
+#define COLOR_BLACK	0x00
+#define COLOR_WHITE	0x01
 
 /* Characters codes */
-#define CH_DEL 	    	0x7F
-#define CH_ESC 	    	0x1B
-#define CH_CURS_UP  	0x0B
-#define CH_CURS_DOWN 	0x0A
+#define CH_ESC		0x1B
+#define CH_CURS_LEFT	0x08
+#define CH_CURS_RIGHT	0x15
 
-/* These are defined to be OpenApple + NumberKey */
-#define CH_F1 	    	0xB1
-#define CH_F2 	    	0xB2
-#define CH_F3 	    	0xB3
-#define CH_F4 	    	0xB4
-#define CH_F5 	    	0xB5
-#define CH_F6 	    	0xB6
-#define CH_F7 	    	0xB7
-#define CH_F8 	    	0xB8
-#define CH_F9 	    	0xB9
-#define CH_F10 	    	0xB0
-
-#define CH_ULCORNER 	'+'
-#define CH_URCORNER 	'+'
-#define CH_LLCORNER 	'+'
-#define CH_LRCORNER 	'+'
-#define CH_TTEE     	'+'
-#define CH_BTEE     	'+'
-#define CH_LTEE     	'+'
-#define CH_RTEE     	'+'
-#define CH_CROSS    	'+'
+#define CH_ULCORNER	'+'
+#define CH_URCORNER	'+'
+#define CH_LLCORNER	'+'
+#define CH_LRCORNER	'+'
+#define CH_TTEE 	'+'
+#define CH_BTEE 	'+'
+#define CH_LTEE 	'+'
+#define CH_RTEE 	'+'
+#define CH_CROSS	'+'
 
 /* Return codes for get_ostype */
-#define AP_OS_IIPLAIN  0x01             /* Plain Apple II */
-#define AP_OS_IIPLUS   0x02             /* Apple II+ */
-#define AP_OS_IIIEM    0x03             /* Apple /// in emulation mode */
-#define AP_OS_IIE      0x04             /* Apple IIe */
-#define AP_OS_IIC      0x05             /* Apple IIc */
-#define AP_OS_IIECARD  0x06             /* Apple IIe Card for the Macintosh LC */
+#define APPLE_IIPLAIN  0x01		/* Plain Apple ][ */
+#define APPLE_IIPLUS   0x02		/* Apple ][+ */
+#define APPLE_IIIEM    0x03		/* Apple /// in emulation mode */
+#define APPLE_IIE      0x04		/* Apple //e */
+#define APPLE_IIEENH   0x05		/* Enhanced Apple //e */
+#define APPLE_IIECARD  0x06		/* Apple //e Option Card */
+#define APPLE_IIC      0x07		/* Apple //c */
 
 
 
 /*****************************************************************************/
-/*	       	   		     Code				     */
+/*				     Code				     */
 /*****************************************************************************/
 
 
 
 unsigned char get_ostype (void);
-/* Get the ROM version. Returns one of the C64_OS_xxx codes. */
+/* Get the machine type. Returns one of the APPLE_xxx codes. */
 
 
 
 /* End of apple2.h */
 #endif
-
-
-
diff --git a/include/apple2enh.h b/include/apple2enh.h
new file mode 100644
index 000000000..8efbbc757
--- /dev/null
+++ b/include/apple2enh.h
@@ -0,0 +1,94 @@
+/*****************************************************************************/
+/*									     */
+/*				  apple2enh.h				     */
+/*									     */
+/*		 enhanced Apple //e system specific definitions		     */
+/*									     */
+/*									     */
+/*									     */
+/* (C) 2004  Oliver Schmidt, <ol.sc@web.de>                                  */
+/*									     */
+/*									     */
+/* This software is provided 'as-is', without any expressed or implied	     */
+/* warranty.  In no event will the authors be held liable for any damages    */
+/* arising from the use of this software.				     */
+/*									     */
+/* Permission is granted to anyone to use this software for any purpose,     */
+/* including commercial applications, and to alter it and redistribute it    */
+/* freely, subject to the following restrictions:			     */
+/*									     */
+/* 1. The origin of this software must not be misrepresented; you must not   */
+/*    claim that you wrote the original software. If you use this software   */
+/*    in a product, an acknowledgment in the product documentation would be  */
+/*    appreciated but is not required.					     */
+/* 2. Altered source versions must be plainly marked as such, and must not   */
+/*    be misrepresented as being the original software. 		     */
+/* 3. This notice may not be removed or altered from any source 	     */
+/*    distribution.							     */
+/*									     */
+/*****************************************************************************/
+
+
+
+#ifndef _APPLE2ENH_H
+#define _APPLE2ENH_H
+
+
+
+/* Check for errors */
+#if !defined(__APPLE2ENH__)
+#  error This module may only be used when compiling for the enhanced Apple //e!
+#endif
+
+
+
+/*****************************************************************************/
+/*				     Data				     */
+/*****************************************************************************/
+
+
+
+/* Characters codes */
+#define CH_DEL		0x7F
+#define CH_CURS_UP	0x0B
+#define CH_CURS_DOWN	0x0A
+
+/* These are defined to be OpenApple + NumberKey */
+#define CH_F1		0xB1
+#define CH_F2		0xB2
+#define CH_F3		0xB3
+#define CH_F4		0xB4
+#define CH_F5		0xB5
+#define CH_F6		0xB6
+#define CH_F7		0xB7
+#define CH_F8		0xB8
+#define CH_F9		0xB9
+#define CH_F10		0xB0
+
+/* Styles for _textframe */
+#define _TEXTFRAME_WIDE	0x00
+#define _TEXTFRAME_TALL	0x04
+
+
+
+/*****************************************************************************/
+/*				     Code				     */
+/*****************************************************************************/
+
+
+
+void __fastcall__ _textframe (unsigned char width, unsigned char height,
+			      unsigned char style);
+/* Output a frame on the text screen with the given width and height
+ * starting at the current cursor position and using the given style
+ */
+
+void __fastcall__ _textframexy (unsigned char x, unsigned char y,
+				unsigned char width, unsigned char height,
+				unsigned char style);
+/* Same as "gotoxy (x, y); _textframe (width, height, style);" */
+
+
+
+/* End of apple2enh.h */
+#endif
diff --git a/libsrc/apple2/Makefile b/libsrc/apple2/Makefile
index 4c9761dd5..f39485b76 100644
--- a/libsrc/apple2/Makefile
+++ b/libsrc/apple2/Makefile
@@ -37,6 +37,7 @@ OBJS=	_scrsize.o	\
      	crt0.o		\
      	ctype.o		\
      	cvline.o	\
+	dosdetect.o	\
         get_ostype.o    \
         getenv.o        \
         joy_stddrv.o    \
diff --git a/libsrc/apple2/_scrsize.s b/libsrc/apple2/_scrsize.s
index 3f496454b..a0be374b9 100644
--- a/libsrc/apple2/_scrsize.s
+++ b/libsrc/apple2/_scrsize.s
@@ -10,8 +10,8 @@
 
 .proc   screensize
 
-        ldx     MAX_X
-        ldy     MAX_Y
+	ldx	WNDWDTH
+	ldy	WNDBTM
         rts
 
 .endproc
diff --git a/libsrc/apple2/apple2-280-192-6.s b/libsrc/apple2/apple2-280-192-6.s
index 36922f31b..498a1554b 100644
--- a/libsrc/apple2/apple2-280-192-6.s
+++ b/libsrc/apple2/apple2-280-192-6.s
@@ -104,89 +104,89 @@ TEXTDIR		= $F9
 
 DEFPALETTE:	.byte	$00, $05, $04, $01, $00, $08, $06, $01; 6 unique colors
 
-SHAPE:  .byte   $64,$01,$d0,$00,$d5,$00,$da,$00,$e0,$00,$ef,$00,$fe,$00,$0c,$01
-        .byte   $19,$01,$1d,$01,$25,$01,$2d,$01,$3d,$01,$46,$01,$4b,$01,$52,$01
-        .byte   $56,$01,$60,$01,$70,$01,$77,$01,$83,$01,$8e,$01,$9a,$01,$a7,$01
-        .byte   $b6,$01,$bf,$01,$ce,$01,$dd,$01,$e2,$01,$e7,$01,$f9,$01,$03,$02
-        .byte   $15,$02,$1f,$02,$32,$02,$42,$02,$52,$02,$5e,$02,$6c,$02,$79,$02
-        .byte   $85,$02,$91,$02,$a1,$02,$a9,$02,$b2,$02,$bf,$02,$c5,$02,$d5,$02
-        .byte   $e5,$02,$f4,$02,$00,$03,$10,$03,$1f,$03,$2d,$03,$35,$03,$44,$03
-        .byte   $53,$03,$63,$03,$71,$03,$7b,$03,$85,$03,$91,$03,$97,$03,$a3,$03
-        .byte   $b6,$03,$bf,$03,$c3,$03,$cf,$03,$dc,$03,$e4,$03,$f3,$03,$00,$04
-        .byte   $0a,$04,$19,$04,$25,$04,$2a,$04,$32,$04,$3c,$04,$43,$04,$50,$04
-        .byte   $5a,$04,$66,$04,$72,$04,$7e,$04,$87,$04,$94,$04,$9c,$04,$a8,$04
-        .byte   $b4,$04,$c1,$04,$cc,$04,$db,$04,$e6,$04,$ee,$04,$f3,$04,$fb,$04
-        .byte   $04,$05,$1a,$05,$1f,$05,$24,$05,$29,$05,$22,$01,$00,$00,$00,$00
-        .byte   $09,$89,$92,$92,$00,$36,$36,$16,$0e,$00,$0d,$fe,$6e,$96,$52,$00
-        .byte   $69,$fe,$17,$2d,$2d,$1e,$1f,$17,$2d,$2d,$1e,$1f,$6e,$4e,$00,$09
-        .byte   $8d,$3f,$bf,$0d,$15,$3f,$0e,$0d,$1e,$3f,$77,$71,$09,$00,$6d,$11
-        .byte   $df,$77,$09,$1e,$17,$4d,$3a,$df,$4e,$29,$0e,$00,$a9,$1f,$6e,$1e
-        .byte   $17,$0d,$0d,$1e,$df,$0e,$6d,$0e,$00,$36,$96,$52,$00,$09,$1e,$17
-        .byte   $36,$15,$0e,$0e,$00,$15,$0e,$36,$1e,$17,$4e,$01,$00,$09,$8d,$1f
-        .byte   $1f,$0e,$2d,$1e,$17,$2d,$15,$1f,$1f,$4e,$4e,$01,$00,$89,$6e,$3a
-        .byte   $3f,$77,$31,$56,$09,$00,$92,$8a,$f6,$0d,$00,$52,$89,$3f,$b7,$52
-        .byte   $49,$00,$92,$92,$0e,$00,$49,$11,$17,$1e,$17,$1e,$56,$49,$01,$00
-        .byte   $29,$ad,$df,$33,$4d,$35,$1f,$1f,$2e,$4d,$fe,$1b,$0e,$2d,$4e,$00
-        .byte   $31,$77,$36,$be,$2d,$0e,$00,$29,$ad,$df,$73,$49,$1e,$bf,$1e,$2e
-        .byte   $2d,$75,$00,$2d,$2d,$be,$3e,$4e,$fe,$1b,$0e,$2d,$4e,$00,$49,$3e
-        .byte   $17,$0d,$fe,$33,$2d,$2d,$1e,$76,$01,$00,$2d,$2d,$de,$1b,$2e,$2d
-        .byte   $15,$36,$df,$73,$2d,$4e,$00,$09,$2d,$de,$bb,$4d,$3a,$3f,$6e,$09
-        .byte   $fe,$1b,$0e,$2d,$4e,$00,$2d,$2d,$be,$1e,$17,$36,$4e,$09,$00,$29
-        .byte   $ad,$df,$33,$4d,$f1,$3f,$17,$4d,$31,$df,$73,$2d,$4e,$00,$29,$ad
-        .byte   $df,$33,$4d,$31,$3f,$77,$09,$1e,$df,$2a,$75,$09,$00,$12,$16,$96
-        .byte   $01,$00,$52,$b2,$f6,$0d,$00,$49,$3e,$17,$2d,$2d,$35,$3f,$3f,$3f
-        .byte   $0e,$2d,$2d,$f5,$1b,$77,$4e,$09,$00,$12,$2d,$2d,$de,$9b,$2d,$2d
-        .byte   $96,$01,$00,$49,$15,$ff,$13,$2d,$2d,$ad,$3f,$3f,$3f,$2e,$2d,$2d
-        .byte   $1e,$37,$4e,$09,$00,$29,$ad,$df,$73,$09,$1e,$b6,$4e,$01,$00,$09
-        .byte   $2d,$3e,$37,$2d,$3e,$ff,$2a,$2d,$2d,$f5,$3f,$3f,$0e,$2d,$1e,$4d
-        .byte   $01,$00,$09,$15,$1f,$17,$4d,$31,$df,$33,$2d,$2d,$fe,$1b,$6e,$09
-        .byte   $0e,$00,$2d,$ad,$df,$33,$4d,$f1,$3f,$37,$4d,$31,$df,$33,$2d,$75
-        .byte   $01,$00,$29,$ad,$df,$33,$36,$4d,$11,$df,$73,$2d,$4e,$00,$2d,$ad
-        .byte   $df,$6e,$31,$df,$6e,$31,$df,$17,$2d,$75,$01,$00,$2d,$2d,$de,$1b
-        .byte   $6e,$11,$3f,$37,$36,$2d,$2d,$0e,$00,$2d,$2d,$de,$1b,$6e,$11,$3f
-        .byte   $37,$36,$4e,$49,$00,$29,$ad,$df,$33,$36,$4d,$35,$df,$73,$2d,$75
-        .byte   $00,$4d,$31,$df,$33,$4d,$31,$3f,$3f,$6e,$09,$fe,$1b,$6e,$09,$0e
-        .byte   $00,$2d,$1e,$36,$36,$17,$2d,$0e,$00,$49,$31,$36,$36,$df,$73,$2d
-        .byte   $4e,$00,$4d,$f1,$df,$6e,$1e,$37,$0d,$15,$df,$6e,$09,$0e,$00,$36
-        .byte   $36,$36,$2d,$75,$00,$4d,$31,$ff,$37,$0d,$0d,$fe,$1f,$6e,$09,$fe
-        .byte   $1b,$6e,$09,$0e,$00,$4d,$31,$df,$33,$6d,$31,$1f,$1f,$6e,$29,$fe
-        .byte   $1b,$6e,$09,$0e,$00,$29,$ad,$df,$33,$4d,$31,$df,$33,$4d,$31,$df
-        .byte   $73,$2d,$4e,$00,$2d,$ad,$df,$33,$4d,$f1,$3f,$37,$36,$4e,$49,$00
-        .byte   $29,$ad,$df,$33,$4d,$31,$df,$33,$0d,$0d,$1e,$df,$0e,$6d,$0e,$00
-        .byte   $2d,$ad,$df,$33,$4d,$f1,$3f,$37,$0d,$15,$df,$6e,$09,$0e,$00,$29
-        .byte   $ad,$df,$33,$4d,$3a,$77,$09,$fe,$1b,$0e,$2d,$4e,$00,$2d,$2d,$de
-        .byte   $36,$36,$76,$09,$00,$4d,$31,$df,$33,$4d,$31,$df,$33,$4d,$31,$df
-        .byte   $73,$2d,$4e,$00,$4d,$31,$df,$33,$4d,$31,$df,$33,$4d,$f1,$1f,$0e
-        .byte   $4e,$01,$00,$4d,$31,$df,$33,$4d,$31,$1f,$1f,$6e,$0d,$3e,$1f,$37
-        .byte   $4d,$71,$00,$4d,$31,$df,$73,$0d,$1e,$17,$0d,$15,$df,$33,$4d,$71
-        .byte   $00,$4d,$31,$df,$73,$0d,$1e,$36,$76,$09,$00,$2d,$2d,$be,$1e,$17
-        .byte   $1e,$2e,$2d,$75,$00,$2d,$2d,$de,$3b,$2e,$3e,$2e,$3e,$2e,$2d,$75
-        .byte   $00,$72,$15,$0e,$15,$56,$00,$2d,$2d,$3e,$2e,$3e,$2e,$3e,$df,$2a
-        .byte   $2d,$75,$00,$49,$15,$3f,$17,$2d,$2d,$15,$3f,$3f,$3f,$4e,$2d,$3e
-        .byte   $37,$2d,$3e,$6f,$49,$00,$92,$92,$49,$11,$3f,$3f,$4d,$09,$00,$76
-        .byte   $96,$52,$00,$52,$2d,$35,$df,$33,$4d,$31,$ff,$73,$6d,$0e,$00,$36
-        .byte   $2d,$ad,$df,$33,$4d,$31,$df,$33,$2d,$75,$01,$00,$52,$2d,$de,$33
-        .byte   $76,$2d,$0e,$00,$49,$31,$df,$2a,$2d,$fe,$1b,$6e,$09,$fe,$1b,$0e
-        .byte   $2d,$75,$00,$52,$2d,$15,$df,$33,$2d,$2d,$de,$1b,$0e,$2d,$75,$00
-        .byte   $09,$f5,$33,$8d,$3f,$77,$36,$4e,$01,$00,$52,$2d,$35,$df,$33,$4d
-        .byte   $31,$3f,$77,$09,$1e,$3f,$4d,$01,$00,$36,$2d,$ad,$df,$33,$4d,$31
-        .byte   $df,$33,$4d,$71,$00,$16,$36,$36,$0e,$00,$09,$9e,$35,$36,$f6,$6f
-        .byte   $01,$00,$36,$4d,$1e,$1f,$2e,$15,$1f,$6e,$71,$00,$35,$36,$36,$17
-        .byte   $2d,$0e,$00,$12,$2d,$ad,$1f,$1f,$6e,$0d,$fe,$1f,$6e,$0d,$0e,$00
-        .byte   $12,$2d,$15,$df,$6e,$31,$df,$6e,$71,$00,$52,$2d,$15,$df,$33,$4d
-        .byte   $31,$df,$73,$2d,$4e,$00,$12,$2d,$ad,$df,$33,$4d,$f1,$3f,$37,$6e
-        .byte   $49,$00,$52,$2d,$35,$df,$33,$4d,$31,$3f,$77,$09,$2e,$00,$12,$0d
-        .byte   $ad,$df,$37,$36,$4e,$49,$00,$52,$2d,$f5,$db,$0e,$2d,$15,$df,$13
-        .byte   $2d,$75,$01,$00,$31,$17,$2d,$f5,$33,$76,$75,$00,$12,$4d,$31,$df
-        .byte   $33,$4d,$31,$ff,$73,$6d,$0e,$00,$12,$4d,$31,$df,$33,$4d,$f1,$1f
-        .byte   $0e,$4e,$01,$00,$12,$4d,$31,$df,$33,$0d,$0d,$fe,$1f,$0e,$0d,$4e
-        .byte   $00,$12,$4d,$f1,$1f,$0e,$15,$1f,$17,$4d,$71,$00,$12,$4d,$31,$df
-        .byte   $33,$4d,$31,$3f,$77,$09,$1e,$3f,$4d,$01,$00,$12,$2d,$2d,$1e,$17
-        .byte   $1e,$17,$2d,$2d,$0e,$00,$09,$f5,$33,$1e,$0e,$76,$75,$00,$36,$36
-        .byte   $36,$2e,$00,$ad,$ae,$17,$fe,$2a,$4e,$01,$00,$69,$11,$1f,$1f,$4e
-        .byte   $b1,$92,$09,$00,$2d,$2d,$35,$3f,$3f,$37,$2d,$2d,$35,$3f,$3f,$37
-        .byte   $2d,$2d,$35,$3f,$3f,$37,$2d,$2d,$75,$00,$40,$c0,$40,$18,$00,$40
-        .byte   $c0,$40,$43,$00,$40,$c0,$40,$08,$00,$19,$00,$00
+SHAPE:	.byte	$64,$01,$D0,$00,$D5,$00,$DA,$00,$E0,$00,$EF,$00,$FE,$00,$0C,$01
+	.byte	$19,$01,$1D,$01,$25,$01,$2D,$01,$3D,$01,$46,$01,$4B,$01,$52,$01
+	.byte	$56,$01,$60,$01,$70,$01,$77,$01,$83,$01,$8E,$01,$9A,$01,$A7,$01
+	.byte	$B6,$01,$BF,$01,$CE,$01,$DD,$01,$E2,$01,$E7,$01,$F9,$01,$03,$02
+	.byte	$15,$02,$1F,$02,$32,$02,$42,$02,$52,$02,$5E,$02,$6C,$02,$79,$02
+	.byte	$85,$02,$91,$02,$A1,$02,$A9,$02,$B2,$02,$BF,$02,$C5,$02,$D5,$02
+	.byte	$E5,$02,$F4,$02,$00,$03,$10,$03,$1F,$03,$2D,$03,$35,$03,$44,$03
+	.byte	$53,$03,$63,$03,$71,$03,$7B,$03,$85,$03,$91,$03,$97,$03,$A3,$03
+	.byte	$B6,$03,$BF,$03,$C3,$03,$CF,$03,$DC,$03,$E4,$03,$F3,$03,$00,$04
+	.byte	$0A,$04,$19,$04,$25,$04,$2A,$04,$32,$04,$3C,$04,$43,$04,$50,$04
+	.byte	$5A,$04,$66,$04,$72,$04,$7E,$04,$87,$04,$94,$04,$9C,$04,$A8,$04
+	.byte	$B4,$04,$C1,$04,$CC,$04,$DB,$04,$E6,$04,$EE,$04,$F3,$04,$FB,$04
+	.byte	$04,$05,$1A,$05,$1F,$05,$24,$05,$29,$05,$22,$01,$00,$00,$00,$00
+	.byte	$09,$89,$92,$92,$00,$36,$36,$16,$0E,$00,$0D,$FE,$6E,$96,$52,$00
+	.byte	$69,$FE,$17,$2D,$2D,$1E,$1F,$17,$2D,$2D,$1E,$1F,$6E,$4E,$00,$09
+	.byte	$8D,$3F,$BF,$0D,$15,$3F,$0E,$0D,$1E,$3F,$77,$71,$09,$00,$6D,$11
+	.byte	$DF,$77,$09,$1E,$17,$4D,$3A,$DF,$4E,$29,$0E,$00,$A9,$1F,$6E,$1E
+	.byte	$17,$0D,$0D,$1E,$DF,$0E,$6D,$0E,$00,$36,$96,$52,$00,$09,$1E,$17
+	.byte	$36,$15,$0E,$0E,$00,$15,$0E,$36,$1E,$17,$4E,$01,$00,$09,$8D,$1F
+	.byte	$1F,$0E,$2D,$1E,$17,$2D,$15,$1F,$1F,$4E,$4E,$01,$00,$89,$6E,$3A
+	.byte	$3F,$77,$31,$56,$09,$00,$92,$8A,$F6,$0D,$00,$52,$89,$3F,$B7,$52
+	.byte	$49,$00,$92,$92,$0E,$00,$49,$11,$17,$1E,$17,$1E,$56,$49,$01,$00
+	.byte	$29,$AD,$DF,$33,$4D,$35,$1F,$1F,$2E,$4D,$FE,$1B,$0E,$2D,$4E,$00
+	.byte	$31,$77,$36,$BE,$2D,$0E,$00,$29,$AD,$DF,$73,$49,$1E,$BF,$1E,$2E
+	.byte	$2D,$75,$00,$2D,$2D,$BE,$3E,$4E,$FE,$1B,$0E,$2D,$4E,$00,$49,$3E
+	.byte	$17,$0D,$FE,$33,$2D,$2D,$1E,$76,$01,$00,$2D,$2D,$DE,$1B,$2E,$2D
+	.byte	$15,$36,$DF,$73,$2D,$4E,$00,$09,$2D,$DE,$BB,$4D,$3A,$3F,$6E,$09
+	.byte	$FE,$1B,$0E,$2D,$4E,$00,$2D,$2D,$BE,$1E,$17,$36,$4E,$09,$00,$29
+	.byte	$AD,$DF,$33,$4D,$F1,$3F,$17,$4D,$31,$DF,$73,$2D,$4E,$00,$29,$AD
+	.byte	$DF,$33,$4D,$31,$3F,$77,$09,$1E,$DF,$2A,$75,$09,$00,$12,$16,$96
+	.byte	$01,$00,$52,$B2,$F6,$0D,$00,$49,$3E,$17,$2D,$2D,$35,$3F,$3F,$3F
+	.byte	$0E,$2D,$2D,$F5,$1B,$77,$4E,$09,$00,$12,$2D,$2D,$DE,$9B,$2D,$2D
+	.byte	$96,$01,$00,$49,$15,$FF,$13,$2D,$2D,$AD,$3F,$3F,$3F,$2E,$2D,$2D
+	.byte	$1E,$37,$4E,$09,$00,$29,$AD,$DF,$73,$09,$1E,$B6,$4E,$01,$00,$09
+	.byte	$2D,$3E,$37,$2D,$3E,$FF,$2A,$2D,$2D,$F5,$3F,$3F,$0E,$2D,$1E,$4D
+	.byte	$01,$00,$09,$15,$1F,$17,$4D,$31,$DF,$33,$2D,$2D,$FE,$1B,$6E,$09
+	.byte	$0E,$00,$2D,$AD,$DF,$33,$4D,$F1,$3F,$37,$4D,$31,$DF,$33,$2D,$75
+	.byte	$01,$00,$29,$AD,$DF,$33,$36,$4D,$11,$DF,$73,$2D,$4E,$00,$2D,$AD
+	.byte	$DF,$6E,$31,$DF,$6E,$31,$DF,$17,$2D,$75,$01,$00,$2D,$2D,$DE,$1B
+	.byte	$6E,$11,$3F,$37,$36,$2D,$2D,$0E,$00,$2D,$2D,$DE,$1B,$6E,$11,$3F
+	.byte	$37,$36,$4E,$49,$00,$29,$AD,$DF,$33,$36,$4D,$35,$DF,$73,$2D,$75
+	.byte	$00,$4D,$31,$DF,$33,$4D,$31,$3F,$3F,$6E,$09,$FE,$1B,$6E,$09,$0E
+	.byte	$00,$2D,$1E,$36,$36,$17,$2D,$0E,$00,$49,$31,$36,$36,$DF,$73,$2D
+	.byte	$4E,$00,$4D,$F1,$DF,$6E,$1E,$37,$0D,$15,$DF,$6E,$09,$0E,$00,$36
+	.byte	$36,$36,$2D,$75,$00,$4D,$31,$FF,$37,$0D,$0D,$FE,$1F,$6E,$09,$FE
+	.byte	$1B,$6E,$09,$0E,$00,$4D,$31,$DF,$33,$6D,$31,$1F,$1F,$6E,$29,$FE
+	.byte	$1B,$6E,$09,$0E,$00,$29,$AD,$DF,$33,$4D,$31,$DF,$33,$4D,$31,$DF
+	.byte	$73,$2D,$4E,$00,$2D,$AD,$DF,$33,$4D,$F1,$3F,$37,$36,$4E,$49,$00
+	.byte	$29,$AD,$DF,$33,$4D,$31,$DF,$33,$0D,$0D,$1E,$DF,$0E,$6D,$0E,$00
+	.byte	$2D,$AD,$DF,$33,$4D,$F1,$3F,$37,$0D,$15,$DF,$6E,$09,$0E,$00,$29
+	.byte	$AD,$DF,$33,$4D,$3A,$77,$09,$FE,$1B,$0E,$2D,$4E,$00,$2D,$2D,$DE
+	.byte	$36,$36,$76,$09,$00,$4D,$31,$DF,$33,$4D,$31,$DF,$33,$4D,$31,$DF
+	.byte	$73,$2D,$4E,$00,$4D,$31,$DF,$33,$4D,$31,$DF,$33,$4D,$F1,$1F,$0E
+	.byte	$4E,$01,$00,$4D,$31,$DF,$33,$4D,$31,$1F,$1F,$6E,$0D,$3E,$1F,$37
+	.byte	$4D,$71,$00,$4D,$31,$DF,$73,$0D,$1E,$17,$0D,$15,$DF,$33,$4D,$71
+	.byte	$00,$4D,$31,$DF,$73,$0D,$1E,$36,$76,$09,$00,$2D,$2D,$BE,$1E,$17
+	.byte	$1E,$2E,$2D,$75,$00,$2D,$2D,$DE,$3B,$2E,$3E,$2E,$3E,$2E,$2D,$75
+	.byte	$00,$72,$15,$0E,$15,$56,$00,$2D,$2D,$3E,$2E,$3E,$2E,$3E,$DF,$2A
+	.byte	$2D,$75,$00,$49,$15,$3F,$17,$2D,$2D,$15,$3F,$3F,$3F,$4E,$2D,$3E
+	.byte	$37,$2D,$3E,$6F,$49,$00,$92,$92,$49,$11,$3F,$3F,$4D,$09,$00,$76
+	.byte	$96,$52,$00,$52,$2D,$35,$DF,$33,$4D,$31,$FF,$73,$6D,$0E,$00,$36
+	.byte	$2D,$AD,$DF,$33,$4D,$31,$DF,$33,$2D,$75,$01,$00,$52,$2D,$DE,$33
+	.byte	$76,$2D,$0E,$00,$49,$31,$DF,$2A,$2D,$FE,$1B,$6E,$09,$FE,$1B,$0E
+	.byte	$2D,$75,$00,$52,$2D,$15,$DF,$33,$2D,$2D,$DE,$1B,$0E,$2D,$75,$00
+	.byte	$09,$F5,$33,$8D,$3F,$77,$36,$4E,$01,$00,$52,$2D,$35,$DF,$33,$4D
+	.byte	$31,$3F,$77,$09,$1E,$3F,$4D,$01,$00,$36,$2D,$AD,$DF,$33,$4D,$31
+	.byte	$DF,$33,$4D,$71,$00,$16,$36,$36,$0E,$00,$09,$9E,$35,$36,$F6,$6F
+	.byte	$01,$00,$36,$4D,$1E,$1F,$2E,$15,$1F,$6E,$71,$00,$35,$36,$36,$17
+	.byte	$2D,$0E,$00,$12,$2D,$AD,$1F,$1F,$6E,$0D,$FE,$1F,$6E,$0D,$0E,$00
+	.byte	$12,$2D,$15,$DF,$6E,$31,$DF,$6E,$71,$00,$52,$2D,$15,$DF,$33,$4D
+	.byte	$31,$DF,$73,$2D,$4E,$00,$12,$2D,$AD,$DF,$33,$4D,$F1,$3F,$37,$6E
+	.byte	$49,$00,$52,$2D,$35,$DF,$33,$4D,$31,$3F,$77,$09,$2E,$00,$12,$0D
+	.byte	$AD,$DF,$37,$36,$4E,$49,$00,$52,$2D,$F5,$DB,$0E,$2D,$15,$DF,$13
+	.byte	$2D,$75,$01,$00,$31,$17,$2D,$F5,$33,$76,$75,$00,$12,$4D,$31,$DF
+	.byte	$33,$4D,$31,$FF,$73,$6D,$0E,$00,$12,$4D,$31,$DF,$33,$4D,$F1,$1F
+	.byte	$0E,$4E,$01,$00,$12,$4D,$31,$DF,$33,$0D,$0D,$FE,$1F,$0E,$0D,$4E
+	.byte	$00,$12,$4D,$F1,$1F,$0E,$15,$1F,$17,$4D,$71,$00,$12,$4D,$31,$DF
+	.byte	$33,$4D,$31,$3F,$77,$09,$1E,$3F,$4D,$01,$00,$12,$2D,$2D,$1E,$17
+	.byte	$1E,$17,$2D,$2D,$0E,$00,$09,$F5,$33,$1E,$0E,$76,$75,$00,$36,$36
+	.byte	$36,$2E,$00,$AD,$AE,$17,$FE,$2A,$4E,$01,$00,$69,$11,$1F,$1F,$4E
+	.byte	$B1,$92,$09,$00,$2D,$2D,$35,$3F,$3F,$37,$2D,$2D,$35,$3F,$3F,$37
+	.byte	$2D,$2D,$35,$3F,$3F,$37,$2D,$2D,$75,$00,$40,$C0,$40,$18,$00,$40
+	.byte	$C0,$40,$43,$00,$40,$C0,$40,$08,$00,$19,$00,$00
 
 .code
 
@@ -231,7 +231,7 @@ INIT:
 ; Switch into graphics mode
 
 	jsr	HGR
-	bit	MIXOFF
+	bit	MIXCLR
 
 ; Done, reset the error code
 
@@ -287,9 +287,9 @@ CLEAR		= HCLR
 SETVIEWPAGE:
 	tax
 	beq	@L1
-	bit	PG2ON
+	bit	HISCR
 	rts
-@L1:	bit	PG2OFF
+@L1:	bit	LOWSCR
 	rts
 
 ; ------------------------------------------------------------------------
@@ -408,7 +408,7 @@ GETPIXEL:
 	jsr	HPOSN		; 1st pixel
 HBASL	=	$26
 HMASK	=	$30
-	ldx	#0
+	ldx	#$00
 	lda	(HBASL),y
 	and	HMASK
 	beq	@L1
@@ -427,14 +427,14 @@ HMASK	=	$30
 	ldy	$E1
 	lda	$E2
 	jsr	HPOSN		; 2nd pixel
-	ldx	#0
+	ldx	#$00
 	lda	(HBASL),y
 	and	HMASK
 	beq	@L2
 	inx
 @L2:	txa
 	ora	tmp1
-	ldx	#0
+	ldx	#$00
 	rts
 
 ; ------------------------------------------------------------------------
@@ -498,7 +498,7 @@ CIRCLE:
 
 @L1:	sta	XX
 	; x = r;
-	lda	#0
+	lda	#$00
 	sta	XX+1
 	sta	YY
 	sta	YY+1
@@ -619,7 +619,7 @@ CIRCLE:
 	adc	YY+1
 	tax
 	tya
-	add	#1
+	add	#$01
 	bcc	@L0143
 	inx
 @L0143: sta	OGora
@@ -637,7 +637,7 @@ CIRCLE:
 	sbc	XX+1
 	tax
 	tya
-	add	#1
+	add	#$01
 	bcc	@L0146
 	inx
 @L0146: sta	OUkos
@@ -660,7 +660,7 @@ CIRCLE:
 	bpl	@L0149
 	; { --x;
 	lda	XX
-	sub	#1
+	sub	#$01
 	sta	XX
 	bcs	@L014E
 	dec	XX+1
@@ -686,7 +686,7 @@ CIRCLE:
 TEXTSTYLE:
 	stx	TEXTMAGX
 	sty	TEXTMAGY
-	asl				; 16 <=> 90�
+	asl				; 16 <=> 90�
 	asl
 	asl
 	asl
@@ -714,10 +714,10 @@ OUTTEXT:
 	adc	#>SHAPE
 	sta	tmp3+1
 
-	ldy	#0
+	ldy	#$00
 @L1:	lda	(ptr3),y
 	beq	@end
-	sub	#31			; no controls
+	sub	#$1F			; no controls
 	asl				; offset*2
 	tax
 	lda	SHAPE,x
@@ -747,16 +747,16 @@ OUTTEXT:
 
 abs:
 	; a/y := abs(a/y)
-	cpy	#0
+	cpy	#$00
 	bpl	@L1
 	; negay
 	clc
-	eor	#$ff
-	adc	#1
+	eor	#$FF
+	adc	#$01
 	pha
 	tya
-	eor	#$ff
-	adc	#0
+	eor	#$FF
+	adc	#$00
 	tay
 	pla
 @L1:	rts
@@ -765,9 +765,9 @@ icmp:
 	; compare a/y to zp,x
 	sta	TEMP		; TEMP/TEMP2 - arg2
 	sty	TEMP2
-	lda	$0,x
+	lda	$00,x
 	pha
-	lda	$1,x
+	lda	$01,x
 	tay
 	pla
 	tax
@@ -777,10 +777,10 @@ icmp:
 	bne	@L4
 	cpx	TEMP
 	beq	@L3
-	adc	#$ff
+	adc	#$FF
 	ora	#$01
 @L3:	rts
 @L4:	bvc	@L3
-	eor	#$ff
+	eor	#$FF
 	ora	#$01
 	rts
diff --git a/libsrc/apple2/apple2-40-40-16.s b/libsrc/apple2/apple2-40-40-16.s
index e222cb8c0..e66b65638 100644
--- a/libsrc/apple2/apple2-40-40-16.s
+++ b/libsrc/apple2/apple2-40-40-16.s
@@ -118,8 +118,8 @@ AY:		.res	1
 
 .rodata
 
-DEFPALETTE:	.byte	$0, $f, $1, $e, $3, $4, $2, $d
-		.byte	$9, $8, $b, $5, $a, $c, $6, $7
+DEFPALETTE:	.byte	$00, $0F, $01, $0E, $03, $04, $02, $0D
+		.byte	$09, $08, $0B, $05, $0A, $0C, $06, $07
 
 .code
 
@@ -322,7 +322,7 @@ GETPIXEL:
 	lda	X1
 	ldy	Y1
 	jsr	SCRN
-	ldx	#0
+	ldx	#$00
 	rts
 
 ; ------------------------------------------------------------------------
@@ -363,11 +363,11 @@ LINE:
 	bcc	@L0243
 	beq	@L0243
 	; dx = 1;
-	lda	#1
+	lda	#$01
 	bne	@L0244
 	; else
 	; dx = -1;
-@L0243:	lda	#$ff
+@L0243:	lda	#$FF
 @L0244:	sta	DX
 	; if (y2>y1)
 	ldx	#Y2
@@ -377,14 +377,14 @@ LINE:
 	bcc	@L024A
 	beq	@L024A
 	; dy = 1;
-	lda	#1
+	lda	#$01
 	bne	@L024B
 	; else
 	; dy = -1;
-@L024A:	lda	#$ff
+@L024A:	lda	#$FF
 @L024B:	sta	DY
 	; err = ay = 0;
-	lda	#0
+	lda	#$00
 	sta	ERR
 	sta	ERR+1
 	sta	AY
@@ -408,7 +408,7 @@ LINE:
 	lda	DX
 	sta	AY
 	; dx = dy = 0;
-	lda	#0
+	lda	#$00
 	sta	DX
 	sta	DY
 	; ny = - ny;
@@ -444,7 +444,7 @@ LINE:
 	adc	NX+1
 	sta	UB+1
 	;    x1 = x1 + dx
-	ldx	#0
+	ldx	#$00
 	lda	DX
 	bpl	@L027B
 	dex
@@ -454,7 +454,7 @@ LINE:
 	adc	X1+1
 	sta	X1+1
 	;   y1 = y1 + ay
-	ldx	#0
+	ldx	#$00
 	lda	AY
 	bpl	@L027E
 	dex
@@ -481,7 +481,7 @@ LINE:
 	jmp	@L0312
 	; } else { x1 = x1 + ay
 @L027F:
-	ldx	#0
+	ldx	#$00
 	lda	AY
 	bpl	@L0288
 	dex
@@ -491,7 +491,7 @@ LINE:
 	adc	X1+1
 	sta	X1+1
 	;	y1 = y1 + dy
-	ldx	#0
+	ldx	#$00
 	lda	DY
 	bpl	@L028B
 	dex
@@ -509,7 +509,7 @@ LINE:
 	; } (--count)
 	sec
 	lda	COUNT
-	sbc	#1
+	sbc	#$01
 	sta	COUNT
 	bcc	@L0260
 	jmp	@L0166
@@ -559,7 +559,7 @@ CIRCLE:
 
 @L1:	sta	XX
 	; x = r;
-	lda	#0
+	lda	#$00
 	sta	XX+1
 	sta	YY
 	sta	YY+1
@@ -680,7 +680,7 @@ CIRCLE:
 	adc	YY+1
 	tax
 	tya
-	add	#1
+	add	#$01
 	bcc	@L0143
 	inx
 @L0143: sta	OGora
@@ -698,7 +698,7 @@ CIRCLE:
 	sbc	XX+1
 	tax
 	tya
-	add	#1
+	add	#$01
 	bcc	@L0146
 	inx
 @L0146: sta	OUkos
@@ -721,7 +721,7 @@ CIRCLE:
 	bpl	@L0149
 	; { --x;
 	lda	XX
-	sub	#1
+	sub	#$01
 	sta	XX
 	bcs	@L014E
 	dec	XX+1
@@ -761,7 +761,7 @@ OUTTEXT:
 	sta	CH
 	lda	ptr2
 	jsr	VTABZ
-	ldy	#0
+	ldy	#$00
 @L1:	lda	(ptr3),y
 	ora	#$80
 	jsr	COUT
@@ -775,16 +775,16 @@ OUTTEXT:
 
 abs:
 	; a/y := abs(a/y)
-	cpy	#0
+	cpy	#$00
 	bpl	absend
 	; negay
 neg:	clc
-	eor	#$ff
-	adc	#1
+	eor	#$FF
+	adc	#$01
 	pha
 	tya
-	eor	#$ff
-	adc	#0
+	eor	#$FF
+	adc	#$00
 	tay
 	pla
 absend:	rts
@@ -793,9 +793,9 @@ icmp:
 	; compare a/y to zp,x
 	sta	TEMP		; TEMP/TEMP2 - arg2
 	sty	TEMP2
-	lda	$0,x
+	lda	$00,x
 	pha
-	lda	$1,x
+	lda	$01,x
 	tay
 	pla
 	tax
@@ -805,10 +805,10 @@ icmp:
 	bne	@L4
 	cpx	TEMP
 	beq	@L3
-	adc	#$ff
+	adc	#$FF
 	ora	#$01
 @L3:	rts
 @L4:	bvc	@L3
-	eor	#$ff
+	eor	#$FF
 	ora	#$01
 	rts
diff --git a/libsrc/apple2/apple2-lc.s b/libsrc/apple2/apple2-lc.s
index e65ee0a97..17a6211cf 100644
--- a/libsrc/apple2/apple2-lc.s
+++ b/libsrc/apple2/apple2-lc.s
@@ -21,7 +21,7 @@
 
 ; Driver signature
 
-	.byte	$65, $6d, $64		; "emd"
+	.byte	$65, $6D, $64		; "emd"
        	.byte  	EMD_API_VERSION         ; EM API version number
 
 ; Jump table.
@@ -67,7 +67,7 @@ INSTALL:
         lda     #$FF
         sta     curpage                 ; Invalidate the current page
 	lda	#EM_ERR_OK
-	ldx	#0
+	ldx	#$00
 ;  	rts                             ; Run into UNINSTALL instead
 
 ; ------------------------------------------------------------------------
@@ -143,7 +143,7 @@ COMMIT: lda	curpage			; Get the current page
 ; Transfer one page. Y must be zero on entry
 
 transfer:
-	ldx	#0
+	ldx	#$00
 	lda	ptr2+1
 	cmp	#>BASE
 	bcc	@L1
diff --git a/libsrc/apple2/apple2-stdjoy.s b/libsrc/apple2/apple2-stdjoy.s
index a6e7fc9dc..1ab031a9a 100644
--- a/libsrc/apple2/apple2-stdjoy.s
+++ b/libsrc/apple2/apple2-stdjoy.s
@@ -101,7 +101,7 @@ READJOY:
 
 ; Read joystick
 
-        lda     OPEN_APPLE,x    ; Check fire button
+        lda     BUTN0,x		; Check fire button
         and     #$80            ; BTN 0 0 0 0 0 0 0
 
         pha
@@ -122,7 +122,7 @@ READJOY:
         ror     a               ; DOWN /UP RIGHT /LEFT BTN 0 0 0
         eor     #%01010000      ; DOWN UP RIGHT LEFT BTN 0 0 0
 
-        ldx     #0              ; fix X
+        ldx     #$00		; fix X
         rts
 
 
diff --git a/libsrc/apple2/apple2.inc b/libsrc/apple2/apple2.inc
index 12dae2d11..984ed98e8 100644
--- a/libsrc/apple2/apple2.inc
+++ b/libsrc/apple2/apple2.inc
@@ -2,93 +2,89 @@
 ;-----------------------------------------------------------------------------
 ; Zero page stuff
 
-MIN_X	=	$20
-MAX_X	=	$21
-MIN_Y	=	$22
-MAX_Y	=	$23
-CH	=	$24
-CV	=	$25
-BASL	=	$28
-TEXTTYP	=	$32
-RNDL    =       $4E             ; Random value, low byte
-RNDH    =       $4F             ; Random value, high byte
-MEMSIZE	=	$73		; Highest free RAM location
+WNDLFT	:=	$20	; Left edge of text window
+WNDWDTH	:=	$21	; Right edge of text window
+WNDTOP	:=	$22	; Top of text window
+WNDBTM	:=	$23	; Bottom+1 of text window
+CH	:=	$24	; Cursor horizontal position
+CV	:=	$25	; Cursor vertical position
+BASL	:=	$28	; Text base address
+INVFLG	:=	$32	; Normal/inverse(/flash)
+RNDL	:=	$4E	; Random counter low
+RNDH	:=	$4F	; Random counter high
+HIMEM	:=	$73	; Highest available memory address+1
 
 ;-----------------------------------------------------------------------------
 ; Vectors
 
-BRKVec  =       $03F0           ; Break vector
-RESTOR	=	$03D0           ; Goto Dos
+DOSWARM	:=	$03D0	; DOS warmstart vector
+BRKVec	:=	$03F0	; Break vector
+MLI	:=	$BF00	; ProDOS Machine Language Interface
 
 ;-----------------------------------------------------------------------------
 ; Hardware
 
-; Soft switches
-;
-; Write to USEROM to enable apple rom C000-CFFF
-USEROM 	:=      $C007
+; Keyboard entries
+KBD	:=	$C000	; Read keyboard
+KBDSTRB	:=	$C010	; Clear keyboard strobe
 
 ; 80 column card switches
-C80ON	:= 	$C00C
-C80OFF	:= 	$C00D
-RD80COL	:= 	$C01F
-MIXOFF  :=      $C052
-PG2OFF	:= 	$C054
-PG2ON	:= 	$C055
-RDPAGE2	:= 	$C01C
+CLRALTCHAR :=	$C00E	; Normal Apple II char set
+SETALTCHAR :=	$C00F	; Norm/inv LC, no flash
+ALTCHARSET :=	$C01E	; >127 if alt charset switched in
+RD80VID :=	$C01F	; >127 if 80 column video enabled
 
-; Keyboard entries
-CLEAR_KEY_STROBE:= $C010
-KEY_STROBE      := $C000
+; Video soft switches
+MIXCLR	:=	$C052	; Disable 4 lines of text
+MIXSET	:=	$C053	; Enable 4 lines of text
+LOWSCR	:=	$C054	; Page 1
+HISCR	:=	$C055	; Page 2
 
 ; Game controller
-OPEN_APPLE      := $C061
-CLOSED_APPLE    := $C062
+BUTN0	:=	$C061	; Open-Apple Key
+BUTN1	:=	$C062	; Closed-Apple Key
 
 ;-----------------------------------------------------------------------------
 ; ROM routines
 
-RDKEY  	:=      $FD0C
+PREAD	:=	$FB1E	; Read paddle in X, return AD conv. value in Y
+RDKEY	:=	$FD0C	; Display prompt and read key from user input routine
 
 ; Text output and helpers
-HOME   	:=     	$FC58
-VTABZ  	:=	$FC24
-COUT    :=     	$FDED
+VTABZ	:=	$FC24	; Calculate screen address for row in accumulator
+HOME	:=	$FC58	; Clear current text screen
+COUT	:=	$FDED	; Vector to user output routine
 
 ; Graphics entry points, by cbmnut (applenut??) cbmnut@hushmail.com
-WHITE   = $01           ; White for $1c, I think...
-COLOR   = $1C           ; Current plot color
-
-TEXT    := $F399        ; Return to text screen
-HGR2    := $F3D8        ; Initialize and clear hi-res page 2.
-HGR     := $F3E2        ; Initialize and clear hi-res page 1.
-HCLR    := $F3F2        ; Clear the current hi-res screen to black.
-BKGND   := $F3F6        ; Clear the current hi-res screen to the
+TEXT    :=	$F399	; Return to text screen
+HGR2    :=	$F3D8	; Initialize and clear hi-res page 2.
+HGR     :=	$F3E2	; Initialize and clear hi-res page 1.
+HCLR    :=	$F3F2	; Clear the current hi-res screen to black.
+BKGND   :=	$F3F6	; Clear the current hi-res screen to the
                         ; last plotted color (from ($1C).
-HPOSN   := $F411        ; Positions the hi-res cursor without
+HPOSN   :=	$F411	; Positions the hi-res cursor without
                         ; plotting a point.
                         ; Enter with (A) = Y-coordinate, and
                         ; (Y,X) = X-coordinate.
-HPLOT   := $F457        ; Calls HPOSN and tries to plot a dot at
+HPLOT   :=	$F457	; Calls HPOSN and tries to plot a dot at
                         ; the cursor's position.  If you are
                         ; trying to plot a non-white color at
                         ; a complementary color position, no
                         ; dot will be plotted.
-HLIN    := $F53A        ; Draws a line from the last plotted
+HLIN    :=	$F53A	; Draws a line from the last plotted
                         ; point or line destination to:
                         ; (X,A) = X-coordinate, and
                         ; (Y) = Y-coordinate.
-HFIND   := $F5CB        ; Converts the hi-res coursor's position
+HFIND   :=	$F5CB	; Converts the hi-res coursor's position
                         ; back to X- and Y-coordinates; stores
                         ; X-coordinate at $E0,E1 and Y-coordinate
                         ; at $E2.
-DRAW    := $F601        ; Draws a shape.  Enter with (Y,X) = the
+DRAW    :=	$F601	; Draws a shape.  Enter with (Y,X) = the
                         ; address of the shape table, and (A) =
                         ; the rotation factor.  Uses the current
                         ; color.
-XDRAW   := $F65D        ; Draws a shape by inverting the existing
+XDRAW   :=	$F65D	; Draws a shape by inverting the existing
                         ; color of the dots the shape draws over.
                         ; Same entry parameters as DRAW.
-SETHCOL := $F6EC        ; Set the hi-res color to (X), where (X)
+SETHCOL :=	$F6EC	; Set the hi-res color to (X), where (X)
                         ; must be between 0 and 7.
-PREAD   := $FB1E        ; Read paddle in X, return AD conv. value in Y
diff --git a/libsrc/apple2/cclear.s b/libsrc/apple2/cclear.s
index 586459cb0..de6f01ef4 100644
--- a/libsrc/apple2/cclear.s
+++ b/libsrc/apple2/cclear.s
@@ -6,8 +6,7 @@
 ;
 
     	.export		_cclearxy, _cclear
-	.import		popa, _gotoxy, cputdirect
-	.importzp	tmp1
+	.import 	popa, _gotoxy, chlinedirect
 
 _cclearxy:
        	pha	    		; Save the length
@@ -16,15 +15,5 @@ _cclearxy:
        	pla			; Restore the length and run into _cclear
 
 _cclear:
-       	cmp	#0		; Is the length zero?
-       	beq	L9  		; Jump if done
-    	sta	tmp1				     
-L1:    	lda    	#$20		; Blank - screen code
-   	jsr	cputdirect	; Direct output
-   	dec	tmp1
-	bne	L1
-L9:	rts
-
-
-
-
+	ldx	#' ' | $80	; Blank, screen code
+	jmp	chlinedirect
diff --git a/libsrc/apple2/cgetc.s b/libsrc/apple2/cgetc.s
index 7d540ee0f..c1be4dc44 100644
--- a/libsrc/apple2/cgetc.s
+++ b/libsrc/apple2/cgetc.s
@@ -11,15 +11,15 @@
 	.include "apple2.inc"
 
 _cgetc:
-	lda	KEY_STROBE
+	lda	KBD
 	bpl	_cgetc		; if < 128, no key pressed
 	;; At this time, the high bit of the key pressed
 	;; is set
-	sta	CLEAR_KEY_STROBE; clear keyboard strobe
-	bit	OPEN_APPLE	; check if OpenApple is down
+	bit	KBDSTRB 	; clear keyboard strobe
+	bit	BUTN0		; check if OpenApple is down
 	bmi	pressed	
 	and	#$7F		; If not down, then clear high bit
 pressed:	
-	ldx	#0
+	ldx	#$00
 	rts
 	
\ No newline at end of file
diff --git a/libsrc/apple2/chline.s b/libsrc/apple2/chline.s
index 1347c3a11..83b03a504 100644
--- a/libsrc/apple2/chline.s
+++ b/libsrc/apple2/chline.s
@@ -5,26 +5,25 @@
 ; void chline (unsigned char length);
 ;
 
-    	.export		_chlinexy, _chline
-	.import		popa, _gotoxy, cputdirect
+	.export 	_chlinexy, _chline, chlinedirect
+	.import 	popa, _gotoxy, cputdirect
 	.importzp	tmp1
 
 _chlinexy:
        	pha	    		; Save the length
 	jsr	popa		; Get y
        	jsr    	_gotoxy		; Call this one, will pop params
-	pla			; Restore the length
+	pla			; Restore the length and run into _chline
 
 _chline:
-   	cmp	#0		; Is the length zero?
+	ldx	#'-' | $80	; Horizontal line, screen code
+
+chlinedirect:
+	cmp	#$00		; Is the length zero?
    	beq	L9  		; Jump if done
 	sta	tmp1
-L1:    	lda    	#$2D 		; Horizontal line, screen code
+L1:	txa			; Screen code
    	jsr	cputdirect	; Direct output
    	dec	tmp1
 	bne	L1
 L9:	rts
-
-
-
-
diff --git a/libsrc/apple2/color.s b/libsrc/apple2/color.s
index e83014de7..7057ef141 100644
--- a/libsrc/apple2/color.s
+++ b/libsrc/apple2/color.s
@@ -7,9 +7,7 @@
 ;
 
  	.export		_textcolor, _bgcolor, _bordercolor
-	.import	       	return0, return1, _revers
-
-	.include	"apple2.inc"
+	.import	       	return0, return1
 
 _textcolor	= return1
 
diff --git a/libsrc/apple2/cputc.s b/libsrc/apple2/cputc.s
index f8ea39dff..963f6d4d3 100644
--- a/libsrc/apple2/cputc.s
+++ b/libsrc/apple2/cputc.s
@@ -5,6 +5,7 @@
 ; void cputc (char c);
 ;
 
+	.constructor	initconio
    	.export		_cputcxy, _cputc
 	.export		_gotoxy, cputdirect
 	.export		newline, putchar
@@ -13,6 +14,11 @@
 
 	.include	"apple2.inc"
 
+initconio:
+	lda	#$FF		; Normal character display mode
+	sta	INVFLG
+	rts
+
 ; Plot a character - also used as internal function
 
 _cputcxy:
@@ -30,13 +36,16 @@ _cputc:
 L1:
 	cmp	#$0A		; Test for \n = line feed
 	beq	newline
+	ora	#$80		; Turn on high bit
+	cmp	#$E0		; Test for lowercase
+	bmi	cputdirect
+	and	#$DF		; Convert to uppercase
 
 cputdirect:
 	jsr	putchar
-	;; Bump to next column
-	inc	CH
+	inc	CH		; Bump to next column
 	lda	CH
-	cmp	MAX_X
+	cmp	WNDWDTH
 	bne	return
 	lda	#$00
 	sta	CH
@@ -44,20 +53,9 @@ return:
 	rts
 
 putchar:	
-	ora	#$80		; Turn on high bit
-	and	TEXTTYP		; Apply normal, inverse, flash
+	and	INVFLG		; Apply normal, inverse, flash
 	ldy	CH
-	ldx	RD80COL		; In 80 column mode?
-	bpl	col40		; No, in 40 cols
-	pha
-	tya
-	lsr			; Div by 2
-	tay
-	pla
-	bcs	col40		; odd cols go in 40 col memory
-	sta	PG2ON
-col40:	sta	(BASL),Y
-	sta	PG2OFF
+	sta	(BASL),Y
 	rts
 
 newline:
@@ -65,7 +63,7 @@ newline:
 	pha
 	inc	CV
 	lda	CV
-	cmp	MAX_Y
+	cmp	WNDBTM
 	bne	L2
 	lda	#$00
 	sta	CV
@@ -81,5 +79,3 @@ _gotoxy:
 	jsr	popa		; Get X
 	sta	CH		; Store X
 	rts
-
-
diff --git a/libsrc/apple2/crt0.s b/libsrc/apple2/crt0.s
index 335d339c9..3e428449f 100644
--- a/libsrc/apple2/crt0.s
+++ b/libsrc/apple2/crt0.s
@@ -6,7 +6,7 @@
 
 	.export		_exit
 	.import	   	initlib, donelib
-	.import	   	zerobss, push0
+	.import	   	zerobss
        	.import	       	__STARTUP_LOAD__, __BSS_LOAD__	; Linker generated
 	.import		callmain
 
@@ -26,9 +26,18 @@
 
 .segment       	"STARTUP"
 
+; ProDOS TechRefMan, chapter 5.2.1:
+; "For maximum interrupt efficiency, a system program should not use more
+;  than the upper 3/4 of the stack."
+
+	ldx	#$FF
+	txs	       		; Init stack pointer
+
+; Save the zero page locations we need
+
        	ldx	#zpspace-1
 L1:	lda	sp,x
-   	sta	zpsave,x    	; Save the zero page locations we need
+   	sta	zpsave,x
 	dex
        	bpl	L1
 
@@ -38,27 +47,15 @@ L1:	lda	sp,x
 
 ; Save system stuff and setup the stack
 
-       	tsx
-       	stx    	spsave 	    	; Save the system stack ptr
-
-	lda    	MEMSIZE
+	lda    	HIMEM
 	sta	sp
-	lda	MEMSIZE+1
+	lda	HIMEM+1
        	sta	sp+1   	    	; Set argument stack ptr
 
 ; Call module constructors
 
 	jsr	initlib
 
-; Initialize conio stuff
-
-	lda	#$ff
-	sta	TEXTTYP
-
-; Set up to use Apple ROM $C000-$CFFF
-
-	;; 	sta    	USEROM
-
 ; Push arguments and call main()
 
 	jsr	callmain
@@ -67,14 +64,6 @@ L1:	lda	sp,x
 
 _exit:	jsr	donelib
 
-; Restore system stuff
-
-	lda	#$ff  	    	; Reset text mode
-	sta	TEXTTYP
-
-	ldx	spsave
-	txs	       		; Restore stack pointer
-
 ; Copy back the zero page stuff
 
 	ldx	#zpspace-1
@@ -83,9 +72,16 @@ L2:	lda	zpsave,x
 	dex
        	bpl	L2
 
-; Reset changed vectors, back to basic
+; ProDOS TechRefMan, chapter 5.2.1:
+; "System programs should set the stack pointer to $FF at the warm-start
+;  entry point."
 
-	jmp	RESTOR
+	ldx	#$FF
+	txs			; Re-init stack pointer
+
+; Back to DOS
+
+	jmp	DOSWARM
 
 ; ------------------------------------------------------------------------
 ; Data
@@ -93,7 +89,3 @@ L2:	lda	zpsave,x
 .data
 
 zpsave:	.res	zpspace
-
-.bss
-
-spsave:	.res	1
diff --git a/libsrc/apple2/cvline.s b/libsrc/apple2/cvline.s
index d762ad1b8..eeca3807a 100644
--- a/libsrc/apple2/cvline.s
+++ b/libsrc/apple2/cvline.s
@@ -5,7 +5,7 @@
 ; void cvline (unsigned char length);
 ;
 
-    	.export		_cvlinexy, _cvline
+	.export 	_cvlinexy, _cvline, cvlinedirect
 	.import		popa, _gotoxy, putchar, newline
 	.importzp	tmp1
 
@@ -16,15 +16,15 @@ _cvlinexy:
    	pla			; Restore the length and run into _cvline
 
 _cvline:
-   	cmp	#0		; Is the length zero?
+	ldx	#'!' | $80	; Vertical line, screen code
+
+cvlinedirect:
+	cmp	#$00		; Is the length zero?
    	beq	L9  		; Jump if done
     	sta	tmp1
-L1:	lda	#$7C 		; Vertical bar
+L1:	txa			; Screen code
    	jsr	putchar		; Write, no cursor advance
    	jsr	newline		; Advance cursor to next line
 	dec	tmp1
 	bne	L1
 L9:	rts
-
-
-
diff --git a/libsrc/apple2/dosdetect.s b/libsrc/apple2/dosdetect.s
new file mode 100644
index 000000000..bf4af58ad
--- /dev/null
+++ b/libsrc/apple2/dosdetect.s
@@ -0,0 +1,46 @@
+;
+; Oliver Schmidt, 08.03.2004
+;
+; Identify DOS version we're running on as one of these:
+;
+; AppleDOS 3.3	$00
+; ProDOS 1.0.1	$10
+; ProDOS 1.0.2	$10
+; ProDOS 1.1.1	$11
+; ProDOS 1.2	$12
+; ProDOS 1.3	$13
+; ProDOS 1.4	$14
+; ProDOS 1.5	$15
+; ProDOS 1.6	$16
+; ProDOS 1.7	$17
+; ProDOS 1.8	$18
+; ProDOS 1.9	$18
+; ProDOS 2.0.1  $21
+; ProDOS 2.0.2  $22
+; ProDOS 2.0.3  $23
+
+
+	.constructor	initdostype
+	.export		__dos_type
+
+	.include	"apple2.inc"
+
+; Identify DOS version according to:
+; - "Beneath Apple ProDOS", chapter 6-63
+; - "Apple II ProDOS 8 TechNote #023: ProDOS 8 Changes and Minutia"
+; - ProDOS TechRefMan, chapter 5.2.4
+
+initdostype:
+	lda	MLI
+	cmp	#$4C		; Is MLI present? (JMP opcode)
+	bne	done
+	lda	$BFFF		; ProDOS KVERSION
+	cmp	#$10
+	bpl	L1
+	ora	#$10		; Make high nibble match major version
+L1:	sta	__dos_type
+done:	rts
+
+	.bss
+
+__dos_type:	.res	1
diff --git a/libsrc/apple2/get_ostype.s b/libsrc/apple2/get_ostype.s
index b686cbb79..d23254e19 100644
--- a/libsrc/apple2/get_ostype.s
+++ b/libsrc/apple2/get_ostype.s
@@ -2,19 +2,51 @@
 ; Stefan Haubenthal, Jul 12 2003
 ;
 ; unsigned char get_ostype(void)
-;
-; $23 ProDOS 2.0.3
 ;
 
-	.export		_get_ostype
+	.constructor	initostype
+	.export		_get_ostype, ostype
 
-.proc	_get_ostype
+; Identify machine according to:
+; "Apple II Miscellaneous TechNote #7: Apple II Family Identification"
 
-	lda	#0
-	ldx	$bf00
-	cpx	#$4c	; JMP opcode
-	bne	nopdos
-	lda	$bfff
-nopdos:	rts
+initostype:
+	ldx	#$01		; Start out with a plain Apple ][
+	lda	$FBB3
+	cmp	#$38
+	beq	identified
+	inx			; It's at least an Apple ][+
+	cmp	#$EA
+	bne	apple2e
+	lda	$FB1E
+	cmp	#$AD
+	beq	identified
+	inx			; It's an Apple /// in emulation mode
+	bne	identified	; Branch always
+apple2e:
+	ldx	#$04		; It's at least an Apple //e
+	lda	$FBC0
+	cmp	#$EA
+	beq	identified
+	inx			; It's at least an enhanced Apple //e
+	cmp	#$E0
+	bne	apple2c
+	lda	$FBDD
+	cmp	#$02
+	bne	identified
+	inx			; It's an Apple //e Option Card
+	bne	identified	; Branch always
+apple2c:
+	ldx	#$07		; It's an Apple //c
+identified:
+	stx	ostype
+	rts
 
-.endproc
+_get_ostype:
+	lda	ostype
+	ldx	#$00
+	rts
+
+	.bss
+
+ostype:	.res	1
diff --git a/libsrc/apple2/kbhit.s b/libsrc/apple2/kbhit.s
index 8471330ba..8c6f02158 100644
--- a/libsrc/apple2/kbhit.s
+++ b/libsrc/apple2/kbhit.s
@@ -11,8 +11,8 @@
 	.include "apple2.inc"
 
 _kbhit:
-	bit	KEY_STROBE	; Reading strobe checks for keypress
-	bmi	L1		; if KEY_STROBE > 127 key was pressed
+	bit	KBD		; Reading keyboard checks for keypress
+	bmi	L1		; if KBD > 127 key was pressed
 	jmp	return0
 L1:
 	jmp	return1
diff --git a/libsrc/apple2/mainargs.s b/libsrc/apple2/mainargs.s
index f44812149..ed43dc395 100644
--- a/libsrc/apple2/mainargs.s
+++ b/libsrc/apple2/mainargs.s
@@ -35,7 +35,7 @@ FNAM_LEN = $280
 FNAM = $281
 MAXARGS	 = BASIC_BUF_LEN - 2	; (don't count REM and terminating '\0')
 
-REM	 = $b2			; BASIC token-code
+REM	 = $B2			; BASIC token-code
 NAME_LEN = 15			; maximum length of command-name
 
 ; Get possible command-line arguments.
@@ -63,13 +63,13 @@ L1:	dey
 
 ; Find the "rem" token.
 ;
-	ldx	#0
+	ldx	#$00
 L2:	lda	BASIC_BUF,x
 	beq	done		; no "rem," no args.
 	inx
 	cmp	#REM
 	bne	L2
-	ldy	#1 * 2
+	ldy	#$01 * 2
 
 ; Find the next argument.
 ;
diff --git a/libsrc/apple2/read.s b/libsrc/apple2/read.s
index 93dec57aa..6e6ddf507 100644
--- a/libsrc/apple2/read.s
+++ b/libsrc/apple2/read.s
@@ -19,7 +19,7 @@ _read:	jsr	popax 		; get count
      	sta	ptr1
      	stx	ptr1+1
      	jsr	popax 		; get fd and discard it
-   	lda	#0
+   	lda	#$00
    	sta	ptr3
    	sta	ptr3+1		; set count
 
@@ -27,11 +27,11 @@ L1:    	lda	ptr2
    	ora	ptr2+1		; count zero?
    	beq	L9
    	jsr	RDKEY
-	and	#$7f		; clear high bit.
+	and	#$7F		; clear high bit.
 	pha
 	jsr	_cputc
 	pla
-	ldy	#0		; offset into string
+	ldy	#$00		; offset into string
    	sta	(ptr1),y	; save char
    	inc	ptr1
    	bne	L2
diff --git a/libsrc/apple2/revers.s b/libsrc/apple2/revers.s
index 702082900..acae7c835 100644
--- a/libsrc/apple2/revers.s
+++ b/libsrc/apple2/revers.s
@@ -9,17 +9,17 @@
 	.include	"apple2.inc"
 
 _revers:
-	ldy	TEXTTYP		; Stash old value
+	ldy	INVFLG		; Stash old value
 	and	#$FF		; Test for any bit
-	bne	reverse		; Nothing set
-	lda	#$FF
-reverse:	
-	ora	#$3F	
-	sta	TEXTTYP
+	beq	normal		; Nothing set
+	lda	#~$3F		; Not Inverse
+normal:	
+	eor	#$FF		; Xor Normal
+	sta	INVFLG
 	tya			; What was the old value?
-	eor	#$FF		; Normal = $FF, Reverse = $3F
+	eor	#$FF		; Normal = $FF, Inverse = $3F
 	beq	L2
-	lda	#01
+	lda	#$01
 L2:	
 	rts
 
diff --git a/libsrc/apple2/wherex.s b/libsrc/apple2/wherex.s
index a7ceb22d8..cb9be3f07 100644
--- a/libsrc/apple2/wherex.s
+++ b/libsrc/apple2/wherex.s
@@ -10,7 +10,7 @@
 .proc   _wherex
 
 	lda    	CH
-        ldx     #0
+        ldx     #$00
 	rts
 
 .endproc
diff --git a/libsrc/apple2/wherey.s b/libsrc/apple2/wherey.s
index bd7342c86..a8c341c48 100644
--- a/libsrc/apple2/wherey.s
+++ b/libsrc/apple2/wherey.s
@@ -10,7 +10,7 @@
 .proc   _wherey
 
 	lda	CV
-        ldx     #0
+        ldx     #$00
 	rts
 
 .endproc
diff --git a/libsrc/apple2/write.s b/libsrc/apple2/write.s
index 35bc18011..7618bdc56 100644
--- a/libsrc/apple2/write.s
+++ b/libsrc/apple2/write.s
@@ -27,7 +27,7 @@
 L1:	lda	ptr2
 	ora	ptr2+1		; count zero?
 	beq	L9
-	ldy	#0
+	ldy	#$00
 	lda	(ptr1),y
 	cmp	#$0A		; Check for \n = Crtl-j
 	bne	rawout