annotate level1/modules/llcocosdc.asm @ 3130:e0614e08fa5e

l1 boot modules: Expand documentation and clean up code Tidy up white-space and indentation. Expand documentation to show C flag is important on return from HWRead. Expand documentation to show how/why/when filler is needed at end of file. Delete dead code in some places. No functional changes.
author Neal Crook <foofoobedoo@gmail.com>
date Sun, 04 Dec 2016 21:01:42 +0000
parents 19b022ee24ba
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2817
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
1 ********************************************************************
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
2 * llcocosdc - CoCo SDC Low-level driver
2817
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
3 *
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
4 * $Id$
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
5 *
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
6 * Edt/Rev YYYY/MM/DD Modified by
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
7 * Comment
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
8 * ------------------------------------------------------------------
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
9 * 2013/05/?? Boisy G. Pitre
2817
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
10 * Created.
3017
545a59f51fee Changed llcocosdc read and write routines to enter and leave command mode.
tlindner
parents: 2818
diff changeset
11 * 2014/11/27 tim lindner
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
12 * Changed read and write routines to enter and leave command mode.
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
13 *
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
14 * 2014/12/22 Darren Atkinson
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
15 * Total re-write. Provides MPI slot selection to permit co-existence
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
16 * with a real floppy controller. Sends command to controller during
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
17 * Init which locks out the floppy emulation capability. Adds GetStat
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
18 * functions for extended commands. Uses TFM to retrieve data blocks
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
19 * when a 6309 CPU is present. Supports the SS.DSize GetStat function
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
20 * to query controller for the disk size.
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
21 *
3036
42861a1dd59e Low level driver update to CoCoSDC provided by Darren.
David Ladd <drencor-xeen@users.sf.net>
parents: 3032
diff changeset
22 * 2015/01/08 Darren Atkinson
42861a1dd59e Low level driver update to CoCoSDC provided by Darren.
David Ladd <drencor-xeen@users.sf.net>
parents: 3032
diff changeset
23 * Fixed bug in getSize which caused boot to fail when controller was
42861a1dd59e Low level driver update to CoCoSDC provided by Darren.
David Ladd <drencor-xeen@users.sf.net>
parents: 3032
diff changeset
24 * installed in slot 2, 3 or 4 of a Multi-Pak Interface.
42861a1dd59e Low level driver update to CoCoSDC provided by Darren.
David Ladd <drencor-xeen@users.sf.net>
parents: 3032
diff changeset
25 *
2817
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
26 NAM llcocosdc
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
27 TTL CoCo SDC Low-level driver
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
28
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
29 USE defsfile
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
30 USE rbsuper.d
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
31 USE cocosdc.d
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
32
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
33 MPIREG equ $FF7F
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
34
2817
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
35
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
36 tylg SET Sbrtn+Objct
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
37 atrv SET ReEnt+rev
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
38 rev SET 0
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
39
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
40
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
41 MOD eom,name,tylg,atrv,start,0
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
42
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
43 * Low-level driver static memory area inside that of rbsuper
2817
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
44 ORG V.LLMem
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
45 V.SDCMPI rmb 1 MPI slot containing CoCo SDC
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
46 V.MaskIRQs rmb 1 contains $50 if IRQ/FIRQ should be masked
2817
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
47
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
48 name FCS /llcocosdc/
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
49
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
50 start lbra ll_init
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
51 bra ll_read
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
52 nop
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
53 bra ll_write
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
54 nop
2817
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
55 bra ll_getstat
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
56 nop
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
57 bra ll_setstat
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
58 nop
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
59 *** lbra ll_term ***
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
60 clrb
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
61 rts
2817
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
62
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
63
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
64 *--------------------------------------------------------------------------
2817
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
65 * ll_getstat
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
66 *
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
67 * Entry:
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
68 * Y = address of path descriptor
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
69 * U = address of device memory area
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
70 *
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
71 * Exit:
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
72 * CC = carry set on error
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
73 * B = error code
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
74 *
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
75 ll_getstat ldx PD.RGS,y point X at stacked registers
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
76 lda R$B,x get function code
2817
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
77 cmpa #SS.DSize
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
78 beq getSize branch if "get disk size"
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
79 tfr a,b
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
80 andb #$F0 keep hi nibble
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
81 cmpb #CMDEXD
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
82 beq exCmd branch if extended command with data
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
83 anda #$FF-4 make sure "TFM" bit is cleared
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
84 cmpb #CMDEX
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
85 beq exCmd branch if ext command without data
3038
c6eafb074443 Do not return error for SDC setstat
darrenatk
parents: 3036
diff changeset
86 comb set carry
c6eafb074443 Do not return error for SDC setstat
darrenatk
parents: 3036
diff changeset
87 ldb #E$UnkSvc return error
c6eafb074443 Do not return error for SDC setstat
darrenatk
parents: 3036
diff changeset
88 rts
2817
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
89
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
90
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
91 *--------------------------------------------------------------------------
2817
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
92 * ll_setstat
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
93 *
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
94 * Entry:
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
95 * Y = address of path descriptor
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
96 * U = address of device memory area
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
97 *
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
98 * Exit:
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
99 * CC = carry set on error
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
100 * B = error code
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
101 *
3038
c6eafb074443 Do not return error for SDC setstat
darrenatk
parents: 3036
diff changeset
102 ll_setstat clrb no error
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
103 rts
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
104
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
105
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
106 *--------------------------------------------------------------------------
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
107 * SS.DSize - Return size information about a device
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
108 *
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
109 * Exit:
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
110 * Carry cleared for no error.
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
111 * A = Sector Size (1=256, 2=512, 4=1024, 8=2048)
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
112 *
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
113 * IF B = 0
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
114 * X = Number of Sectors (bits 31-16)
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
115 * Y = Number of Sectors (Bits 15-0)
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
116 *
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
117 * IF B != 0
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
118 * B = Number of Logical Sides
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
119 * X = Number of Logical Cylinders
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
120 * Y = Number of Logical Sectors/Track
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
121 *
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
122 getSize lda #CMDEX primary command code
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
123 ora PD.DRV,y combine drive num with command
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
124 ldb #'Q "Query Size" sub-command
3036
42861a1dd59e Low level driver update to CoCoSDC provided by Darren.
David Ladd <drencor-xeen@users.sf.net>
parents: 3032
diff changeset
125 leay ,u point Y at device mem
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
126 ldu #$FFFF I/O buffer = none
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
127 pshs x save frame ptr
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
128 bsr CommSDC send query to controller
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
129 puls x restore frame ptr
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
130 ldb #E$NotRdy error code
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
131 bcs sizeRet return if error
3050
19b022ee24ba fix SS.DSize to return correct bytes-per-sector
darrenatk
parents: 3038
diff changeset
132 ldd ,y bits 15-0 of size
19b022ee24ba fix SS.DSize to return correct bytes-per-sector
darrenatk
parents: 3038
diff changeset
133 std R$Y,x return in Y
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
134 clra bits 31-24 of size always zero
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
135 ldb -1,y bits 23-16 of size
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
136 std R$X,x return bits 31-16 in X
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
137 inca A = 1: 256 byte sectors
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
138 clrb B = 0: LBA device
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
139 std R$D,x return in D
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
140 sizeRet rts
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
141
2817
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
142
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
143 *--------------------------------------------------------------------------
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
144 * SDC Extended Device Commands
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
145 *
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
146 * Entered with SDC command code in A.
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
147 *
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
148 * Parameters are passed indirectly via the register frame:
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
149 * X = address of 256 byte I/O buffer or $FFFF if none
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
150 * U.L = optional param byte 1
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
151 * Y = optional param bytes 2 (hi) and 3 (low)
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
152 *
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
153 * Response values are returned indirectly via the register frame:
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
154 * A = controller status
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
155 * U.H = 0
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
156 * U.L = response byte 1
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
157 * Y = response bytes 2 (hi) and 3 (low)
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
158 *
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
159 exCmd pshs u,y,x preserve registers
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
160 leay ,u Y = device memory area
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
161 ldu R$X,x U = I/O buffer address
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
162 ldb R$U+1,x B = param byte 1
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
163 ldx R$Y,x X = param bytes 2 and 3
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
164 bsr CommSDC do command protocol
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
165 puls x restore register frame pointer
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
166 stb R$A,x [A] = controller status
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
167 lda #0 will clear top half of U
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
168 ldb -1,y get response byte 1 (FF49)
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
169 std R$U,x [U] = 1st response byte
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
170 ldd ,y get response bytes 2,3 (FF4A,B)
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
171 std R$Y,x [Y] = 2nd and 3rd response bytes
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
172 ldb #E$NotRdy error code
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
173 bcs exOut skip next if error
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
174 clrb no error
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
175 exOut puls y,u,pc return
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
176
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
177
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
178 *--------------------------------------------------------------------------
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
179 * ll_write
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
180 *
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
181 * Write one sector.
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
182 *
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
183 * Entry:
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
184 * Y = address of path descriptor
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
185 * U = address of device memory area
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
186 *
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
187 *
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
188 ll_write lda #CMDWRITE command code for Write
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
189 bsr sectorIO common sector I/O
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
190 bcc wrRet return if success
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
191 ldb #E$Write error code for write
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
192 wrRet rts
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
193
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
194
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
195 *--------------------------------------------------------------------------
2817
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
196 * ll_read
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
197 *
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
198 * Read one sector.
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
199 *
2817
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
200 * Entry:
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
201 * Y = address of path descriptor
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
202 * U = address of device memory area
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
203 *
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
204 ll_read lda #CMDREAD+4 command code for 6309 Read (TFM)
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
205 fcb $11 next instr is "LDE" on 6309
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
206 lda #CMDREAD command code for 6809 Read
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
207 bsr sectorIO common sector I/O
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
208 bcc rdRet return if success
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
209 ldb #E$Read error code for read
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
210 rdRet rts
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
211
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
212
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
213 *--------------------------------------------------------------------------
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
214 * Funnel code for sector read and write
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
215 *
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
216 * Entry:
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
217 * A = read/write command code
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
218 * Y = address of path descriptor
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
219 * U = address of device memory area
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
220 *
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
221 sectorIO ldb #1 highest drive number allowed
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
222 subb PD.DRV,y range check drive number
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
223 bcc drvOK branch if valid
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
224 ldb #E$Unit error code for bad drive number
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
225 puls x,pc pop top address then return
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
226
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
227 drvOK ora PD.DRV,y combine drive num with command
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
228 leay ,u point Y at device mem
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
229 ldb V.PhysSect,u B = hi byte of LSN
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
230 ldx V.PhysSect+1,u X = lo word of LSN
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
231 ldu V.CchPSpot,u U = buffer address
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
232
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
233 *** Fall Thru ***
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
234
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
235 *--------------------------------------------------------------------------
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
236 * CommSDC
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
237 *
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
238 * This is the core routine used for all
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
239 * transactions with the SDC controller.
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
240 *
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
241 * Entry:
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
242 * A = Command code
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
243 * B = LSN hi byte / First parameter byte
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
244 * X = LSN lo word / 2nd and third param bytes
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
245 * Y = Address of driver device memory area
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
246 * U = Address of I/O buffer ($FFFF = none)
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
247 *
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
248 * Exit:
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
249 * Carry set on error
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
250 * B = controller status code
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
251 * Y = address of SDC Data Register A (FF4A)
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
252 *
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
253 CommSDC
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
254
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
255 * Save current MPI setting and activate the SDC slot
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
256 pshs cc preserve CC (interrupt masks)
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
257 lsr ,s shift carry out of saved CC
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
258 pshs a,b save cmd code, alloc byte for saving MPI
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
259 tfr cc,a get copy of current CC
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
260 ora V.MaskIRQs,y set I and F masks if FDC present
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
261 tfr a,cc update I and F in CC
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
262 lda MPIREG get current MPI slot
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
263 sta 1,s save on stack where B was pushed
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
264 anda #$30 mask out current SCS nibble
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
265 ora V.SDCMPI,y insert SCS nibble for SDC slot
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
266 ldy #DATREGA setup Y for hardware addressing
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
267 tsta was an SDC controller found?
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
268 bmi sdcNone exit if no
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
269 sta MPIREG activate MPI slot
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
270
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
271 * Put controller in Command mode
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
272 lda #CMDMODE the magic number
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
273 sta -10,y send to control latch (FF40)
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
274 puls a pull saved command code back into A
2818
05426dd4e24e ll_init now puts CoCo SDC in enhanced mode.
Boisy Pitre <boisy.pitre@nuance.com>
parents: 2817
diff changeset
275
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
276 * Put input parameters into the registers.
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
277 * It does no harm to put random data in the
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
278 * registers for commands which dont use them.
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
279 stb -1,y high byte to param reg 1
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
280 stx ,y low word to param regs 2 and 3
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
281
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
282 * Wait for Not Busy.
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
283 lbsr waitForIt run polling loop
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
284 bcs cmdExit exit if error or timed out
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
285
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
286 * Send command to controller
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
287 sta -2,y to command register (FF48)
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
288
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
289 * Determine if a data block should be sent.
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
290 * The code for any command which requires
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
291 * a data block will have bit 5 set.
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
292 bita #$20 test the "send block" command bit
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
293 beq rxBlock branch if no block to send
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
294
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
295 * Wait for Ready to send
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
296 bsr waitForIt run polling loop
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
297 bcs cmdExit exit if error or timed out
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
298 leax ,u move data address to X
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
299 IFGT Level-1
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
300 bita #$40 extended command or sector write?
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
301 lbne txCmd branch if extended command
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
302 ENDIF
2817
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
303
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
304 * Send 256 bytes of data
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
305 ldd #32*256+8 32 chunks of 8 bytes
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
306 txChunk ldu ,x send one chunk...
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
307 stu ,y
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
308 ldu 2,x
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
309 stu ,y
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
310 ldu 4,x
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
311 stu ,y
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
312 ldu 6,x
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
313 stu ,y
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
314 abx point X at next chunk
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
315 deca decrement chunk counter
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
316 bne txChunk loop until all 256 bytes sent
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
317
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
318 * Wait for command to complete
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
319 txCompl lda #5 timeout retries
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
320 txWait bsr waitForIt run polling loop
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
321 bitb #BUSY test BUSY bit
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
322 beq cmdExit exit if completed
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
323 deca decrement retry counter
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
324 bne txWait repeat if until 0
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
325 coma set carry for timeout error
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
326 bra cmdExit exit
2817
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
327
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
328 * Set error condition and exit when no SDC hardware found
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
329 sdcNone leas 1,s pop saved command code
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
330 comb set carry
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
331 ldb #E$Unit error number for missing hardware
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
332 bra cmdExit exit
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
333
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
334 * For commands which return a 256 byte response block the
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
335 * controller will set the READY bit in the Status register
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
336 * when it has the data ready for transfer. For commands
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
337 * which do not return a response block the BUSY bit will
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
338 * be cleared to indicate that the command has completed.
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
339 *
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
340 rxBlock bsr longWait run long status polling loop
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
341 bls cmdExit exit if error, time out or completed
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
342 leax 1,u test the provided buffer address
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
343 beq cmdExit exit if "no buffer" ($FFFF)
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
344 bita #$04 test the "TFM" command bit
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
345 bne rx6309 branch if set
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
346 leax ,u move data address to X
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
347 IFGT Level-1
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
348 bita #$40 extended command or sector read?
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
349 bne rxCmd branch if extended command
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
350 ENDIF
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
351
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
352 * 6809 read transfer loop into current task space
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
353 ldd #32*256+8 32 chunks of 8 bytes
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
354 rxChunk ldu ,y read one chunk...
2818
05426dd4e24e ll_init now puts CoCo SDC in enhanced mode.
Boisy Pitre <boisy.pitre@nuance.com>
parents: 2817
diff changeset
355 stu ,x
05426dd4e24e ll_init now puts CoCo SDC in enhanced mode.
Boisy Pitre <boisy.pitre@nuance.com>
parents: 2817
diff changeset
356 ldu ,y
05426dd4e24e ll_init now puts CoCo SDC in enhanced mode.
Boisy Pitre <boisy.pitre@nuance.com>
parents: 2817
diff changeset
357 stu 2,x
05426dd4e24e ll_init now puts CoCo SDC in enhanced mode.
Boisy Pitre <boisy.pitre@nuance.com>
parents: 2817
diff changeset
358 ldu ,y
05426dd4e24e ll_init now puts CoCo SDC in enhanced mode.
Boisy Pitre <boisy.pitre@nuance.com>
parents: 2817
diff changeset
359 stu 4,x
05426dd4e24e ll_init now puts CoCo SDC in enhanced mode.
Boisy Pitre <boisy.pitre@nuance.com>
parents: 2817
diff changeset
360 ldu ,y
05426dd4e24e ll_init now puts CoCo SDC in enhanced mode.
Boisy Pitre <boisy.pitre@nuance.com>
parents: 2817
diff changeset
361 stu 6,x
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
362 abx update X for next chunk
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
363 deca decrement chunk counter
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
364 bne rxChunk loop until all 256 bytes transferred
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
365 bra cmdOK exit with SUCCESS
2817
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
366
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
367 * 6309 read transfer using TFM into current task space
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
368 rx6309 fcb $10,$86,$01,$00 [ldw #256] block size = 256
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
369 orcc #$50 ensure interrupts are masked
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
370 leax 1,y point X at Data Register B (FF4B)
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
371 fcb $11,$3B,$13 [tfm x,u+] read block
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
372 cmdOK clrb status code for SUCCESS, clear carry
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
373
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
374 * Exit
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
375 cmdExit puls a pull saved MPI settings
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
376 rol ,s rotate carry into saved CC on stack
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
377 clr -10,y end command mode
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
378 sta MPIREG restore saved MPI settings
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
379 puls cc,pc restore irq masks, update carry and return
2817
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
380
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
381
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
382 *--------------------------------------------------------------------------
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
383 * Wait for controller status to indicate either "Not Busy" or "Ready".
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
384 * Will time out if neither condition satisfied within a suitable period.
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
385 *
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
386 * Exit:
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
387 * CC.C set on error or time out.
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
388 * CC.Z set on "Not Busy" status (if carry cleared).
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
389 * B = status
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
390 * A, Y and U are preserved.
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
391 *
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
392 longWait bsr waitForIt enter here for doubled timeout
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
393 bcc waitRet return if cleared in 1st pass
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
394 waitForIt ldx #0 setup timeout counter
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
395 waitLp comb set carry for assumed FAIL
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
396 ldb -2,y read status
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
397 bmi waitRet return if FAILED
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
398 lsrb BUSY --> Carry
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
399 bcc waitDone branch if not busy
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
400 bitb #READY/2 test READY (shifted)
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
401 bne waitRdy branch if ready for transfer
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
402 bsr waitRet consume some time
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
403 ldb #$81 status = timeout
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
404 leax ,-x decrement timeout counter
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
405 beq waitRet return if timed out
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
406 bra waitLp try again
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
407
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
408 waitDone clrb Not Busy: status = 0, set Z
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
409 waitRdy rolb On Ready: clear C and Z
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
410 waitRet rts return
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
411
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
412
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
413 *--------------------------------------------------------------------------
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
414 * Transfers of command and response data require special handling
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
415 * in Level 2 due to separate address space for System/User tasks.
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
416 *
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
417 IFGT Level-1
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
418 * Send command data from User task space
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
419 txCmd bsr tskPrep B = task#, push word counter
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
420 txWord os9 F$LDABX get byte from user space buffer
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
421 sta ,y send 1st half of word
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
422 leax 1,x increment buffer address
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
423 os9 F$LDABX get byte from user space buffer
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
424 sta 1,y send 2nd half of word
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
425 leax 1,x increment buffer address
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
426 dec ,s decrement word counter
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
427 bne txWord loop if more to send
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
428 leas 1,s pop word counter
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
429 lbra txCompl go wait for command completion
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
430
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
431 tskPrep ldu D.Proc get current process ptr
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
432 ldb P$Task,u get task # for current process
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
433 lda #128 number of words to transfer (256 bytes)
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
434 ldu ,s+ half-pop return address into U
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
435 sta ,s leave word counter on the stack
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
436 tfr u,pc return
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
437
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
438 * Read response data into User task space
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
439 rxCmd bsr tskPrep B = task#, push word counter
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
440 rxWord lda ,y read 1st half of word
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
441 os9 F$STABX store in user space buffer
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
442 leax 1,x increment buffer address
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
443 lda 1,y read 2nd half of word
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
444 os9 F$STABX store in user space buffer
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
445 leax 1,x increment buffer address
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
446 dec ,s decrement word counter
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
447 bne rxWord loop if more to read
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
448 leas 1,s pop word counter
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
449 bra cmdOK exit with SUCCESS
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
450 ENDIF
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
451
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
452
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
453 *--------------------------------------------------------------------------
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
454 * ll_init
2817
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
455 *
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
456 * Entry:
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
457 * Y = address of device descriptor
2817
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
458 * U = address of device memory area
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
459 *
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
460 * Exit:
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
461 * CC = carry set on error
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
462 * B = error code
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
463 *
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
464 ll_init pshs cc save irq masks
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
465 orcc #$50 mask irqs
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
466 ldd #$8080 prepare "not found" values
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
467 pshs dp,b,a alloc variables on stack
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
468 ldx #CMDREG point X at FDC command reg
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
469 ldb MPIREG get current MPI slot
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
470 andb #$33 mask out the unused bits
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
471 stb 2,s save on stack (in DP position)
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
472 orb #$03 start SCS scan at slot 4
3017
545a59f51fee Changed llcocosdc read and write routines to enter and leave command mode.
tlindner
parents: 2818
diff changeset
473
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
474 chkSlot stb MPIREG activate slot being scanned
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
475 lda ,s have we already found CoCo SDC ?
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
476 bpl chkFDC branch if yes
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
477 lda #$64 test pattern
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
478 sta -6,x store at Flash Data Reg address
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
479 lda -5,x get value from Flash Ctrl Reg
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
480 clr -6,x clear Flash Data Reg
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
481 eora -5,x get changed bits from Ctrl Reg
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
482 suba #$60 did expected bits change?
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
483 bne chkFDC branch if not an SDC
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
484 stb ,s record the SDC slot
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
485 bra nxtSlot go scan next slot
2817
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
486
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
487 chkFDC lda 1,s have we already found an FDC ?
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
488 bpl nxtSlot branch if yes
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
489 bsr fdcTest test if FDC present
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
490 bne nxtSlot branch if not present
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
491 stb 1,s record the FDC slot
2817
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
492
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
493 nxtSlot decb decrement SCS slot number
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
494 bitb #$08 have we scanned all slots?
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
495 beq chkSlot loop if more to scan
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
496 lda ,s get slot with CoCo SDC
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
497 bmi saveSDC branch if none
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
498 cmpa 2,s same as original slot selection?
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
499 bne saveSDC branch if no
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
500 eora #$01 change original slot to..
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
501 sta 2,s ..be something else
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
502 eora #$01 back to the true SDC slot
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
503 saveSDC anda #$83 keep SDC slot number or "not found"
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
504 sta V.SDCMPI,u store SDC slot info in device mem
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
505 lda #$50 irq masks will be needed if FDC present
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
506 ldb 1,s was an FDC found?
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
507 bpl useSlot branch if yes
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
508 clra irq masks not needed
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
509 ldb 2,s get original MPI slot selection
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
510 useSlot stb MPIREG activate default MPI slot
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
511 sta V.MaskIRQs,u store irq masks in device mem
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
512 lda $FF22 reset any latched CART interrupt
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
513 leas 3,s pop variables off the stack
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
514 puls cc restore saved irq masks
2817
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
515
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
516 * Disable Floppy Emulation capability in SDC controller
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
517 lda #$C0 primary command code
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
518 ldb #'g secondary command to "Set Global Flags"
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
519 ldx #$FF80 mask/flag bytes
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
520 leay ,u point Y at static variables
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
521 ldu #$FFFF "no buffer" address
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
522 lbsr CommSDC send command to controller
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
523 clrb no error
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
524 rts return
2817
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
525
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
526 * Test for presence of FDC in active slot
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
527 fdcTest lda #$D0 FORCE INTERRUPT command
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
528 sta ,x send to FDC command register
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
529 bsr fdcDelay wait awhile
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
530 lda ,x read FDC status
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
531 lda 3,x read FDC data register
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
532 coma invert all bits
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
533 sta 3,x put inverted data back
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
534 bsr fdcDelay wait awhile
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
535 suba 3,x test if read matches write
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
536 fdcDelay pshs y,x,d,cc push regs
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
537 mul delay cycles
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
538 puls cc,d,x,y,pc restore regs and return
2817
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
539
3032
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
540
3afecdae6f53 Low level CoCo SDC driver updtate from Darren Atkinson
tlindner
parents: 3017
diff changeset
541 *--------------------------------------------------------------------------
2817
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
542
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
543 EMOD
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
544 eom EQU *
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
545 END
5c6b71612ce4 Added low level CoCo SDC driver and made makefile changes for coco3 and coco3_6309 to build boot disks for this new driver.
Boisy Pitre <boisy.pitre@nuance.com>
parents:
diff changeset
546