 Apple II Computer Information

Apple II DOS 3.3 C Source Code Listing July 1983 (c) Apple Computer Inc.

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 1 of 154

Source File Catalog Name -------------------ASMIDSTAMP.hex BLDFTAB.pretty BLOCKIO.hex BOOTLDR.pretty CMDSCAN.pretty CMDTBLS.pretty COREQUS.pretty DOS.TO.DISK DOS33C.OBJ.hex DOS33C.pretty DOSGOER.pretty DOSHOOK.pretty DOSINIT.pretty DOSPTCH.pretty EASM.pretty FDELCAT.pretty FDOSENT.pretty FLOCNXB.pretty FLOCSEC.pretty FMTRWIO.pretty FOPCLRW.pretty FORMATR.pretty FVCBUFS.pretty HELLO.A.hex HELLO.B.hex MAKE.MASTER.hex MASTER.3.3E.hex MASTERE.OBJ0.hex MSWAITR.pretty POSTNRD.pretty PRENIBL.pretty RDADSEK.pretty RELOCTR.pretty RWTSONE.pretty RWTSTWO.pretty TEMPY.pretty TRASH.pretty WRITADR.pretty WRITRTN.pretty XLODSAV.pretty XMISCMD.pretty XOPNCLS.pretty

Type ---TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT TEXT

Crtr Size Flags Last-Mod-Date Creation-Date ---- ------ ---------- ------------------- ------------------MPS 4K lvbspoimad 4/14/06 2:48 PM 4/14/06 2:48 PM MPS 12K lvbspoimad 4/14/06 3:49 PM 4/14/06 3:23 PM MPS 8K lvbspoimad 4/14/06 2:48 PM 4/14/06 2:48 PM MPS 24K lvbspoimad 4/14/06 3:52 PM 4/14/06 3:23 PM MPS 20K lvbspoimad 4/14/06 3:52 PM 4/14/06 3:23 PM MPS 12K lvbspoimad 4/14/06 3:50 PM 4/14/06 3:23 PM MPS 12K lvbspoimad 4/14/06 3:51 PM 4/14/06 2:53 PM ttxt 4K lvbspoImad 4/12/06 9:20 AM 4/12/06 9:20 AM MPS 44K lvbspoimad 4/14/06 2:48 PM 4/14/06 2:48 PM MPS 8K lvbspoimad 4/14/06 3:50 PM 4/14/06 2:53 PM MPS 16K lvbspoimad 4/14/06 3:51 PM 4/14/06 3:23 PM MPS 16K lvbspoimad 4/14/06 3:49 PM 4/14/06 3:23 PM MPS 16K lvbspoimad 4/14/06 3:49 PM 4/14/06 3:23 PM MPS 8K lvbspoimad 4/14/06 3:50 PM 4/14/06 2:53 PM MPS 8K lvbspoimad 4/14/06 3:50 PM 4/14/06 2:53 PM MPS 20K lvbspoimad 4/14/06 3:50 PM 4/14/06 3:23 PM MPS 12K lvbspoimad 4/14/06 3:49 PM 4/14/06 3:23 PM MPS 20K lvbspoimad 4/14/06 3:50 PM 4/14/06 3:23 PM MPS 20K lvbspoimad 4/14/06 3:52 PM 4/14/06 3:23 PM MPS 16K lvbspoimad 4/14/06 3:50 PM 4/14/06 3:23 PM MPS 20K lvbspoimad 4/14/06 3:50 PM 4/14/06 3:23 PM MPS 16K lvbspoimad 4/14/06 3:50 PM 4/14/06 2:53 PM MPS 16K lvbspoimad 4/14/06 3:50 PM 4/14/06 3:23 PM MPS 4K lvbspoimad 4/14/06 2:48 PM 4/14/06 2:48 PM MPS 8K lvbspoimad 4/14/06 3:37 PM 4/14/06 3:37 PM MPS 4K lvbspoimad 4/14/06 2:48 PM 4/14/06 2:48 PM MPS 8K lvbspoimad 4/14/06 2:48 PM 4/14/06 2:48 PM MPS 4K lvbspoimad 4/14/06 2:48 PM 4/14/06 2:48 PM MPS 16K lvbspoimad 4/14/06 3:50 PM 4/14/06 2:53 PM MPS 12K lvbspoimad 4/14/06 3:50 PM 4/14/06 2:53 PM MPS 8K lvbspoimad 4/14/06 3:51 PM 4/14/06 2:53 PM MPS 16K lvbspoimad 4/14/06 3:51 PM 4/14/06 2:53 PM MPS 20K lvbspoimad 4/14/06 3:51 PM 4/14/06 3:23 PM MPS 20K lvbspoimad 4/14/06 3:51 PM 4/14/06 2:53 PM MPS 20K lvbspoimad 4/14/06 3:51 PM 4/14/06 2:53 PM MPS 8K lvbspoimad 4/14/06 3:51 PM 4/14/06 3:23 PM MPS 20K lvbspoimad 4/14/06 3:51 PM 4/14/06 3:23 PM MPS 12K lvbspoimad 4/14/06 3:51 PM 4/14/06 2:53 PM MPS 12K lvbspoimad 4/14/06 3:51 PM 4/14/06 2:53 PM MPS 20K lvbspoimad 4/14/06 3:51 PM 4/14/06 3:23 PM MPS 16K lvbspoimad 4/14/06 3:51 PM 4/14/06 3:23 PM MPS 20K lvbspoimad 4/14/06 3:51 PM 4/14/06 3:23 PM

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 2 of 154

======================================================================================== DOCUMENT ASMIDSTAMP.hex ======================================================================================== File ............. Fork ............. Size (bytes) ..... Created .......... Modified .........

"ASMIDSTAMP" DATA 17 (0KB) / $00000011 Wednesday, April 12, 2006 -- 9:22:06 AM Wednesday, April 12, 2006 -- 9:22:06 AM

D/000000: B1B2ADCA D5CCADB8 B3A0A3C2 B0B0B0B9 [................] D/000010: B0 [. ] File ............. "ASMIDSTAMP" Fork ............. RESOURCE Size (bytes) ..... 0 (0KB) / $00000000 Brought to you by: dtcdumpfile 1.0.0 (Apple Macintosh File Hex Dumper) Sunday, July 6, 1997 FINIS

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 3 of 154

======================================================================================== DOCUMENT BLDFTAB.pretty ======================================================================================== ; ; ; ;

##################################################################################### # PROJECT : APPLE ][ DOS 3.3 C SOURCE CODE LISTING -- (C) APPLE COMPUTER INC. 1983 # FILE NAME: BLDFTAB #####################################################################################

PAGE ; ; BLDFTB - BUILD FILE TABLES ; TABLE MAP: ; HIMEM,SOP ; SBUFF N (256) ; DBUFF N (256) ; FTB N (FCBLEN) ; HEADER N (38) ; . ; . ; SBUFF 1 ; DBUFF 1 ; FTB 1 ; HEADER 1 ; THIS PROGRAM ; ; HEADER MAP: ; FILENAME (30) ; FTB PTR (2) ; DBUF PTR (2) ; SBUF PTR (2) ; LINK (2) ; BLDFTB EQU * SEC LDA FTAB STA ZPGWRK LDA FTAB+1 STA ZPGWRK+1 LDA CNFTBS STA TEMP1A ; BFT1 LDY #0 TYA STA (ZPGWRK),Y LDY #30 SEC LDA ZPGWRK SBC #FCBLEN STA (ZPGWRK),Y PHA LDA ZPGWRK+1 SBC #0 INY STA (ZPGWRK),Y TAX DEX PLA PHA INY STA (ZPGWRK),Y TXA

; START OF FTAB AREA ; IS 1ST FTB PTR ; HEADER ; MOVE NO FTABS ; TO TEMP

; 1ST CHAR FN=0 ; INC Y TO FCB PTR ; ; ; ;

END OF PTR HEADER MINUS FTAB LENGTH IS START OF FTB SAVE LOW ADR BYTE

; FTB ADR - 256 ; IS ADR DIR BUFF ; SET DIR BUF PTR

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 4 of 154

INY STA TAX DEX PLA PHA INY STA INY TXA STA

(ZPGWRK),Y ; DIR BUFF - 256 ; IS SBUFF ADR (ZPGWRK),Y (ZPGWRK),Y

;

; BFT2

DEC BEQ TAX PLA SEC SBC INY STA PHA TXA SBC INY STA STA PLA STA JMP

TEMP1A BFT2

; DECREMENT TABLE INDEX ; COUNT AND BR IF DONE

#38

; SBUFF ADR - 38

(ZPGWRK),Y

; IF ADR OF NEXT TAB ; WHICH GOES INTO ; LINK

EQU PHA LDA INY STA INY STA

*

LDA BEQ

ASIBSW BFTIB

#0 (ZPGWRK),Y ZPGWRK+1 ZPGWRK BFT1

#0

; ; ; ;

AND INTO ZPGWRK FOR NEXT ENTRY BUILD GO BUILD NEXT

; SET LAST LINK ; TO ZERO

(ZPGWRK),Y (ZPGWRK),Y

; ; IF IB THEN GO

; PLA STA STA PLA STA STA RTS ; BFTIB

EQU PLA STA STA PLA STA STA RTS PAGE

; ; MVISW - MOVE INPUT SWITCH ; MVCSW EQU LDA

ASHM1+1 ASHM2+1

; SET APPLESOFT ; UPPER MEM LIMITS

ASHM1 ASHM2 * IBHMEM+1 IBSOP+1

; SET IB ; UPPER MEM LIMITS

IBHMEM IBSOP

* INSW+1

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 5 of 154

CMP BEQ STA LDA STA

CINA+1 MVOSW SVINS+1 INSW SVINS

LDA STA LDA STA

CINA INSW CINA+1 INSW+1

; SAVE CHAR IN SWITCH

;

; ; ; MVOSW - MOVE OUTPUT SWITCH ; MVOSW EQU * LDA OUTSW+1 CMP COUTA+1 BEQ MVSRTN STA SVOUTS+1 LDA OUTSW STA SVOUTS ; LDA COUTA STA OUTSW LDA COUTA+1 STA OUTSW+1 MVSRTN EQU * RTS ; ; ; ; ; ;

; SET DFB CHAR IN ADR

; SAVE CHAR OUT SWITCH ; SET DFB CHAR OUT ADR

##################################################################################### # END OF FILE: BLDFTAB # LINES : 144 # CHARACTERS : 4908 # Formatter : Assembly Language Reformatter 1.0.2 (07 January 1998) #####################################################################################

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 6 of 154

======================================================================================== DOCUMENT BLOCKIO.hex ======================================================================================== File ............. Fork ............. Size (bytes) ..... Created .......... Modified .........

"BLOCKIO" DATA 205 (0KB) / $000000CD Wednesday, April 12, 2006 -- 9:21:54 AM Wednesday, April 12, 2006 -- 9:21:54 AM

D/000000: D/000010: D/000020: D/000030: D/000040: D/000050: D/000060: D/000070: D/000080: D/000090: D/0000A0: D/0000B0: D/0000C0:

03A9118D 8DB9038D 00BD0002 C9D7F008 3C8DC003 0FA5420A 426642A5 D005EEBC A903A0B8 3DEEC103 4C69FFA0 0302010F F7A0A99E

A94C8DF8 2BADE9B7 8DC803A2 0102A002 8CC403A5 0EA53F85 43664266 03C8C010 038CA703 4C69FFE6 E50F90CA 07060504 E8D2A0A0

F903A903 C703ADEA C999F003 C9D2F003 A53D8DC1 290FA888 42293F8D 03A000B9 20D90390 ADC003C5 000E0D0C 01A0A000 BD0001EF

8DFA03D0 B78DBA03 E8D0F6BD 4C65FF88 03A53E85 8CA70346 BC03ACA7 A8038DBD 06202DFF 0EADC103 0B0A0908 E0A0C903 D8

[.L..............] [+...............] [................] [............Le..] [.....] [..?...B.)......F] [CfBfBfB.B)?.....] [................] [..............-.] [Li..=...........] [....Li..........] [................] [............. ]

File ............. "BLOCKIO" Fork ............. RESOURCE Size (bytes) ..... 0 (0KB) / $00000000 Brought to you by: dtcdumpfile 1.0.0 (Apple Macintosh File Hex Dumper) Sunday, July 6, 1997 FINIS

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 7 of 154

======================================================================================== DOCUMENT BOOTLDR.pretty ======================================================================================== ; ; ; ;

##################################################################################### # PROJECT : APPLE ][ DOS 3.3 C SOURCE CODE LISTING -- (C) APPLE COMPUTER INC. 1983 # FILE NAME: BOOTLDR #####################################################################################

HERE3L REMDR3 TRK0LDR

SBTL EQU EQU ORG EQU DO ???

'16-SECTOR DOS BOOT' >* 256-HERE3L *+REMDR3 * >TRK0LDR ;DELIBERATE ERROR IF NOT AT PAGE

BOUNDARY FIN *************************** * * * 16-SECTOR DOS BOOTSTRAP * * * * RICK AURICCHIO * * 10/10/79 * * * *************************** * * * THIS PROGRAM RESIDES IN * * TRACK 0, SECTOR 0 OF A * * DOS DISKETTE. ITS SOLE * * PURPOSE IS TO READ THE * * DOS LOADER PROGRAM IN * * FROM TRACK 0, SECTORS * * 1-9. CONTROL IS THEN * * TRANSFERRED TO THAT * * PROGRAM. * * * * NOTE: THE DOS LOADER * * CONTAINS THE ENTIRE * * SET OF 16-SECTOR CORE * * ROUTINES; THOSE CORE * * ROUTINES ARE USED TO * * LOAD THE REST OF THE * * DOS IMAGE INTO MEMORY. * * * *************************** POINTA EQU BSLOT EQU BSECTR EQU BTEMP EQU BRETRY EQU * MONINIT EQU BHERE3 EQU BOOTCNT EQU DFB PAGE LDA CMP BNE * WE'VE BEEN BOOTED. SET UP * PARAMS FOR BOOT PROM SO

$26 $2B $3D $3E $5C

;BUFFER POINTER ;BOOT BSLOT ;LAST BSECTR READ ;ADDRESS BTEMP ;OFFSET TO READER

$FB2F >* $800+BHERE3 01

;MONINIT SCREEN

POINTA+1 #09 READNEXT

;WHERE DID BSECTR GET LOADED? ; (AT 0800)? ;=>NO. WE'RE LOADING SOMETHING

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 8 of 154

* *

THAT WE'LL READ IN TRACK 0, BSECTRS 00-09. LDA BSLOT LSR A LSR A LSR A LSR A ORA #$C0 STA BTEMP+1 LDA #BRETRY STA BTEMP CLC LDA LOADADDR+1 ADC BGRPGC STA LOADADDR+1 * READ IN ANOTHER BSECTR FROM * TRACK ZERO... READNEXT LDX BGRPGC BMI GOLOADER LDA TABLE,X STA BSECTR DEC BGRPGC LDA LOADADDR+1 STA POINTA+1 DEC LOADADDR+1 LDX BSLOT JMP (BTEMP) GOLOADER INC LOADADDR+1 INC LOADADDR+1 JSR SETKBD JSR SETVID JSR MONINIT LDX BSLOT JMP (LOADADDR) * TABLE OF PHYSICAL BSECTR NUMBERS * WHICH CORRESPOND TO THE LOGICAL * BSECTRS 0-F ON TRACK ZERO... BHERE2 EQU >* TABLE EQU $800+BHERE2 DFB $00,13,11 DFB 09,07,05 DFB 03,01,14 DFB 12,10,08 DFB 06,04,02,15 PAGE REP 40 * APPEND BUG PATCHES **************************** SC3 EQU * EOFFLAG DFB 0 CLOSFILE EQU * JSR FILSRC BCS NOTFOUND LDA #0 TAY STA EOFFLAG STA (ZPGWRK),Y NOTFOUND LDA CCBSTA JMP ERROR **************************** BUMPER EQU * LDA EOFFLAG BEQ GOBACK

;GET BOOT BSLOT ;CONVERT TO CX00

;PROM ROUTINE OFFSET ;BUMP LOAD ADDRESS UP TO ; LAST PAGE SO WE ; CAN LOAD 'EM BACKWARDS...

;=>ALL DONE...EXECUTE IT! ;GET PHYSICAL BSECTR NUMBER ; AND SET FOR BOOT PROM READ ;ONE LESS BELL TO ANSWER.. ;GET LOAD ADDRESS ; FOR BSECTR READ ;MOVE LOAD ADDRESS DOWN A PAGE ;RESTORE BSLOT NUMBER ;READ MORE OF TRACK 0 ;ENTRY AT SECOND PAGE ;CLEAR IN#X ; AND PR#X ;MONINIT THE SCREEN PARAMS ;PASS BSLOT NBR TO LOADER ;OFF TO LOOADER!

;00->00,01->13,02->11 ;03->09,04->07;05->05 ;06->03,07->01,08->14 ;09->12,10->10,11->08 ;12->6,13->04,14->02,15->15

;FILE BUFFER FOUND? ;=> NO, SO SKIP IT. ;YES, CLOSE IT ;RIGHT NOW ;ORIGINAL INSTRUCTION ;BACK TO ERROR HANDLER ;SHOULD WE? ;=> NO

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 9 of 154

INC CCBRRN BNE GOBACK INC CCBRRN+1 GOBACK LDA #0 STA EOFFLAG JMP FIXIT2 REP 40 VPATCH EQU * STA CCBRQM JSR DOSGO JSR ECLOSE JMP EVAR **************************** EOFFIX EQU * LDY #$13 CHKFILE LDA (ZPGFCB),Y BNE FIXIT INY CPY #$17 BNE CHKFILE LDY #$19 MOVE LDA (ZPGFCB),Y STA CCBRRN-$19,Y INY CPY #$1D BNE MOVE BACK JMP DOSGO2A FIXIT EQU * LDX #$FF STX EOFFLAG BNE BACK PAGE REP 40 * END OF BOOT PAGE DATA SETUP REP 40 * * FIXIT2 was developed to fix the wrap around * problem APPEND has when trying to APPEND to * a sequential file which is >255 sectors in length. * * Fix by * * Fern Bachman * Guil Banks * September 28, 1982 * * Fix to fix added to correctly APPEND to a sector * 255 bytes in length * * by * Guil Banks * July 11, 1983 * REP 30 SKP 1 FIXIT2 EQU * LDA CCBRLN STA DCBCSB STA DCBCRR LDA CCBRLN+1 STA DCBCSB+1 STA DCBCRR+1 STA DCBCRS

;BUMP CCB RECORD NUMBER ;TO GET TO NEXT SECTOR ;TURN FLAG OFF ;Go to FIXIT2 as exit ;ORIGINAL INSTRUCTION ;GO SAVE ;CLOSE THE FILE ;GO VERIFY IT AFTER SAVE ;PEEK INTO THE FCB: IF ;DCBCRS,DCBCSB ARE ZEROS, ; THEN WE HAVE EMPTY FILE

; DCBCRR,DCBCRB ;INTO CCBRRN,CCBBYT

;NOW LET APPEND CONTINUE ;SET FLAG SO APPEND WILL ;KNOW TO CROSS SECTOR BOUNDARY ;ALWAYS TAKEN

;Current record length lo ;Current sector byte ;Current relative record ;Do hi as well ;Set current relative sector

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 10 of 154

TSX STX JMP SKP REP * * * * * * * *

Upper/Lower case patch for DOS 3.3C and BASIC by Guil Banks Mark Houde REP

* * * * * * * * * * * * * * * * *

ENTSTK GOODIO 2 30

30

This routine converts all characters that are not between quotes to upper case and returns them to the input buffer ($200). This works with DOS, Integer & Applesoft. Upon entry X Reg = 0 Upon exit

Y Reg = $FF ACCUM = $8D X Reg = unknown

REP 30 DO ULC UPRCASE EQU * LUP1 LDA LBUFF,X ;Get a char CMP #'"+$80 ;Is it a quote? BNE CHK4UC ;=> if not LUP2 INX ;Bump to next char LDA LBUFF,X ;Get it CMP #'"+$80 ;Closing quote? BEQ NEXTCHR ;=> if so CMP #$8D ;End of line? BNE LUP2 ;=> if not ULFINI LDY #$FF ;Do what DOS wants STY CMDNO RTS ; & exit CHK4UC EQU * CMP #$E0 ;Upper case? BCC CHK4CR ;=> if not AND #$DF ;Make upper case STA LBUFF,X ; & restore CHK4CR CMP #$8D ;End of input? BEQ ULFINI ;=> if so NEXTCHR INX ;Bump to next char BNE LUP1 ;=> always FIN SKP 1 BHERE1 EQU >* DS $FD-BHERE1,0 * LOAD ADDRESS FOR CODE (PG BDY) * ENTRY AFTER BOOT IS AT LOADADDR+256 (SECOND PAGE LOADED) * BHERE4 EQU >*

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 11 of 154

LOADADDR

EQU DFB DFB

