 NAM VFLEX6809
 STTL FOR VEGAS 6809
*************************************************
*                                               *
*       6809 FLEX V3.1                          *
* DISK OPERATING SYSTEM COPYRIGHT (C) 1980 BY   *
*       COSMOS-1                                *
*                                               *
*************************************************
* DISASSEMBLY BY DYNAMITE OF 1.VFLEX.SYS

* STANDARD PRE-NAMED LABEL EQUATES

LINBUF EQU $C080
RETADR EQU $CC43
LIGNE EQU $EFAB
CARACT EQU $EFAC
OUTEC EQU $F809
LECSE EQU $F812
ECRSE EQU $F815
VERSE EQU $F818
PIST0 EQU $F81B
SELEC EQU $F81E
TSTRD EQU $F821
TSTR1 EQU $F824
LEINI EQU $F827
HOINI EQU $F82A
JMPIS EQU $F82D

* ASCII CODE EQUATES

NUL EQU $00
ETX EQU $03
EOT EQU $04
LF EQU $0A
CR EQU $0D
SI EQU $0F
DLE EQU $10

* EXTERNAL LABEL EQUATES

L0000 EQU $0000
L0005 EQU $0005
L000E EQU $000E
L001B EQU $001B
L002A EQU $002A
L0036 EQU $0036
L003D EQU $003D
L0044 EQU $0044
L0067 EQU $0067
L006F EQU $006F
L0074 EQU $0074
L007E EQU $007E
L0084 EQU $0084
L0085 EQU $0085
L0090 EQU $0090
L0097 EQU $0097
L009D EQU $009D
L00BB EQU $00BB
L00C1 EQU $00C1
L00C8 EQU $00C8
L00D4 EQU $00D4
L00D7 EQU $00D7
L00E2 EQU $00E2
L00E3 EQU $00E3
L00F7 EQU $00F7
L00F9 EQU $00F9
LBDDE EQU $BDDE
STACK EQU $C07F
LINBUF+LBL-1 EQU $C0FF
LC810 EQU $C810
LC838 EQU $C838
LCC3D EQU $CC3D
CRSAVE EQU $CC3F
LCC45 EQU $CC45
IOTEMP EQU $CC47
COUNT EQU $CC4B
LCC4C EQU $CC4C
TEMP EQU $CC4D

LBL     EQU     128         LINE BUFFER LENGTH

 ORG $C700

CMDEND JMP LC723 SWI3 VECTOR
LC703 JMP LC703
 JMP LC747
LC709 JMP LC785
LC70C JMP LC795
 JMP LC71F
LC712 INC <L0000
 NEG <L0000
 NEG <L00C8
 FCB $10
LC719 EORB #$10
LC71B NEG <L0000
LC71C EQU *-1
LC71D NEG <L0000
LC71E EQU *-1
LC71F JMP [IHNDLR]
LC723 LDX TASKPT
 STS 2,X
 TST FBFLAG
 BNE LC73F
 LDX #PR1
 INC FBFLAG
 TST 0,X
 BEQ LC73F
LC738 STX TASKPT
 LDS 2,X
 RTI
LC73F LDX #PR0
 CLR FBFLAG
 BRA LC738
LC747 ORCC #$10
 TST LC71B
 BEQ LC777
 LDX LC719
 LDA 0,X
 PSHS A
 LDD 1,X
 LDX #LCAC0
 STD 64,X
 PULS A
 STA 3,X
 CLR 0,X
 LDA #1
 STA 2,X
 CLR 34,X
 CLR 59,X
LC76D TST LC71E
 BEQ LC79B
 SWI3
 NOP
 BRA LC76D
LC777 ANDCC #$EF
LC779 JSR [TMOFF]
 CLR PR1
 SWI3
 NOP
 BRA LC779
LC785 ORCC #$10
 TST FMSBUS
 BEQ LC791
 SWI3
 NOP
 BRA LC785
LC791 INC FMSBUS
 RTS
LC795 CLR FMSBUS
 ANDCC #$EF
 RTS
LC79B TST LC71D
 BNE LC7C7
 LDX #LCAC0
 JSR FMS
 BNE LC7C7
 TST LC71C
 BEQ LC7BC
 CLR LC71C
 CMPA #$0A
 BEQ LC7C3
 PSHS A
 LDA #$0A
 BSR LC7F6
 PULS A
LC7BC CMPA #$0D
 BNE LC7C3
 STA LC71C
LC7C3 BSR LC7F6
 BRA LC79B
LC7C7 LDA #$0D
 BSR LC7F6
 LDA #$0A
 BSR LC7F6
 LDA LC712
 BSR LC7F6
 CLR LC71D
 LDX LC719
 TST 3,X
 BEQ LC7E3
 DEC 3,X
 JMP LC747
LC7E3 LEAX 4,X
 CMPX #SYSFCB
 BNE LC7ED
 LDX #LC810
LC7ED STX LC719
 DEC LC71B
 JMP LC747
LC7F6 JSR PCHK
 BMI LC800
 SWI3
 NOP
 BRA LC7F6
LC800 JMP POUT

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


*
* STARTUP ROUTINE
* THIS ROUTINE INITIALIZES CERTAIN PARAMETERS, GETS
* DATE FROM USER, AND EXECUTES A STARTUP.TXT FILE.

 ORG $C840

SYSFCB FCB $FF,$00,$00,$00
SYSFCB+4 FCC "STARTUP",NUL,"T"
 FCB $58,$54,$00

 ORG $CA00

 BRA STAR0
VERS RTS
 ORB #$AC
 RTS
FCB $39,$CA,$AC,$39
MEMEN1 FCB $C0,$A0

STAR0 LDA #$39 SET UP RTS
 STA TSTSTR disable re-entry to this code

 LDX MEMEND
 LEAX 161,X
 STX MEMEN1

 JSR [TINIT] do terminal init
 LDX INCHV get address of terminal input routine
 STX INCH+1 set in FLEX in char jump
 STX INCH2+1 set in FLEX alt in char jump

 LDX OUTCHV get address of terminal output routine
 STX OUTCH+1 set in FLEX out char jump
 STX OUTCH2+1 set in FLEX alternate out char jump

 LDX STATV get address of terminal status check routine
 STX STATUS+1 set in FLEX status check jump

 LDX #$00A0 START OF SCAN MEMORY ADDRESS
 LDB #$B9 TEST PATTERN
STAR1 LDA 0,X SAVES MEMORY CONTENT
 STB 0,X STORE THE TEST PATTERN
 NOP WAIT
 CMPB 0,X COMPARE WITH TEST PATTERN
 BNE STAR2 DIFFERENT, EXIT LOOP
 STA 0,X OK, RESTORE MEMORY CONTENT
 LEAX 1024,X SKIP 1Ko
 CMPX MEMEN1 IS IT THE TOP MEMORY ?
 BNE STAR1 NO CONTINUE TO SCAN
STAR2 LEAX -161,X OK, COMPUTE MEMEND
 STX MEMEND RESTORE MEMEND

 LDX #WARMS GET HOT ENTRY POINT
 STX ESCRET setup 'escape routine' address

 LDX #FLXMG1 point to Flex version signon
 JSR JPSTRIN print to terminal
 JSR JPCRLF and CRLF
 BSR VERS
 JSR JPCRLF and CRLF

 LDX #SYSFCB point to STARTUP.TXT FCB
 LDA #1 set for read operation
 STA 0,X
 JSR FMS CALL FMS
 BEQ STAR3 no error 

 LDA 1,X GET ERROR 
 JSR LD200 IDENTIFY ERROR
 JMP JWARMS IGNORE FILE

* STARTUP.TXT IS OPEN
STAR3 LDX #LINBUF init line buffer pointer
STAR4 STX BUFPNT
 LDX #SYSFCB
 JSR FMS get byte from startup.txt
 BEQ STAR5 
 PSHS X,Y
 JMP LD2D7 REPORT ERROR

STAR5 LDX BUFPNT FILL INPUT BUFFER FROM
 STA 0,X+ .STARTUP.TXT FILE
 CMPA #$0D CARRET ARE WE DONE?
 BNE STAR4 NO GET ANOTHER BYTE
 LDX #SYSFCB GOT TO END OF LINE
 JSR LD1F4 SO - CLOSE FILE
 LDX #LINBUF
 STX BUFPNT
 LDX #JWARMS
 STX RETADR
 JMP LD32E

LCAAC LDX #FLXMG2
 JSR JPSTRIN
 JSR JINBUF
 BSR LCACB
 BCS LCAAC
 STA SYSMTH
 BSR LCACB
 BCS LCAAC
LCAC0 STA SYSDAY
 BSR LCACB
 BCS LCAAC
 STA SYSYR
 RTS
LCACB JSR JINDEC
 BCS LCADB
 LDA LOADAO+1
 TSTB
 BEQ LCAD9
 ANDCC #$FE
 RTS
LCAD9 ORCC #1
LCADB RTS

*       FLEX startup signon message

FLXMG1 FCC "6809 FLEX V3.1",CR,LF,LF
FLXMG2 FCC "COSMOS-1 "
 FCB $04

 ORG $CC00

