		ORG     $C000
; will do a JMP to $C002 to init the cartrage.
        ADDB    #$18
        ADDA    #$06
        COM     $0608		; function unknown 
        LDX     #$0683		; Adjust usr vector base
        LDB     #$0A		; do 10
        LDD     #$137E		; load A with number of vectors B with opcode for JMP
        ANDCC   #$AF		; reenable inturrupts
        CLR     $12,X
        CMPX    #$07F3
        LDB     #$04		; Count of buffers to process
        LDU     #$0800		; addr of buffer
        LEAU    $0100,U		; Increment addr for next buffer
        FCB     $2A
        FCB     $20
; L00FA	CMPX	#$C605
; CMPX, which decodes as LDB #$05 this saves a few bytes by not having LDB #xx,
	FCB	$8C		; CMPX
	FCB	$8C		; CMPX
	FCB	$8C		; CMPX
	FCB	$8C		; CMPX
        CLR     $0600		
LC10D   LDA     #$03  		; retry count ?
LC11D   CMPB    #$84
LC13A   CMPB    #$80		
        TST     $0600
        COM     $0600
        CMPA    #$14		; Track 20 ?
        LDA     #$10		; set track to 16
LC156   ORCC    #$01		; Flag error
        FCB	$21		; opcocode for BRN		
	FCB	$8C		; CMPX
	FCB	$8C		; CMPX
; Low level hardware command, operation is in $00E8
        ORCC    #$50		; Disable inturrupts
        CMPA    #$07		; Valid op
        LDB     #$FD		; yes flag error
        FCB     $8C		; Andothe CMPX saving.....
LC180   LDB     #$FC		; Set error code
        ORCC    #$01		; and carry bit
        ANDA    #$FC		; Turn off inturrupt
        ANDA    #$FC		; Disable Inturrupt
        LEAX    $1E,X		; Point to next PIA
        ORA     #$37
        LDA     #$03
        CMPA    #$12		; >$12, therefore on second side
        CMPA    #$12		; >$12, therefore on second side
        SUBA    #$12		; Calculate sector number on second side
        LDB     #$02		; Flag as side 2 (Dragon WD2797 only)
        LDA     #$FF		; Set DP=$FF, to make IO quicker
LC1F6   ORCC    #$01		; Flag error
        CMPA    #$14		; Primary Dir track ?
        CMPA    #$10		; Secondary dir track ?
        TST     $0608
        ANDCC   #$FE		; re-enable inturrupts
        CMPB    #$19
        LDB     #$FF
        ORCC    #$01		; flag error
        LEAX    -$1E,X		; Do PIA0
        CMPB    #$FC		
        LDB     #$A4
LC260   CMPB    #$FD
        LDB     #$28
LC268   CMPB    #$FE
        LDB     #$80
LC270   CMPB    #$FF
        LDB     #$82
        LDB     #$82
LC27D   ADDB    #$02
LC285   LDB     #$A6
LC287   ORCC    #$01
        CMPA    #$03			; Drive valid ?
LC29A   ORCC    #$01			; flag error
        LDA     #$D2			
LC2D9   LDB     #$19
        FCB     $8C			; CMPX again :)
        LDA     #$3F
        FCB     $8C			; CMPX again :)
        LDB     #$3F
        LDB     #$05			; try 5x$FFFF for timeout
	LDX     #$004F			
        LDA     #$3F
LC32A	LDB	#$02			; Bitmask for DRQ
        LDB     #$05			; Wait 5x$FFFF 
        LDA     #$FE			; return error
        ORCC    #$01
	LDA     #$5F
        FCB     $8C
	LDA     #$DF
	LDA     #$47
        ANDA    #~WPCEn	;#$EF
        CMPB    #$01		; > 1 sides specified : error & exit
	CMPB    #$28		; 40 tracks ?
        CMPB    #$50		; 80 tracks ?
LC3E0   LDB     #$28		; 40 tracks
        LDX     #$0800		; Pointer to param area for format
        LDA     #$01
        CMPB    #$80
        LDA     #$01
        CMPX    #$0B00
        LDA     #$01
        LDA     #$14
        LDA     #$10
        LDD     #$890A
        LEAX    $19,X
        LDA     #$14
LC489   LDD     #$1003
        LDA     #$12
        LDB     #$5A