$800+BHERE4 0 * BGRPGC EQU $800+BHERE5 GRPGC DFB DOSLODR ??? FIN REP 40 * FAST BOOT AT 2:1 INTERLEAVE * FOR 16-SECTOR DISKETTES REP 40 STX IBSLOT STX IBPSLT LDA #1 STA IBPDRV STA IBDRVN ; LDA NDPGS STA BRWCNT LDA #2 STA IBTRK LDA #4 STA IBSECT LDY ADOSLD+1 DEY STY IBBUFP+1 ; LDA #IBCRTS STA IBCMD ; TXA LSR A LSR A LSR A LSR A TAX LDA #0 STA $4F8,X STA $478,X JSR BOOTIO ; ;DOSINT - INITIALIZE DOS ; DOSINT EQU * LDX #$FF TXS STX IBVOL JMP RCPATCH RCBACK JSR SETKBD ; DI3 JMP DOSREL PAGE WBOOT EQU * LDA ADOSLD+1 SEC SBC IBBUFP+1

;CONTAINS PAGE#-1 OF TRK 0, SEC 1

;ERROR IF NOT ON PAGE BOUNDARY

; SET BOOT SLOT ; SET PREVIOUS SLOT ; SET PREV DRIVE

; COPY NO PAGES TO GET ; SET TRACK 0 ;ENDING SECTOR OF DOS IMAGE ;TO IOB ;END PAGE OF DOS IMAGE ;IS ONE LESS THAN ;START OF DOSLDR+BOOT ; SET READ ; SET PREV TRACK = 0

; GO READ DOS

; GO TO POST INIT ROUTINE

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 12 of 154

*

;

BOOTIO

STA BRWCNT LDA ADOSLD+1 STA IBBUFP+1 DEC IBBUFP+1 LDA #2 STA IBTRK LDA #4 STA IBSECT LDA #2 STA IBCMD JSR BOOTIO BACKWARDS TO TRK 0,SEC C LDA ADOSLD+1 STA GRSPG CLC ADC #9 STA IBBUFP+1 LDA #10 STA BRWCNT SEC SBC #1 STA GRPGC STA IBSECT JSR BOOTIO RTS DS 6,0 PAGE EQU * LDA BAIOB+1 LDY BAIOB JSR DISKIO

;COMPUT PAGE COUNT ;BUFFER=LAST PAGE OF RWTS ;ENDING TRACK ;ENDING SECTOR ;COMMAND = WRITE ;WRITE DOS IMAGE TRK 2,SEC 4 ;BOOTSTRAP LOAD ADDRESS ;BUFFER ADDRESS OF END OF BOOT ;SECTOR COUNT TO WRITE ;BOOT LAST SECTOR # ;START AT END OF RWTS&BOOT ;AND WRITE DOWN TO ZERO ;FILL WITH BRKS

;

BIO1 ;

LDY DEY BPL LDY NOP NOP DEC STY

IBSECT BIO1 #15

; GET SECTOR ; DECREMENT TO NEXT ;AT END OF TRACK? ;SET TO SECTOR 15

IBTRK IBSECT

; SET NEXT SECTOR

DEC DEC BNE RTS

IBBUFP+1 BRWCNT BOOTIO

; DECREMENT BUFFER POINTER ; DECREMENT PAGE COUNTER ; BR IF NOT DONE

RWTS DSKERR

;SAVE INTERUPT STATUS ;INHIBIT INTERUPT WHILE ; ACCESSING DISK ;MUST PASS BACK CARRY FLAG &

; DISKIO

PAGE PHP SEI JSR BCS

INTERUPT

DSKERR DLDSUP

PLP CLC RTS PLP SEC RTS LDA STA LDA STA LDA

;CARRY SET MEANS ERROR CCBBSA IBBUFP+1 #0 IBBUFP DCBVOL

;SET UP FOR DOS LOADER ;START ADDRESS ;INVERT VOLUME NUMBER

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 13 of 154

; CLRSEC CS1

EC3 NDPGS BRWCNT BAIOB ADOSLD

EOR STA RTS

#$FF IBVOL

LDA TAY STA INY BNE RTS BRK EQU DFB DFB DFB DFB DW DW PAGE

#0

;CLEAR SECTOR

(ZPGFCB),Y CS1 * 1 ; THEN ERROR, ELSE ; GO SCAN OPTIONS ; IF NUM1=0 ; THEN ERROR, ELSE GET OPTIONS ;RANGE ERROR! ;DISK CMD SYNTAX ERROR