BSPCHR FCB $08 TTYSET BACKSPACE CHARACTER (^H)
DELCHR FCB $18 TTYSET DELETE CHARACTER (^X)
EOLCHR FCB $3A TTYSET END OF LINE CHARACTER
DEPTH FCB $00 TTYSET LINES PER SCREEN
WIDTH FCB $50 TTYSET COLUMNS PER LINE
NULLS FCB $04 TTYSET NULL COUNT
TABCHR FCB $00 TTYSET TAB CHARACTER
BSECHR FCB $08 TTYSET BACKSPACE ECHO CHARACTER
TTYEJ FCB $00 TTYSET EJECT COUNT
PAUSE FCB $FF TTYSET PAUSE FLAG
ESCCHR FCB $1B TTYSET ESCAPE CHARACTER
SYSDRV FCB $00 ASN SYSTEM DRIVE NUMBER
WRKDRV FCB $00 ASN WORKING DRIVE NUMBER
SYSFLG FCB $00 SYSTEM FLAG
SYSMTH FCB $00 SYSTEM MONTH
SYSDAY FCB $00 SYSTEM DAY
SYSYR FCB $54 SYSTEM YEAR
LSTTRM FCB $00 LAST TERMINATOR
UCMDTB FCB $00,$00 USER COMMAND TABLE ADDRESS
BUFPNT FCB $00,$00 LINE BUFFER POINTER
ESCRET FCB $00,$00 ESCAPE RETURN REGISTER
CURCHR FCB $00 CURRENT CHARACTER
PRVCHR FCB $00 PREVIOUS CHARACTER
CURLCT FCB $00 CURRENT LINE NUMBER
LOADAO FDB $0000 LOADER ADDRESS OFFSET
XFRFLG FCB $00 TRANSFER FLAG
XFRADR FDB $0000 TRANSFER ADDRESS
ERRTYP FCB $00 ERROR TYPE
SPECIO FCB $00 SPECIAL I/O FLAG
OUTSWT FCB $00 OUTPUT SWITCH
INSWT FCB $00 INPUT SWITCH
OUTFIL FCB $00,$00 FILE OUTPUT ADDRESS
INFIL FCB $00,$00 FILE INPUT ADDRESS
DOCMDF FCB $00 COMMAND FLAG
CURCOL FCB $00 CURRENT OUTPUT COLUMN
CASEF  FCB $00 Upper/Lower case flag
MEMEND FCB $BF,$FF MEMORY END
ERRVEC FCB $00,$00 ALTERNATE ERROR LIST PTR
INECHO FCB $01 FILE INPUT ECHO FLAG
FMSBUS FCB $00
TASKPT FCB $00,$00
CPUTYP FCB $00
FBFLAG FCB $00
PT_RAP FCB $00,$00
PT_LEN FCB $00,$00
PT_DEV FCB $00,$00 

 ORG $CC49

ULCFLG FCB $60 MAP FILENAMES TO UPPER
OUTNUM FCB $84

 ORG $CC4E

PROMPT FCC "+++",EOT
QMARK FCC "???",EOT
WHTMSG FCC "QUOI?",EOT
CTMSG FCC "TRANSFERT IMPOSSIBLE",EOT
NFMSG FCC "N'EXISTE PAS",EOT
DEMSG FCC "ERREUR DOS #",EOT
DNRMSG FCC "LECTEUR NON PRET",EOT
GETMSG FCC "GET"
 FCB $00
 FDB $D20F
 FCC "MON"
 FCB $00
 FDB $D34B
 FCB $00
CONTBL FDB 10000
 FDB 1000
 FDB 100
 FDB 10

 ORG $CCC0

PINIT RTS

 ORG $CCD8

PCHK RTS

 ORG $CCE4

POUT RTS

 ORG $CCF8

PR0 FCB $01,$00,$00,$00
PR1 FCB $00,$00,$00,$00


COLDS JMP JCOLDS GO INITIALIZE
WARMS JMP JWARMS WARM ENTRY POINT
RENTER JMP JRENTE RE-ENTER DOS
INCH JMP INCH INPUT ROUTINE
INCH2 JMP INCH2 TERMINAL INPUT
OUTCH JMP OUTCH OUTPUT CHARACTER
OUTCH2 JMP OUTCH2 TERMINAL OUTPUT
GETCHR JMP JGETCH GET CHARACTER
TCHR JMP JTCHR PUT CHARACTER
INBUFF JMP JINBUF INPUT TO BUFFER
PSTRNG JMP JPSTRIN PRINT STRING
CLASS JMP JCLASS CLASSIFY CHARACTER
PCRLF JMP JPCRLF PRINT CR AND LF
NXTCH JMP JNXTCH NEXT BUFFER CHAR
RSTRIO JMP JRSTRIO RESTORE IO VECTORS
GETFIL JMP JGETFI GET FILE SPEC
LOAD JMP JLOAD FILE LOADER
SETEXT JMP JSETEX SET NAME EXTENSION
ADDBX JMP JADDBX ADD B TO X
OUTDEC JMP JOUTDE OUTPUT DECIMAL
OUTHEX JMP JOUTHE OUT HEX CHARACTER
RPTERR JMP JRPTER REPORT ERROR
GETHEX JMP JGETHE GET HEX NUMBER
OUTADR JMP JOUTAD OUT HEX ADDRESS
INDEC JMP JINDEC GET DECIMAL NUMBER
DOCMND JMP JDOCMN DO COMMAND LINE
STATUS JMP STATUS TERMINAL INPUT STATUS
 JMP LCE05
 JMP LCE05

* INIT
*
* INIT IS THE INITIALIZATION ROUTINE.
* ALL SYSTEM VARIABLES ARE SET HERE.

INIT LDS #STACK SET STACK
INIT1 CLR LSTTRM CLEAR TERM BYTE
 JSR FMSINT INIT SYSTEM
 CLR DOCMDF CLEAR FLAG
 JSR TSTSTR CHECK FOR STARTUP

* ENTRY
*
* ENTRY IS THE WARM START ENTRY POINT.
* THE STACK IS RESET HERE.

JWARMS LDS #STACK SET STACK
 JSR DWARMS DO USER WARMSTART ROUTINE
 LDX #WARMS POINT TO WARM START
 STX ESCRET SET RETURN REG
 LDX #CMDEND SET SWI3 VECTOR
 STX [SWIVEC] 
 LDX IHNDLR SET IRQ VECTOR
 STX [IRQVEC]
 LDX #PR0 SET PR # 0
 STX TASKPT
 CLR FBFLAG SET STATUS
 CLR LCC4C CLEAR FILE DESIG.
 BSR JRSTRIO

* DOS
*
* DOS IS THE MAIN DOS LOOP

 LDA LSTTRM CHECK TERMINATOR
 CMPA EOLCHR WAS IT EOL?
 BNE DOS2 
 INC BUFPNT+1 RESET BUFPNT
 BRA JRENTE

DOS2 TST DOCMDF TEST FLAG
 LBNE RETURN DO CMD RETURN
 JSR FMSCLS CLOSE ALL
 BNE INIT1 ERRORS?
 LDX #PROMPT PROMPT +++
 JSR JPSTRIN
 BSR JINBUF 
JRENTE JSR SKPSPC SKIP SPACES
 CMPA #$0D LONE CARRIAGE RET?
 BEQ DOS2
LCDB8 LDX #SYSFCB POINT TO SYSTEM FCB
 INC SYSFLG SET SYSTEM DRIVE
 JSR JGETFI GET FILE NAME
 BCS NFERR ERROR?
 LDX #GETMSG POINT TO TABLE
 BSR LKNAM LOOK FOR NAME
 BEQ DOS6 FIND?
 LDX UCMDTB CHECK USER TABLE
 BEQ DOS8 IS THERE ONE?
 BSR LKNAM LOOK FOR NAME
 BNE DOS8 FIND?
DOS6 JMP [1,X] JUMP TO COM ADDRESS

DOS8 JSR LOAGO DO LOAD & GO

NFERR LDX #WHTMSG POINT TO STRING
 LDA #$15 SET ERROR TYPE
LCDDE STA ERRTYP
LCDE1 JSR JPSTRIN OUTPUT IT
LCDE4 CLR LSTTRM CLEAR TERM
 JMP JWARMS RESTART


* RESTIO
*
* RESTIO RESTORES THE SYSTEM IO JUMP
* VECTORS FOR INPUT, OUTPUT, & INIT.

JRSTRIO LDX OUTCH2+1 SET OUTPUT
 STX OUTCH+1 SET OUTPUT
 LDX INCH2+1 SET INPUT
 STX INCH+1 SET INPUT
 CLR INSWT
 CLR OUTSWT CLEAR OUT CHAN
 CLR SPECIO SET SPECIALS
 CLR INFIL CLEAR FILES
 CLR OUTFIL CLEAR FILES
LCE05 RTS

* LKNAM
*
* LKNAM LOOKS FOR A COMMAND
* NAME IN A TABLE
*
*   ENTRY: X POINTS TO TABLE
*   EXIT:  EQ IF FOUND
*          X+1 POINTS TO ADR

LKNAM LDY #SYSFCB+4 SET POINTER
LKNAM3 LDA 0,Y+ GET A NAME CHAR
 CMPA #$5F CHECK IF UPPER CASE
 BLS LKNAM4 SKIP IF NOT
 SUBA #$20 MAKE UPPER