LC4A7   STA     $08FD
        STA     $08FF
        STA     $08FC
        CMPA    #$50
        STA     $08FE
        LDU     #$0900
        LDA     #$FF
        LDD     #$242D
        LDD     #$B4FF
LC4DD   LDD     #$485A
        LDA     #$FC
LC4FA   LDA     #$12
        LDB     #$0C
        LDB     #$06
        LDA     #$01
        LDB     #$12
        LDB     #$03
;	1,U	$00 Source track
;	2,U	$01 Source sector
;	3,U	$DF5A ???
;	8,U	$00 Dest track
;	9,U	$01 Dest sector ????
;	10,U	$DF6D ???
;	14,U	$12 Sector count per track to copy ?
        SUBD    #$0040		; reserve room for working stack
        CMPA    #$01		; At least 1 sector's worth of ram (256 bytes) available
        LDA     #$12		; Sectors per track, initially 18 for SS disk
        LDD     #$DF5A		; Error masks ?
        LDD     #$DF6D
        LDD     #$0001		; Set source and dest track and sector to 0 & 1
        LDY     #$02D0		; sector count 720 sectors=ss40 disk
        CMPB    #$04		; greater than Max drive (4)?
	CMPA    #$BC		; is this the "TO" token ?
        CMPB    #$04		; Invalid drive no ?
        CMPB    #$02		; 2 sided disk specified ?
        CMPB    #$01		; 1 sided disk specified ?
        CMPB    #$50		; Is this an 80 track backup ?
        CMPB    #$28		; Or a 40 track backup ?
        LEAS    $10,U		; Clear stack frame
LC5F2   LDB     #$02		
DC600   LDB     #$03
        STB     $0603		; Temp storage (error code from dos)
;        FCB     $35
;        FCB     $16
;        FCB     $BD
;        FCB     $C5
;        FCB     $F9
LC62B   LDB     $0603		; Retrieve error code
	LDA     #$01		; Reset sector count to 1
LC670   CMPA    #$FF
        SUBA    #$CE
LC67D   CMPA    #$1A
LC687   JMP     [>NextResJump]	; Jump to user reserved word handler >$0137
LC68B   SUBB    #$44
LC691   CMPB    #$0E
LC69D   JMP     [>NextFuncsJump]	; Jump to user function handler >$013C
        CMPX    #$0650
LC6BC   CMPB    #$04		; Drive in range 
	LDB     #$28
	FCB	$8C		; CMPX
	LDB 	#$A4
        LDX     #$82A9
	LDX	#DosErrorCodeTable-$80 	; Get pointer to error table !
LC6F9   LDX     #$84DA
        LDD     $0615
        LDA     #$35		; Re-enable NMI
        SUBD    #$0100
        LDX     #$0800
        LDB     #$01
        LDX     #$06AA
LC77B   LDB     #$12
        LDB     #$14
        CMPB    #$04
        CMPA    #$08
LC7C1   LDA     #$10
        STA     $065B
        CLR     $0660
        LDU     #$0650
        LDA     #$07
        STA     $065A
        STA     $0659
        STA     $0658
        CMPB    #$0E
        CMPB    #$03
        SUBB    #$02
        CMPA    #$3A
LC823   ADDB    #$02
        CMPA    #$3A
LC82D   SUBA    #$30
        CMPA    #$04
LC835   LDB     #$1C
LC838   STA     $065B
        SUBB    #$02
        CMPA    #$2F
        CMPA    #$2E
LC84A   CMPU    #$0650
        TST     $0660
LC855   LDB     #$96
LC858   INC     $0660
        LDU     #$0658
LC866   CMPA    #$41
        CMPA    #$5A
        SUBA    #$20
        CMPA    #$41
        CMPA    #$5A
LC87A   CMPA    #$2D
        CMPA    #$30
        CMPA    #$39
        CMPU    #$065B
LC893   CMPU    #$0658
        CMPA    #$2E
        CMPA    #$2F
	LDX     #$06BD
        LDD     $0650
        LDU     #$0652
        LDB     #$0A
LC8C8   LDD     $0650
LC8CB   LEAX    $1F,X
        CMPX    #$07F3
        LDX     #$06BD
        LEAX    $1F,X
        CMPX    #$07F3
        LDB     #$A2