; CLEAR INPUT OPTIONS ;DEFAULT VOLUME=0 ;PATCH FOR BYTE PARAMETER (WAS STA ; SET PASS 1

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 18 of 154

; SP1

JSR BNE CMP BNE

GNBC SP2 #$8D SP1

; ; ; ;

GO GET NON-BLANK CHAR BR IF NOT COMMA OR CR IF CHAR IS COMMA THEN GO GET CHAR

LDX LDA ORA EOR BNE

CMDNO INOPTS CMDSTB+1,X CMDSTB+1,X SERR1

; OPTIONS INPUT = I ; ALLOW OPTS = A ; IF (A OR I) XOR A NOT = 0 THEN ; WE HAVE UNALLOWED OPTIONS

LDX BEQ STA STX BNE

TEMP1A CMDGO TEMP1A LBUFD SP1

; ; ; ; ;

LDX CMP BEQ DEX BNE BEQ

#OPT1L OPTAB1-1,X SP4

; COMPARE CHAR HAVE WITH ; CHARS IN OPT TABLE ; IF FOUND CONTINUE,

SP3 SERR2

; IF NOT FOUND ; THEN SYNTAX ERROR

LDA BMI ORA STA DEX

OPTAB2-1,X SP8 INOPTS INOPTS

; IF CORRESPONDING OP TAB 2 IS ; MINUS THEN IT MONITOR BITS

STX JSR BCS

TEMP2A GETNUM SERR2

; ELSE A NUMERIC MUST FOLLOW ; FOLLOW

LDA ASL ASL TAY

TEMP2A A A

; GET IOTION NUMBER ; MULT BY 4

LDA BNE LDA CMP BCC LDA CMP BCC BNE LDA CMP BCC BNE

CNUM+1 SP5 CNUM OPTAB3,Y SERR3 CNUM+1 OPTAB3+3,Y SP6 SERR3 CNUM OPTAB3+2,Y SP6 SERR3A

; ; ; ; ;

LDA BNE TYA LSR TAY

TEMP1A SP1

; IF PASS 1, THEN ; DONT STORE RESULT

LDA STA LDA

CNUM+1 CUROPT+1,Y CNUM

;

;

; SP2 SP3

SERR2A ; SP4

IF THIS IS PASS 2 THEN DONE, ELSE SET PASS RESTORE LBUFD AND GO DO PASS 2

;

;

;

SP5 SERR3A

; SP6

IF RESULT NUM HI IS GT 0, THEN GT LOW RANGE TEST RESULT LOW WITH LOW RANGE (LOW) BR IF RESULT < LR

; BR IF LESS ; BR IF GREATER ; BR IF LESS ; BR IF GREATER

A

; ; STORE THE RESULT

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 19 of 154

SP7 ; SP8

STA JMP

CUROPT,Y SP1

EQU PHA LDA ORA STA PLA AND ORA STA BNE

*

BEQ

SERR2A

;BRANCH ALWAYS

JSR JMP

CMDGO1 CERTN

; CMDGO - EXECUTE COMMAND

EQU JSR JSR EQU LDA TAX LDA PHA LDA PHA RTS

* CLRSTS CLRCCB * CMDNO

#CIO INOPTS INOPTS #$7F IMBITS IMBITS SP7

; GO FOR NEXT OPT ; MONITOR REQ ; SAVE TYPE REQ ; SET OPTION OF CIO ; RESTOERE REQ ; CLEAR CIO ; OR WITH PREV IMBITS ; GO FOR NEXT

; ; CMDGO ; CMDGO1 ECMD

; ; ; ; ; ;

CMDETB+1,X

; GO CLEAR CCB ; ; ; ;

COMMAND NO IS CMD EXEC TAB INDEX GET CMD ADR ONTO STACK

CMDETB,X ; AND GOTO COMMAND

##################################################################################### # END OF FILE: CMDSCAN # LINES : 270 # CHARACTERS : 13581 # Formatter : Assembly Language Reformatter 1.0.2 (07 January 1998) #####################################################################################

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 20 of 154

======================================================================================== DOCUMENT CMDTBLS.pretty ======================================================================================== ; ; ; ;

##################################################################################### # PROJECT : APPLE ][ DOS 3.3 C SOURCE CODE LISTING -- (C) APPLE COMPUTER INC. 1983 # FILE NAME: CMDTBLS #####################################################################################

PAGE ; ; COMMAND NAME TABLE ; EC1 EQU * CMDNTB EQU * DCI "INIT" DCI "LOAD" DCI "SAVE" DCI "RUN" DCI "CHAIN" DCI "DELETE" DCI "LOCK" DCI "UNLOCK" DCI "CLOSE" DCI "READ" DCI "EXEC" DCI "WRITE" DCI "POSITION" DCI "OPEN" DCI "APPEND" DCI "RENAME" DCI "CATALOG" DCI "MON" DCI "NOMON" DCI "PR#" DCI "IN#" DCI "MAXFILES" DCI "FP" DCI "INT" DCI "BSAVE" DCI "BLOAD" DCI "BRUN" DCI "VERIFY" DFB 0 PAGE ; ; COMMAND SYNTAX OP EQUATES FOR SYNTAX BYTE ONE ; NPB EQU $80 NPE EQU $40 RTN FN1 EQU $20 FN2 EQU $10 NUM1 EQU $08 NUM2 EQU $04 RNONLY EQU $02 CREFLG EQU $01 CREATE FILES ; ; COMMAND SYNTAX OP EQUATES FOR SYNTAX BYTE TWO ; V EQU $40

; NO PARMS OK, COMMAND GOES TO BASIC ; NO PARMS OK, COMMAND TO EXECUTION ; ; ; ; ; ;

FILE NAME1 REGD FILE NAME2 REQD NUMERIC 0-7 REGD NUMERIC 1-10 REQD RUN TIME ONLY FLAG. FLAG TO INDICATE CMDS THAT MAY

; VOLUME ALLOWED

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 21 of 154

D EQU $20 ; DRIVE ALLOWED S EQU $10 ; SLOT ALLOWED L EQU $08 ; LENGTH ALLOWED R EQU $04 ; RECORD NUMBER ALLOWED B EQU $02 ; BYTE NUMBER ALLOWED ADR EQU $01 ; ADDRESS CIO EQU $80 ; C,I, OR O ALLOWED ; ; COMMAND SYNTAX TABLE ; EACH COMMAND HAS TWO BYTE ENTRY ; CMDSTB EQU * DFB FN1+CREFLG,V+D+S ; INIT DFB NPB+FN1,V+D+S ; LOAD DFB NPB+FN1+CREFLG,V+D+S ; SAVE DFB NPB+FN1,V+D+S ; RUN DFB FN1,V+D+S ; CHAIN DFB FN1,V+D+S ; DELETE DFB FN1,V+D+S ; LOCK DFB FN1,V+D+S ; UNLOCK DFB NPE+FN1,0 ; CLOSE DFB FN1+RNONLY,B+R ; READ DFB FN1,R+V+D+S ; EXEC DFB FN1+RNONLY,B+R ; WRITE DFB FN1+RNONLY,R ; POSITION DFB FN1+RNONLY+CREFLG,L+V+D+S ; OPEN DFB FN1+RNONLY,V+D+S ; APPEND DFB FN1+FN2,V+D+S ; RENAME DFB NPE,V+D+S ; CATALOG DFB NPE,CIO ; MONITOR DFB NPE,CIO ; NO MONITOR DFB NUM1,0 ; PR# DFB NUM1,0 ; IN# DFB NUM2,0 ; MAXFILES DFB NPE,V+D+S ; APPLESOFT DFB NPE,0 ; INT DFB FN1+CREFLG,V+D+S+ADR+L ; BSAVE DFB FN1,V+D+S+ADR ; BLOAD DFB FN1,V+D+S+ADR ; BRUN DFB FN1,V+D+S ; VERIFY PAGE ; ; OPTAB - OPTIONAL PARMS SYNTAX TABLES ; OPTAB1 EQU * DFB 'V'+$80,'D'+$80,'S'+$80,'L'+$80' DFB 'R'+$80,'B'+$80,'A'+$80,'C'+$80' DFB 'I'+$80,'O'+$80' OPT1L EQU *-OPTAB1 MI EQU $20 MO EQU $10 OPTAB2 EQU * DFB V,D,S,L DFB R,B,ADR,CIO+MC DFB CIO+MI,CIO+MO OPTAB3 EQU * DW 0 DW 254 ; VOL RANGE DW 1 DW 2 ; DRIVE RANGE DW 1 DW 7 ; SLOT RANGE DW 1

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 22 of 154

DW DW DW DW DW DW DW PAGE ; ; ERROR MESSAGE TABLES ; EMSG EQU DFB EM1 EQU DCI EM2 EQU EM3 EQU DCI EM4 EQU DCI EM5 EQU DCI EM6 EQU DCI EM7 EQU DCI EM8 EQU DCI EM9 EQU DCI EM10 EQU DCI EM11 EQU DCI EM12 EQU DCI EM13 EQU DCI EM14 EQU DCI ; EM15 EQU DCI DFB EMDTB EQU DFB DFB DFB DFB DFB ; ; ; ; ; ;

32767 0 32767 0 32767 0 $FFFF

; LENGTH RANGE ; REC NO RANGE ; REC BYTE NO RANGE ; ADDRESS RANGE

* $0D,$07,$8D *-EMSG "LANGUAGE NOT AVAILABLE" *-EMSG *-EMSG "RANGE ERROR" *-EMSG "WRITE PROTECTED" *-EMSG "END OF DATA" *-EMSG "FILE NOT FOUND" *-EMSG "VOLUME MISMATCH" *-EMSG "I/O ERROR" *-EMSG "DISK FULL" *-EMSG "FILE LOCKED" *-EMSG "SYNTAX ERROR" *-EMSG "NO BUFFERS AVAILABLE" *-EMSG "FILE TYPE MISMATCH" *-EMSG "PROGRAM TOO LARGE" *-EMSG "NOT DIRECT COMMAND" $8D * 0,EM1,EM2,EM3 EM4,EM5,EM6,EM7 EM8,EM9,EM10,EM11 EM12,EM13,EM14 EM15

##################################################################################### # END OF FILE: CMDTBLS # LINES : 164 # CHARACTERS : 7084 # Formatter : Assembly Language Reformatter 1.0.2 (07 January 1998) #####################################################################################

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 23 of 154

======================================================================================== DOCUMENT COREQUS.pretty ======================================================================================== ; ; ; ;

##################################################################################### # PROJECT : APPLE ][ DOS 3.3 C SOURCE CODE LISTING -- (C) APPLE COMPUTER INC. 1983 # FILE NAME: COREQUS #####################################################################################

SBTL *************************** * * * DISC-II * * 16-SECTOR FORMAT * * READ AND WRITE * * SUBROUTINES * * * *************************** * * * * * COPYRIGHT 1979 * * APPLE COMPUTER INC. * * * * ALL RIGHTS RESERVED * * * *************************** * * * MAR 18, 1979 * * WOZ * * * *************************** ASC1 EQU PAGE *************************** * * * CRITICAL TIMING * * REQUIRES PAGE BOUND * * CONSIDERATIONS FOR * * CODE AND DATA * * * * -----CODE----* * * * VIRTUALLY THE ENTIRE * * 'WRITE16' ROUTINE * * MUST NOT CROSS * * PAGE BOUNDARIES. * * * * THE WRITE16, READ16 * * AND RDADR16 SUBRS * * WHICH MUST NOT CROSS * * PAGE BOUNDARIES ARE * * NOTED IN COMMENTS. * * * * -----DATA----* * * * NBUF1 AND NBUF2 ARE * * 256-BYTE AND 86-BYTE * * NIBL BUFFERS IN RAM. * * BOTH MUST BEGIN ON * * PAGE BOUNDARIES. * * * * NIBLIZING TABLE 'NIBL' *

'16-SECTOR CORE ROUTINES'

*

;TELL RELOCATOR WHERE CORE STARTS

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 24 of 154

* (64 BYTES) MAPS 6-BIT * * NIBLS INTO VALID 7-BIT * * NIBLS. THIS TABLE * * MUST NOT CROSS A PAGE * * BOUNDARY. * * * * DENIBLIZING TABLE * * 'DNIBL' MAPS 7-BIT * * NIBLS INTO 6-BIT * * NIBLS. IT MUST BEGIN * * ON A PAGE BOUNDARY, * * BUT ONLY DNIBL,$96 TO * * DNIBL,$FF ARE USED. * * * *************************** PAGE *************************** * * * EQUATES * * * *************************** * * * ----PRENIBL16---* * AND POSTNB16 * * (16-SECTOR FORMAT) * * * *************************** BUF EQU $3E * * POINTS TO 256-BYTE * USER BUFFER ANYWHERE * IN MEMORY. PRENIBL16 * CONVERTS USER DATA * (IN BUF) INTO 6-BIT * NIBLS 00ABCDEF IN * NBUF1 AND NBUF2 PRIOR * TO 'WRITE'. POSTNBL16 * CONVERTS 6-BIT NIBLS * 00ABCDEF BACK TO USER * DATA IN BUF AFTER 'READ'. * T0 EQU $26 ************************ * * * ----RDADR16---* * * ************************ COUNT EQU $26 LAST EQU $26 CSUM EQU $27 CSSTV EQU $2C * CHECKSUM, SECTOR, TRACK, AND VOLUME. * ************************ * * * ---WRITE16--* * * * USES NBUF1, NBUF2, * * AND 64-BYTE TABLE * * 'NIBL'. * * * ************************ WTEMP EQU $26

TWO BYTE POINTER.

TEMP FOR POSTNBL16.

'MUST FIND' COUNT. 'ODD BIT' NIBLS. CHECKSUM BYTE. FOUR BYTES,

TEMP FOR DATA AT NBUF2,0.

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 25 of 154

SLOTZ EQU SLOTABS EQU * ************************ * * * ----READ16--* * (16-SECTOR FORMAT) * * * * USES NBUF1,NBUF2. * * USES LAST 106 BYTES * * OF A DATA PAGE FOR * * SIGNIFICANT BYTES * * OF DNIBL16 TABLE. * * * ************************ IDX EQU * ************************ * * * ---- SEEK ---* * * ************************ TRKCNT EQU PRIOR EQU TRKN EQU SLOTTEMP EQU CURTRK EQU * ************************ * * * ---- MSWAIT ---* * * ************************ MONTIMEL EQU MONTIMEH EQU * ************************ * * * ---- WRADR16 ---- * * * ************************ AA EQU NSECT EQU NVOL EQU TRK EQU * ************************ * * * DEVICE ADDRESS * * ASSIGNMENTS * * * ************************ PHASEOFF EQU PHASEON EQU Q6L EQU Q6H EQU Q7L EQU Q7H EQU ; ; ; ;

$27 $678

SLOTNUM IN Z-PAG LOC. SLOTNUM IN NON-ZPAG LOC.

$26

INDEX INTO (BUF).

$26 $27 $2A $2B $478

HALFTRKS MOVED COUNT. PRIOR HALFTRACK. DESIRED TRACK. SLOT NUM TIMES $10. CURRENT TRACK ON ENTRY.

$46 $47

MOTOR-ON TIME COUNTERS.

$3E $3F $41 $44

;TIMING CONSTANT ;SECTOR NUMBER ;VOLUME NUMBER ;TRACK NUMBER

$C080 $C081 $C08C $C08D $C08E $C08F

STEPPER PHASE STEPPER PHASE Q7L,Q6L=READ Q7L,Q6H=SENSE Q7H,Q6L=WRITE Q7H,Q6H=WRITE

OFF. ON. WPROT STORE

##################################################################################### # END OF FILE: COREQUS # LINES : 174 # CHARACTERS : 5595

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 26 of 154

; # Formatter : Assembly Language Reformatter 1.0.2 (07 January 1998) ; #####################################################################################

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 27 of 154

======================================================================================== DOCUMENT DOS.TO.DISK ======================================================================================== MONCIO CALL-151 BLOAD DOS33C.OBJ 6B00....m......] [..0..M..=.......] ['....+l>........] [....../..+l.....] [...............d] ['......][email protected].] [&.]6....5....5..] [.]6L.6..5..&.."L] [}"...B..........] [B..5.....L.&...]] [6....5..5..5..5.] [.5..5..5...3L.3.] [................] [................] [..............6.] [..7..7....7..7..] [7..7....7....7..] [7...7....7.JJJJ.] [......x...7.....] [7L.?...L....78..] [7..7..7..7..7...] [.7....7....7..7.] [.7..6.i...7....7] [8....6..7..7`...] [.....7..7..7..7.] [........7..7..7.] [.7..`.x..=..(.`(] [8`..5..7....7..5] [I...7`....B...`.] [.....7.6.`.....7] [.......`........] [......>J>..* 256-HEREL *+REMDR

* * *-45 CHRIN CHROUT FNAME1 FNAME2 SVBL BEGIN CCB * COS0-1 COS1-1 COS2-1 COS3-1 COS4-1 COS5-1 COS6-1

; START OF FTABS ; CHAR IN ADR ; CHAR OUT ADR

; CHANGED TO START BY RELOCATE ; CHAR OUTPUT STATE VECTOR TABLE

* EINIT-1 ELOAD-1 ESAVE-1 ERUN-1 ECHAIN-1 EDEL-1 ELOCK-1 EUNLK-1 ECLOSE-1 EREAD-1 EEXEC-1 EWRITE-1 EPOS-1 EOPEN-1 EAPND-1 EREN-1 ECAT-1 EMON-1 ENOMON-1 EPR-1 EIN-1 EMAXF-1 EAS-1 EINT-1 EBSV-1 EBLD-1

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 48 of 154

EAT1 ; ;NON-RELOCATING ; IBASVT CHAIN RUN BREAK GO CONT ASEQ IBVT

IBVTL ; AS1VT

AS1VTL ; AS2VT

AS2VTL

DW DW EQU PAGE

EBRUN-1 EVAR-1 *

ADRS EQU DW DW DW DW DW DW DW DW DW DW DW EQU

* IBCHN IBRUN IBBRK IBGO IBCONT 0 IBCHN IBRUN IBBRK IBGO IBCONT *-IBVT

DW DW DW DW DW DW EQU

ASRUN1 ASRUN1 ASBRK1 IBGO ASCNTU1 ASRSEQ1 *-AS1VT

DW DW DW DW DW DW EQU PAGE

ASRUN2 ASRUN2 ASBRK2 DBINIT ASCNTU2 ASRSEQ2 *-AS2VT

; ;DOS BASIC INTERPRETER - INITIAL ENTRY ; SC1 EQU * DBINIT EQU * LDA IBSLOT LSR A LSR A LSR A LSR A STA CS LDA IBDRVN STA CD LDA AITSTL EOR #ITSTV BNE IAS1 ;;ELSE INIT FOR IB STA ASIBSW LDX #IBVTL IIB1 LDA IBVT-1,X STA IBASVT-1,X DEX BNE IIB1 JMP INITAA ; IAS1 EQU *

; BASIC CONT ENTRY POINT

; GET BOOT SLOT

; ; ; ; ; ;

SET AS CUURENT SLOT GET BOOT DRIVE NUMBER SET AS CURRENT DRIVE GET APPLESOFT/IB TEST IF AS THEN GO TO AS INIT

; SET SW FOR IB ; GET IB VT LENGTH ; MOVE IB ADDR

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 49 of 154

IAS1A

; INITAA DBRST

ALWAYS) INITA1 INITA2 INITA3 ; INITA

LDA STA LDX LDA STA DEX BNE

#$40 ASIBSW #AS1VTL AS1VT-1,X IBASVT-1,X

EQU SEC BCS LDA BNE LDA BNE

*

ASL BPL LDA JSR CLC

A INITA3 #ATSTV SWTST

EQU PHP JSR LDA STA

*

; INDICATE ROM APPLESOFT ; MOVE ROM AS ADRS

IAS1A ; INDICATE INIT INITA ASIBSW INITA1 #ITSTV INITA2

MVCSW #0 MONMOD

;GET APPLESOFT/INITGER BASIC FLAG. ;BRANCH IF NOT INTIGER BASIC ;GET INTIGER TEST VALUE AND GO SET ; ROM SWITCH TO 'IB'. (BRANCH ;TEST FOR ROM APPLESOFT ;BRANCH IF RAM VERSION ;GET APPLESOFT TEST VALUE AND GO SET ;GO SELECT PROPER ROM BASIC. ; INDICATE RESET ; SAVE INIT/RESET ; GO MOVE CHAR SWITCH ; CLR MONITOR MODES

;

INITB INITC

IAS2A

IAS2B

; INITD

INITZ

STA PLP ROR STA BMI JMP JMP PAGE EQU ASL BPL STA LDX LDA STA DEX BNE LDX LDA STA DEX BPL EQU LDA STA JSR LDA BEQ PHA JSR PLA LDY STA EQU

OSTATE A ISTATE INITB (CONT) (GO) * A INITD ASIBSW #AS2VTL AS2VT-1,X IBASVT-1,X

; ; ; ; ; ; ;

CLEAR OUTSTATE AND EXECUTE STATE GET INIT/RESET SHIFT CARRY TO MSB SAVE INSTATE BR IF INIT GO TO CONTINUE ENTRY GO TO GO ENTRY

; OF ISTATE NOT ON ; THEN NOT RAM AS ; SET RAM AS ; MOVE RAM AS ADRS

IAS2A #29 FNAME2,X FNAME1,X IAS2B * DFNFTS CNFTBS BLDFTB ESTATE INITZ MVEFTA #0 (ZPGWRK),Y *

; GO BUILD FILE TABS ; AND SET MEM BOUNDS ; ; ; ; ;

GET EXEC STATE BR IF NOT EXECUTE SVE CHAR GO MOVE EX FILE TAB ADR TO ZP GET SAVED CHAR

;

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 50 of 154

JSR LDA

CLRSTS CMDNO

; SET IN AND OUT STATES TO ZERO ; IF NOT BOOT (DUPLICATED FROM LINES

BNE LDX LDA STA DEX BPL LDA STA

INITF #IFBL DBVECT,X $3D0,X

; THEN DONE

INITE DBVECT+2 ZRSET+1

;SET RESET VECTORS FOR NEW MONITOR. ;NOTE: THESE ARE NOT NORMALLY USED

EOR STA

#$A5 PWCNST

; ARE ONLY SET ONCE ON BOOT. ;POWER UP CONSTANT=COMPLIMENT OF HI

LDA STA

DBVECT+1 ZRSET

;SET LOW VECTOR ADDRESS. ;NOW APPLE RESET WILL KEEP DOS IN

LDA BNE

#6 INITF1

;INDICATE RUN ;LOAD AND RUN THE 'HELLO' PROGRAM

EQU LDA BEQ STA JMP EQU RTS

* SVCMD INITG CMDNO CMDGO1 *

4540, 4550) INITE

; MOVE RESTART VECTORS

AND RESET VECTOR. I/O LOOP. ; INITF INITF1 INITG ; IFB DBVECT

EQU JMP JMP JMP JMP CCBLDR EQU LDA LDY RTS IOBLDR EQU LDA LDY RTS JMP NOP NOP JMP (JMP IS FOR PROP RELOC) JMP DW DBRST,XOR(A5) ADR HI JMP JMP FUNCTION) JMP DW IFBL EQU ; ; ; ; ; ;

* DBRST DBINIT USERENT DISKIO * CCBADR+1 CCBADR

;USER EXTERNAL ENTRY TO FILE MANAGER

* AIOB+1 AIOB MVCSW MONBRK

;SET BREAK VECTOR FOR NEW MONITOR

MONRST

;AFTER RELOC TO $3F2 THIS BECOMES:

IORTS MONRST

;SET AS '&' FUNC TO KNOWN RTS ;GOTO MONITOR RESET (CONTROL Y

MONRST MONRST *-IFB-1

;GOTO MONITOR RESET ;IRQ GOTO MONITOR RESET

##################################################################################### # END OF FILE: DOSINIT # LINES : 226 # CHARACTERS : 10022 # Formatter : Assembly Language Reformatter 1.0.2 (07 January 1998) #####################################################################################

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 51 of 154

======================================================================================== DOCUMENT DOSPTCH.pretty ======================================================================================== ; ; ; ;

##################################################################################### # PROJECT : APPLE ][ DOS 3.3 C SOURCE CODE LISTING -- (C) APPLE COMPUTER INC. 1983 # FILE NAME: DOSPTCH #####################################################################################

SBTL "DOS PATCHES" ******************************** * * DOS 3.2 PATCHES BY DICK HUSTON * ******************************** * AFTER THE FACT PATCHES * CLRBYTE CALLED FROM DOS2 LABEL SOPTS +7 LINES * CLRSTS1 CALLED FROM DOS3 LABEL ERROR +2 LINES * ERROR9X CALLED FROM DOS5 LABEL ERROR9 * * REP 40 * * DOS 3.3 REVISION B PATCH * REP 40 ***************************** SDP1 EQU * RCPATCH EQU * JSR SETVID LDA $C081 LDA $C081 LDA #0 STA $E000 DO DOS33B JSR OFF80 JMP RCBACK ELSE JMP RCBACK DS 3,0 FIN ****************************** CLRBYTE STA TEMP1A STA CB STA CB+1 RTS SKP 4 CLRSTS1 JSR CLRSTS STY RSTATE RTS ***************************** ERROR9X JSR RTNFCB LDX ENTSTK TXS JSR CLALL TSX STX ENTSTK LDA #9 JMP ERRORA ****************************** EDP1 EQU *-1 ENDOFDOS EQU *

;START OF DOS PATCHES

;SET TYPE PARAM DEFAUTL=0

;PREVENTS FOREVER 'FILE NOT FOUND' ; IN APPLESOFT ;GET STACK ;MESSY MESSY ;GO CLOSE EVERYBODY ;RESTORE SAVE STK ;AND BACK ;END OF DOS PATCHES FOR RELOCTR

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 52 of 154

DO FAIL FIN ; ; ; ; ; ;

ENDOFDOS-$4000 2,'DOS

LENGTH NOT CORRECT'

##################################################################################### # END OF FILE: DOSPTCH # LINES : 56 # CHARACTERS : 2060 # Formatter : Assembly Language Reformatter 1.0.2 (07 January 1998) #####################################################################################

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 53 of 154

======================================================================================== DOCUMENT EASM.pretty ======================================================================================== ; ; ; ;

##################################################################################### # PROJECT : APPLE ][ DOS 3.3 C SOURCE CODE LISTING -- (C) APPLE COMPUTER INC. 1983 # FILE NAME: EASM #####################################################################################

NEW .CLOSE DR1 ASMDOS33C,DOS33C.OBJ ASMDOS33C,DOS33C.OBJ ASMDOS33C,DOS33C.OBJ

; ; ; ; ; ;

##################################################################################### # END OF FILE: EASM # LINES : 9 # CHARACTERS : 72 # Formatter : Assembly Language Reformatter 1.0.2 (07 January 1998) #####################################################################################

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 54 of 154

======================================================================================== DOCUMENT FDELCAT.pretty ======================================================================================== ; ; ; ;

##################################################################################### # PROJECT : APPLE ][ DOS 3.3 C SOURCE CODE LISTING -- (C) APPLE COMPUTER INC. 1983 # FILE NAME: FDELCAT #####################################################################################

PAGE ; * FLOCK - LOCK A FILE ; FLOCK LDA STA BNE ; * FUNLCK - UNLOCK A FILE ; FUNLCK LDA STA ; LCKGO EQU ; JSR LDX LDA AND ORA STA JSR GOGOOD JMP ; * FPOSTN - POSITION A FILE FPOSTN JSR JMP ; ; * FVAR - VARIFY A FILE ; FVAR EQU JSR VAR1 JSR BCS INC BNE INC JMP PAGE ; * FDEL - DELETE A FILE ; FDEL EQU JSR ; FD2 LDX LDA BPL JMP ; FD3 EQU LDX

#$80 TEMP3 LCKGO

; REMEMBER LOCK

#00 TEMP3

; REMEMBER UNLOCK

* DOPEN TEMP1 VDFILE+2,X #$7F TEMP3 VDFILE+2,X WRVDIR GOODIO

; GO OPEN FILE

LOCSEC GOODIO

; GO POSITION ; DONE

* DOPEN LOCNXB GOGOOD DCBCRS VAR1 DCBCRS+1 VAR1

* DOPEN TEMP1 VDFILE+2,X FD3 ERRR10 * TEMP1

; GET FILE USE CODE ; TURN OFF LOCK

; ; ; ;

OPEN FILE READ A SECTOR BR IF EOF INCREMENT SECTOR

; READ THIS ONE

; GO OPEN FILE ; SAVED INDEX ; IS FILE LOCKED ; BR NOT LOCKED

; GET SAVED INDEX

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 55 of 154

FD4

FD5

FD6

FD7 ; FDSUB

* FDS1

LDA STA STA LDA STA LDY STY JSR CLC JSR BCS JSR LDY STY LDA BMI BEQ PHA INY LDA TAY PLA JSR LDY INY INY BNE LDA LDY JSR SEC BCS EQU JSR JMP

VDFILE,X DCBFDT VDFILE+32,X #$FF VDFILE,X VDFILE+1,X DCBFDS WRVDIR

; ; ; ; ; ; ; ;

GET DIR TRACK SET AS 1ST FD TRACK SAVE IN LC OF FN DELETED FILE MARKER CLEAR ENTRY GET DIR SECTOR SET AS 1ST FD SEC GO WRITE VOLUME DIR

RDFDIR FD7 MVFCBD #FDENT TEMP1 (ZPGFCB),Y FD6 FD6

; ; ; ; ; ; ; ; ;

GET 1ST FILE DIR SECTOR BR IF NO MORE MOVE DIR TO ZPG POINT Y TO 1ST SEC ENT SAVE Y GET REACK BR IF NONE BR IF END OF FILE SAVE TRK

(ZPGFCB),Y

; ; ; ; ; ;

GET SECTOR TO Y GET TRK GO FREE SECTOR GET DIR INDEX INCR TO NEXT ENTRY

; ; ; ; ; ;

BR NOT DONE THIS DIR GET THIS DIR TRK AND SECTOR AND GO FREE IT GO READ NEXT DIR

FDSUB TEMP1 FD5 DCBCDT DCBCDS FDSUB FD4 * WRVTOC GOODIO

EQU * SEC JSR FRESEC LDA #0 LDX #5 ;>16 SECTORS/TRK WILL WORK STA DCBALS,X DEX BPL FDS1 RTS PAGE

; * RDIR - PRINT DIRECTORY ; RDIR EQU JSR LDA STA JSR LDA STA JSR JSR LDX RD0 LDA JSR DEX

* DCBSUP #$FF DCBVOL RDVTOC #22 TEMP2 PRCR PRCR #VML VOLMES,X PRINT

; SET FOR RE USE OF SEC ; GO FREE SECTOR ; CLEAR DCB BIT MAP ;CLEAR ALL OF TRK BITMAP SO

; SET 21 LINES ; ; ; ; ; ;

GO PRINT PRINT ANOTHER CHAR VOLUME MSG LENGTH GET MSG CHAR PRINT IT DECREMENT COUNT

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 56 of 154

BPL

RD0

; BR IF MORE

STX LDA STA JSR

CNUM+1 IBSMOD CNUM PRNUM

; MOVE VOL NO FOR ; CONVERSION ; GO PRINT VOL NO

JSR JSR

PRCR PRCR

; PRINT CR ; AND AGAIN

;

; ; CLC ; RD1 RD2

; FIRST RECORD

JSR BCS LDX STX LDA BEQ BMI

RDVDIR RD5 #0 TEMP1 VDFILE,X RD5 RD4

; GO READ REC ; ; ; ; ;

SET INDEX=0 SAVE INDEX GET TRACK BR IF END OF DIR BR IF DELETED

LDY LDA BPL LDY TYA JSR

#$A0 VDFILE+2,X RD2A #'*'+$80

; ; ; ; ; ;

BLANK GET TYPE BR IF NOT LOCKED AST ACU = AST OR BLANK PRINT ACU

LDA AND LDY ASL ASL BCS DEY BNE EQU LDA JSR LDA JSR

VDFILE+2,X #$7F #7 A A RD2C

LDA STA LDA STA JSR LDA JSR

VDFILE+33,X CNUM VDFILE+34,X CNUM+1 PRNUM #$A0 PRINT

;

RD2A

PRINT

;

RD2B

RD2C

RD2B * FTTAB,Y PRINT #$A0 PRINT

; GET TYPE ; MASK OUT MISC ; SET INDEX = 7 ;GET RID OF HI BIT ; SHIFT OUT MSB ; BR IF TYPE BIT OUT ; DEC INDEX ; BR IF NOT ACC BITS ; ; ; ;

GET TYPE CODE PRINT IT BLANK PRINT

; ; MOVE FILE LENGTH ; TO CNUM ; GO PRINT NUMBER ; BLANK ; PRINT

;

RD3

RD3A RD4

INX INX INX LDY LDA JSR INX DEY BPL EQU JSR JSR BCC BCS

#29 VDFILE,X PRINT

; GET CHAR ; PRINT CHAR

RD3 * PRCR VDINC RD2 RD1

; ; ; ;

GO PRINT CR INCR INDEX BR IF MORE IN DIR GO READ NEXT DIR SECT

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 57 of 154

; RD5 ; PRCR

PRCR1 PRNUM PRN1 ; PRN2

JMP

GOODIO

; DONE

EQU LDA JSR DEC BNE JSR LDA STA RTS PAGE EQU LDY LDA PHA

* #$8D PRINT TEMP2 PRCR1 GETKEY #21 TEMP2

; ; ; ; ; ;

CR PRINTED DEC LINE COUNTER BR IF NOT ZERO WAIT FOR INPUT RESET LINE COUNTER

; DONE * #2 #0

; 3 DIGITS ; INIT DIGIT TO ZERO ; SAVE IT

LDA CMP BCC

CNUM CVTAB,Y PRN3

; GET NUMBER ; IF NUM < CVTAB ENTRY ; THEN DONE THIS DIGIT

SBC STA LDA SBC STA PLA ADC PHA JMP

CVTAB,Y CNUM CNUM+1 #0 CNUM+1

; SUBTRACT TABLE ENTRY ; FROM NUM

EQU PLA ORA JSR DEY BPL

*

;

; PRN3

; INCREMENT DIGIT #0 PRN2

#$B0 PRINT PRN1

; TRY AGAIN ; ; ; ; ;

GET DIGIT ADD ASCII 0 PRINT IT DECREMENT DIGIT COUNT BR IF MORE DIGIT

; RTS PAGE ; * CLCFCB - GET FCB VIA INDEX AND MOVE IT ; CLCFCB EQU * ; JSR MVFCBP LDY #0 STY CCBSTA CF3 LDA (ZPGFCB),Y STA FCB,Y INY CPY #FCBLEN BNE CF3 ; CLC RTS ; * RTNFCB - MOVE FCB FROM WORK AREA TO FCB ; RTNFCB EQU * JSR MVFCBP ;

; DONE

; MOVE FCB PTR TO ZPG ; MOVE FCB TO ; FCB WORK AREA

; DONE

; MOVE FCB ADR TO ZPG

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 58 of 154

RF1

; ; ; ; ; ;

LDY LDA STA INY CPY BNE RTS

#0 FCB,Y (ZPGFCB),Y #FCBLEN RF1

##################################################################################### # END OF FILE: FDELCAT # LINES : 249 # CHARACTERS : 11371 # Formatter : Assembly Language Reformatter 1.0.2 (07 January 1998) #####################################################################################

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 59 of 154

======================================================================================== DOCUMENT FDOSENT.pretty ======================================================================================== ; ; ; ;

##################################################################################### # PROJECT : APPLE ][ DOS 3.3 C SOURCE CODE LISTING -- (C) APPLE COMPUTER INC. 1983 # FILE NAME: FDOSENT #####################################################################################

PAGE ; ; MISC BUT REQD CELLS ; CFTABA DDB 0 ISTATE DFB 0 OSTATE DFB 0 SVOUTS DDB 0 SVINS DDB 0 CNFTBS DFB 0 DFNFTB DFB 3 SVSTK DFB 0 SVX DFB 0 SVY DFB 0 SVA DFB 0 LBUFD DFB 0 MONMOD DFB 0 MC EQU $40 *MI EQU $20 ; MONITOR INPUT *MO EQU $10 ; MONITOR OUTPUT CMDNO DFB $00 SVBL DFB 0,0 SVCMD DFB 0 TEMP1A DFB 0 TEMP2A DFB 0 INOPTS DFB 0 CUROPT EQU * CV DW 0 CD DW 0 CS DW 0 CL DW 1 CR DW 0 CB DW 0 CA DW 0 IMBITS DFB 0 MSB ON FNAME1 ASC "HELLO MSB OFF FNAME2 DS 30,$A0 DFNFTS DFB 3 CCHAR DFB $84 ESTATE DFB 0 EFTABA DFB 0,0 ASIBSW DFB 0 RSTATE DFB 0 RELOC FASB DFB $C1,$D0,$D0,$CC DFB $C5,$D3,$CF,$C6 DFB $D4 FASBL EQU *-FASB PAGE ; ; DOS ADR TABLES (RELOCATED)

; ; ; ; ; ; ; ; ; ; ; ; ; ;

CURRENT FILE TABLE POINTER INPUT STATE OUTPUT STATE SAVED OUT SWITCH SAVED IN SWITCH CURRENT NO FILE TABLES DEFAULT NO FILE TABLES SAVED STACK PTR DSAVED X REG SAVED Y REG SAVED ACU LINE BUFF DISPL MONITOR MODE BITS MONITOR CMDS

; COMMAND NO IS ZERO FOR BOOT UP

; ; ; ; ; ; ; ; ;

INPUT OPTIONS CURRENT OPTIONS VOLUME DRIVE SLOT RECORD LENGTH RECORD NUMBER RECORD BYTE ADDRESS " ; FILENAME 1"

;FILENAME 2 ; DEFAULT FILE TABLES = 3 ; CONTROL CHAR ; EXECUTE STATE ; EXECUTE FILE TABLE POINTER ; APPLESOFT, IB SWITCH ;FOR APPLESOFT RUN PROGRAM AFTER ;'APPLESOFT' WITH BIT 7 HIGH

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 60 of 154

; SAT2 AIOB AVTOC AVOLDR AEND ; CMDVT

; RVT

; WVT

EAT2

EQU DW DW DW DW

* IOB VTOC VOLDIR ENDOFDOS

; 5-ADR ; 6-ADR ; 7-ADR ;END OF

DW DW DW DW DW DW DW DW DW DW DW DW DW DW

GOODIO-1 FOPEN-1 FCLOSE-1 FREAD-1 FWRITE-1 FDEL-1 RDIR-1 FLOCK-1 FUNLCK-1 FRNME-1 FPOSTN-1 FFMT-1 FVAR-1 GOODIO-1

; ; ; ; ; ; ; ; ; ; ; ; ; ;

0-NULL 1-OPEN FILE 2-CLOSE FILE 3-READ DATA 4-WRITE DATA 5-DELETE FILE 6-READ DIRECTORY 7-LOCK A FILE 8-UNLOCK A FILE 9-RENAME 10-POSITION A FILE FORMAT VARIFY 11-SPARE

EQU DW DW DW DW DW DW

* GOODIO-1 RNXBYT-1 RNXBLK-1 RSPBYT-1 RSPBLK-1 GOODIO-1

; ; ; ; ;

1-RD NEXT BYTE 1-RD NEXT BLOCK 2-RD SPECIFIC BYTE 3 - RD SPECIFIC BLOCK 4 - SPARE

EQU DW DW DW DW DW DW EQU PAGE

* GOODIO-1 WNXBYT-1 WNXBLK-1 WSPBYT-1 WSPBLK-1 GOODIO-1 *

; ; ; ; ;

1-WR NEXT BYTE WR NEXT BLOCK 2-WR SPECIFIC BYTE 3-WR SPECIFIC BLOCK 4 - SPARE

; ; USERENT - DOS EXTERNAL ENTRY POINT (USER ENTRY) ; ENTRY PARM: ; A= HIGH ADDRESS OF CCB ; Y= LOW ADDRESS OF CCB ; X= 0 IF CREATE DESIRED ; X> 0 IF CREATE NOT DESIRED ; EXIT PARM: ; CARRY CLEAR = OPERATION OK ; CARRY SET = ERROR ; SC2 EQU * USERENT CPX #0 NOT BEQ USRCR STILL IS RETURNED LDX #2 USRCR STX CMDNO DOSENT EQU * TSX STX ENTSTK JSR CLCFCB LDA CCBREQ CMP #CRQMAX

IOB VTOC VOLDIR DOS

;IF X=0 THEN FILE ENTRY CREATED IF ; FOUND. NOTE: FILE NOT FOUND ERROR ;INDICATE NO CREATE ALLOWED ;SET UP FOR CREATE CAPIBILITY

; GO CALCULATE FCB ; GET REQUEST ; TTEST REQ RANGE

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 61 of 154

DENRTS ERR2 ; ; ; ; ; ;

BCS ASL TAX LDA PHA LDA PHA RTS JMP

ERR2 A

; BR OUT OF RANGE ; REQ CODE *2

CMDVT+1,X

; PUSH ADR ONTO STACK

CMDVT,X ERROR2

##################################################################################### # END OF FILE: FDOSENT # LINES : 122 # CHARACTERS : 6315 # Formatter : Assembly Language Reformatter 1.0.2 (07 January 1998) #####################################################################################

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 62 of 154

======================================================================================== DOCUMENT FLOCNXB.pretty ======================================================================================== ; ; ; ;

##################################################################################### # PROJECT : APPLE ][ DOS 3.3 C SOURCE CODE LISTING -- (C) APPLE COMPUTER INC. 1983 # FILE NAME: FLOCNXB #####################################################################################

PAGE ; ;RDVTOC - READ VTOC ;WRVTOC - WRITE VTOC ; RDVTOC EQU * LDA #IBCRTS BNE VTIO WRVTOC EQU * LDA #IBCWTS ; VTIO LDY AVTOC STY IBBUFP LDY AVTOC+1 STY IBBUFP+1 ; LDX DCBVTN LDY #0 JMP DCBIO PAGE ; ;RDVDIR - READ VOLUME DIRECTOR ; RDVDIR EQU * PHP JSR MVVDBA ; PLP BCS RVDA ; RVDC LDY VDIRSC LDX VDIRTK BNE RVDGO ; RVDA EQU * LDX VDLTRK BNE RDVC SEC RTS ; RDVC LDY VDLSEC RVDGO EQU * STX CVDTRK STY CVDSEC LDA #IBCRTS JSR DCBIO CLC RTS PAGE ; ;WRVDIR - WRITE VOLUME DIRECTORY SECTOR ; WRVDIR EQU *

; READ ; WRITE ; MOVE BUFF ADR

; GET TRACK ; GO DO I/O

; SAVE STATUS ; GET STATUS ; BR IF R0 NEXT ; GET 1ST SECTOR ; GET FIRST TRK ; GO READ ; GET LINK TRACK ; BR IF A LINK ; SET END OF DIR ; GET SECTOR ; ; ; ;

SET CUR TRACK SET CUR SECTOR GET CMD GO DO I/O

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 63 of 154

JSR

MVVDBA

LDX LDY LDA JMP

CVDTRK CVDSEC #IBCWTS DCBIO

;

; ;MVVDBA - MOVE VOL DIR BUF ADR TO IOB ; MVVDBA EQU * LDA AVOLDR STA IBBUFP LDA AVOLDR+1 STA IBBUFP+1 RTS PAGE ; ;DCBIO - DO I/O FOR A DCB ; DCBIO EQU * STX IBTRK STY IBSECT DCBIO2 EQU * STA IBCMD CMP #IBCWTS BNE DCBIO1 ORA DCBWRF STA DCBWRF DCBIO1 EQU * LDA DCBVOL EOR #$FF STA IBVOL LDA DCBSLT STA IBSLOT LDA DCBDRV STA IBDRVN LDA DCBSDL STA IBDLEN LDA DCBSDL+1 STA IBDLEN+1 LDA #1 STA IBTYPE ; LDY AIOB LDA AIOB+1 JSR DISKIO ; LDA IBSMOD STA CCBVOL LDA #$FF STA IBVOL BCS BADIO RTS ; BADIO LDA IBSTAT LDY #CREVMM CMP #IBVMME BEQ BD2 LDY #CREPRO CMP #IBWPER BEQ BD2 LDY #CREIOE BD2 TYA

; ; ; ;

CURRENT TRACK CURRENT SECTOR WRITE COMMAND GO DO I/O

; MOVE ADR

; TRACK ; SECTOR ; COMMAND

; VOL ; UNINVERT VOL BITS ; SLOT ; DRIVE ; LENGTH

; IOB TYPE ; IOB ADR ; GO DO I/O

; RESET VOL ; BR IF BAD ; RTN IF GOOD ; GET STATUS ; WAS IT VOLUME MISMATCH ; BR IF YES

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 64 of 154

JMP PAGE

ERRORB

; ;LOCNXB - LOCATE NEXT BYTE ; LOCNXB EQU * LDA DCBCRS CMP DCBCMS BNE LNB1 LDA DCBCRS+1 CMP DCBCMS+1 BEQ LNB8 ; LNB1 EQU * JSR WRSECT ; LNB2 LDA DCBCRS+1 CMP DCBDFS+1 BCC LNB4 BNE LNB3 LDA DCBCRS CMP DCBDFS BCC LNB4 ; LNB3 LDA DCBCRS+1 CMP DCBDNF+1 BCC LNB6 BNE LNB4 LDA DCBCRS CMP DCBDNF BCC LNB6 ;REQD SECTOR IN A NEXT DIRECTORY LNB4 JSR RDFDIR BCC LNB2 RTS ; ; LNB6 EQU * SEC LDA DCBCRS SBC DCBDFS ASL A ADC #FDENT TAY JSR MVFCBD LDA (ZPGFCB),Y BNE LNB7 LDA CCBREQ CMP #CRQWR BEQ LNB7A SEC RTS LNB7A JSR GNWSEC JMP LNBCON LNB7 STA DCBTRK INY LDA (ZPGFCB),Y STA DCBSEC JSR RDSECT LNBCON LDA DCBCRS STA DCBCMS LDA DCBCRS+1 STA DCBCMS+1

; GO RTN

; IS THE CURRENT RELATIVE SECTOR ; EQUAL TO THE CURRENT MEM SECTOR ; BR IF NOT EQ ; BR IF REQD SECTOR IN MEM ; NEED A DIFFERENT SECTOR IN MEM ; GO WRITE SECTOR (IF REQD) ; ; ; ; ;

IS CURRENT REL SECTORY IN CURRENT DIRECTORY (LOW LIMIT) BR IF IN A PREVIOUS DIR BR IF MAYBE IN THIS ONE TEST LOW BYTES

; BR IF IN PREVIOUS DIR ; ; ; ;

IS IN BR BR

CURRENT REL SECTOR CURRENT DIRECTOR (HI LIMIT) IF IN THIS ONE IF IN A NEXT DIR

; BR IF IN THIS ONE ; GO READ NEXT FILE DIR ; BR NXT AVAIL ; RETURN IF EOF DIR ; CALCULATE DISPL INTO DIR ; REQD REL SECTOR MINUS ; TIMES 2 ; PLUS DISPL TO 1ST ; MOVE DIR ADR TO ZPG ; GET TRACK ; BR IF NOT ZERO ; WRITE!

; GO GET A NEW SECTOR ; SET TRK INTO DCB ; ; ; ;

GET SECTOR PUT INTO DCB GO READ SECTOR MOVE CUR REL SECTOR

; TO CUR MEM SECTOR

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 65 of 154

; LNB8

; ; GNWSEC

EQU JSR LDY CLC RTS PAGE

* MVFCBS DCBCSB

EQU STY JSR LDY INY STA STA DEY LDA STA STA

* TEMP2 GETSEC TEMP2

; NEED NEW SECTOR ; SAVE DIR INDEX ; GET A SECTOR

(ZPGFCB),Y DCBSEC

; SET NEW SECTOR

JSR JSR

MVFCBS CLRSEC

LDA ORA STA RTS PAGE

#$C0 DCBWRF DCBWRF

DCBATK (ZPGFCB),Y DCBTRK

; ; ; ;

MOVE SECTOR BUFF ADR TO ZP GET SECT BYTE CARRY CLEAR = ALL OK DONE

; SET NEW TRACK

; ; GO CLEAR SECTOR

; ;

; ;INCRRB - INCREMENT RELATIVE RECORD BYTE ; INCRRB EQU * LDX DCBCRR STX CCBRRN LDX DCBCRR+1 STX CCBRRN+1 LDX DCBCRB LDY DCBCRB+1 STX CCBBYT STY CCBBYT+1 INX BNE INCR1 INY ; INCR1 CPY DCBRCL+1 BNE INCR2 CPX DCBRCL BNE INCR2 LDX #0 LDY #0 INC DCBCRR BNE INCR2 INC DCBCRR+1 ; INCR2 STX DCBCRB STY DCBCRB+1 ; RTS PAGE ; ;INCSCB - INCREMENT SECTOR BYTE

; ; ; ;

INDICATE BOTH DIR AND SECTOR MUST BE WRITTEN DONE

; MOVE BYTE JUST READ OR WRITTEN

; X=REL BYTE (LOW) ; Y=REL BYTE HI ; INC REL BYTE (LOW) ; BR IF NO CARRY ; INC REL BYTE (HI) ; REL BYTE=REC LENGTH ; BR IF NOT ; TEST LOW BYTES ; RESET REL BYTE TO ZERO ; AND INCR ; RELATIVE RECORD ; SAVE NEW RELATIVE BYTE

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 66 of 154

; INCSCB

; ; INCS2

EQU INC BNE INC BNE INC

* DCBCSB INCS2 DCBCRS INCS2 DCBCRS+1

EQU RTS PAGE

*

; ;MIBDA - MOVE AND INCREMENT CCBDAT ; MIBDA EQU * LDY CCBBBA LDX CCBBBA+1 STY ZPGFCB STX ZPGFCB+1 ; INC CCBBBA BNE MIB1 INC CCBBBA+1 MIB1 RTS ; ;DTBLN - DECREMENT BLOCK LENGTH AND TEST ZERO ; DTBLN EQU * LDY CCBBLN BNE DTB1 LDX CCBBLN+1 BEQ DTB2 DEC CCBBLN+1 DTB1 DEC CCBBLN RTS ; DTB2 JMP GOODIO ; ; ; ; ; ;

; ; ; ;

INC SECTOR BYTE BR IF NOT FULL AND INCR RELATIVE SECTOR

; DONE

; Y=ADR LOW ; X=ADR HI ; PUT ADR INTO ZPG ; ; ; ;

INC ADR LOW BR IF NOT ZERO INC ADR HI DONE

; ; ; ; ; ; ;

GET LEN LOW BR IF NOT ZERO GET LEN HI BR IF LEN=0 DEC LEN (HIGH) DEC LEN (LOW) DONE

; FINISHED BLOCK

##################################################################################### # END OF FILE: FLOCNXB # LINES : 280 # CHARACTERS : 12148 # Formatter : Assembly Language Reformatter 1.0.2 (07 January 1998) #####################################################################################

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 67 of 154

======================================================================================== DOCUMENT FLOCSEC.pretty ======================================================================================== ; ; ; ;

##################################################################################### # PROJECT : APPLE ][ DOS 3.3 C SOURCE CODE LISTING -- (C) APPLE COMPUTER INC. 1983 # FILE NAME: FLOCSEC #####################################################################################

PAGE ; ;FNDFIL - FIND FILE NAME IN VOLUUME DIR ; FNDFIL EQU * JSR RDVTOC LDA CCBFN1 STA ZPGFCB LDA CCBFN1+1 STA ZPGFCB+1 LDA #1 FF1 STA TEMP2 LDA #0 STA DCBVDR CLC FF2 EQU * INC DCBVDR JSR RDVDIR BCS FF4A LDX #0 ; FF3 STX TEMP1 LDA VDFILE,X BEQ FF6 BMI FF7 LDY #0 INX INX FF4 INX LDA (ZPGFCB),Y CMP VDFILE,X BNE FF5 INY CPY #30 BNE FF4 LDX TEMP1 CLC RTS ; FF5 EQU * JSR VDINC BCC FF3 BCS FF2 ; FF6 LDY TEMP2 BNE FF1 ; FF7 LDY TEMP2 BNE FF5 ; MVFN EQU * LDY #0 INX

; GO GET VTOC ; MOVE FN PTR ; TO ZERO PAGE

; GO GET VDIR SECTOR ; SET FOR 1ST FILE ; ; ; ; ;

SAVE INDEX GET FILE TRK BR IF LAST ENTRY BR DELETED ENTRY X=X+3

; GET FN CHAR ; COMPARE TO ENTRY CHAR ; BR IF NOT SAME ; ; ; ; ;

ALL 30 CHARS BR IF NOT GET INDEX FILE FOUND RETURN

; LOOKING FOR DELETED ; BR IF NOT (DO) ; LOOKING FOR EMPTY ; BR IF NOT ; HAVE NEW ENTTRY

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 68 of 154

FF8

INX INX LDA STA INY CPY BNE

(ZPGFCB),Y VDFILE,X

; MOVE FILE NAME

#30 FF8

;

VDINC

FF4A

LDX SEC RTS EQU CLC LDA ADC TAX CPX RTS EQU LDA LDY BNE JMP PAGE

; ;GETSEC - GET A SECTOR ; GETSEC EQU LDA BEQ ; GS0 EQU DEC BMI ; CLC LDX GS1 ROL DEX BNE BCC ; INC BNE INC GS1A EQU LDA RTS ; CS2 LDA STA ; GSS1 LDA STA JSR ; GS2 EQU CLC LDA ADC BEQ CMP BCC

TEMP1

; GET INDEX ; SET NOT OLD ; DONE

* TEMP1 #35 #VDFLEN * #0 TEMP2 FF1 ERROR9

* DCBATK GSS1

; GET ALLOCATED TRK ; BR IF NONE

* DCBALS CS2

; DECREMENT SECTOR NO ; BR IF NO SECTORS REM

#4 DCBABM-1,X

; 4 BYTE SHIFT ; SHIFT BYTE LEFT

GS1 GS0

; BR IF NO SECTOR

DCBNSA GS1A DCBNSA+1 * DCBALS

; GET ALLOCATED SECTOR ; RETURN

#0 DCBATK

; CLEAR ALLOCATED ; TRK

#0 TEMP3 RDVTOC

; SET SEARCH STATE=0 ; GET VTOC

* VALCA1 VALCA2 GS3 VNOTRK GS5

; GET LAST ALLOCATTED TRK ; AD (+1) OR (-1) ; BR IF DECK TO ZERO ; BR IF NOT AT OUTER LIMIT

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 69 of 154

GS3

GS4 GS5

LDA BNE LDA BNE LDA STA STA CLC ADC STA STA

#$FF GS4 TEMP3 ERR9 #1 TEMP3 VALCA2

; SET (-1)

#17 VALCA1 DCBATK

; ADD VTOC TRK NO ; SET NEW LAST ALLOCATED ; PUT IN DCB

; ; ; ; ;

GET SEARCH STATE BR IF NOT ZERO SET (+1) SET SEARCH STATE = 1 SET NEW (+1) OR -1)

;

GS6

GS7

ERR9

TAY ASL ASL TAY LDX CLC LDA STA BEQ SEC LDA STA DEY DEX BNE BCC JSR LDA STA BNE JMP PAGE

A A

; ALLOCATED TRACK ; TIME 4

#4 VSECAL+3,Y DCBABM-1,X GS7 #0 VSECAL+3,Y GS6 GS2 WRVTOC VNOSEC DCBALS GS0 ERROR9

; ;FRETRK - FREE TRACK OF SECTORS ; FRETRK EQU * LDA DCBATK BNE FT1 RTS FT1 PHA JSR RDVTOC LDY DCBALS PLA CLC JSR FRESEC LDA #0 STA DCBATK JMP WRVTOC ; ;FRESEC - FREE A SECTOR ;A=TRK, Y=SECTOR, C=ON/OFF ; FRESEC EQU * FS1 LDX #252 FS2 ROR DCBABM-252,X INX BNE FS2 INY CPY VNOSEC BNE FS1 ;

; MOVE BIT MAP BYTE ; BR IF NO BITS ON ; SET HAVE A SECTOR ; CLEAR VTOC BYTE

; BR IF MORE TO MOVE ; ; ; ;

GO WRITE VTOC GET NO SECTORS SET IN DCB SECTOR BYTE GO ALLOCATED SECTOR

; GET ALLOCATED TRACK ; BR IF NONE ; DONE ; ; ; ; ; ;

GET VTOC GET SECTOS GET TRACK SET FREE GO FREE CLEAR ALLOCATED TRK

; WRITE VTOC

; ; ; ; ; ; ;

4 BYTE SHIFT SHIFT IN CARRY NEXT BYTE BR IF NOT DONE INC SECTOR NO NORMAL BR IF NOT

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 70 of 154

FS3

FS4

ASL ASL TAY BEQ LDX LDA ORA STA DEY DEX BNE RTS PAGE

A A FS4 #4 DCBABM-1,X VSECAL+3,Y VSECAL+3,Y

; TRACK*4

; GET BIT MAP BYTE ; OR WITH VTOC BM

FS3

; ;LOCSEC - LOCATE SECTOR FOR RECORD I/O ; ;RELSEC = (REL REC * RECLEN + RELBYTE)/256 ;SECBYT = REMAINDER ; LOCSEC EQU * LDA CCBRRN STA DCBCSB STA DCBCRR LDA CCBRRN+1 STA DCBCRS STA DCBCRR+1 LDA #0 STA DCBCRS+1 LDY #16 ; LS1 TAX LDA DCBCSB LSR A BCS LS1A TXA BCC LS2 LS1A CLC LDA DCBCRS+1 ADC DCBRCL STA DCBCRS+1 TXA ADC DCBRCL+1 ; LS2 ROR A ROR DCBCRS+1 ROR DCBCRS ROR DCBCSB DEY BNE LS1 ; DO DOS33B CLC FIN LDA CCBBYT STA DCBCRB ADC DCBCSB STA DCBCSB LDA CCBBYT+1 STA DCBCRB+1 ADC DCBCRS STA DCBCRS DO DOS33B BCC DONTINC

; DONE

; RELATIVE RECORD NUMBER ; TO CSB FOR MULT ; AND CRR FOR SAVE

; HIGH CRS=0 ; 16 BIT MULT ; SAVE MS BYTE ; IF NO CARRY THEN NO PART PROD

; FPORM PARTIAL PROD

; MULT BY 2

; DEC BIT COUNT ; BR IF MORE BITS ; FOR FILE LENGTH > $7FFF BYTES ; ADD REL BYTE RESULT ; (SAVE REL BYTE)

; (SAVE REL BYTE)

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 71 of 154

DONTINC

ERROR1 ERROR2 ERROR3 ERROR4 ERROR5 ERROR6 ERROR9 #CRENSA) ERRR10 GOODIO ERRORA ERRORB RETURN

INC RTS DS ELSE LDA ADC STA RTS FIN PAGE LDA BNE LDA BNE LDA BNE LDA BNE LDA BNE LDA BNE JMP NOP LDA BNE LDA CLC BCC EQU SEC EQU PHP STA LDA

DCBCRS+1 2,$00 #0 DCBCRS+1 DCBCRS+1

#CREFUN ERRORA #CRERR ERRORA #CREMRE ERRORA #CREPRO ERRORA #CREEOF ERRORA #CREFNF ERRORA ERROR9X

;MUST CLOSE ALL FILES (WAS LDA

#CREFLK ERRORA CCBSTA RETURN *

; CARRY=CLR ; GO RETURN ; CARRY=SET

* CCBSTA #0

; SET STA ;(FIX FOR APPLE SYS MONITOR $48 USED

$48 RTNFCB

;(THIS ADDED 11/1/78) ; GO RTN FCB ; GET STATUS ; GET ENT STACK ; RESTORE STACK ; DONE

BY RWTS)

EC2 ; ; ; ; ; ;

STA JSR PLP LDX TXS RTS EQU

ENTSTK *

##################################################################################### # END OF FILE: FLOCSEC # LINES : 284 # CHARACTERS : 12221 # Formatter : Assembly Language Reformatter 1.0.2 (07 January 1998) #####################################################################################

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 72 of 154

======================================================================================== DOCUMENT FMTRWIO.pretty ======================================================================================== ; ; ; ;

##################################################################################### # PROJECT : APPLE ][ DOS 3.3 C SOURCE CODE LISTING -- (C) APPLE COMPUTER INC. 1983 # FILE NAME: FMTRWIO #####################################################################################

PAGE ; * FFMT - EXECUTE FORMAT REQUEST ; FFMT EQU * JSR DCBSUP LDA #IBFMT JSR DCBIO2 LDA DCBVOL EOR #$FF STA VVOLNO LDA #17 STA VALCA1 LDA #1 STA VALCA2 ; LDX #VSECAL-VTOC LDA #0 NT1 STA VTOC,X INX BNE NT1 ; LDX #3*4 NT2 CPX #35*4 BEQ NT4 LDY #3 NT3 LDA ALC10S,Y STA VSECAL,X INX DEY BPL NT3 CPX #17*4 BNE NT2 LDX #18*4 BNE NT2 ; NT4 JSR WRVTOC ; LDX #0 TXA NT5 STA VOLDIR,X INX BNE NT5 ; JSR MVVDBA ; LDA #17 LDY VNOSEC DEY DEY STA IBTRK NT6 STA VDLTRK NT7 STY VDLSEC

; SET UP DCB ; SET VOL NO

; ALOCATE BYTE 1 ; ADD BYTE 2

; CLEAR SECTOR AREA

; START AT TRACK 3 ; END AT TRACK 35 ; 4 BYTES OF INFO ; 10 SECTORS ALLOCATE

; AT TRACK 17 ; BR IF NOT ; SKIP TO 18 ; WRITE NEW VTOC

; CLEAR VOLDIR

; MOVE BUF PTRS ; TRACK 17

; INTO IOB ; INTO LINK

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 73 of 154

INY STY LDA JSR LDY DEY BMI BNE TYA BEQ ; NT8

EQU JSR JSR JMP PAGE

IBSECT #IBCWTS DCBIO2 VDLSEC NT8 NT7

; ; ; ;

DECREMENT SECTOR BR LAST WRITTEN BR NOT LAST LAST, SET LINK TRK=0

NT6 * DLDSUP WBOOT GOODIO

; * MVFCBX - MOVE FCB ADRS TO ZPGFCB ; MVFCBP LDX #0 BEQ MVF1 MVFCBD LDX #2 BNE MVF1 MVFCBS LDX #4 ; MVF1 EQU * LDA CFCBAD,X STA ZPGFCB LDA CFCBAD+1,X STA ZPGFCB+1 RTS ; PAGE ; * WRSECT - WRITE CURRENT SECTOR IF REQD ; WRSECT EQU * BIT DCBWRF BVS WRSGO RTS ; WRSGO EQU * JSR MVSBA ; LDA #IBCWTS JSR DCBIO ; LDA #$BF AND DCBWRF STA DCBWRF RTS PAGE ; * WRFDIR - WRITE FILE DIRECTRY IF REQD ; WRFDIR EQU * LDA DCBWRF BMI WRFDGO RTS ; WRFDGO EQU * JSR MVFDBA ;

; GO SET UP FOR DOSLDR ; GO WRITE THE BOOT ; DONE

; MOVE FCB ADR ; MOVE FCB DIR BUFF ; MOVE FCB SECTOR BUFF ; DO THE MOVE

; GET WRITE REQD FLAG ; BR IF WRITE SECTOR REQD ; RTS ; GO MOVE SECT BUFF ADR ; GET COMMAND ; GO FILL IN IOB AND DO IO ; SET WRITE SECTOR REQD BIT OFF ; DONE

; GET WRITE REQD FLAG ; BR IF WRITE DIR REQD ; DONE IF NOT

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 74 of 154

LDA JSR

#IBCWTS DCBIO

; GET WRITE CMD ; GO FILL IN IOB AND DO I/O

LDA AND STA RTS

#$7F DCBWRF DCBWRF

; TURN WRITE DIR REQD BIT OFF

;

; * MVFDBA - MOVE FILE DIRECTORY BUFF ASDR TO IOD ; MVFDBA EQU * LDA CFCBDR STA IBBUFP LDA CFCBDR+1 STA IBBUFP+1 LDX DCBCDT LDY DCBCDS RTS PAGE ; * RDFDIR - READ FILE DIRECTORY ; RDFDIR EQU * PHP JSR WRFDIR JSR MVFDBA JSR MVFCBD PLP BCS RFDNXT ; LDX DCBFDT LDY DCBFDS JMP RFDIO1 ; RFDNXT EQU * LDY #FDLTRK LDA (ZPGFCB),Y BEQ RFDNL TAX INY LDA (ZPGFCB),Y TAY JMP RFDIO1 ; RFDNL EQU * LDA CCBREQ CMP #CRQWR BEQ RFDNL1 SEC RTS ; RFDNL1 EQU * JSR GETSEC LDY #FDLSEC STA (ZPGFCB),Y PHA DEY LDA DCBATK STA (ZPGFCB),Y PHA JSR WRFDGO ; JSR CLRSEC

; DONE

; MOVE ADR

; GET TRACK ; GET SECTOR

; ; ; ; ; ;

SAVE STATUS GO WRITE CURRENT DIR IF REQD GO MOVE DBUFF ADR TO IOB MOVE DBUFF ADR TO ZPG GET SAVED STATUS BR IF RD NEXT

; TRACK ; SECTOR ; GO READ ; GET LINK TRACK ; NR NO LINK ; PUT TRACK INTO X ; SET LINK SECTOR ; PUT SECTOR INTO Y ; GO DO I/O ; THIS A WRITE ; BR IF WRITE ; SET EOF ; RETURN ; GET A SECTOR ; PUT IN LINK ; SAVE SECTOR ; ; ; ;

GET TRACK PUT IN LINK SAVE TRACK GO WRITE OLD DIR DEC

; CLEAN OUT DIR

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 75 of 154

LDY LDA STA INY LDA STA

#FDFRS DCBDNF (ZPGFCB),Y

; SET NEW DIR SEC 1ST REL ; FILE SECTOR

DCBDNF+1 (ZPGFCB),Y

;

; RFDIO1 RFDIO2 ; RDFDC

PLA TAX PLA TAY LDA BNE

#IBCWTS RFDIO2

; ; ; ; ; ;

GET SAVED TRACK INTO X GET SAVED SECTOR INTO Y SET WRITE CMD GO DO I/O

LDA STX STY JSR

#IBCRTS DCBCDT DCBCDS DCBIO

; ; ; ;

SET READ CMD SET CURR TRACK SET CURR SECTOR GO I/O

LDY LDA STA CLC ADC STA

#FDFRS (ZPGFCB),Y DCBDFS

; GET POINTER TO FIRST REL SECTOR ; GET FRS ; SET INTO DCB

DCBDMS DCBDNF

; ADD MAX SECTORS ; PUT INTO DCB

; INY LDA STA ADC STA

; DO SAME FOR HI BYTE (ZPGFCB),Y DCBDFS+1 DCBDMS+1 DCBDNF+1

; CLC RTS PAGE ; ;RDSECT - READ A SECTOR ; RDSECT EQU * JSR MVSBA ; LDA #IBCRTS JMP DCBIO ; ;MVSBA - MOVE SECTOR BUFFER ADR FOR I/O ; MVSBA EQU * LDY CFCBSB LDA CFCBSB+1 MSB1 STY IBBUFP STA IBBUFP+1 LDX DCBTRK LDY DCBSEC RTS ; ; ; ; ; ;

; DONE

; GO MOVE SECTOR BUFFER ADR ; GO DO I/O

; GET SECTOR BUFF ADR ; ; ; ; ;

SET IOB SECTOR BUFF PTR GET TRACK GET SECTOR RTN

##################################################################################### # END OF FILE: FMTRWIO # LINES : 233 # CHARACTERS : 9921 # Formatter : Assembly Language Reformatter 1.0.2 (07 January 1998) #####################################################################################

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 76 of 154

======================================================================================== DOCUMENT FOPCLRW.pretty ======================================================================================== ; ; ; ;

##################################################################################### # PROJECT : APPLE ][ DOS 3.3 C SOURCE CODE LISTING -- (C) APPLE COMPUTER INC. 1983 # FILE NAME: FOPCLRW #####################################################################################

PAGE ; ; FOPEN - OPEN A FILE ; FOPEN EQU * JSR DOPEN JMP GOODIO ; DOPEN EQU * ; JSR DCBSUP ; ; LDA #1 STA DCBSDL+1 LDX CCBRLN+1 LDA CCBRLN BNE F02 CPX #0 BNE F02 INX F02 STA DCBRCL STX DCBRCL+1 ; JSR FNDFIL BCC F03 ; * CREATE FILE IF COMMAND IS SAVE, OPEN, OR BSAVE ; STX TEMP1 LDX CMDNO LDA CMDSTB,X LDX TEMP1 LSR A BCS F02B LDA ISTATE APPLESOFT CMP #$C0 BNE F02A JMP ERROR1 F02A JMP ERROR6 F02B LDA #0 STA VDFILE+34,X LDA #1 STA VDFILE+33,X STX TEMP1 JSR GETSEC LDX TEMP1 STA VDFILE+1,X STA DCBFDS STA DCBCDS ; LDA DCBATK

; MOVE RECORD LENGTH

; SET RL=256

; GO FIND FILE ; BR IF FOUND

; SAVE DIR. INDEX. ;TEST COMMAND FOR CREATE FLAG. ; (BIT 0 MUST=1) ;RESTORE DIR INDEX ;SHIFT CREFLG BIT TO CARRY ;BRANCH ON VALID INSTR. ;FIND OUT IF TRYING TO LOAD ;NO GO ;PRINT "FILE NOT FOUND" MESSAGE.

; SAVE VDIR INDEX ; GO ALLOCATE SECTOR ; PUT SECTOR INTO VDIR ; PUT SECTOR AS 1ST FILE DIR ; PUT SECTOR AS CURRENT FILE DIR ; GET ALLOCATED TRACK

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 77 of 154

STA STA STA

VDFILE,X DCBFDT DCBCDT

; PUT INTO VDIR ; AND AS 1ST FILE DIR ; AND AS CURRENT FILE DIR

LDA STA

CCBFUC VDFILE+2,X

; SET USE CODE ; INTO DIRECTORY

JSR

WRVDIR

; GO WRITE VOL DIRECTORY

JSR JSR JSR

MVFCBD CLRSEC WRFDGO

; MOVE FILE DIR ADR TO ZP ; GO CLEAR IT ; GO WRITE FILE DIRECTORY

LDX LDA STA

TEMP1 #CREFNF CCBSTA

; RE-GET INDEX

EQU LDA STA LDA STA LDA STA STA LDA STA LDA STA STX

* VDFILE,X DCBFDT VDFILE+1,X DCBFDS VDFILE+2,X CCBFUC DCBFUC VDFILE+33,X DCBNSA VDFILE+34,X DCBNSA+1 DCBVDI

LDA STA STA LDA STA CLC JMP

#255 DCBCMS DCBCMS+1 VTDMS DCBDMS

; INDICATE NO SECTOR ; IN MEMORY

RDFDIR

; READ 1ST DIRECTORY RECORD

EQU LDA TAX STA INX CPX BNE

* #0

; ; ;

; DONE CREATION

; F03

; MOVE FILE DIR TRACK ; MOVE FILE DIR SECTOR ; 7OVE FILE USE CODE

;SAVE DIRECTORY INDEX

;

; ; ; ; DCBSUP F01

FCBDCB,X

; MOVE MAX FD SECTS ; TO DCB

; CLEAR DCB

#DCBLEN F01

;

F01A

LDA EOR STA LDA STA LDA ASL ASL ASL ASL TAX EQU STX

CCBVOL #$FF DCBVOL CCBDRV DCBDRV CCBSLT A A A A

; MOVE VOL ; INVERT VOL BITS ; MOVE DRIVE ; GET USER SPEC SLOT ; SLOT*16

* DCBSLT

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 78 of 154

LDA STA RTS PAGE ; ; FCLOSE - CLOSE A FILE ; FCLOSE EQU JSR JSR JSR LDA AND BEQ ; JSR LDA CLC FC1 EQU JSR SEC DEC BNE LDX LDA STA LDA STA JSR ; ; FC2 EQU JMP PAGE ; * FRNME - RENAME A FILE ; FRNME EQU JSR LDA BMI LDA STA LDA STA LDX JSR JSR JMP PAGE ; * FREAD - READ A FILE ; FREAD EQU ; LDA CMP BCS ; ASL TAX LDA PHA

#17 DCBVTN

* WRSECT WRFDIR FRETRK #IBCWTS DCBWRF FC2 RDVTOC #0 * RDVDIR DCBVDR FC1 DCBVDI DCBNSA VDFILE+33,X DCBNSA+1 VDFILE+34,X WRVDIR * GOODIO

* DOPEN DCBFUC ER10 CCBFN2 ZPGFCB CCBFN2+1 ZPGFCB+1 TEMP1 MVFN WRVDIR GOODIO

; WRITE OPEN SECTOR ; GO WRITE FILE DIRECTORY ; FREE UNUSED SECTORS

; READ VTOC

; READ VDIR ; BR IF NOT ; GET FILES INDEX ; MOVE NO SECTORS ALLOCATED

; WRITE VOL DIR REC

; DONE

; ; ; ; ;

GO OPEN FILE GET USE CODE BR IF LOCKED MOVE NEW FN PTR TO ZPG

; ; ; ;

GET VDIR INDEX GO MOVE FILE NAME GO WRITE VDIR DONE RENAME

* CCBRQM #CRMMAX ERR3A

; GET REQ MOD ; TEST LIMIT ; BR BAD

A

; CODE*2

RVT+1,X

; GET READ ROUTINE ; VECTOR ADR

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 79 of 154

LDA PHA RTS ; ERR3A JMP ER10 JMP ; * FWRITE - WRITE A FILE ; FWRITE EQU LDA BMI LDA CMP BCS ; ASL TAX LDA PHA LDA PHA RTS PAGE ; * RSPBYT - READ A SPECIFIC ; RSPBYT EQU JSR ; * RNXBYT - READ NEXT BYTE ; RNXBYT JSR STA JMP ; * RSPBLK - READ A SPECIFIC ; RSPBLK JSR ; * RNXBLK - READ NEXT BLOCK ; RNXBLK EQU JSR JSR PHA JSR LDY PLA STA JMP ; * GETBYT - GET A DATA BYTE ; GETBYT EQU JSR BCS LDA PHA JSR JSR PLA RTS

RVT,X ; AND ; GO TO IT ERROR3 ERRR10

* DCBFUC ER10 CCBRQM #CRMMAX ERR3A

; ; ; ; ;

IS FILE LOCKED BR IF LOCKED GET REQ MOD IN RANGE BR IF NOT IN RANGE

A WVT+1,X

; GET ROUTINE ADR

WVT,X ; AND GO TO IT BYTE * LOCSEC

; GO GET REQD REL SECTOR

GETBYT CCBDAT GOODIO

; GO GET BYTE ; PUT IN CCB ; DONE

BLOCK LOCSEC

; GO LOCATE REL SECTOR

* DTBLN GETBYT

; GO DECR LEN (NOT RTN IF=0) ; GO GET BYTE

MIBDA #0

; GO MOVE BLOCK ADR AND INCR

(ZPGFCB),Y RNXBLK

; SET DATA BYTE ; GO FOR NEXT BYTE

* LOCNXB EOFIN (ZPGFCB),Y INCRRB INCSCB

; ; ; ; ; ; ; ;

LOCATE NEXT BYTE BR IF EOF GET DAT BYTE SAVE IT INCR REC BYTE INCR SEC BYTE GET SAVED BYTE RETURN

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 80 of 154

; EOFIN

JMP PAGE

ERROR5

; * WSPBYT - WRITE SPECIFIC BYTE ; WSPBYT EQU * JSR LOCSEC ; * WNXBYT - WRITE NEXT BYTE ; WNXBYT EQU * LDA CCBDAT JSR PUTBYT JMP GOODIO ; * WSPBLK - WRITE A SPECIFIC BLOCK ; WSPBLK EQU * JSR LOCSEC ; * WNXBLK - WRITE NEXT BLOCK ; WNXBLK EQU * JSR MIBDA LDY #0 LDA (ZPGFCB),Y JSR PUTBYT JSR DTBLN JMP WNXBLK ; * PUTBYT - PUT OUT ONE BYTE ; PUTBYT EQU * PHA JSR LOCNXB ; PB0 PLA STA (ZPGFCB),Y LDA #$40 ORA DCBWRF STA DCBWRF ; JSR INCRRB JMP INCSCB ; ; ; ; ; ;

; GO TO EOF RTN

; GO LOCATE SECTOR

; GET THE BYTE ; GO WRITE BYTE ; DONE

; GO LOCATE SECTOR

; GO MOVE ADR TO ZPG AND DEC ; GET DATA BYTE ; GO PUT IT ; GO DEC BLK LEN (NOT RTN IF = 0)

; SAVE DATA BYTE ; GO LOCATE NEXT BYTE ; GET SAVED BYTE ; PUT THE BYTE ; SET WRITE SECTOR REQD

; INCR REL REC BYTE ; INCR SECTOR BYTE

##################################################################################### # END OF FILE: FOPCLRW # LINES : 286 # CHARACTERS : 11685 # Formatter : Assembly Language Reformatter 1.0.2 (07 January 1998) #####################################################################################

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 81 of 154

======================================================================================== DOCUMENT FORMATR.pretty ======================================================================================== ; ; ; ;

##################################################################################### # PROJECT : APPLE ][ DOS 3.3 C SOURCE CODE LISTING -- (C) APPLE COMPUTER INC. 1983 # FILE NAME: FORMATR #####################################################################################

SBTL '16-SECTOR FORMATTER' **************************** * * * FORMAT DISK AND RETURN * * * **************************** * * EQUATES FOR FORMATTER * NSYNC EQU $45 * REP 40 DSKFORM EQU * DO DIAGMODE LST OFF ELSE LDY #3 LDA (IOBPL),Y STA NVOL LDA #$AA STA AA LDY #$56 LDA #0 STA TRK CLRNBUF2 STA NBUF2-1,Y DEY ZERO BNE CLRNBUF2 CLRNBUF1 STA NBUF1,Y DEY BNE CLRNBUF1 LDA #$50 JSR SETTRK LDA #$28 STA NSYNC FORMTRK LDA TRK JSR MYSEEK JSR WTRACK16 FORMERR1 LDA #8 BCS FORMERR LDA #$30 STA RETRYCNT FINDS0 SEC ANTICIPATE DEC RETRYCNT BEQ FORMERR JSR RDADR16 BCS FINDS0 LDA SECT BNE FINDS0 JSR READ16 BCS FINDS0 * (NOW POSITIONED PROPERLY FOR NEXT TRACK) INC TRK LDA TRK

;NUM GAP SELF-SYNC NIBLS

;ELIMINATE FMTR FROM DIAG ASSEMBLY

VOLUME NUMBER IN IOB. FOR FORMATTER. SET Z-PAG LOC TO $AA FOR TIME DEPENDENT REFERENCES. TRACK NUMBER, 0 TO 34 CLEAR NBUFS TO WRITE SECTORS.

FAKE LIKE ON TRACK 80. BEGIN WITH 40 SELF-SYNC NIBLS. GOTO NEXT TRACK. WRITE AND VERIFY TRACK. 'UNABLE TO FORMAT' ERR CODE. CONTINUE IF NO ERROR. UP TO 48 SECTOR RETRIES TO FIND SECTOR 0. 'UNABLE TO FORMAT' DONE 48 RETRIES? IF SO, 'UNABLE TO FORMAT' ERR. ;READ ADR FIELD. RETRY IF ERR. CHECK SECTOR THAT WAS READ. CONTINUE SEARCHING IF NOT SECT 0. ;NOW READ DATA FIELD. CONTINUE SEARCH IF ERR. INCREMENT TRACK NUMBER.

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 82 of 154

CMP #$23 BCC FORMTRK CLC CLEAR BCC FORMDONE FORMERR LDY #$0D STA (IOBPL),Y SEC SET FORMDONE LDA MOTOROFF,X RTS AND PAGE ****************************** * * * WRITE TRACK SUBROUTINE * * * ****************************** WTRACK16 LDA #0 STA NSECT LDY #128 BNE WSECT0 0 WSECT LDY NSYNC WSECT0 EQU * JSR WADR16 BCS WEXIT2 JSR WRITE16 BCS WEXIT2 INC NSECT LDA NSECT CMP #$10 BCC WSECT PAGE ***************************** * * * VERIFY ROUTINE * * * * VERIFIES THAT THE FIRST * * SECTOR ENCOUNTERED IS * * SECTOR 0, AND THAT ALL * * 16 SECTORS ARE READABLE * * WITH MINIMAL RETRIES. * * (2 REVOLUTIONS MAXIMUM) * * * * IF FIRST SECTOR IS NOT * * SECTOR 0 THEN THE * * CURRENT NUMBER OF SELF- * * SYNC NIBLS IS DECR'D BY * * 1 (IF ALREADY LESS THAN * * 16) OR BY 2. THEN SECTOR * * 15 IS LOCATED SO AS TO * * POSITION THE NEW TRACK * * REWRITE. * * * * IF UNABLE TO READ ANY * * SECTOR THEN THE ENTIRE * * TRACK IS REWRITTEN. * * * * AFTER VERIFYING TRACK 0, * * THE NUMBER OF SELF-SYNC * * NIBLS, NSYNC, IS DECR'D * * BY 2 (IF STILL 16 OR * * GREATER). * * * *****************************

CONTINUE IF LESS THAN 35. CARRY TO INDICATE 'NO ERR' ELSE TURN OFF MOTOR AND RETURN. RETURN ERROR CODE. CARRY TO INDICATE ERR. TURN MOTOR OFF. RETURN.

SECTOR NUMBER, 0 TO 15. ;128 NIBS PRIOR SECTOR 0 ; TO INSURE NO BLANK SPOT BETW 15 & CURRENT NUM OF GAP SELF-SYNC NIBLS. WRITE GAP AND ADR FIELD. ERR IF WRITE PROTECTED. ;WRITE SECTOR FROM NBUF1, NBUF2. ERR IF WRITE PROTECTED. NEXT OF 16 SECTORS. CONTINUE IF NOT DONE.

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 83 of 154

VTRACK

CLRFOUND

S0DELAY

VERR VSECT VDATA VERR1 S15LOC

NOTS15 WEXIT2 SECTOK

WEXIT1

PAGE LDY STY LDA STA STA DEY BPL LDY JSR JSR JSR PHA PLA NOP DEY BNE JSR BCS LDA BEQ LDA CMP LDA SBC STA CMP BCS SEC RTS JSR BCS JSR BCC DEC BNE JSR BCS LDA CMP BNE JSR BCC DEC BNE SEC RTS LDY LDA BMI LDA STA DEC BPL LDA BNE LDA CMP BCC DEC DEC CLC RTS

#$F NSECT #$30 RETRYCNT FOUND,Y CLRFOUND NSYNC WEXIT2 WEXIT2 WEXIT2 (3) (4) (2) (2) S0DELAY RDADR16 S15LOC SECT VDATA #$10 NSYNC NSYNC #1 NSYNC #5 S15LOC DRIVE OTHER RDADR16 VERR1 READ16 SECTOK RETRYCNT VSECT RDADR16 NOTS15 SECT #$F NOTS15 READ16 WTRACK16 RETRYCNT S15LOC SET AND SECT FOUND,Y VERR1 #$FF FOUND,Y NSECT VSECT TRK WEXIT1 NSYNC #$10 WEXIT2 NSYNC NSYNC INDICATE RETURN.

SET 16 BYTES OF SECTOR FOUND TABLE TO $30 (MARK THEM).

DELAY (12) (12) (12)

50 USEC FOR EVERY SELF-SYNC NIBL EXPECTED TO INSURE PROPER GAP PRIOR SECTOR 0.

(3) ;READ NEXT ADDRESS FIELD. ERR, LOCATE SECT 15 AND REWRITE TRK. WAS IT SECTOR 0? YES, NOW VERIFY DATA FIELD. DECR NSYNC BY 1 IF LESS THAN 16, BY 2 IF NOT LESS. IF LESS THAN 5, UNRECOVERABLE ERR, ELSE REWRITE AFTER DATA FLD 15. EXTREMELY FAST OR SEVERE ERROR. ;READ AN ADDRESS FIELD. RETRY IF ERR. ;READ DATA FIELD. (GOOD) NEXT OF 48 SECTOR TRIES. (KEEP TRYING) ;READ ADDRESS FIELD. ERR, TRY UP TO 128 TIMES. SECTOR THAT WAS READ. SECTOR 15? NO, CONTINUE SEARCHING. ;READ DATA FIELD. WRITE TRACK FROM HERE IF NO ERR. $FF TO $7F, 128 TRIES. TRY FOR SECT 15 AGAIN. CARRY TO INDICATE VERIFY ERR. RETURN TO FORMATTER. THIS IS SECTOR READ. ALREADY FOUND? YES, IGNORE IT. INDICATE THIS SECT NOW FOUND. FOUND 16 SECTORS? NO, LOOK FOR NEXT. IF TRACK 0 AND NSYNC > 16 (NUM GAP SYNC NIBLS) THEN SUBTRACT 2 FROM NSYNC TO AVOID RETRIES ON LATER TRKS. NO ERROR.

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 84 of 154

****************************** AEC2 EQU * ****************************** FOUND DFB 0,0,0,0 DFB 0,0,0,0 DFB 0,0,0,0 DFB 0,0,0,0 FIN LST ON REP 40 * THIS TABLE IS USED TO TRANSLATE * LOGICAL (REQUESTED) SECTOR NUMBER * TO PHYSICAL SECTOR NUMBER. THE * DISKETTE IS FORMATTED WITH ALL * SECTORS IN MONOTONICALLY INCREASING * ORDER. THE TRANSLATION WILL ALLOW * TIME BETWEEN SECTORS FOR READS. * REP 40 * * NOTE: THE CURRENT IMPLEMENTATION OF DOS * USUALLY ACCESSES SECTORS IN DECREASING * ORDER ON A TRACK. THUS WE WILL * TRANSLATE IN REVERSE ORDER... * * THE INTERLEAVE IS THEN 9:1 * * NOTE: WE MAP LOGICAL SECTOR 0 * INTO PHYSICAL SECTOR 0 SO THAT * WRITING OF BOOT DURING 'INIT' * IS CORRECT FOR SECTOR ZERO. * INTRLEAV EQU * DFB $00,$0D,$0B,$09 DFB $07,$05,$03,$01 DFB $0E,$0C,$0A,$08 DFB $06,$04,$02,$0F ; ; ; ; ; ;

;TELL RELOCTR WHERE RWTS ENDS 'SECTOR FOUND' TABLE.

##################################################################################### # END OF FILE: FORMATR # LINES : 215 # CHARACTERS : 10690 # Formatter : Assembly Language Reformatter 1.0.2 (07 January 1998) #####################################################################################

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 85 of 154

======================================================================================== DOCUMENT FVCBUFS.pretty ======================================================================================== ; ; ; ;

##################################################################################### # PROJECT : APPLE ][ DOS 3.3 C SOURCE CODE LISTING -- (C) APPLE COMPUTER INC. 1983 # FILE NAME: FVCBUFS #####################################################################################

PAGE ;MISC DOS WORK CELLS ; CVDTRK DFB 0 ; CUR VOL DIR TRK CVDSEC DFB 0 ; CUR VOL DIR SECTOR CURCCB DFB 0,0 ; CURRENT CCB ADR ENTSTK DFB 0 ; ENTRY STACK POINTER TEMP1 DFB 0 ; TEMP BYTE1 TEMP2 DFB 0 ; TEMP BYTE 2 TEMP3 DFB 0 ; TEMP BYTE 3 ENTSLT DFB 0 ; BOOT SLOT SAVED ALC10S DFB 0,0,$FF,$FF ; ALLOCATATION TRACK BIT MAP CVTAB DFB 1,10,100 ; CONVERSION TABLE MSB ON FTTAB ASC "TIAB" ; FILE TYPE CONVERSION TABLE" ASC "SRAB" VOLMES ASC " EMULOV KSID" ; "DISK VOLUME " BACKWARDS " MSB OFF VML EQU *-VOLMES-1 PAGE ;VTOC RECORD AREA VTOC EQU * VDOST DFB 4 ; DOS TYPE VDIRTK DFB 17 ; COLUME DIRECTORY SECTOR VDIRSC DFB 15 ; VOLUME DIRECTORY SECTOR VDOSRN DFB 4 ; DOS RELEASE NUMBER DFB 0 ; SPARE DFB 0 ; SPARE VVOLNO DFB $FE ; VOLUME NUMBER DS 32 ; SPARE VTDMS DFB 122 ; MAX SECTORS IN A FILE DIR VSPARE DS 8 ; SPARES ; VALCA1 DFB 17 ; ALOCATION ALGORITHM BYTE 1 VALCA2 DFB 1 ; AA BYTE2 VALCA3 DFB 0 ; AA BYTE3 VALCA4 DFB 0 ; AA BYTE4 VNOTRK DFB 35 ; NO TRACKS ON VOL VNOSEC DFB 16 ; NO SECTORS PER TRACK VSECLN DW 256 ; NO. BYTES PER SECTOR ; VSECAL EQU * ; SECTOR ALLOCATION AREA ;SECTORS ALLOCATED BY BIT MAP ;4 BYTES OF BITS PER TRACK ;LEFT MOST BIT REPRESENTS SECTOR N ;WHERE N=NO SECTORS PER TRACK ; ; PAGE ORG VTOC+256 ; ;VOLUME DIRECTORY AREA ;

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 86 of 154

VOLDIR EQU * VDTCDE DFB 2 VDLTRK DS 1 VDLSEC DS 1 VDNF DS 1 VDSPAR DS 7 ; VDFILE EQU * ;EACH FILE: ;FILE DIR TRK ;FILE DIR SECTOR ;FILE USE CODE ;FILE NAME (30) ;FILE SECTOR COUNT (2) ORG VOLDIR+256 VDEND EQU * VDLEN EQU *-VOLDIR VDFLEN EQU *-VDFILE ; PAGE ; ;COMMAND CONTROL BLOCK (CCB) ; CCB EQU * CCBREQ DS 1 CRQNUL EQU 0 CRQOPN EQU 1 CRQCLS EQU 2 CRQRD EQU 3 CRQWR EQU 4 CRQDEL EQU 5 CRQDIR EQU 6 CRQLCK EQU 7 CRQUNL EQU 8 CRQRNM EQU 9 CRQPOS EQU 10 CRQFMT EQU 11 CRQVAR EQU 12 CRQMAX EQU 13 ; CCBBSA EQU * CCBRQM DS 1 CRMNUL EQU 0 CRMNBT EQU 1 CRMNBL EQU 2 CRMSBT EQU 3 CRMSBL EQU 4 CRMMAX EQU 5 ; CCBRRN EQU * CCBFN2 EQU * CCBRLN DS 2 ; CCBBYT EQU * CCBVOL DS 1 CCBDRV DS 1 ; CCBBLN EQU * CCBSLT DS 1 CCBFUC DS 1 ; CCBFN1 EQU * - FILENAME P

; ; ; ; ;

VOLUME DIRECTORY TYPE CODE VD LINK TRACK VD LINK SECTOR VD NUMBER FILES THIS SECTOR SPARES

; FILE ALLOCATION AREA (7 FILES)

; ; ; ; ; ; ; ; ; ; ; ; ; ;

USER REQUEST BYTE 0-NO REQUEST 1-OPEN FILE 2-CLOSE FILE 3-READ DATA WRITE DATA 5-DELETE FILE 6-READ DIRECTORY 7-LOCK FILE 8-UNLOCK FILE 9-RENAME 10-POSITION FILE 11-FORMAT 12 - VERIFY

; ; ; ; ; ; ;

FORMAT - BOOT START ADR PAGE RREQUEST MODIFIER BYTE NO MODIFIER R/W - 1 - NEXT BYTE R/W - 2 - NEXT BLOCK R/W - 3 - SPECIFC BYTE R/W - 4 - SPECIFIC BLOCK

; I/O - RELATIVE RECORD NUMBER ; RENAME - FILE NAME 2 PTR ; OPEN - RECORD LENGTH ; I/O - RELATIVE BYTE NO (2 BYTES) ; OPEN - VOL NO. ; OPEN - DRIVE ; I/O - BLOCK LENGTH (2 BYTES) ; OPEN - SLOT NO ; OPEN - FILE USE CODE ; OPEN, DELETE, LOCK, UNLOCK, RENAME

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 87 of 154

CCBBBA CCBDAT ; CCBSTA CREFUN CRERR CREMRE CREPRO CREEOF CREFNF CREVMM CREIOE CRENSA CREFLK ; CCBSM CCBFCB CCBDBP CCBSBP CCBSPR CCBLEN CFCBAD CFCBDR CFCBSB

EQU DS

* 2

; BLOCKK I/O - BLOCK BUFFER PTR ; BYTE I/O - DATA BYTE

DS EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU

1 1 2 3 4 5 6 7 8 9 10

; ; ; ; ; ; ; ; ; ; ;

RESULT STATUS FCB UNALLOCATED CCB REQ RANGE ERR REQ MOD RANGE ERR WRITE PROTECT END OF FILE ON READ FILE NOT FOUND VOL MIS MATCH I/O ERR NO SECTORS AVAILABLE FILE LOCKED

DS DS DS DS DS EQU EQU EQU EQU PAGE

1 2 2 2 4 *-CCB CCBFCB CCBDBP CCBSBP

; ; ; ; ; ;

STATUS MODIFIER FCB PTR DIR BUF PTR SECTOR BUF PTR SPARE CCB LENGTH

; ; ; ; ;

1ST FILE DIRECTORY TRACK 1ST FILE DIRECTORY SECTOR CURRENT FILE DIRECTORY TRACK CURRENT FILE DIRECTORY SECTOR WRITE REQD FLAG

; ; ; ; ; ; ; ; ; ; ; ; ; ; ;

SECTOR TRACK ADR SECTOR ADR VOL DIR REC VOL DIR INDEX MAX NO DIRECTORY SECTORS CURRENT DIR 1ST REL SECTOR REL SECTOR OF NXT DIR SECTOR CURRENTLY IN MEMORY SECTOR DATA LENGTH CURRENT RELATIVE SECTOR CURRENT SECTOR BYTE RECORD LENGTH CURRENT RELATIVE REC CURRENT RELATIVE BYTE NO SECTORS ALLOCATED

; ;FILE CONTROL BLOCK (FCB) DEFINITION ;DCB - FILE DATA CONTROL BLOCK ; FCB EQU * ; ;DATA CONTROL BLOCK ; FCBDCB EQU * DCBFDT DS 1 DCBFDS DS 1 DCBCDT DS 1 DCBCDS DS 1 DCBWRF DS 1 ;$80=WRITE FILE DIR ;$40=WRITE SECTOR DIR DCBTRK DS 1 DCBSEC DS 1 DCBVDR DS 1 DCBVDI DS 1 DCBDMS DS 2 DCBDFS DS 2 DCBDNF DS 2 DCBCMS DS 2 DCBSDL DS 2 DCBCRS DS 2 DCBCSB DS 2 DCBRCL DS 2 DCBCRR DS 2 DCBCRB DS 2 DCBNSA DS 2 ; DCBALS DS 1 DCBATK DS 1 DCBABM DS 4 ; DCBFUC DS 1 DCBSLT DS 1

; ALLOCATION SECTOR BYTE ; ALLOCATION TRACK ; ALLOCATION TRACK SECTOR BIT MAP ; FILE USE CODE ; SLOT NUMBER

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 88 of 154

DCBDRV DCBVOL DCBVTN ; DCBSPR ; DCBLEN FCBLEN ; ; ; ; ; ; ;

DS DS DS

1 1 1

; DRIVE NUMBER ; VOLUME DRIVER ; VTOC TRACK NUMBER

DS

3

; SPARES

EQU EQU

*-FCBDCB *-FCB

; DCB LENGTH ; FCB LENGTH

##################################################################################### # END OF FILE: FVCBUFS # LINES : 187 # CHARACTERS : 9792 # Formatter : Assembly Language Reformatter 1.0.2 (07 January 1998) #####################################################################################

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 89 of 154

======================================================================================== DOCUMENT HELLO.A.hex ======================================================================================== File ............. Fork ............. Size (bytes) ..... Created .......... Modified .........

"HELLO" DATA 193 (0KB) / $000000C1 Wednesday, April 12, 2006 -- 9:20:26 AM Wednesday, April 12, 2006 -- 9:20:26 AM

D/000000: D/000010: D/000020: D/000030: D/000040: D/000050: D/000060: D/000070: D/000080: D/000090: D/0000A0: D/0000B0: D/0000C0:

97003308 4C45205D 534F5552 1E00A234 59524947 50555445 30300085 4C554D45 95083200 9E083C00 08E80396 3229293A

07080A00 22415050 2E332020 30006808 20434F50 20434F4D 3AB03130 D022564F 30303000 303A8200 038000BF 532429CB 00

1400A232 5B202044 4345223A 3A5324D0 48542041 522C2049 082800A2 204F4E45 8158D031 A2393ABF 283230C9 BA53243A

3A5324D0 4F532033 B0313030 22284329 50504C45 4E432E22 363A5324 223AB031 C1313030 00A408E7 D328E328 B1000000

[......3....2:S$.] ["APPLE.][..DOS.3] [.3..SOURCE":.100] [0.h....4:S$."(C)] [.COPYRIGHT.APPLE] [.COMPUTER,.INC."] [:.1000...(..6:S$] [."VOLUME.ONE":.1] [000...2..X.1.100] [0:....$B LEAVE Y ALONE (Y=$B). ;ELSE SET ACCELERATION INDEX IN Y

* SETPHASE ONTABLE,Y MSWAIT

;CARRY SET=PHASE ON ;PHASE ON FOR 'ONTIME'. (100 USEC INTERVALS)

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 108 of 154

* SEEKEND

LDA CLC JSR LDA JSR INC BNE

PRIOR

EQU JSR CLC

* MSWAIT

CLRPHASE OFFTABLE,Y MSWAIT TRKCNT SEEK2

* * TURN HEAD STEPPER PHASE ON/OFF * SETPHASE EQU * LDA CURTRK CLRPHASE EQU * AND #3 ROL A ORA SLOTTEMP TAX LDA PHASEOFF,X LDX SLOTTEMP SEEKRTS RTS ; ; ; ; ; ;

;CARRY CLEAR=PHASE OFF ;PHASE OFF THEN WAIT 'OFFTIME'. (100 USEC INTERVALS) 'TRACKS MOVED' COUNT. (ALWAYS TAKEN) ;END OF SEEKING ;A=0: WAIT 25 MS SETTLE ; AND TURN OFF PHASE

;GET CURRENT PHASE ;MASK FOR 1 OF 4 PHASES ;DOUBLE FOR PHASE INDEX ;FLIP THE PHASE ;RESTORE X-REG ;AND RETURN

##################################################################################### # END OF FILE: RDADSEK # LINES : 203 # CHARACTERS : 8943 # Formatter : Assembly Language Reformatter 1.0.2 (07 January 1998) #####################################################################################

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 109 of 154

======================================================================================== DOCUMENT RELOCTR.pretty ======================================================================================== ; ; ; ;

##################################################################################### # PROJECT : APPLE ][ DOS 3.3 C SOURCE CODE LISTING -- (C) APPLE COMPUTER INC. 1983 # FILE NAME: RELOCTR #####################################################################################

PAGE ***************************************************** * * * (C) COPYRIGHT 1978,1980,1982 APPLE COMPUTER, INC. * * * ***************************************************** SKP 2 ********************************* * * * ADAPTED FOR MACRO EDASM BY * * JOHN ARKLEY * * DEC 1980 * * * ********************************* SKP 2 ********************************* * * * DOS 3.3 REVISION B PATCHES * * INSTALLED BY MARK HOUDE * * JUL 1982 * * * ********************************* SKP 2 ********************************* * * * DOS 3.3 REV B PATCHES VER 2 * * INSTALLED BY FERN BACHMAN * * SEP 1982 * * * ********************************* SKP 2 ********************************* * * * DOS33C PATCHES (APPEND & * * UPPER/LOWER CASE CHECK) * * * * BY * * GUIL BANKS * * 1983 * * * ********************************* ; ;EQUATES REQD TO FIND THINGS IN APPLE II ; SETVID EQU $FE93 SETKBD EQU $FE89 PROMPT EQU $33 OUTSW EQU $36 INSW EQU $38 ZPGWRK EQU $40 CNUM EQU $44 LBUFF EQU $200 MULT EQU $FB63

; ; ; ; ; ; ;

PROMPT CHAR OUTPUT VECTOR SWITCH INPUT VECTOR SWITCH ZERO PAGE WORK CELL CONVERTED NUMERIC LINE BUFFER MULT ROUTINE

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 110 of 154

INPRT OUTPRT IBCHN IBLMEM IBHMEM IBSOP IBBRK IBGO IBCONT IBSOV ASSOP ASEOP ASEOP2 ASHM1 ASHM2 ASRNX ASONERR ASLMEM ASBRK1 ASBRK2 ASCNTU1 ASCNTU2 ASRSEQ1 ASRSEQ2 AITSTL ATSTV ITSTV BOOTSL ZPGFCB MONRST MONBRK IORTS HOME PRINT GETKEY INSDS2 LENGTH ZRSET PWCNST

EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU REP

$FE8B $FE95 $E836 $4A $4C $CA $E3E3 $E000 $E003 $CC $67 $AF $69 $73 $6F $D6 $D8 ASSOP $D865 $1067 $D43C $C3C $D4F2 $CF2 $E000 $4C $20 $2E $42 $FF65 $FA59 $FF58 $FC58 $FDED $FD0C $F88E $2F $3F2 $3F4 40

ORG

ORIGIN

REP PAGE JMP

40

EQU

*

; SET IN PORT ; SET OUT PORT ; BASIC RUN ; BASIC LOW MEM ; INTEGER BASIC HIMEM ; INTEGER BASIC START OF CGM ; BASIC BREAK ; BASIC ENTRY POINT ; BASIC CONTINUE ENTRY POINT ; BASIC START OF VARIABLES ; AS START OF PROGRAM ; AS END OF PROGRAM ; AS END-OF PGM 2 ; AS HIGH MEM 1 ; AS HIGH MEM 2 ;AS RUN-ONLY FLAG ;AS ON-ERR GOTO FLAG ; AS LOW MEM ; AS ROM BREAK ; AS RAM BREAK

; AS 1 IB TEST LOC ; AS TEST VALUE ; IB TEST VALUE ; BOOT FROM SLOT ; ZERO PAGE WORK CELL ;MONITOR RESET ENTRY ;MONITOR BREAK FUNCTION ;KNOWN RTS IN MONITOR ROM

;NEW MONITOR ROM RESET VECTOR ;NEW MONITOR ROM POWER UP CONSTANT

* * * * BEGIN ; DOSREL ; ;GET RELOCATION ; DR0 LOC1

DR0A DR1B

DBINIT

PARMS EQU EQU LDA STA LDX STX LDY EQU LDA STA

* $26 #$BF ZPGWRK+1 #0 ZPGWRK #0 * (ZPGWRK,X) LOC1

; START AT BF00 ; TO LOOK FOR ; HIGH RAM ; APPLE TEST

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 111 of 154

DR1

DR1A

TYA EOR STA TYA EOR STA CMP BNE INY BNE BEQ EQU DEC BNE

LOC1 LOC1 (ZPGWRK,X) (ZPGWRK,X) LOC1 DR1A DR1 DR2 * ZPGWRK+1 DR0A

; BR IF TOOK ; NOT RAM ; TRY NEXT PAGE

; DR2 ;

EQU

* ZPGWRK+1 #$DF ZPGFCB+1 ZPGFCB (ZPGFCB,X)

;BEGIN PATCH TO INSURE ***** ; PROPER HIGH MEMORY CHECK. ;(DOS MASTER 3.1 CONTAINS ; THIS ROUTINE STARTING AT LOCATION ; $3540)

LOC1

DR2A

LDA AND STA STX LDA PHA STA TYA EOR STA TYA EOR STA CMP BNE

;SAVE TEST VALUE ;(FIRST TIME Y=0) ;TEST EACH (ALLEDGED) MEMORY BYTE ; 256 TIMES TO DETERMINE IF ; IT IS REALLY GOOD MEMORY AND ; MIRRORED 8K LOWER IN RAM.

LOC1 LOC1 (ZPGWRK,X) (ZPGFCB,X) LOC1 DR2B

;DID IT PASS THIS TIME? ; BYTE NOT MIRRORED, THEN GOOD

MEMORY INY BNE

DR2A

;MAYBE IT WAS COINCIDENCE ;BRANCH UNLESS IT'S MATCHED 256

TIMES

DR2B

LDY PLA JMP PLA STA

ZPGFCB+1

;HIMEM IS 8K LOWER THAN WAS ;ORIGINALLY THOUGHT!

LDY INY STY SEC TYA SBC STA SEC SBC BEQ STA LDA STA

ZPGWRK+1

DOSLNG NSPAGE

; MINUS DOS LENGTH ; IS NEW START OF DOS

RSPAGE BEGIN DELTA RSPAGE ASTART+1

; ; ; ;

LDA STA LDA STA

#DBINIT DI3+1

; RESET PI RTN TO NORMAL

DR2C (ZPGFCB,X)

;ORIGINAL HIMEM PROVED GOOD ;RESTORE BYTE ORIGINALLY MESSED

WITH. DR2C

;END OF PATCH ***** ; NEW END OF DOS

NEPAGE

MINUS OLD DOS START (BREIF NO DELTA) IS DELTA RESET START PAGE TO NORMAL

;

; ;RELOCATE ADR TABLES ;

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 112 of 154

DR3

; DR4

DR5 ; DR6

LDX STX EQU LDA TAY LDA STA JMP

#0 ZPGWRK * ADRTAB+1,X

EQU CLC LDA ADC STA INY BNE INC INY BNE INC

*

EQU LDA CMP BCC TYA CMP BCC

* ZPGWRK+1 ADRTAB+4,X DR4

ADRTAB+2,X ZPGWRK+1 DR5

(ZPGWRK),Y DELTA (ZPGWRK),Y DR5 ZPGWRK+1 DR6 ZPGWRK+1

ADRTAB+3,X DR4

; TXA CLC ADC TAX CPX BCC PAGE

#4 ADRTAB DR3

; ;RELOCATE CODE ; DR7 ;

; DR8

LDX STX

#0 TEMP1

LDA STA LDA STA

CDETAB+1,X ZPGWRK CDETAB+2,X ZPGWRK+1

LDX LDA JSR

#0 (ZPGWRK,X) INSDS2

; GET OP CODE ; GO FIND OUT HOW LONG

LDY CPY BNE LDA CMP BCC CMP BCS ADC STA

LENGTH #2 DR9 (ZPGWRK),Y RSPAGE DR9 REPAGE DR9 DELTA (ZPGWRK),Y

; ; ; ; ; ; ; ; ; ;

; GET A START OF CODE ADR ; PUT IN ZPG

;

; DR9

GET HOW LONG IF IT AIN'T 3 THEN DON'T RELOC GET PAGE FROM INST IF PAGE < REL START THEN IGNOR IF PAGE >= REL END THEN IGNORE ELSE ADD DELTA TO RELOCATE

SEC

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 113 of 154

LDA ADC STA LDA ADC STA

LENGTH ZPGWRK ZPGWRK #0 ZPGWRK+1 ZPGWRK+1

; ADD LENGTH ; TO PC

LDX CMP BCC LDA CMP BCC

TEMP1 CDETAB+4,X DR8 ZPGWRK CDETAB+3,X DR8

; CHECK FOR END ; OF CODE SEGMENT ; BR NOT END

#4

; INCREMENT TABLE INDEX

CDETAB DR7

; DONE ; BR IF NOT

# NO ERROR * * $10-> WRITE PROTECT * * $20-> VOLUME ERROR * * $40-> DRIVE ERROR * * $80-> READ ERROR * * * * IBSMOD: LOCATION TO * * RETURN THE VOLUME* * NUMBER ACTUALLY * * FOUND. * * * * IOBPSN: PREVIOUS SLOT * * NUMBER USED LAST * * ACCESS. * * * * IOBPDN: PREVIOUS DRIVE * * NUMBER USED LAST * * ACCESS. * * * ************************** * * * DEVICE CHARACTERISTICS * * TABLE DESCRIPTION: * * * * DEVICE TYPE CODE * * (ZERO FOR DISK II) * * * * NUMBER OF PHASES PER * * TRACK (TWO FOR DISK II)* * * * MOTOR ON TIME IN 100 * * MICROSECOND INTERVALS * * COMPLEMENTED. ($D8EF * * FOR DISK II) * * * **************************

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 118 of 154

RWTS

PAGE STY STA LST DO LDY STY FIN LST LDY STY LDY STY LDY LDA TAX LDY CMP BEQ

IOBPL IOBPH OFF DIAGMODE #TC1 TL1 ON #2 RECALCNT #MAXSEEKS SEEKCNT #1 (IOBPL),Y #$0F (IOBPL),Y SAMESLOT

;UPON ENTRY, A&Y POINT AT THE ;I/O CONTROL BLOCK (IOB) ;SAY WE'RE ACTIVE

;SET RECALIBRATE ; COUNT ;SET RESEEK ; COUNT ;GET SLOT # FOR THIS OPERATION ;DID HE CHANGE SLOTS? ;IF HE DIDN'T, GOOD FOR HIM!

* * * * *

NOW ARE USING A DIFFERENT SLOT. NOW WAIT FOR THIS DRIVE TO TURN OFF TO SENSE MOTOR NOT SPINNING, DATA FROM DISK MUST BE THE SAME FOR AT LEAST 96 MICROSECONDS TXA PHA LDA (IOBPL),Y TAX PLA PHA STA (IOBPL),Y LDA Q7L,X STILLON LDY #$08 LDA Q6L,X NOTSURE CMP Q6L,X BNE STILLON DEY BNE NOTSURE * * PREVIOUS SLOT'S DRIVE NOW OFF... * PLA TAX * * NOW CHECK IF THE MOTOR IS ON, THEN START IT * SAMESLOT LDA Q7L,X LDA Q6L,X LDY #8 BE SURE CHKIFON EQU * LDA Q6L,X PHA PLA PHA PLA STX SLOT CMP Q6L,X BNE ITISON DEY BNE CHKIFON * ITISON EQU *

;SAVE NEW SLOT # ;GET 'OLD SLOT NUMBER' ;PUT BACK ON STACK ;SAVE 'NEW SLOT NUMBER' ;GO INTO READ MODE ;TO BE SURE, DATA MUST REMAIN ;STABLE FOR 96 MICROSECONDS ;DATA STILL CHANGING? ;IF SO, STILL SPINNING ;STABLE LONG ENOUGH? IF NOT, LOOP

;RESTORE NEW SLOT #

;MAKE SURE IN READ MODE ;WE MAY HAFTA CHECK SEVERAL TIMES TO ;GET THE DATA ;DELAY FOR DISK DATA TO CHANGE

;CHECK RUNNING HERE ;=>IT'S ON... ;MAYBE WE DIDN'T CATCH IT ; SO WE'LL TRY AGAIN

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 119 of 154

PTRMOV

PHP LDA LDY LDA STA INY CPY BNE LDY LDA STA LDY LDA LDY CMP BEQ

MOTORON,X #6 (IOBPL),Y PTRSDEST-6,Y

;SAVE TEST RESULTS ;TURN ON MOTOR REGARDLESS ;MOVE OUT ALL POINTERS INTO ZPAGE

#$0A PTRMOV #3 (DEVCTBL),Y MONTIME+1 #2 (IOBPL),Y #$10 (IOBPL),Y OK

;MOVED ALL POINTERS?

(IOBPL),Y

;NOW USING THIS DRIVE ;TELL HIM MOTOR WAS OFF ;SET ZERO FLAG

;SET UP THE ; MOTOR-ON TIME ;NOW GET PARAMS ;DETERMINE DRIVE ONE OR TWO ;SAME DRIVE USED BEFORE? ;IF SO, DON'T NECESSARILY WAIT FOR

MOTOR

OK

SD1 DRVSEL

STA PLP LDY PHP ROR BCC LDA BCS LDA EQU ROR

#$00 A SD1 DRV1EN,X DRVSEL DRV2EN,X * DRIVNO

* * DRIVE SELECTED. IF MOTORING-UP, * WAIT BEFORE SEEKING... * PLP PHP BNE NOWAIT LDY #7 SEEKW JSR MSWAIT DEY BNE SEEKW LDX SLOT * NOWAIT EQU * * * SEEK TO DESIRED TRACK... * LDY #4 LDA (IOBPL),Y JSR MYSEEK * * SEE IF MOTOR WAS ALREADY SPINNING. * PLP BNE TRYTRK * * WAIT FOR MOTOR SPEED TO COME UP. * LST OFF DO DIAGMODE LDY #TC2 STY TL2 LDY #0 STY SCOUNT STY LCOUNT

;BY GOING INTO THE CARRY ;SELECT DRIVE 2 ! ;ASSUME DRIVE 1 TO HIT ;IF WRONG, ENABLE DRIVE 2 INSTEAD ;SAVE SELECTED DRIVE

;WAS THE MOTOR ; PREVIOUSLY OFF? ;=>NO, FORGET WAITING. ;YES, DELAY 150 MS

;RESTORE SLOT NUMBER

;SET TO IOBTRK ;GET DESIRED TRACK ;SEEK!

;WAS MOTOR ON? ;IF SO, DON'T DELAY, GET IT TODAY!

;SAY 'MOTOR COMING ON' ;CLEAR SECTOR AND ; LATENCY COUNTERS

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 120 of 154

MOTOF CONWAIT

MOTORUP

; ; ; ; ; ;

LDY STY FIN LST LDY BPL LDY DEY BNE INC BNE INC BNE EQU LST DO LDY STY FIN LST

#SP TL12

;SHUT OFF THE ; LATENCY INDICATOR

ON MONTIME+1 MOTORUP #$12

;IF MOTORTIME IS POSITIVE, ; THEN SEEK WASTED ENUFF TIME FOR US ;DELAY 100 USEC PER COUNT

CONWAIT MONTIME MOTOF MONTIME+1 MOTOF * OFF DIAGMODE #SP TL2

;COUNT UP TO $0000

;SAY 'MOTOR RUNNING'

ON

##################################################################################### # END OF FILE: RWTSONE # LINES : 323 # CHARACTERS : 12866 # Formatter : Assembly Language Reformatter 1.0.2 (07 January 1998) #####################################################################################

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 121 of 154

======================================================================================== DOCUMENT RWTSTWO.pretty ======================================================================================== ; ; ; ;

##################################################################################### # PROJECT : APPLE ][ DOS 3.3 C SOURCE CODE LISTING -- (C) APPLE COMPUTER INC. 1983 # FILE NAME: RWTSTWO #####################################################################################

* * DISK IS NOW UP TO SPEED: READ IT! * NOW CHECK: IF IT IS NOT THE FORMAT DISK COMMAND, * LOCATE THE CORRECT SECTOR FOR THIS OPERATION. * TRYTRK EQU * LDY #$0C LDA (IOBPL),Y BEQ GALLDONE CMP #$04 BEQ FORMDSK ROR A PHP BCS TRYTRK2 LST OFF DO DIAGMODE LDY #TC7 STY TL7 FIN LST ON JSR PRENIB16 LST OFF DO DIAGMODE LDY #SP STY TL7 FIN LST ON TRYTRK2 LDY #$30 STY RETRYCNT TRYADR LDX SLOT LST OFF DO DIAGMODE LDA #TC4 STA TL4 LDA #SP STA TL6 FIN LST ON JSR RDADR16 LST OFF DO DIAGMODE LDA #SP STA TL4 FIN LST ON BCC RDRIGHT LST OFF DO DIAGMODE LDA #TC6 STA TL6 FIN LST ON TRYADR2 DEC RETRYCNT

;GET COMMAND CODE # ;IF NULL COMMAND, GO HOME TO BED. ;FORMAT THE DISK? ;ALLRIGHT,ALLRIGHT, I WILL... ;SET CARRY=1 FOR READ, 0 FOR WRITE ;AND SAVE THAT ;MUST PRENIBBLIZE FOR WRITE. ;SAY 'PRENIBBLIZING'

;PRENIB FINISHED

;ONLY 48 RETRIES OF ANY KIND. ;GET SLOT NUM INTO X-REG ;SAY 'READING ADDRESS' ;SAY 'NO ADDRESS ERROR' (YET)

;READ NEXT ADDRESS FIELD ;ADDRESS-READ DONE

;IF READ IT RIGHT, HURRAH! ;SAY 'ADDRESS ERROR'

;ANOTHER MISTAEK!!

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 122 of 154

BPL TRYADR ; WELL, LET IT GO THIS TIME., * * RRRRRECALIBRATE !!!! * RECAL EQU * LDA CURTRK PHA ;SAVE TRACK WE REALLY WANT LDA #$60 ;RECALIBRATE ALL OVER AGAIN! JSR SETTRK ;PRETEND TO BE ON TRACK 96 DEC RECALCNT ;ONCE TOO MANY?? BEQ DRVERR ;TRIED TO RECALIBRATE TOO MANY TIMES, ERROR! LDA #MAXSEEKS ;RESET THE STA SEEKCNT ; SEEK COUNTER LDA #$00 JSR MYSEEK ;MOVE TO TRACK 00 PLA RESEEK JSR MYSEEK ;GO TO CORRECT TRACK THIS TIME! JMP TRYTRK2 ;LOOP BACK, TRY AGAIN ON THIS TRACK * * HAVE NOW READ AN ADDRESS FIELD CORRECTLY. * MAKE SURE THIS IS THE TRACK, SECTOR, AND VOLUME DESIRED. * RDRIGHT LDY TRACK ;ON THE RIGHT TRACK? CPY CURTRK BEQ RTTRK ;IF SO, GOOD * NO, DRIVE WAS ON A DIFFERENT TRACK. TRY * RESEEKING/RECALIBRATING FROM THIS TRACK LDA CURTRK ;PRESERVE DESTINATION TRACK PHA TYA JSR SETTRK PLA DEC SEEKCNT ;SHOULD WE RESEEK? BNE RESEEK ;=>YES, RESEEK BEQ RECAL ;=>NO, RECALIBRATE! *** DRVERR PLA ;REMOVE CURTRK. LDA #IBDERR ;BAD DRIVE ERROR JMPTO1 PLP JMP HNDLERR GALLDONE BEQ ALLDONE FORMDSK JMP DSKFORM ;=>GO TO IT! * * DRIVE IS ON RIGHT TRACK, CHECK VOLUME MISMATCH * RTTRK LDY #3 ;IS THE RIGHT DISK IN? LDA (IOBPL),Y ;GET DESIRED VOLUM PHA ;PRESERVE DESIRED VOLUME# LDA VOLUME ;GET ACTUAL VOLUME HERE LDY #$0E ;TELL OPSYS WHAT VOLUME WAS THERE STA (IOBPL),Y PLA ;GET DESIRED VOLUME BACK BEQ CORRECTVOL ;DESIRED VOLUME 00 MATCHES ALL. CMP VOLUME BEQ CORRECTVOL ;YUP, IT WAS RIGHT LDA #IBVMME ;HE SWITCHED DISCS! BNE JMPTO1 ;ALWAYS TAKEN CORRECTVOL EQU * LDY #5 ; TO ALLOW FOR INTERLEAVE LDA (IOBPL),Y ;GET REQUESTED (LOGICAL) SECTOR TAY ;MOVE TO INDEX REG LDA INTRLEAV,Y ;COMPUTE PHYSICAL SECTOR

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 123 of 154

NOLAT

CMP LST DO BEQ LDA STA LDA BEQ INC EQU JMP ELSE LST BNE FIN

SECT OFF DIAGMODE GOTSECT #TC5 TL5 SCOUNT NOLAT LCOUNT * TRYADR2 ON TRYADR2

* * HOORAY! WE GOT THE RIGHT SECTOR! * GOTSECT EQU * LST OFF DO DIAGMODE LDA #SP STA TL5 INC SCOUNT FIN LST ON PLP BCC WRIT LST OFF DO DIAGMODE LDA #TC9 STA TL9 LDA #SP STA TL10 FIN LST ON JSR READ16 LST OFF DO DIAGMODE LDA #SP STA TL9 FIN LST ON PHP LST OFF DO DIAGMODE BCC GOODREAD LDA #TC10 STA TL10 JMP TRYADR2 * GOODREAD EQU * ELSE LST ON BCS TRYADR2 FIN PLP LDX #0 STX T0 LST OFF DO DIAGMODE LDA #TC11 STA TL11

;DID WE GET THE SECTOR? ;=>WE FOUND IT! ;SAY 'LATENCY' ;ARE WE WAITING FOR FIRST SECTOR? ;=>YES. LATENCY UNPREDICTABLE ANYWAY ;NO, COUNT SECTORS MISSED ;NOW..GET CORRECT SECTOR.. ;NO, KEEP TRYING.

;SAY 'NO LATENCY' ;BUMP 'SECTORS-ACCESSED' COUNT

;CARRY WAS SET FOR READ OPERATION, ;SAY 'READING' ;SAY 'NO READ ERROR' (YET)

;CLEARED FOR WRITE ;READ FINISHED

;SAVE STATUS OF READ OPERATION ;NO ERROR ;SAY 'READ ERROR' ;RETRY ON ERROR

;CARRY SET UPON RETURN IF BAD READ ;CAREFUL OF STACK ;SET TO POSTNIBLIZE ; ALL 256 BYTES OF THE SECTOR ;SAY 'POSTINIBBLIZING'

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 124 of 154

FIN LST ON JSR POSTNB16 LST OFF DO DIAGMODE LDA #SP STA TL11 FIN LST ON LDX SLOT ALLDONE CLC DFB $24 HNDLERR SEC LDY #$0D STA (IOBPL),Y LDA MOTOROFF,X LST OFF DO DIAGMODE * AVERAGE LATENCY = LCOUNT/SCOUNT LDA LCOUNT LDY #0 DIVIDE EQU * CMP SCOUNT BCC PRTLAT SBC SCOUNT INY BNE DIVIDE * PRTLAT TYA AND #$0F ORA #$B0 CMP #$BA BCC PRTL2 ADC #6 PRTL2 STA TL12 LDA #SP STA TL1 FIN LST ON RTS WRIT EQU * LST OFF DO DIAGMODE LDA #TC8 STA TL8 FIN LST ON JSR WRITE16 LST OFF DO DIAGMODE LDA #SP STA TL8 FIN LST ON BCC ALLDONE LDA #IBWPER BCS HNDLERR * * THIS IS THE 'SEEK' ROUTINE * SEEKS TRACK 'N' IN SLOT #X/$10 * IF DRIVNO IS NEGATIVE, ON DRIVE 1 * IF DRIVNO IS POSITIVE, ON DRIVE 2 *

;DECODE INTO REAL WORLD DATA ;POSTNIB COMPLETED

;RESTORE SLOTNUM INTO X ;SKIP OVER NEXT BYTE WITH BIT OPCODE ;INDICATE AN ERROR ;GIVE HIM ERROR# ;TURN IT OFF...

;GET TOTAL LATENCY ;CLEAR QUOTIENT ;DONE? ;=>YES.PRINT IT ;REMOVE SCOUNT ;INCREMENT QUOTIENT

;MAX LATENCY=15 ;MAKE ASCII ;IS IT A-F? ;=>NO ;ADD 7 (INCLUDES CARRY) ;STUFF LATENCY COUNT ;SAY 'RWTS NOT ACTIVE'

;SAY 'WRITING'

;WRITE NYBBLES NOW ;WRITE FINISHED

;IF NO ERRORS. ;DISK IS WRITE PROTECTED!! ;ALWAYS TAKEN

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 125 of 154

MYSEEK

MYSEEK2

WASD0

ISDRV1 GOSEEK XTOY

PHA LST DO LDA STA FIN LST LDY LDA ROR PLA BCC ASL JSR LSR LST DO LDA STA FIN LST RTS STA JSR LDA BIT BMI LDA STA LDA BIT BMI STA BPL STA JMP TXA LSR LSR LSR LSR TAY RTS

;AND PRESERVE A-REGISTER OFF DIAGMODE #TC3 TL3 ON #$01 (DEVCTBL),Y A MYSEEK2 A MYSEEK2 CURTRK OFF DIAGMODE #SP TL3

;SAY 'SEEKING'

;IS THIS A TWO-PHASE DISC? ;GET # OF PHASES INTO CARRY ;IF ONE PHASE PER TRACK ;DIVIDE BACK DOWN

;SEEK DONE

ON TRKN XTOY DRV1TRK,Y DRIVNO WASD0 DRV2TRK,Y CURTRK TRKN DRIVNO ISDRV1 DRV2TRK,Y GOSEEK DRV1TRK,Y SEEK

;SAVE DESTINATION TRACK(*2) ;SET Y=SLOT# ;IS MINUS, ON DRIVE ZERO ;THIS IS WHERE I AM ;AND WHERE I'M GOING TO ;NOW UPDATE SLOT DEPENDENT ;LOCATIONS WITH TRACK ;INFORMATION ;ALWAYS TAKEN ;GO THERE!

A A A A

* * THIS SUBROUTINE SETS THE SLOT DEPENDENT TRACK * LOCATION. * SETTRK PHA LDY #$02 LDA (IOBPL),Y ROR A ROR DRIVNO JSR XTOY PLA ASL A SETTRK2 BIT DRIVNO BMI ONDRV1 STA DRV2TRK,Y BPL SETRTS ONDRV1 STA DRV1TRK,Y SETRTS RTS

;PRESERVE DESTINATION TRACK ;GET DRIVE # INTO CARRY ;INTO (DRIVNO) ;SET UP Y-REG ;ASSUME TRACK IS HELD *2 ;IF ON DRIVE 1(1), DRIVNO MINUS

; #####################################################################################

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 126 of 154

; ; ; ; ;

# END OF FILE: RWTSTWO # LINES : 302 # CHARACTERS : 14425 # Formatter : Assembly Language Reformatter 1.0.2 (07 January 1998) #####################################################################################

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 127 of 154

======================================================================================== DOCUMENT TEMPY.pretty ======================================================================================== ; ; ; ;

##################################################################################### # PROJECT : APPLE ][ DOS 3.3 C SOURCE CODE LISTING -- (C) APPLE COMPUTER INC. 1983 # FILE NAME: TEMPY #####################################################################################

*********************************************** * * GHOST APPEND BUG PATCH BY * BILL GRIMM * *********************************************** MOVEOF EQU * LDX CMDNO CPX #$1C BEQ GOON LDX #$00 STX EOFFLAG GOON RTS *********************************************** * * TURN Apple //e 80 COLUMN CARD * OFF & INIT APPLE * *********************************************** OFF80 EQU * LDA #$FF STA $4FB STA $C00C STA $C00E JSR $FB2F JMP HOME *********************************************** * * FIXIT2 was developed to fix the wrap around * problem APPEND has when trying to APPEND to * a sequential file which is >255 sectors in * length. * Fix by BANKS/BACHMAN * September 28, 1982 * *********************************************** SKP 1 FIXIT2 EQU * LDA CCBRLN STA DCBCSB STA DCBCRR TSX STA ENTSTK JMP GOODIO ; ; ; ; ; ;

; ; ; ; ;

GET CMD NUMBER APPEND COMMAND? YES, RETURN TO CALLING ROUTINE NO, THEN CLEAR X CLEAR EOF FLAG

; ; ; ; ;

CLEARS FUNNY TURNS 80 COL TURN OFF ALT MONITOR INIT CLEAR 80 COL

80 COL STUFF OFF CHAR SET ROUTINE GARBAGE

;Store current rec len low byte ;in current sector byte ;and in current relative rec ;Save status in ENTSTK ;for proper exit from GOODIO ;

##################################################################################### # END OF FILE: TEMPY # LINES : 44 # CHARACTERS : 1976 # Formatter : Assembly Language Reformatter 1.0.2 (07 January 1998) #####################################################################################

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 128 of 154

======================================================================================== DOCUMENT TRASH.pretty ======================================================================================== ; ; ; ;

##################################################################################### # PROJECT : APPLE ][ DOS 3.3 C SOURCE CODE LISTING -- (C) APPLE COMPUTER INC. 1983 # FILE NAME: TRASH #####################################################################################

PAGE ; ;FNDFIL - FIND FILE NAME IN VOLUUME DIR ; FNDFIL EQU * JSR RDVTOC LDA CCBFN1 STA ZPGFCB LDA CCBFN1+1 STA ZPGFCB+1 LDA #1 FF1 STA TEMP2 LDA #0 STA DCBVDR CLC FF2 EQU * INC DCBVDR JSR RDVDIR BCS FF4A LDX #0 ; FF3 STX TEMP1 LDA VDFILE,X BEQ FF6 BMI FF7 LDY #0 INX INX FF4 INX LDA (ZPGFCB),Y CMP VDFILE,X BNE FF5 INY CPY #30 BNE FF4 LDX TEMP1 CLC RTS ; FF5 EQU * JSR VDINC BCC FF3 BCS FF2 ; FF6 LDY TEMP2 BNE FF1 ; FF7 LDY TEMP2 BNE FF5 ; MVFN EQU * LDY #0 INX

; GO GET VTOC ; MOVE FN PTR ; TO ZERO PAGE

; GO GET VDIR SECTOR ; SET FOR 1ST FILE ; ; ; ; ;

SAVE INDEX GET FILE TRK BR IF LAST ENTRY BR DELETED ENTRY X=X+3

; GET FN CHAR ; COMPARE TO ENTRY CHAR ; BR IF NOT SAME ; ; ; ; ;

ALL 30 CHARS BR IF NOT GET INDEX FILE FOUND RETURN

; LOOKING FOR DELETED ; BR IF NOT (DO) ; LOOKING FOR EMPTY ; BR IF NOT ; HAVE NEW ENTTRY

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 129 of 154

FF8

INX INX LDA STA INY CPY BNE

(ZPGFCB),Y VDFILE,X

; MOVE FILE NAME

#30 FF8

;

VDINC

FF4A

LDX SEC RTS EQU CLC LDA ADC TAX CPX RTS EQU LDA LDY BNE JMP PAGE

; ;GETSEC - GET A SECTOR ; GETSEC EQU LDA BEQ ; GS0 EQU DEC BMI ; CLC LDX GS1 ROL DEX BNE BCC ; INC BNE INC GS1A EQU LDA RTS ; CS2 LDA STA ; GSS1 LDA STA JSR ; GS2 EQU CLC LDA ADC BEQ CMP BCC

TEMP1

; GET INDEX ; SET NOT OLD ; DONE

* TEMP1 #35 #VDFLEN * #0 TEMP2 FF1 ERROR9

* DCBATK GSS1

; GET ALLOCATED TRK ; BR IF NONE

* DCBALS CS2

; DECREMENT SECTOR NO ; BR IF NO SECTORS REM

#4 DCBABM-1,X

; 4 BYTE SHIFT ; SHIFT BYTE LEFT

GS1 GS0

; BR IF NO SECTOR

DCBNSA GS1A DCBNSA+1 * DCBALS

; GET ALLOCATED SECTOR ; RETURN

#0 DCBATK

; CLEAR ALLOCATED ; TRK

#0 TEMP3 RDVTOC

; SET SEARCH STATE=0 ; GET VTOC

* VALCA1 VALCA2 GS3 VNOTRK GS5

; GET LAST ALLOCATTED TRK ; AD (+1) OR (-1) ; BR IF DECK TO ZERO ; BR IF NOT AT OUTER LIMIT

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 130 of 154

GS3

GS4 GS5

LDA BNE LDA BNE LDA STA STA CLC ADC STA STA

#$FF GS4 TEMP3 ERR9 #1 TEMP3 VALCA2

; SET (-1) ; ; ; ; ;

#17 VALCA1 DCBATK

; ADD VTOC TRK NO ; SET NEW LAST ALLOCATED ; PUT IN DCB

GET SEARCH STATE BR IF NOT ZERO SET (+1) SET SEARCH STATE = 1 SET NEW (+1) OR -1)

;

GS6

GS7

ERR9

TAY ASL ASL TAY LDX CLC LDA STA BEQ SEC LDA STA DEY DEX BNE BCC JSR LDA STA BNE JMP PAGE

A A

; ALLOCATED TRACK ; TIME 4

#4 VSECAL+3,Y DCBABM-1,X GS7 #0 VSECAL+3,Y GS6 GS2 WRVTOC VNOSEC DCBALS GS0 ERROR9

; ;FRETRK - FREE TRACK OF SECTORS ; FRETRK EQU * LDA DCBATK BNE FT1 RTS FT1 PHA JSR RDVTOC LDY DCBALS PLA CLC JSR FRESEC LDA #0 STA DCBATK JMP WRVTOC ; ;FRESEC - FREE A SECTOR ;A=TRK, Y=SECTOR, C=ON/OFF ; FRESEC EQU * FS1 LDX #252 FS2 ROR DCBABM-252,X INX BNE FS2 INY CPY VNOSEC BNE FS1 ;

; MOVE BIT MAP BYTE ; BR IF NO BITS ON ; SET HAVE A SECTOR ; CLEAR VTOC BYTE

; BR IF MORE TO MOVE ; ; ; ;

GO WRITE VTOC GET NO SECTORS SET IN DCB SECTOR BYTE GO ALLOCATED SECTOR

; GET ALLOCATED TRACK ; BR IF NONE ; DONE ; ; ; ; ; ;

GET VTOC GET SECTOS GET TRACK SET FREE GO FREE CLEAR ALLOCATED TRK

; WRITE VTOC

; ; ; ; ; ; ;

4 BYTE SHIFT SHIFT IN CARRY NEXT BYTE BR IF NOT DONE INC SECTOR NO NORMAL BR IF NOT

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 131 of 154

FS3

FS4

ASL ASL TAY BEQ LDX LDA ORA STA DEY DEX BNE RTS PAGE

A A FS4 #4 DCBABM-1,X VSECAL+3,Y VSECAL+3,Y

; TRACK*4

; GET BIT MAP BYTE ; OR WITH VTOC BM

FS3

; ;LOCSEC - LOCATE SECTOR FOR RECORD I/O ; ;RELSEC = (REL REC * RECLEN + RELBYTE)/256 ;SECBYT = REMAINDER ; LOCSEC EQU * LDA CCBRRN STA DCBCSB STA DCBCRR LDA CCBRRN+1 STA DCBCRS STA DCBCRR+1 LDA #0 STA DCBCRS+1 LDY #16 ; LS1 TAX LDA DCBCSB LSR A BCS LS1A TXA BCC LS2 LS1A CLC LDA DCBCRS+1 ADC DCBRCL STA DCBCRS+1 TXA ADC DCBRCL+1 ; LS2 ROR A ROR DCBCRS+1 ROR DCBCRS ROR DCBCSB DEY BNE LS1 ; DO DOS33B CLC FIN LDA CCBBYT STA DCBCRB ADC DCBCSB STA DCBCSB LDA CCBBYT+1 STA DCBCRB+1 ADC DCBCRS STA DCBCRS DO DOS33B BCC DONTINC

; DONE

; RELATIVE RECORD NUMBER ; TO CSB FOR MULT ; AND CRR FOR SAVE

; HIGH CRS=0 ; 16 BIT MULT ; SAVE MS BYTE ; IF NO CARRY THEN NO PART PROD

; FPORM PARTIAL PROD

; MULT BY 2

; DEC BIT COUNT ; BR IF MORE BITS ; FOR FILE LENGTH > $7FFF BYTES ; ADD REL BYTE RESULT ; (SAVE REL BYTE)

; (SAVE REL BYTE)

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 132 of 154

DONTINC

ERROR1 ERROR2 ERROR3 ERROR4 ERROR5 ERROR6 ERROR9 #CRENSA) ERRR10 GOODIO ERRORA ERRORB RETURN

INC RTS DS ELSE LDA ADC STA RTS FIN PAGE LDA BNE LDA BNE LDA BNE LDA BNE LDA BNE LDA BNE JMP NOP LDA BNE LDA CLC BCC EQU SEC EQU PHP STA LDA

DCBCRS+1 2,$00 #0 DCBCRS+1 DCBCRS+1

#CREFUN ERRORA #CRERR ERRORA #CREMRE ERRORA #CREPRO ERRORA #CREEOF ERRORA #CREFNF ERRORA ERROR9X

;MUST CLOSE ALL FILES (WAS LDA

#CREFLK ERRORA CCBSTA RETURN *

; CARRY=CLR ; GO RETURN ; CARRY=SET

* CCBSTA #0

; SET STA ;(FIX FOR APPLE SYS MONITOR $48 USED

$48 RTNFCB

;(THIS ADDED 11/1/78) ; GO RTN FCB ; GET STATUS ; GET ENT STACK ; RESTORE STACK ; DONE

BY RWTS)

EC2 ; ; ; ; ; ;

STA JSR PLP LDX TXS RTS EQU

ENTSTK *

##################################################################################### # END OF FILE: TRASH # LINES : 284 # CHARACTERS : 12221 # Formatter : Assembly Language Reformatter 1.0.2 (07 January 1998) #####################################################################################

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 133 of 154

======================================================================================== DOCUMENT WRITADR.pretty ======================================================================================== ; ; ; ;

##################################################################################### # PROJECT : APPLE ][ DOS 3.3 C SOURCE CODE LISTING -- (C) APPLE COMPUTER INC. 1983 # FILE NAME: WRITADR #####################################################################################

SBTL '16-SECTOR WRITE ADDRESS' ******************************** * * * WRITE ADR FIELD SUBROUTINE * * (16-SECTOR FORMAT) * * WRITES SPECIFIED NUMBER OF * * 40-USEC (10-BIT) SELF-SYNC * * NIBLS, ADR FIELDS 16-SECTOR * * START MARKS ($D5,$AA,$96), * * BODY (VOLUME, TRACK, SECTOR,* * CHECKSUM), END FIELD MARKS, * * AND THE WRITE TURN-OFF NIBL.* * * ******************************** * * * ------- ON ENTRY ------* * * * THE LOCATIONS VOLUME, TRK, * * AND NSECT MUST CONTAIN THE * * DESIRED VOLUME, TRACK, AND * * SECTOR VALUES DESIRED. * * * * THE PROPER DRIVE MUST BE * * ENABLED AND UP TO SPEED IN * * READ MODE (Q7L, Q6L). * * * * X-REG CONTAINS SLOTNUM * * TIMES 16. * * * * Y-REG CONTAINS NUMBER OF * * SELF-SYNC NIBLS DESIRED * * MINUS 1. * * (0 FOR 256 NIBLS) * * * ******************************** * * * ------- REQUIRES ------* * * * 1 USEC CYCLE * * * ******************************** * * * ------- CAUTION -------* * * * MOST OF THIS CODE IS TIME * * CRITICAL. OBSERVE ALL * * 'NO PAGE CROSS!' WARNINGS * * ON BRANCHES. * * * ******************************** SWADR1 EQU * ;TELL RELOCATOR WHERE TO BEGIN ******************************* WADR16 SEC ANTICIPATE WR PROT ERR.

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 134 of 154

WSYNC1

LDA LDA BMI LDA STA CMP PHA PLA JSR JSR STA CMP NOP DEY BNE LDA JSR LDA JSR LDA JSR LDA JSR

Q6H,X Q7L,X WADRTS #$FF Q7H,X Q6L,X (3) (4) WADRTS1 WADRTS1 Q6H,X Q6L,X (2) (2) WSYNC1 #$D5 WNIBLB2 #$AA WNIBLB2 #$96 WNIBLB2 NVOL WBYTE

INTO 'WR PROT SENSE' MODE. SENSE IT (NEG=PROTECTED) ERR EXIT IF PROTECTED. SELF-SYNC NIBL. WRITE FIRST NIBL. (4) BACK TO WRITE MODE. FOR DELAY. (12) FOR 40-USEC NIBLS. (12) (5) WRITE NIBL. (4) (BACK TO WRITE MODE) FOR DELAY. NEXT OF 'N' NIBLS. (3) *** NO PAGE CROSS! *** (2) ADR MARK 1. (15,9,6) WRITE IT. (2) ADR MARK 2. (15,9,6) WRITE IT. (2) 16-SECTOR ADR MARK 3. (15,9,6) WRITE IT. (3) (14,9,6) WRITE NVOL (ODD, THEN EVEN,

BITS.) LDA TRK JSR WBYTE LDA NSECT JSR WBYTE LDA NVOL EOR TRK EOR NSECT PHA (3) LSR A ORA AA * (PRECISE TIMING, 32 CYCLES PER NIBL) STA Q6H,X LDA Q6L,X PLA (4) ORA #$AA JSR WNIBLA LDA #$DE JSR WNIBLB2 LDA #$AA JSR WNIBLB2 LDA #$EB JSR WNIBLB2 CLC INDICATE WADRTS LDA Q7L,X LDA Q6L,X WADRTS1 RTS RETURN WBYTE PHA (3) LSR A ORA AA STA Q6H,X CMP Q6L,X PLA (4) NOP (2) NOP (2) NOP (2) ORA #$AA WNIBLA NOP (2) WNIBLB2 NOP (2) PHA (3)

(3) WRITE TRACK NUMBER. (14,9,6) ODD, THEN EVEN, BITS) (3) WRITE SECTOR NUMBER. (14,9,6) (ODD, THEN EVEN, BITS) (3) (3) FORM ADR FIELD CHECKSUM. (3) SAVE FOR EVEN BITS. (2) ALIGHN ODD BITS. (3) SET CLOCK BITS. (5) WRITE CHECKSUM ODD BITS. (4) BACK TO WRITE MODE. RECOVER FOR EVEN BITS. (2) SET CLOCK BITS. (17,9,6) WRITE THEM. (2) END MARK 1. (15,9,6) WRITE IT. (2) END MARK 2. (15,9,6) WRITE IT. (2) END MARK 3. (15,9,6) 'WRITE TURN-OFF' NO WR PROT ERR. OUT OF WRITE MODE. TO READ MODE. PRESERVE FOR EVEN BITS. (2) ALIGN ODD BITS. (3) SET CLOCK BITS. (5) WRITE NIBL. (4) RECOVER FOR EVEN BITS. FOR DELAY. (2) SET CLOCK BITS. (17,9,6) ENTRY. (15,9,6) ENTRY. FOR

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 135 of 154

WRNIBL EWADR1 XP2 XP2H ; ; ; ; ; ;

PLA STA CMP RTS EQU EQU EQU DS

(4) Q6H,X Q6L,X (6) * = HMEM ; THEN WON'T FIT ; SET NEW EOP ADR

; GET ADR WHERE TO LOAD ; GO LOAD ;RESTORE I/O ;RELOC FOR THIS VERSION OF APPLSOFT ; SET IB PGM ; GO OPEN AND TEST ; GO GET BLOCK LENGTH ; HMEM - BLOCK LENGTH ; IS NEW SOP

__________________________________________________________________________________  Apple II Computer Information  Apple II DOS 3.3 C Source Code Listing -- 1983 -- Page 142 of 154

BCC TAY

MFULL

CPY BCC BEQ STY STX EQU STX STY JMP

IBLMEM+1 MFULL MFULL IBSOP+1 IBSOP * CCBBBA CCBBBA+1 GODOS

EQU LDA STA LDA STA LDA STA LDA STA LDA STA LDA STA JSR LDA STA TAY LDA STA RTS

* SVBLA CCBBBA SVBLA+1 CCBBBA+1 #0 CCBBLN+1 #2 CCBBLN #CRQRD CCBREQ #CRMNBL CCBRQM DOSGO SVBL+1 CCBBLN+1

EQU JSR JMP EQU CMP BEQ LDX STX LSR BEQ JMP

* ECLOSE MFERR * CCBFUC LD1C CMDNO SVCMD A LD1A EINT

EQU LDX LDA STA DEX BPL JMP

* #29 FNAME1,X FNAME2,X

;

LD3

; LD2

; MFULL LD1

; LD1A LD1B

; LD1C

; IF NEW SOP