!pr0
!lm12
!rm75
The new 1983 edition of DOS 3.3............Bob Sander-Cederlof

Co-incident with the release of the //e, Apple started shipping a slightly modified version of DOS 3.3.  Three changes are evident:  the sample programs have been moved to a separate diskette; a few instructions to kill 80-column display during a boot were added; and yet another patch to the APPEND command.

I booted an old DOS 3.3, and then used monitor move to make a copy in memory running from 5D00-7FFF of the DOS image.  Then I booted the new DOS, which loaded into 9D00-BFFF.  Using the monitor "V" command, I located all of the changes.  It was a little tricky skipping over the variables and buffers, but with the aid of a well-worn copy of "Beneath Apple DOS" I managed.  Here are all the changes I found:

 Old DOS 3.3                New DOS 3.3
----------------------     ----------------------
A6BB:EA       NOP          A6BB:20 69 BA JSR $BA69
A6BC:EA       NOP
A6BD:EA       NOP
A6BE:A2 00    LDX #0       A6BE:unchanged
A6C0:8E C3 B5 STX $B5C3
A6C3:60       RTS

The code above is jumped to from one of the older APPEND patches at $B6A8.  It used to be JMP $A6BC, and has been changed to JMP $A6BB to pick up the new JSR there.

The latter part of the file position calculator has been re-written to assure carry is clear before adding record size to previous position.

 Old DOS 3.3                New DOS 3.3
----------------------     ----------------------
B33E:AD BF B5 LDA $B5BF    B33E:18       CLC
B341:8D EC B5 STA $B5EC    B33F:AD BF B5 LDA $B5BF
B344:6D E6 B5 ADC $B5E6    B342:8D EC B5 STA $B5EC
B347:8D E6 B5 STA $B5E6    B345:6D E6 B5 ADC $B5E6
B34A:AD C0 B5 LDA $B5C0    B348:8D E6 B5 STA $B5E6
B34D:8D ED B5 STA $B5ED    B34B:AD C0 B5 LDA $B5C0
B350:6D E4 B5 ADC $B5E4    B34E:8D ED B5 STA $B5ED
B353:8D E4 B5 STA $B5E4    B351:6D E4 B5 ADC $B5E4
B356:A9 00    LDA #0       B354:8D E4 B5 STA $B5E4
B358:6D E5 B5 ADC $B5E6    BE57:90 03    BCC $B35C
B35B:8D E5 B5 STA $B5E5    BE59:EE E5 B5 INC $B5E5
B35E:60       RTS          BE5C:60       RTS
                           BE5D:00 00    filler

Note that there was room for adding the CLC at the top, because of the in-efficiency of the original code.
!np
Code executed at the end of a boot has been modified to clear 80-column mode in case you are booting in an Apple //e.

 Old DOS 3.3                New DOS 3.3
----------------------     ----------------------
BFD6:4C 44 B7 JMP $B744    BFD6:20 76 BA JSR $BA76
                           BFD9:4C 44 B7 JMP $B744

Three patches were stuffed into the hole at $BA69.

!lm+5
       Called from $A6BB:

BA69:AE 5F AA LDX $AA5F   If last command was
BA6C:E0 1C    CPX #$1C         APPEND, clear flag
BA6E:FO 05    BEQ $BA75        Not APPEND
BA70:A2 00    LDX #0           Yes, APPEND
BA72:8E 5D B6 STX $B65D        Clear APPEND flag
BA75:60       RTS

       Called from $BFD6:

BA76:A9 FF    LDA #$FF
BA78:8D FB 04 STA $04FB        MODE = $FF
BA7B:8D 0C C0 STA $C00C        80-column display OFF
BA7E:8D 0E C0 STA $C00E        Alternate Char Set OFF
BA81:4C 2F FB JMP $FB2F        Exit via monitor INIT

       Called from $B683:

BA84:AD BD B5 LDA $B5BD        Previous file position
BA87:8D E6 B5 STA $B5E6        LSB of fle position
BA8A:8D EA B5 STA $B5EA        Record #
BA8D:BA       TSX
BA8E:8E 9B B3 STX $B39B        Save stack position
BA91:4C 7F B3 JMP $B37F        Leave File Manager
!lm-5

Note that this last patch jumps into the file manager exit routine even though the file manager had not been entered.  The purpose is to save a copy of the file manager workarea in the file buffer after patching the file position low-order byte.  Seems to me that jumping directly to $AE7E, without the two lines saving the stack pointer above, would avoid the very dangerous step of jumping into the middle of a subroutine.  But in any case, as Tom Weishaar points out, the code is wrong in that it does not recover the higher bytes of the file position.  Will APPEND ever really be fixed?

A few months back I published a patch for faster LOAD, etc) in these pages which used the space from $BA69 through $BA95.  I suggest you use the older version of DOS 3.3 for the time being.  But eventually you may be forced to find another home for the fast LOAD patch.