LC8EB   LDB     #$0C
        LDU     #$0650
        LDU     #$0616
        LDB     #$06
        LDB     #$13
        LDA     #$80
        CLR     $0681
        LDA     #$10
        STA     $0660
LC922   STY     $065C
        LEAU    $00FA,X
        STU     $065E
        BITA    #$81
        LDD     $0650
        LDU     #$0652
        LDB     #$09
        BITA    #$08
        INC     $0681
        LEAX    $19,X
        CMPX    $065E
        LDY     $065C
        DEC     $0660
        LDB     #$A0
        LDA     $0681
        STA     $1D,X
        STD     $15,X
        STA     $17,X
        STA     $19,X
        CLR     $18,X
        CLR     $13,X
        CLR     $14,X
        STD     $1A,X
        LDA     $11,Y
        STA     $1C,X
        LDD     #$FFFF
        STD     $10,X
        STA     $12,X
LC9C3   LDA     #$01
        FCB     $8C
LC9C6   LDA     #$FF
LC9CA   STY     $0661
        STU     $0669
        STB     $0663
        LDD     $0661
        LDB     $0663
LC9FA   CMPD    $0661
        LDD     $0661
        LDU     $0669
        BITA    #$02
        LDB     #$98
        LDX     $0669
        STX     $0669
        DEC     $0661
        LDD     $0661
        STX     $0667
        LDB     $0663
        LDA     #$FF
        LDX     $0667
LCA93   LDX     $0669
        STX     $0669
        LDD     $0661
        STD     $0661
        CLR     $0663
        SUBD    $13,X
        CMPB    $17,X
        ADDD    $15,X
        SUBD    $18,X
        CMPB    $1C,X
        ADDD    $1A,X
LCADB   ORCC    #$04
        LDD     $066B
        CMPD    $066D
        LDB     #$9A
        SBCA    #$00
        STD     $13,X
        STA     $17,X
        STD     $15,X
        CMPB    #$13
        STA     $1C,X
        STD     $1A,X
        LDD     $066B
        STD     $18,X
        CLR     $066C
        CLR     $066B
        STU     $066D
        LDB     $1D,X
        STB     $0682
        LDB     #$04
        ANDA    #$20
        LDA     $18,U
LCB49   LDD     $066B
        ADCA    #$00
        STD     $066B
        CMPD    $066D
        STB     $0682
        LDB     #$07
        STX     $0671
        STU     $0673
        STY     $0675
        STB     $0677
        CMPB    #$9C
LCBA8   CMPU    $0675
        CMPA    $0677
LCBB5   LDB     #$9A
        LDD     $0673
        ADDB    $0677
        ADCA    $0676
        LDA     $0675
        ADCA    #$00
        SBCA    #$00
        LDB     $0677
        LDX     $0671
        LDY     $0673
        LDU     $0675
        TST     $0608
        LDB     $0677
        LDX     $0671
        LDY     $0673
        LDU     $0675
        LDA     #$01
        LDB     $1E,X
        LDU     $067F
        LDA     #$FF
        LDB     $18,X
        LDB     #$04
        BITA    #$01
        LDB     #$07
        LDD     #$FFFF
        ADCA    #$00
        CMPB    #$94
        ADCA    #$00
        ADDD    $11,X
        INC     $10,X
LCD01   STD     $11,X
        STB     $18,U
        CMPB    #$13
LCD23   LDA     #$01
        STA     $18,Y
        ORB     #$20
        LDB     #$FF
        LDB     #$01
        STA     $1E,X
        LEAY    $19,U
        LDB     #$18
LCD57   STS     $0601
        LDU     $11,S
        CMPU    #$05A0
        LDU     #$058E
LCD83   LDA     #$FF
LCD87   LEAU    -$12,U
LCDA2   LEAU    $12,U
        CMPU    #$0B40
LCDB5   LDA     #$FF
        LDU     #$05A0
        LDB     #$B4
        LDA     #$08
        CMPB    #$B4
        CMPB    #$01
LCE13   CMPB    #$02
        EORA    #$03
        LDB     #$94
        LDA     #$01
        CMPX    #$86FF
        LDB     #$FF
LCE5A   LDS     $0601
        LDA     #$01
        CMPU    #$05A0
        LEAU    $FA60,U
        LDA     #$FF
        ANDA    #$07
        LDU     #$A672
        LDB     #$9C