LKNAM4 CMPA 0,X+ CHECK AGAINST TABLE
 BNE LKNAM6 BRANCH IF NO MATCH
 TST 0,X CHECK IF END
 BNE LKNAM3 LOOP IF NOT

 TST 0,Y AT END OF NAME
 BEQ LKNAM8 GOT COMMAND IF SO

LKNAM6 TST 0,X+ END OF WORD?
 BNE LKNAM6 LOOP TIL SO
 LEAX 2,X BUMP PAST ADDRESS
 TST 0,X END OF TABLE?
 BNE LKNAM REPEAT IF NOT
 ANDCC #$FB CLZ SET NOT EQUAL
LKNAM8 RTS

* INBUF
*
* INBUF INPUTS A LINE INTO THE LINE
* BUFFER. DELETE AND BACK SPACE
* CHARACTERS ARE CHECKED HERE.
*
*   ENTRY: NONE
*   EXIT:  ALL REGISTERS CHANGED

JINBUF LDX #LINBUF POINT TO BUFFER
 STX BUFPNT SET POINTER
INBUF2 JSR JGETCH GO GET A CHARACTER
 CMPA DELCHR IS IT DELETE?
 BEQ PRMTUSR
 CMPA BSPCHR IS IT BACK SPACE?
 BEQ INBUF6
 CMPA #$0D IS IT CARRIAGE RET?
 BEQ INBUF4
 CMPA #$0A IS IT LF?
 BEQ INBUF7
 CMPA #$1F IS IT CONTROL?
 BLS INBUF2 IGNORE IF SO
INBUF3 CMPX #LINBUF+LBL-1 BUFFER FULL ?
 BEQ INBUF2 IGNORE IF SO
INBUF4 STA 0,X+ PUT CHAR IN BUFFER
 CMPA #$0D IS IT RETURN?
 BNE INBUF2 EPEAT IF NOT
 RTS

PRMTUSR LDX #QMARK PROMPT ???
 BSR JPSTRIN
 BRA JINBUF

INBUF6 CMPX #LINBUF FRONT OF BUFFER?
 BEQ PRMTUSR 
 LEAX -1,X DEC THE POINTER
 LDA BSECHR GET ECHO CHAR
 CMPA #8 IS IT ^H ?
 BNE INBU65
 LDA #$20 SETUP SPACE
 JSR PUTCH6 OUTPUT IT
 LDA BSECHR GET CHAR
INBU65 JSR PUTCH6 OUTPUT IT
 BRA INBUF2 REPEAT

INBUF7 LDA #$0D OUTPUT CR
 JSR JTCHR
 LDA #$20 SETUP SPACE
 BRA INBUF3

* PSTRNG
*
* PSTRNG PRINTS THE STRING POINTED
* TO BY THE INDEX REGISTER.
*
*   ENTRY: X POINTS TO STRING
*   EXIT:  A & X CHANGED

JPSTRIN BSR JPCRLF OUTPUT CR & LF
PDATA1 LDA 0,X GET A CHARACTER
 CMPA #4 IS IT TERM?
 BEQ PCRLF8
 JSR JTCHR GO PUT CHAR.
 LEAX 1,X BUMP THE POINTER
 BRA PDATA1 REPEAT IT

* BREAK
*
* BREAK CHECKS FOR A CHARACTER ON INPUT CHANNEL,
* RETURNS IMMEDIATELY IF NONE OR NOT ESCAPE.
* IF ESCAPE, WAITS FOR ANOTHER OR FOR RETURN.

BREAK JSR STATUS ANY INPUT CHARACTER?
 BEQ PCRLF9  EXIT IF NOT

 JSR [INCHNE] ELSE, GET THE CHARACTER
 CMPA ESCCHR AN ESCAPE?
 BNE PCRLF9 EXIT IF NOT

BREAK1 CLR CURLCT CLEAR LINE COUNT
BREAK2 JSR [INCHNE] WAIT FOR A CHARACTER
 CMPA ESCCHR AN ESCAPE?
 BEQ PCRLF9 CONTINUE IF SO
 CMPA #$0D IS IT A C.R.?
 BNE BREAK2 LOOP IF NEITHER
 CLR LSTTRM CLEAR TERMINATOR
 JMP [ESCRET] JUMP TO RETURN REG

* PCRLF
*
* PCRLF OUTPUTS A CARRIAGE RETURN
* AND A LINE FEED COMBINATION.
*
*   ENTRY: NONE
*   EXIT:  A & B CHANGED

JPCRLF TST SPECIO TEST SPECIALS
 BNE PCRLF2
 BSR BREAK CHECK FOR BREAK
 LDA DEPTH GET COUNT
 BEQ PCRLF2 IS IT OFF?

 CMPA CURLCT CHECK COUNT
 BHI PCRL19
 CLR CURLCT CLEAR COUNT
 TST PAUSE PAUSE ON?
 BEQ PCRLF1
 BSR BREAK1 WAIT FOR ESC

PCRLF1 PSHS B SAVE B
 LDB TTYEJ CHECK COUNT
 BEQ PCRL18
PCRL15 BSR PCRLF2 OUTPUT CR & LF
 DECB DEC THE COUNT
 BNE PCRL15

PCRL18 PULS B RESTORE B
PCRL19 INC CURLCT BUMP LINE COUNT
PCRLF2 LDA #$0D SET UP CR
 BSR JTCHR OUTPUT IT
 LDA #$0A SET UP LINE FEED
 BSR JTCHR OUTPUT IT
 PSHS B SAVE B
 LDB NULLS CHECK NULLS
 BEQ PCRLF6
PCRLF4 CLRA SET UP NULL
 BSR JTCHR OUTPUT IT
 DECB DEC THE COUNT
 BNE PCRLF4 REPEAT?

PCRLF6 PULS B RESTORE B
PCRLF8 ANDCC #$FE CLC  CLEAR ERRORS
PCRLF9  RTS

* GETCHR
*
* GETCHR GETS A CHARACTER FROM EITHER
* THE STANDARD INPUT OR A FILE.
*
*   ENTRY: NONE
*   EXIT:  A HAS CHARACTER

JGETCH TST INSWT CHECK CHAN
 BNE GETCH5
 TST INFIL FILE INPUT?
 BEQ GETCH4 
 BSR FILIO DO FILE INPUT
 TST INECHO ECHO CHARACTER?
 BEQ GETCH6 
 TST OUTFIL OUTPUT FILE?
 BEQ GETCH6
 BSR PUTCH6 ECHO CHARACTER
 BRA GETCH6
GETCH4 JSR INCH GET CHAR
 BRA GETCH6
GETCH5 JSR INCH2 TERMINAL INPUT
GETCH6 CLR CURLCT CLEAR COUNTER
 RTS
* FILIO
*
* FILIO DOSE A FMS CALL FOR CHARACTER
* IO TRANSFER. CONTROL RETURNED TO
* WARM START UPON ERROR.

FILIO STX IOTEMP SAVE INDEX
 LDX INFIL GET INPUT FCB
 BRA FILIO4

FILIO2 STX IOTEMP SAVE X
 LDX OUTFIL GET OUTPUT FCB

FILIO4 JSR FMS CALL FMS
 BNE FILIO6 ERROR?
 LDX IOTEMP RESTORE INDEX
 RTS

FILIO6 CLR OUTFIL CLEAR CHAN
 JSR JRPTER REPORT ERROR
 JMP WARMS DO WARM START

* PUTCHR
*
* PUTCHR WRITES A CHARACTER TO EITHER
* THE STANDARD OUTPUT OR TO A FILE.
*
*   ENTRY: CHARACTER IN A
*   EXIT:  A MAY BE DESTROYED

JTCHR TST SPECIO CHECK SPECIALS
 BNE PUTCH6
 CMPA #$1F IS IT CONTROL?
 BHI PUTCH2
 CLR CURCOL CLEAR COL COUNT
 BRA PUTCH6 JUMP AHEAD

PUTCH2 INC CURCOL BUMP COUNTER
 PSHS A SAVE CHARACTER
 LDA WIDTH GET COUNT
 BEQ PUTCH4 IS IT 0?
 CMPA CURCOL ENOUGH?
 BCC PUTCH4
 JSR JPCRLF OUTPUT CR & LF
 INC CURCOL

PUTCH4 PULS A RESTORE CHAR
PUTCH6 PSHS A
 TST OUTSWT TEST CHANNEL
 BNE PUTCH7
 TST OUTFIL FILE OUTPUT?
 BEQ PUTC68
 BSR FILIO2 DO FMS CALL
 BRA PUTC75

PUTC68 TST INFIL
 BNE PUTC75 FILE INPUT?
 JSR OUTCH OUTPUT IT
 BRA PUTC75

PUTCH7 JSR OUTCH2 CHAN 2 OUTPUT
PUTC75 PULS A RESTORE CHAR
 RTS

* OUTDEC
*
* OUTPUT DECIMAL NUMBER POINTED TO
* BY X. THE NS ENTRY PRINTS LEADING
* ZEROES.
*
*   ENTRY: X POINTS TO NUMBER
*   EXIT:  ALL CHANGED

JOUTDE CLR OUTNUM CLEAR FLAG
 STB XFRFLG SET SUP FLAG
 LDA #4 SET COUNTER
 STA TEMP SAVE IT
 LDD 0,X GET VALUE
 LDX #CONTBL POINT TO CONSTANTS

