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