LCEAA   LDA     $12,X
        LDU     $10,X
        LDB     $0682
        STB     $1E,X
LCEBF   LDA     $18,U
        STA     $12,X
        LDU     $066B
LCECD   STU     $10,X
	LDA     #$09
        LDU     #$0696
	STA     $067D
        STX     $0678
        LDB     #$0C
        LDU     #$0650
        STD     $067A
        STA     $067C
        LDD     #$4241
        LDA     #$4B
        CMPB    #$A0
        LDA     $067D
        TST     [$0678]
        CMPB    #$9C
LCF8A   LDA     $067D
LCF92   LDD     $067A
        STD     $0658
        LDA     $067C
        STA     $065A
        CMPB    #$A0
        LDB     #$9E
        STA     $1D,X
        STA     $1E,X
        LDB     #$1C
        CMPB    #$0C
        LDB     #$18
        LDB     #$0B
        LDB     $1D,X
        LDB     #$04
        ANDA    #$20
        LDA     $18,U
        LDB     #$81
        LDB     #$07
        SUBD    #$05A0
        SUBD    #$05A0
        SUBD    #$05A0
        LDA     #$FF
        LDB     #$01
        SUBA    #$20
        LDA     #$01
LD0A6   CMPB    #$10
        LDA     #$FF
        SUBB    #$10
LD0B4   LDX     #$05A0
LD0C0   LDB     #$90
        ORA     #$02
        CMPX    #$84FD
        LDB     $1D,X
        BITA    #$02
        LDB     #$98
LD0F4   LDB     #$9C
        LDB     #$0B
        LDU     #$0650
        LDB     $1D,X
        LDU     #$0650
        LDB     #$0B
        STD     $067D
LD131   STX     $066F
        LDB     #$0A
        TST     $067D
        CLR     $067D
LD14D   INC     $067E
        LEAU    $19,U
        CMPB    #$12
        LDB     #$92
LD168   LDA     #$FF
        LDA     $067E
        LDB     #$B4
LD1A3   LDX     #$061C
        LDU     #$0696
        LDB     #$06
        LDY     #$0168
        LDA     #$12
        STA     $10,U
        LDD     $00FE,X
        CMPD    $00FC,X
        STB     $10,U
        CMPB    #$12
        LDD     #$0168
LD201   LDB     #$90
	LDA     #$FF
        SUBB    #$0A
        ADDB    #$0A
        ADDD    #$0002
        ADCA    #$00
        STD     $066F
        LDB     #$19
        STX     $067F
        LDY     $067F
        LDA     #$FE
        LDB     #$04
        CMPA    #$55
        LDB     #$FF
        LDA     #$01
        LDB     #$04		; Check 4 buffers
        CMPA    #$01		; Oldest ?
        CMPA    #$55		; In use ???
        INCA			; Check for Flag=$FF
LD2CB   LDB     #$04		; Process 4 buffers
        LDA     #$04		; Mark this as youngest buffer
        LDA     #$FF		; Flag Dos IO in progress
        CMPA    #$14		; track 20 (directory) ?
; Looking at $A673, the 8 bytes before it are $80,$40,$20,$10,$08,$04,$02,$01
	LDU     #$A673		; This for some strange reason points U at basic rom !!!	
LD31A   LDA     #$01		; Mark bufer as youngest
        LDX     #$06A6
        SUBD    #$0100			; Make room for 1 sector
        CMPA    #$BC			; "TO" token
        CMPB    #$A0
        CMPD    $10,X
        CMPA    $12,X
        SUBA    $10,X
        SUBD    $11,X
        LDD     $11,X
        LDY     $10,X
        LDB     $12,X
        CMPA    #$01
        STD     $02DA
        LDX     #$02DC
        ADDB    #$04
LD455   CLR     $0611
        ADCA    #$00
        LDU     #$02D8
LD494   LDX     #$0650
        LDY     #$0009
        LDA     #$55
        LDX     #$0650
DosHookRun   CLR     $0614
        CLR     $0619
        CLR     $0617
        CLR     $0618
        CMPA    #$22
        LDB     #$01
        FCB     $21
        STB     $0611
LD4DE   CMPA    #$01
        TST     $0611
        LDB     #$40
        LDB     #$09