OUTDE4 BSR OUTDIG OUTPUT DIGIT
 LEAX 2,X BUMP TO NEXT CONST.
 DEC TEMP DEC THE COUNT
 BNE OUTDE4 
 TFR B,A GET LS DIGIT
 BRA OUTHR OUTPUT IT
* OUTDIG
*
* OUTDIG OUTPUTS THE DIGITS PLACE
* OF THE NUMBER IN A & B CORRESPONDING
* TO THE CONSTANT POINTED TO BY X.
*
*   ENTRY: A & B CONTAIN NUMBER
*          X POINTS TO CONSTANT
*   EXIT:  ALL REGISTERS PRESERVED
                 
OUTDIG CLR COUNT CLEAR COUNTER
OUTDI2 CMPD 0,X COMPARE NUMBER
 BCS OUTDI5 
 SUBD 0,X SUB VALUE
 INC COUNT BUMP COUNTER
 BRA OUTDI2 REPEAT

OUTDI5 PSHS A SAVE A
 LDA COUNT GET TOTAL
 BNE OUTDI6 IS IT ZERO?
 TST OUTNUM SUPRESS ZEROES?
 BNE OUTDI6 NUMBER YET?
 TST XFRFLG NULL OR SPACE?
 BEQ OUTDI8
 LDA #$20 SETUP SPACE
 BSR OUTDI2 OUTPUT IT
 BRA OUTDI8

OUTDI6 INC OUTNUM SHOW NUMBER
 BSR OUTHR OUTPUT DIGIT

OUTDI8 PULS A,PC RESTORE & RETURN

* OUTADR
*
* OUTPUT FOUR HEX DIGITS POINTED
* TO BY THE INDEX REGISTER.
                 
JOUTAD BSR JOUTHE OUT 2 DIGITS
 LEAX 1,X BUMP POINTER

* OUTHEX
*
* OUTHEX OUTPUTS THE BYTE IN HEX
* POINTED TO BY X.
*
*   ENTRY: X POINTS TO BYTE
*   EXIT:  B PRESERVED
                
JOUTHE LDA 0,X GET MSB
 BSR OUTHL OUTPUT IT
 LDA 0,X DO LSB
 BRA OUTHR OUTPUT IT

OUTHL LSRA GET MSB TO LSB
 LSRA
 LSRA
 LSRA

OUTHR ANDA #$0F MASK OFF MSB
 ADDA #$30 ADD IN BIAS
 CMPA #$39 OVER NUMBERS?
 BLS OUTDI2 

 ADDA #7 FINISH BIAS

OUTDI2 JMP JTCHR OUTPUT IT

* CLASS
*
* CLASS WILL CLASSIFY THE CHARACTER IN A.
*
*   ENTRY: CHARACTER IN A
*   EXIT:  CS IF NOT 0-9 OR A-Z
               
JCLASS CMPA #$30 IS IT ZERO?
 BCS CLASS2 REPORT
 CMPA #$39 COMPARE TO 9
 BLS CLASS4 IS IT NUMBER?
 CMPA #$41 COMPARE TO A
 BCS CLASS2 REPORT
 CMPA #$5A COMPARE TO Z
 BLS CLASS4 IS IT LETTER?
 CMPA #$61 CHECK FOR LOWER
 BCS CLASS2 REPORT
 CMPA #$7A UPPER LIMIT
 BLS CLASS4

CLASS2 ORCC #1 SEC SET FOR NOT
 STA LSTTRM 
 RTS

CLASS4 ANDCC #$FE CLC SHOW ALPHANUMERIC
 RTS

* NXTCH
*
* NXTCH GETS THE NEXT CHARACTER FROM
* THE LINE BUFFER.
*
*   ENTRY: NONE
*   EXIT:  A HAS CHARACTER

JNXTCH PSHS X 
 LDX BUFPNT GET POINTER
 LDA CURCHR GET OLD CHAR
 STA PRVCHR SAVE AS PREVIOUS
NXTCH3 LDA 0,X+ GET THE CHARACTER
 STA CURCHR SAVE CHAR
 CMPA #$0D IS IT RETURN?
 BEQ NXTCH4 
 CMPA EOLCHR IS IT EOL?
 BEQ NXTCH4 
 STX BUFPNT SAVE NEW POSITION
 CMPA #$20 CHECK FOR SPACE
 BNE NXTCH4 
 CMPA 0,X NEXT CHAR SPACE?
 BEQ NXTCH3 SKIP IF SO

NXTCH4 BSR JCLASS GO CLASSIFY
 PULS X,PC RESTORE REG. & RETURN

* GETFIL
*
* GETFIL GETS A FILE SPECIFICATION FROM
* THE INPUT STREAM.
*
*   ENTRY: X POINTS TO FCB
*   EXIT:  ALL REGISTERS CHANGED
               
JGETFI LDA #$15 SET PRE ERROR
 STA 1,X 
 LDA #$FF SET DRIVE NEG
 STA 3,X
 CLR 4,X
 CLR 12,X CLEAR EXTENSION
 JSR SKPSPC SKIP SPACES
 LDA #8 SET UP COUNT
 STA COUNT SAVE IT
 BSR PRTM PROCESS ITEM
 BCS GETFI5 ERROR?
 BNE GETFI2 CHECK TERM
 BSR PRTM PROCESS ITEM
 BCS GETFI5 ERROR?
 BNE GETFI2 CHECK TERM
 CMPX CRSAVE CHECK ERROR?
 BEQ PRTM6 
 BSR PRTM PROCESS ERROR
 BLS PRTM6 ERROR?

GETFI2 LDX CRSAVE RESTORE POINTER
 TST 4,X IS NAME NULL?
 BEQ PRTM6 
 TST 3,X CHECK DRIVE NUMBER
 BPL GETFI4 SET YET?
 TST SYSFLG SYSTEM DRIVE?
 BEQ GETFI3 
 LDA SYSDRV GET SYSTEM DRIVE
 BRA GETF35 

GETFI3 LDA WRKDRV GET WORK DRIVE
GETF35 STA 3,X SET DRIVE NUMBER
GETFI4 CLR SYSFLG CLEAR FLAG
GETFI5 LDX CRSAVE RESTORE FCB
 RTS

* PRTM
*
* PRTM PROCESSES AN ITEM OF THE FILE SPEC

PRTM BSR JNXTCH GET NEXT CHAR
 BCS PRTM6 ERROR?
 CMPA #$39 CHECK IF NUMBER
 BHI PRTM2 
 LDX CRSAVE RESTORE POINTER
 TST 3,X CHECK FOR DRIVE NO
 BPL PRTM6 ERROR?
 ANDA #3 MASK DRIVE
 STA 3,X SET DRIVE NUMBER
 JSR JNXTCH GET NEXT CHAR
 BCC PRTM6 ERROR?

PRTM1 CMPA #$2E CHECK TERM
 ANDCC #$FE CLC CLEAR ERROR
 RTS

PRTM2 LDB COUNT GET COUNT
 BMI PRTM6 ERROR?
 PSHS B SAVE COUNT
 SUBB #5 SET NEW COUNT
 STB COUNT SAVE IT
 PULS B RESTORE OLD

PRTM3 CMPA ULCFLG CHECK FOR LOWER CASE
 BCS PRTM4 SKIP IF NOT
 SUBA #$20 CONVERT TO UPPER

PRTM4 STA 4,X PUT CHARACTER
 LEAX 1,X BUMP THE POINTER
 DECB DEC THE COUNT
 JSR JNXTCH GET NEXT CHAR
 BCC PRTM5 TERM CHAR?
 CMPA #$2D IS IT HYPHEN?
 BEQ PRTM5

 CMPA #$5F IS IT UNDER SCORE?
 BNE PRTM7

PRTM5 TSTB CHECK COUNT
 BNE PRTM3 REPEAT

PRTM6 ORCC #1 SEC  SET ERROR
 RTS

PRTM7 TSTB CHECK COUNT
 BEQ PRTM1 FINISHED?

 CLR 4,X CLEAR REST
 LEAX 1,X BUMP POINTER
 DECB DEC THE COUNT
 BRA PRTM7 REPEAT

* SKPSPC
*
* SKPSPC SKIPS SPACES IN THE BUFFER
*
*   ENTRY: NONE
*   EXIT:  ALL CHANGED
                
SKPSPC STX CRSAVE SAVE INDEX
 LDX BUFPNT GET POINTER

SKPSP2 LDA 0,X GET CHARACTER
 CMPA #$20 IS IT SPACE?
 BNE SKPSP4

 LEAX 1,X BUMP TO NEXT
 BRA SKPSP2 REPEAT

SKPSP4 STX BUFPNT SET POINTER
 LDX CRSAVE RESTORE REGISTER
 RTS

* SETEXT
*
* SETEXT SETS A DEFAULT NAME EXTENSION
* IF THE EXTENSION IS NULL. IT IS SET
* ACCORDING TO THE CODE IN A.
*
*   ENTRY: A HAS CODE
*          X POINTS TO FCB
*   EXIT:  ALL REGISTERS CHANGED

JSETEX PSHS X,Y SAVE REGISTERS
 LDB 12,X GET FIRST EXT
 BNE SETEX6 NULL?
 LDY #EXTTBL POINT TO TABLE
 CMPA #$0B CHECK RANGE
 BHI SETEX6
 LDB #3 GET TO DESIRED EXT
 MUL
 LEAY B,Y
 LDB #3 GET EXTENSION LENGTH