LD529   CMPA    #$02
        LDB     #$09
        TST     $0611
        STX     $0652
        CMPX    $0652
        SUBD    $0652
        ADDD    #$0001
        STD     $0654
        STX     $0656
        LDB     #$02
        CMPB    #$A0
        STX     $0652
        STD     $0654
        STX     $0656
        LDB     #$01
LD5CA   LDX     #$0650
        LDA     #$55
        LDU     #$0009
        LDB     #$09
        LDX     $0652
        LDU     $0654
        CMPA    #$01
LD629   LDD     $0654
        LDB     #$40
        STB     $0611
	LDA     #$09
        CMPX    #$39FD
        STD     $0697
        STD     $0699
        CMPB    #$9E
        CMPB    #$A0
        LDD     #$FF00
        SUBD    #$FF00
        CMPD    #$FF00
        SUBD    #$FF00
        LDD     #$FF00
        CMPA    #$C2
        CMPA    #$88
        LDB     #$01
        LDB     #$BC
        CMPB    #$A0
LD7B9   LDB     #$9E
        LDA     #$FF
        STA     $0612
        TST     $067E
        LDU     $0664
        LDB     $0666
        LDX     #$02DC
        CLR     $0612
        LDB     $0604
	CLR     $0603
        SUBD    $0603
        STU     $0664
        STA     $0666
        CLR     $067E
        LDA     #$01
        CMPA    #$3B
        CMPA    #$E5
        STU     $0664
        STA     $0666
        LDA     #$FF
        STA     $067E
LD85F   CMPA    #$80
        LDB     #$FF
        LDA     #$A0
        CMPB    #$A0
        STX     $060B
        LDA     #$55
        LDA     #$20
        LDX     $060B
        LDY     $0664
        LDB     $0666
LD8E6   LDX     $060B
        CMPB    #$04
        LBLE    $B835
LD906   LDB     #$28
LD91B   LDX     $060B
        LDX     $060B
        LDU     #$0100
        LDY     $0664
        LDB     $0666
LD944   LDD     $0665
        ADDD    #$0100
        INC     $0664
LD94F   STD     $0665
        LDX     #$879A
LD965   LDX     #$02DD
        STB     $0603
        LDB     $0604
        STB     $0611
        DEC     $0604
        CMPA    #$0D
        TST     $0612
        CMPA    #$2C
        CMPA    #$3A
        CMPB    #$FF
        LDA     $0604
LD9B2   LDB     $0603
        LDX     #$02DC
        LDB     $0611
        LDU     #$00FF
        LDU     #$02DD
        LDX     #$02DD
        ADCA    #$00
        SUBA    $10,X
        SUBD    $11,X
        LDD     $11,X
        STB     $0604
        STB     $0611
        CLR     $0603
LDA23   LDB     #$9A
        BITA    #$08
        BITA    #$81
        LDB     #$08
        LDB     #$04
        LDA     #$2E
        BITA    #$02
        LDA     #$70
;        CMPX    #$8620
	FCB	$8C				; CMPX trick
LDA61	LDA	#$20
        LDU     #$FFFF
        LDX     #$06BD
        STB     $1D,X
        CMPD    #$05A0
;        LDA     #$BD
;        SUBA    <$A1
	FCB	$86				; LDA, like cmpx trick
        CMPB    #$A0
        LDA     #$20
        LDX     #$837D
        FCB     $0D
        FCB     $00
        FCB     $00
        FCB     $00
        FCB     $00
        LDX     #$000A			; Default line no increment 10
	ORCC    #$50			; Disable inturrupts ???
        SUBD    $060F			; Subtrack increment
        FCB     $34
        FCB     $56
LDB2D   TST     $0613
LDB34   LDD     $060D
        ADDD    $060F
        CMPD    #$F9FF
        LDA     #$20
        LDU     #$03DA
        STD     $060D
        LDX     #$02DD
LDB5F   LDA     #$20
        CMPA    #$0D
        CMPA    #$03
LDB6F   CLR     $0613
        LDA     #$0D
        LDX     #$02DD
        LDA     #$0D
        LDB     #$01
LDB85   CMPA    #$20
        CMPA    #$7B
        LDX     #$0008		; Repeat 8 times
        CMPX    #$C601		; LDB #$01 (default beep count)
        LDY     #$6000		; wait a short while
        LDB     #$A0
        LDX     #$0005