SETEX4 LDA 0,Y+ GET CHAR
 STA 12,X PUT IN EXT
 LEAX 1,X BUMP POINTER
 DECB THE COUNT
 BNE SETEX4 FINISHED?

SETEX6 PULS X,Y,PC RESTORE REGS. & RETURN

* EXTTBL
*
* EXTENSION CODE TABLE

EXTTBL FCC "BIN" CODE 0
 FCC "TXT" CODE 1
 FCC "CMD" CODE 2
 FCC "BAS" CODE 3
 FCC "SYS" CODE 4
 FCC "BAK" CODE 5
 FCC "SCR" CODE 6
 FCC "DAT" CODE 7
 FCC "BAC" CODE 8
 FCC "DIR" CODE 9
 FCC "PRT" CODE 10
 FCC "OUT" CODE 11

* GETHEX
*
* GETHEX GETS A HEX VALUE FROM THE
* INPUT BUFFER.  B IS NON ZERO IF
* THERE WAS A NUMBER.
*
*   ENTRY: NONE
*   EXIT:  CS IF ERROR
*          VALUE IN X

JGETHE JSR LD21E
LD132 JSR JNXTCH
 BCS LD159
 BSR LD15F
 BCS LD153
 PSHS B
 LDB #4
LD13F ASL LOADAO+1
 ROL LOADAO
 DECB
 BNE LD13F
 PULS B
 ADDA LOADAO+1
 STA LOADAO+1
 INCB
 BRA LD132
LD153 JSR JNXTCH
 BCC LD153
 RTS
LD159 LDX LOADAO
 ANDCC #$FE
 RTS
LD15F SUBA #$47
 BPL LD172
 ADDA #6
 BPL LD16B
 ADDA #7
 BPL LD172
LD16B ADDA #$0A
 BMI LD172
 ANDCC #$FE
 RTS
LD172 ORCC #1
 RTS
JINDEC JSR LD21E
LD178 JSR JNXTCH
 BCS LD159
 CMPA #$39
 BHI LD153
 ANDA #$0F
 PSHS B
 PSHS A
 LDD LOADAO
 ASLB
 ROLA
 ASLB
 ROLA
 ASLB
 ROLA
 ADDD LOADAO
 ADDD LOADAO
 ADDB 0,S+
 ADCA #0
 STD LOADAO
 PULS B
 INCB
 BRA LD178
JLOAD CLR XFRFLG
LD1A5 BSR LD1E4
 CMPA #2
 BEQ LD1C0
 CMPA #$16
 BNE LD1A5
 BSR LD1E4
 STA XFRADR
 BSR LD1E4
 STA XFRADR+1
 LDA #1
 STA XFRFLG
 BRA LD1A5
LD1C0 BSR LD1E4
 TFR A,B
 BSR LD1E4
 EXG A,B
 ADDD LOADAO
 STD LCC3D
 BSR LD1E4
 TFR A,B
 TSTA
 BEQ LD1A5
LD1D5 BSR LD1E4
 LDX LCC3D
 STA 0,X+
 STX LCC3D
 DECB
 BNE LD1D5
 BRA LD1A5
LD1E4 LDX #SYSFCB
 JSR FMS
 BEQ LD1FD
 LDA 1,X
 CMPA #8
 BNE LD200
 LEAS 2,S
LD1F4 LDA #4
 STA 0,X
 JSR FMS
 BNE LD20A
LD1FD ANDCC #$FE
 RTS

LD200 STA ERRTYP
 CMPA #4
 BNE LD20A
 ORCC #1
 RTS

LD20A BSR JRPTER
 JMP LCDE4
LD20F LDA #0
 BSR LD248
 BCS LD224
 BSR LD21E
 INC LCC4C
 BSR JLOAD
 BRA LD20F
LD21E CLRA
 CLRB
 STD LOADAO
 RTS
LD224 LDB LCC4C
 LBEQ NFERR
 JMP WARMS
LOAGO LDA #2
 BSR LD254
 BSR LD21E
 JSR JLOAD
 LDB XFRFLG
 BEQ LD240
 JMP [XFRADR]
LD240 LDX #CTMSG
 LDA #$81
 JMP LCDDE
LD248 PSHS A
 LDX #SYSFCB
 JSR JGETFI
 PULS A
 BCS LD26E
LD254 LDX #SYSFCB
 JSR JSETEX
 LDX #SYSFCB
 LDA #1
 STA 0,X
 JSR LD1E4
 LBCS LD323
 LDA #$FF
 STA 59,X
 RTS
LD26E LDA LSTTRM
 CMPA #$0D
 BEQ LD27C
 CMPA EOLCHR
 LBNE NFERR
LD27C ORCC #1
 RTS
JRPTER PSHS X,Y
 LDA 1,X
 STA ERRTYP
 BEQ LD2EB
 JSR JRSTRIO
 LDY ERRVEC
 BNE LD299
 CMPA #$10
 BEQ LD2ED
 LDY #LD361
LD299 LDX #SYSFCB
 TST 2,X
 BEQ LD2A9
 LDA #4
 STA 0,X
 JSR FMS
 BNE LD2D7
LD2A9 LDX #LC838
 LDB #$0B
 BSR LD31E
 LDX #SYSFCB
 LDA SYSDRV
 STA 3,X
 LDA #1
 STA 0,X
 JSR FMS
 BNE LD2D7
 LDA ERRTYP
 DECA
 ASRA
 ASRA
 INCA
 CLR 32,X
 STA 33,X
 LDA #$15
 STA 0,X
 JSR FMS
 BEQ LD2F5

LD2D7 LDX #DEMSG
 JSR JPSTRIN
 LDX CRSAVE
 LDA ERRTYP
 STA 1,X
 CLR 0,X
 CLRB
 JSR JOUTDE
LD2EB PULS X,Y,PC
LD2ED LDX #DNRMSG
 JSR JPSTRIN
 BRA LD2EB
LD2F5 JSR JPCRLF
 LDX #SYSFCB
 LDA ERRTYP
 DECA
 ANDA #3
 LDB #$3F
 MUL
 ADDB #4
 STB 34,X
LD309 JSR FMS
 BNE LD2D7
 JSR JTCHR
 CMPA #$0D
 BNE LD309
 LDA #4
 STA 0,X
 JSR FMS
 BRA LD2EB
LD31E PSHS X,Y
 JMP SETEX4

LD323 LDX #NFMSG
 JMP LCDE1
JDOCMN PULS A,B
 STD RETADR
LD32E STS LCC45
 CLR ERRTYP
 INC DOCMDF
 JMP LCDB8
RETURN CLR DOCMDF
 LDS LCC45
 LDB ERRTYP
 JMP [RETADR]
JADDBX ABX
 RTS
 TST PR1
 BNE LD354
 JMP [MONITR]
LD354 LDX #SYSFCB
 LDA #$1B
 STA 1,X
 JSR JRPTER
 JMP JWARMS
LD361 FCC "ERREURS",NUL,"SYS"

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


*
* MONITOR ADDRESS 
* THIS LIST OF ADDRESS PROVIDES THE INTERFACE
* WITH THE VEGAS6809 MONITOR.

 ORG $D3E0

 FDB $0000,$0000,
 FCB $00
INCHNE FDB $F806 ENTREE CLAVIER SANS ECHO
IHNDLR FDB $F830 IRQ CONTROLE (FLEX SEULEMENT)
SWIVEC FDB $EFF6 SWI3
IRQVEC FDB $EFF4 IRQFLX
TMOFF FDB $F833 TIMER OFF (FLEX SEULEMENT)
TMON FDB $F836 TIMER ON (FLEX SEULEMENT) 
TMINT FDB $F839 TIMER INIT (FLEX SEULEMENT)
MONITR FDB $F800 ENTREE A CHAUD MONITEUR
TINIT FDB $F80F INIT DES E/S 
STATV FDB $F80C TEST CLAVIER
OUTCHV FDB $F809
INCHV FDB $F803
TSTSTR JMP $CA00

        ORG $D400

* FMS JUMP TABLES
*
* ALL CALLS TO THE FMS SHOULD ENTER
* THROUGH ONE OF THESE THREE POINTS.

FMSINT JMP INITFMS
FMSCLS JMP EXCLS
FMS JMP CMND

* FCC " DISK OPERATING SYSTEM COPYRIGHT (C) 1980 BY"

        ORG $D409
FCBBAS RMB     2           FCB BASE POINTER        $D409
FCBSTR RMB     2           CURRENT FCB             $D40B
TEMPIN RMB     2           TEMPORARY INDEX         $D40D
DATAPT RMB     2           DATA POINTER            $D40F
ETRIES RMB     1           ERROR TRY COUNT         $D411
STRIES RMB     1           SEEK TRY COUNT          $D412
CLD RMB     2           CURRENT LOOK UP DIR     $D413
CUD RMB     2           CURRENT USER DIR        $D415
DIRDN RMB     1           DIRECTORY DRIVE NUM     $D417
BKLN RMB     2           BACK LINK               $D418
SINDIR RMB     1           SINGLE DIR SEARCH       $D41A
AVLPNT RMB     2           AVAIL POINTER           $D41B
SECMAP RMB     NODR*6      SECTOR MAPS             $D41D

        ORG     $D435

VRFYFG FCB $FF VERIFY FLAG

* SYSTEM ENTRY ROUTINES
*
* THE FOLLOWING THREE ROUTINES SHOULD
* BE ACCESSED THROUGH THE SYSTEM JUMP
* TABLE.

* INIT
*
* INIT IS THE FMS INITIALIZATION ROUTINE.
* NO ERRORS CAN OCCUR FROM THIS ROUTINE
* AND THE SYSTEM ASSUMES NO FILES ARE OPEN.

INITFMS JSR LDE15 INITIALIZE DRIVERS
 LDX #FCBBAS SET POINTER
 LDB #$0A SET COUNT
 BSR LD451 CLEAR SPACE
 LDX #MAIND SET MAIN DIRECTORY
 STX STRIES
 STX CUD
 CLR SINDIR
LD44C LDX #AVLPNT
 LDB #$1A
LD451 CLR 0,X+
 DECB
 BNE LD451
 JMP LC70C
EXCLS JSR LC709
LD45C LDX FCBBAS
 BEQ LD44C
 LEAX -28,X
 STX FCBSTR
 PSHS Y
 JSR LDAC1
 PULS Y
 BCC LD45C
 LDX FCBSTR
 CLR 2,X
 JSR LC70C
 LDB #$FF
 RTS
LD47B TST PR1
 BEQ LD483
 JSR LC709
LD483 PSHS B,Y
 STX FCBSTR
 CLR 1,X
 LDB 0,X
 BNE LD4B0
 LDB 2,X
 BEQ LD4AC
 CMPB #2
 BEQ LD4A7
 JSR LD5B4
LD499 LDX FCBSTR
 BCS LD4C4
 TST PR1
 BNE LD4C6
 CLRB
 PULS B,Y
 RTS
LD4A7 JSR LD6CD
 BRA LD499
LD4AC LDB #$12
 BRA LD4C4
LD4B0 CMPB #$16
 BLS LD4B8
 LDB #1
 BRA LD4C4
LD4B8 DECB
 ASLB
 LDX #LD4CE
 JSR [B,X]
 LDX FCBSTR
 BCC LD4C6
LD4C4 STB 1,X
LD4C6 JSR LC70C
 TST 1,X
 PULS B,Y
 RTS
LD4CE ADCB <L0084
 ADCB <L00D7
 ORB <L00F7
 ORB <L00C1
 BITB <L00E2
 EORB <L001B
 EORB <L0036
 EORB <L0074
 LDB <L003D
 LDB <L009D
 ADCB <L0067
 ADDB <L00D4
 ADDB <L002A
 LDB <L0097
 ORB <L0085
 EORB <L000E
 BITB <L006F
 BITB <L0090
 ADDB <L0005
 STD <L00BB
 LDD <L00F9
 LDD <L00E3
LD4FA BSR LD51C
 BNE LD503
 LDB #2
 ORCC #1
 RTS
LD503 STD 0,X
 LDX 0,X
 CLR 0,X
 CLR 1,X
 RTS
LD50C BSR LD51C
 BEQ LD515
 LDB #$0D
 ORCC #1
 RTS
LD515 LDD [0,X]
 STD 0,X
 ANDCC #$FE
 RTS
LD51C LDD FCBSTR
 ADDD #$001C
 LDX #FCBBAS
LD525 LDY 0,X
 BNE LD52D
 ANDCC #$FB
 RTS
LD52D CMPD 0,X
 BNE LD533
 RTS
LD533 LDX 0,X
 BRA LD525
LD537 LDX FCBSTR
 CLRA
 CLRB
 BSR LD540
 LDB #$2F
LD540 STA 17,X
 LEAX 1,X
 DECB
 BNE LD540
 RTS
LD549 LDX FCBSTR
 LDB #$0B
LD54E LDA 4,X
 STA 36,X
 LEAX 1,X
 DECB
 BNE LD54E
 RTS
LD559 LDX FCBSTR
 LDB #$0B
LD55E LDA 4,X
 PSHS A
 LDA 36,X
 CMPA 0,S+
 BNE LD56E
 LEAX 1,X
 DECB
 BNE LD55E
LD56E RTS
 LDX FCBSTR
 LDB 2,X
 LSRB
 BCC LD5F0
 LDB 35,X
 JMP LD600
LD57D LDX FCBSTR
 LDB 34,X
 INC 34,X
 ABX
 STA 64,X
 INCB
 BNE LD5AC
 ORCC #1
 RTS
 LDX FCBSTR
 LDB 2,X
 ANDB #3
 CMPB #3
 BNE LD5F0
 ORB #$80
 STB 2,X
 LDB 15,X
 BITB #$80
 BNE LD5AF
 LDB 35,X
 ABX
 STA 64,X
LD5AC ANDCC #$FE
 RTS
LD5AF LDB #$0B
 ORCC #1
 RTS
LD5B4 LDA 59,X
 BMI LD5F5
 BEQ LD5C2
 DEC 59,X
 LDA #$20
 BRA LD5DF
LD5C2 BSR LD5F5
 BCS LD5E1
 CMPA #$18
 BHI LD5DF
 BEQ LD5C2
 CMPA #9
 BNE LD5DC
 BSR LD5F5
 BCS LD5E1
 LDX FCBSTR
 STA 59,X
 BRA LD5B4
LD5DC TSTA
 BEQ LD5C2
LD5DF ANDCC #$FE
LD5E1 RTS
 JSR LDAAF
 BCS LD5F0
 BITA #1
 BEQ LD5F0
 STA 0,X
 JMP LD99E
LD5F0 LDB #$12
 ORCC #1
 RTS
LD5F5 LDX FCBSTR
 LDB 34,X
 BEQ LD607
 INC 34,X
LD600 ABX
 LDA 64,X
 ANDCC #$FE
 RTS
LD607 BSR LD60C
 BCC LD5F5
 RTS
LD60C LDX FCBSTR
 LDD 64,X
 INC 33,X
 BNE LD61A
 INC 32,X
LD61A CMPD #$0000
 BEQ LD638
LD620 STD 30,X
 PSHS A
 LDA #4
 STA 34,X
 PULS A
 BSR LD63D
 BCC LD63C
 CMPB #$0F
 BEQ LD63A
LD634 LDB #9
 BRA LD63A
LD638 LDB #8
LD63A ORCC #1
LD63C RTS
LD63D BSR LD666
 LDX FCBSTR
 JSR DRIVE
 BCS LD6A7
LD647 BSR LD65C
 JSR DREAD
 BNE LD651
 ANDCC #$FE
 RTS
LD651 PSHS B
 BSR LD66E
 PULS B
 BCC LD647
 BRA LD634
 RTS
LD65C LDX FCBSTR
 LDD 30,X
 LEAX 64,X
 RTS
LD666 CLRA
 STA DATAPT
 STA ETRIES
 RTS
LD66E BITB #$10
 BNE LD683
 BITB #$80
 BNE LD69A
 LDB DATAPT
 INCB
 CMPB #7
 BEQ LD683
 STB DATAPT
 BRA LD697
LD683 CLR DATAPT
 LDB ETRIES
 INCB
 CMPB #4
 BEQ LD69A
 STB ETRIES
 LDX FCBSTR
 JSR RESTOR
LD697 ANDCC #$FE
 RTS
LD69A ORCC #1
 RTS
LD69D BSR LD666
 LDX FCBSTR
 JSR DRIVE
 BCC LD6AA
LD6A7 LDB #$0F
 RTS
LD6AA BSR LD65C
 JSR DWRITE
 BNE LD6BB
 LDA VRFYFG
 BEQ LD6ED
 JSR DVERFY
 BEQ LD6ED
LD6BB BITB #$40
 BNE LD6C8
 PSHS B
 BSR LD66E
 PULS B
 BCC LD6AA
 RTS
LD6C8 LDB #$0B
 ORCC #1
 RTS
LD6CD LDX FCBSTR
 LDB 59,X
 BMI LD712
 CMPA #$20
 BNE LD6E8
 INCB
 STB 59,X
 CMPB #$7F
 BNE LD6ED
 BRA LD6F0
LD6E3 BSR LD6F0
 BCC LD6CD
 RTS
LD6E8 TSTB
 BEQ LD712
 BRA LD6E3
LD6ED ANDCC #$FE
 RTS
LD6F0 PSHS A
 CMPB #1
 BNE LD6FA
 LDA #$20
 BRA LD70A
LD6FA LDA #9
 BSR LD712
 PULS A
 BCS LD711
 PSHS A
 LDX FCBSTR
 LDA 59,X
LD70A CLR 59,X
 BSR LD712
 PULS A
LD711 RTS
LD712 LDX FCBSTR
 LDB 2,X
 CMPB #2
 LBNE LD5F0
 LDB 34,X
 CMPB #4
 BNE LD72C
 PSHS A
 BSR LD749
 PULS A
 BCS LD73B
LD72C JSR LD57D
 BCC LD73B
 LDB #4
 LDX FCBSTR
 STB 34,X
 ANDCC #$FE
LD73B RTS
LD73C LDX FCBSTR
 CLRA
 CLRB
 STD 32,X
 STD 66,X
 BRA LD770