LDC00   LDB     #$8E
LDC08   LDA     #$55
; Takes byte that would be output to $FF48, reformats it and 
	org		$DC46
	CMPA    #$81
        CMPA    #$BC
        CMPX    #$F9FF
        STX     $0615
        LDA     #$FF
        STA     $0614
LDC75   CLR     $0614
;	SREAD driveno,trackno,secno,part1$,part2$
        LDB     #$FF
        STB     $0603			; Save error code in temp storage
        LEAU    $0080,U			; Point to second half of sector
        LDB     $0603			; Retrieve error code from read
        LDB     #$80
;	SWRITE driveno,side,sector,part1$,part2$
        LDB     #$FF
        LEAU    $0080,U
        CMPB    #$4F		; greater than track 80 ?
        CMPA    #$C2
LDD46   CMPA    #$88
LDD4D   LDB     #$FF
LDD4F   STB     $0608
        CMPX    #$8601
        LDA     #$A0
	LDD     $0617
        LDB     $0619
; The actual core disk IO routine, accepts a function code $00..$07
DDDEA   FCB     $01
        FCB     $0A
        FCB     $02
        FCB     $0B
        FCB     $03
        FCB     $0C
        FCB     $04
        FCB     $0D
        FCB     $05
        FCB     $0E
        FCB     $06
        FCB     $0F
        FCB     $07
        FCB     $10
        FCB     $08
        FCB     $11
        FCB     $09
        FCB     $12
        FCB     $00
        FCB     $08
        FCB     $00
        FCB     $00
        FCB     $03
        FCB     $F6
        FCB     $FC
        FCB     $1F
        FCB     $4E
        FCB     $4E
DDE09   FCB     $07
        FCB     $00
        FCB     $00
        FCB     $03
        FCB     $F5
        FCB     $FE
        FCB     $01
        FCB     $F7
        FCB     $4E
        FCB     $14
        FCB     $4E
        FCB     $4E
        FCB     $0B
        FCB     $00
        FCB     $00
        FCB     $03
        FCB     $F5
        FCB     $FB
        FCB     $00
        FCB     $E5
        FCB     $F7
        FCB     $17
        FCB     $4E
        FCB     $4E
        FCB     $00
        FCB     $4E
        FCB     $4E
DDE24   FCB     $09		; No bytes
        FDB     $0109		; address to copy
        FCB     $04		; No bytes
        FDB     $069F		; address to copy
        FCB     $02
        FCB     $02
        FCB     $02
        FCB     $02
        FCB     $1E		; No bytes
	FDB	BasStub1	; Copy to stub 1 ($012A) on Dragons
        FDB     BasStub2	; Copy to stub 1 ($0134) on Tandy 
        FCB     $1A
        FCB     $07
        FCB     $00
        FDB     $0000
        FCB     $00
        FDB     $0000
        FCB     $00
        FCB     $00
        FCB     $00
        FCB     $00
        FCB     $00
        FCB     $00
        FCB     $00
        FCB     $00
        FCB     $00
        FCB     $00		; No bytes : terminate
        FCB     $00
        FCB     $C6
        FCB     $C5
        FCB     $CC
        FCB     $D2
        FCB     $CD
        FCB     $C3
        FCB     $A4
        FCB     $CF
        FCB     $D0
        FCB     $D0
        FCB     $D4
        FCB     $CE
        FCB     $D9
        FCB     $C5
        FCB     $D2
        FCB     $C5
        FCB     $D4
        FCB     $C4
        FCB     $C5
        FCB     $D2
        FCB     $CC
        FCB     $C4
        FCB     $C5
        FCB     $D4
        FCB     $D4
        FCB     $C5
        FCB     $C5
        FCB     $C4
        FCB     $C5
        FCB     $D9
        FCB     $CD
        FCB     $C4
        FCB     $D0
        FCB     $0D
        FCB     $00
        FCB     $0D
	FCB     $00
        FCB     $0D
        FCB     $00
        FCB     $0D
        FCB     $00
        FCB     $0D
	FCB     $00
        FCB     $0D
        FCB     $00
        FCB     $0D
        FCB     $00
DDFE0   FCB     $00
        FCB     $00
        FCB     $00
LDFFA   LDX     $066F
        FCB     $61
        FCB     $34