LD749 LDB 18,X
 BNE LD770
 LDB 23,X
 BEQ LD797
 CLR 23,X
 BSR LD797
 BCS LD784
 BSR LD73C
 BCS LD784
 BSR LD73C
 BCS LD784
 LDX FCBSTR
 LDB #2
 STB 23,X
 LDD 17,X
 JMP LDC80
LD770 BSR LD780
 LDX FCBSTR
 STD 64,X
 JSR LD69D
 BCC LD797
 JMP LDBBF
LD780 BSR LD785
 LDD 0,X
LD784 RTS
LD785 LDX FCBSTR
 LDB 3,X
 LDA #6
 MUL
 LDX #SECMAP
 ABX
 STX AVLPNT
 TST 0,X
 RTS
LD797 BSR LD780
 BNE LD7A0
 LDB #7
LD79D ORCC #1
 RTS
LD7A0 LDX FCBSTR
 STD 19,X
 TST 18,X
 BNE LD7AE
 STD 17,X
LD7AE INC 22,X
 BNE LD7B6
 INC 21,X
LD7B6 TST 23,X
 BEQ LD7C6
 JSR LDC41
 BCS LD79D
 LDX FCBSTR
 LDD 19,X
LD7C6 JSR LD620
 BCS LD79D
 LDX FCBSTR
 LDD 64,X
 PSHS A,B
 BSR LD785
 PULS A,B
 STD 0,X
 BNE LD7E5
 CLR 2,X
 CLR 3,X
 CLR 4,X
 CLR 5,X
 BRA LD7ED
LD7E5 LDY 4,X
 LEAY -1,Y
 STY 4,X
LD7ED CLRA
 LDX FCBSTR
 INC 33,X
 BNE LD7F9
 INC 32,X
LD7F9 CLRB
LD7FA STA 64,X
 LEAX 1,X
 DECB
 BNE LD7FA
 LDX FCBSTR
 LDD 32,X
 STD 66,X
 ANDCC #$FE
 RTS
LD80E CLRB
 PSHS B
 LDB #3
 BRA LD823
 LDX CUD
 STX STRIES
LD81B LDB STRIES
 PSHS B
 LDB CLD
LD823 LDX FCBSTR
 STB 65,X
 PULS B
 STB 64,X
 CLR BKLN
 CLRB
 STB 34,X
 RTS
LD836 LDX FCBSTR
 LDB 34,X
 BNE LD85B
 JSR LD60C
 BCS LD873
 LDX FCBSTR
 TST BKLN
 BNE LD850
 LDD <L0044
 STD BKLN
LD850 LDA #$10
 STA 34,X
 LDD 30,X
 STD 47,X
LD85B LDA 34,X
 STA 49,X
 LDB #$18
LD863 PSHS B,X
 JSR LD5F5
 PULS B,X
 STA 4,X
 LEAX 1,X
 DECB
 BNE LD863
 ANDCC #$FE
LD873 RTS
LD874 LDX FCBSTR
 LDA 49,X
 STA 34,X
 LDB #$18
LD87F PSHS B,X
 LDA 4,X
 JSR LD712
 PULS B,X
 LEAX 1,X
 DECB
 BNE LD87F
 JMP LD69D
LD890 LDX FCBSTR
 LDA 3,X
 STA 35,X
 LDA DIRDN
 TST SINDIR
 BNE LD8D1
 STA 3,X
 LDX CUD
 STX STRIES
LD8A8 CMPX #MAIND
 BEQ LD8B9
 BSR LD8D1
 BLS LD8E8
 LDX BKLN
 STX STRIES
 BRA LD8A8
LD8B9 LDX FCBSTR
 LDA 35,X
 STA 3,X
 BPL LD8D1
LD8C3 JSR LDDBB
 BCS LD8FE
 BSR LD8D1
 BLS LD8E8
 JSR LDDAB
 BRA LD8C3
LD8D1 LDX FCBSTR
 CLR SINDIR
 JSR LD549
 JSR LD81B
LD8DD JSR LD836
 BCC LD8E9
 CMPB #8
 BEQ LD8FE
 ORCC #1
LD8E8 RTS
LD8E9 LDX FCBSTR
 LDA 4,X
 BEQ LD8FC
 BPL LD8F4
 BSR LD903
LD8F4 JSR LD559
 BNE LD8DD
 ANDCC #$FE
 RTS
LD8FC BSR LD903
LD8FE ANDCC #$FB
 ANDCC #$FE
 RTS
LD903 LDA 51,X
 BNE LD914
 LDD 47,X
 STD 50,X
 LDA 49,X
 STA 52,X
LD914 RTS
LD915 JSR LD785
 BNE LD931
 BSR LD934
 BCS LD933
 LDB #6
 LDY FCBSTR
 LDX AVLPNT
LD927 LDA 93,Y
 LEAY 1,Y
 STA 0,X+
 DECB
 BNE LD927
LD931 ANDCC #$FE
LD933 RTS
LD934 JSR LD80E
 JSR LD60C
 BCS LD944
 LDX FCBSTR
 LDB #$10
 STB 34,X
LD944 RTS
LD945 JSR LD785
 BSR LD934
 BCS LD944
 LDB #6
 LDY FCBSTR
 LDX AVLPNT
LD955 LDA 0,X+
 STA 93,Y
 LEAY 1,Y
 DECB
 BNE LD955
 JSR LD69D
 BCC LD944
 JMP LDBBF
LD967 LDX FCBSTR
 LDA #2
 STA 2,X
 LDD 47,X
 STD 30,X
 JSR LD63D
 BCS LD981
 JSR LD874
 BCC LD983
 JMP LDBBF
LD981 LDB #$0A
LD983 RTS
LD984 JSR LD4FA
 BCS LD9C6
 JSR LD890
 BCS LD9C6
 BNE LD9CB
 LDX FCBSTR
 TST SINDIR
 BEQ LD99E
 LDA 15,X
 BITA #$20
 BNE LD9C7
LD99E JSR LDCBE
 BCS LD9CD
 LDD 17,X
 STD 64,X
 JSR LDA74
 LDB 23,X
 BEQ LD9C4
LD9B1 PSHS B
 JSR LD60C
 PULS B
 BCS LD9C6
 DECB
 BNE LD9B1
 LDX FCBSTR
 CLRB
 STB 34,X
LD9C4 ANDCC #$FE
LD9C6 RTS
LD9C7 LDB #$11
 BRA LD9CD
LD9CB LDB #4
LD9CD PSHS B
 JSR LD50C
 PULS B
 ORCC #1
 RTS
 LDX FCBSTR
 TST 3,X
 BPL LD9E6
 JSR LDDBB
 BCC LD9E6
 LDB #$10
 RTS
LD9E6 JSR LD4FA
 BCS LD9CD
 JSR LD537
 JSR LD915
 BCS LD9CD
 JSR LD890
 BCS LD9CD
 BNE LD9FE
 LDB #3
 BRA LD9CD
LD9FE JSR LDCBE
 BCS LD9CD
 LDX FCBSTR
 LDB #$0A
LDA08 CLR 15,X
 LEAX 1,X
 DECB
 BNE LDA08
 LDX FCBSTR
 LDD 50,X
 BEQ LDA3E
 STD 47,X
 LDA 52,X
 STA 49,X
 LDD SYSMTH
 STD 25,X
 LDA SYSYR
 STA 27,X
 JSR LDDAB
 JSR LD967
 BCS LD9CD
 BSR LDA74
 LDA #4
 STA 34,X
 ANDCC #$FE
 RTS
LDA3E LDX FCBSTR
 CLR 23,X
 INC 18,X
 LDD 47,X
 JSR LD620
 BCS LDA5C
 JSR LD770
 BCS LDA5C
 JSR LD69D
 BCC LDA5F
 JSR LDBBF
LDA5C JMP LD9CD
LDA5F LDX FCBSTR
 LDD 30,X
 STD 50,X
 LDA #$10
 STA 52,X
 JSR LD945
 BCS LDA5C
 BRA LD9FE
LDA74 LDX FCBSTR
 LDA 0,X
 STA 2,X
 CLR 0,X
 CLR 59,X
 CLRA
 STA 34,X
 RTS
 BSR LDAAF
 BCS LDA97
 CLR 0,X
 LSRA
 LBCS LD60C
 LDB #4
 STB 34,X
 ANDCC #$FE
LDA97 RTS
LDA98 LDX FCBSTR
 LDA 2,X
 CMPA #$83
 BNE LDAAC
 LDA #3
 STA 2,X
LDAA5 JSR LD69D
 LBCS LDBBF
LDAAC ANDCC #$FE
 RTS
LDAAF BSR LDA98
 BCS LDAC0
 LDX FCBSTR
 LDA 2,X
 CMPA #3
 BLS LDAAC
 LDB #$12
 ORCC #1
LDAC0 RTS
LDAC1 BSR LDAAF
 BCS LDAF6
 CMPA #2
 BEQ LDAD1
LDAC9 LDX FCBSTR
 CLR 2,X
 JMP LD50C
LDAD1 LDA 18,X
 BNE LDADB
 JSR LDBA5
 BRA LDAF4
LDADB BSR LDAA5
 BCS LDAF6
 LDX FCBSTR
 TST 23,X
 BEQ LDAEC
 JSR LDC96
 BCS LDAF6
LDAEC JSR LD967
 BCS LDAF6
 JSR LD945
LDAF4 BCC LDAC9
LDAF6 RTS
 JSR LD984
 BCS LDB24
 JSR LD60C
 BCS LDB24
 LDA #3
 BRA LDB1D
 JSR LD984
 BCS LDB24
 LDX FCBSTR
 LDA 15,X
 BITA #$80
 BNE LDB25
 LDD 19,X
 JSR LD620
 BCS LDB24
 LDA #2
LDB1D LDX FCBSTR
 STA 2,X
 ANDCC #$FE
LDB24 RTS
LDB25 LDB #$0B
 ORCC #1
 RTS
 BSR LDB61
 JSR LD890
 BCS LDB5B
 BEQ LDB57
 LDX FCBSTR
 LDB #$0B
LDB38 LDA 36,X
 STA 4,X
 LEAX 1,X
 DECB
 BNE LDB38
 BSR LDB91
 BCS LDB5B
 LDX FCBSTR
 LDA 15,X
 BITA #$80
 BNE LDB25
 BITA #$60
 BNE LDB5C
 BSR LDB61
 BRA LDBAC
LDB57 LDB #3
 ORCC #1
LDB5B RTS
LDB5C LDB #$0C
 ORCC #1
 RTS
LDB61 LDX FCBSTR
 LDA #$0B
 STA DATAPT
LDB69 LDA 4,X
 LDB 53,X
 STA 53,X
 STB 4,X
 LEAX 1,X
 DEC DATAPT
 BNE LDB69
 LDX FCBSTR
 LDA 12,X
 BNE LDB8D
 LDB #3
LDB83 LDA 61,X
 STA 12,X
 LEAX 1,X
 DECB
 BNE LDB83
LDB8D LDX FCBSTR
 RTS
LDB91 BSR LDB61
LDB93 JSR LD890
 BCS LDB9F
 BNE LDBA0
 LDX FCBSTR
 ANDCC #$FE
LDB9F RTS
LDBA0 LDB #4
 ORCC #1
 RTS
LDBA5 LDX FCBSTR
 LDA #$FF
 STA 4,X
LDBAC JSR LD967
 LDX FCBSTR
 LDA #0
 STA 2,X
 RTS
LDBB7 STD 64,X
 JSR LD69D
 BCC LDBD3
LDBBF CMPB #$0B
 BEQ LDBCB
 BITB #$80
 BEQ LDBCF
 LDB #$10
 BRA LDBD1
LDBCB LDB #$0B
 BRA LDBD1
LDBCF LDB #$0A
LDBD1 ORCC #1
LDBD3 RTS
 JSR LD915
 BCS LDC37
 BSR LDB93
 BCS LDC37
 LDX FCBSTR
 LDA 15,X
 BITA #$80
 BNE LDC38
 BITA #$60
 BNE LDC3C
 JSR LD785
 LDX AVLPNT
 LDD 2,X
 BNE LDC03
 LDX FCBSTR
 LDD 17,X
 BEQ LDC2F
 LDX AVLPNT
 STD 0,X
 BRA LDC17
LDC03 LDX FCBSTR
 JSR LD620
 BCS LDC37
 LDX FCBSTR
 LDD 17,X
 BEQ LDC2F
 BSR LDBB7
 BCS LDC37
LDC17 LDX FCBSTR
 LDD 19,X
 LDX AVLPNT
 STD 2,X
 LDX FCBSTR
 LDD 21,X
 LDX AVLPNT
 ADDD 4,X
 STD 4,X
LDC2F JSR LDBA5
 BCS LDC37
 JSR LD945
LDC37 RTS
LDC38 LDB #$0B
 BRA LDC3E
LDC3C LDB #$0C
LDC3E ORCC #1
 RTS
LDC41 LDD 30,X
 INCB
 CMPB 60,X
 BLS LDC4D
 LDB #1
 INCA
LDC4D CMPD 19,X
 BNE LDC61
 LDA 55,X
 CMPA #$FF
 BEQ LDC61
 INCA
 STA 55,X
 ANDCC #$FE
 RTS
LDC61 BSR LDC96
 BCS LDC95
 LDX FCBSTR
 LDA 58,X
 ADDA #3
 BNE LDC85
 LDD 30,X
 CMPD 17,X
 BEQ LDC7D
 LDB #$17
 ORCC #1
 RTS
LDC7D LDD 64,X
LDC80 STD 56,X
 LDA #4
LDC85 STA 58,X
 LDD 19,X
 STD 53,X
 LDA #1
 STA 55,X
 ANDCC #$FE
LDC95 RTS
LDC96 LDD 56,X
 JSR LD620
 BCS LDC95
 LDX FCBSTR
 TFR X,Y
 LDB 58,X
 ABX
 LDB #3
LDCA9 LDA 53,Y
 LEAY 1,Y
 STA 64,X
 LEAX 1,X
 DECB
 BNE LDCA9
 JSR LD69D
 BCC LDC95
 JMP LDBBF
LDCBE JSR LD80E
 JSR LD60C
 BCS LDD0C
 LDX FCBSTR
 CLRA
 CLRB
 STD 32,X
 LDA 103,X
 STA 60,X
 CLRB
LDCD5 CLR 64,X
 LEAX 1,X
 DECB
 BNE LDCD5
 LDX FCBSTR
 ANDCC #$FE
 RTS
 LDX FCBSTR
 LDA 23,X
 BEQ LDD08
 LDD 32,X
 SUBD #$0001
 BPL LDCF6
 JMP LDD98
LDCF6 STD 32,X
 JSR LDAAF
 BCS LDD0C
 RORA
 BCC LDD08
 CLR 0,X
 LDA 23,X
 BNE LDD0D
LDD08 LDB #$12
 ORCC #1
LDD0C RTS
LDD0D CLR DATAPT
 LDD 17,X
 LDY 32,X
 BEQ LDD83
 JSR LDD9D
 BCS LDD0C
 CLRA
 CLRB
LDD20 TST 2,X
 BEQ LDD98
 ADDB 2,X
 ADCA #0
 STX TEMPIN
 LDX FCBSTR
 CMPD 32,X
 BCC LDD60
 LDX TEMPIN
 LEAX 3,X
 PSHS A
 LDA DATAPT
 INCA
 STA DATAPT
 CMPA #$54
 BEQ LDD4E
 CMPA #$A8
 PULS A
 BEQ LDD98
 BRA LDD20
LDD4E PSHS B
 LDX FCBSTR
 LDD 64,X
 BSR LDD9D
 BCS LDD98
 PULS B
 PULS A
 BRA LDD20
LDD60 SUBD 32,X
 LDX TEMPIN
 LDA 2,X
 PSHS B
 SUBA 0,S+
 DECA
 TFR A,B
 LDA 0,X
 ADDB 1,X
 LDX FCBSTR
 BCS LDD7D
LDD78 CMPB 60,X
 BLS LDD83
LDD7D SUBB 60,X
 INCA
 BRA LDD78
LDD83 JSR LD620
 BCS LDD9C
 LDX FCBSTR
 LDD 66,X
 CMPD 32,X
 BEQ LDDA8
 LDB #$19
 BRA LDD9A
LDD98 LDB #$18
LDD9A ORCC #1
LDD9C RTS
LDD9D JSR LD620
 BCS LDDAA
 LDX FCBSTR
 LDB #$44
 ABX
LDDA8 ANDCC #$FE
LDDAA RTS
LDDAB LDX FCBSTR
 LDB #$0B
LDDB0 LDA 36,X
 STA 4,X
 LEAX 1,X
 DECB
 BNE LDDB0
 RTS
LDDBB LDX FCBSTR
 LDA 3,X
 INCA
 CMPA #4
 BCC LDDD4
 STA 3,X
 BNE LDDCE
 JSR DCHECK
 BRA LDDD1
LDDCE JSR DQUICK
LDDD1 BCS LDDBB
 RTS
LDDD4 LDB #$10
 ORCC #1
 RTS

 ORG $DE00

DREAD JMP LECSE DISK READ ROUTINE
DWRITE JMP ECRSE DISK WRITE ROUTINE
DVERFY JMP VERSE WRITE VERIFY ROUTINE
RESTOR JMP PIST0 HEAD RESTORE ROUTINE
DRIVE JMP SELEC DRIVE SELECT
DCHECK JMP TSTRD CHECK READY
DQUICK JMP TSTR1 QUICK READY CHECK
DCOLDS JMP LEINI INITIALIZE DRIVERS
DWARMS JMP HOINI USER WARMSTART ROUTINE
DSEEK JMP JMPIS SEEK TO TRACK ROUTINE

 ORG $D3F9

 FDB $D370

 ORG $D370

 PSHS A
 LDA LD3A6
 CMPA #1
 BNE LD382
 PULS A
 STA CARACT
 INC LD3A6
 RTS
LD382 CMPA #2
 BNE LD394
 PULS A
 STA LIGNE
 CLR LD3A6
 PSHS A
 LDA #$12
 BRA LD3A0
LD394 PULS A
 CMPA #1
 BNE LD39E
 STA LD3A6
 RTS
LD39E PSHS A
LD3A0 JSR OUTEC
 PULS A
 RTS
LD3A6 FCB $00

 END COLDS
