ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/cwcbm/common.h
Revision: 1.1
Committed: 2004-01-07T15:37:45Z (20 years, 3 months ago) by cebix
Content type: text/plain
Branch: MAIN
Branch point for: cebix
Log Message:
Initial revision

File Contents

# Content
1 /*
2 * common.h - Common parts of readcbm and writecbm
3 *
4 * Written in 2003 by Christian Bauer <Christian.Bauer@uni-mainz.de>
5 */
6
7 #ifndef COMMON_H
8 #define COMMON_H
9
10 /* Number of tracks (tracks are numbered 1..NUM_TRACKS) */
11 #define NUM_TRACKS 35
12
13 /* Maximum number of sectors per track */
14 #define MAX_SECTORS 21
15
16 /* Bytes per sector */
17 #define SECTOR_SIZE 256
18
19 /* 1541 crystal frequency (16 MHz) */
20 #define CRYSTAL_FREQ 16000000
21
22 /* 1541 RPM */
23 #define NOMINAL_RPM 300
24
25 /* Catweasel frequency (7 MHz) */
26 #define CW_FREQ 7080500.0
27
28 /* Bit rate for each speed zone */
29 const int bps[4] = {
30 CRYSTAL_FREQ / 16 / 4, CRYSTAL_FREQ / 15 / 4,
31 CRYSTAL_FREQ / 14 / 4, CRYSTAL_FREQ / 13 / 4
32 };
33
34 /* Standard speeds for tracks */
35 const int std_speed[NUM_TRACKS + 1] = {
36 0,
37 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
38 2, 2, 2, 2, 2, 2, 2,
39 1, 1, 1, 1, 1, 1,
40 0, 0, 0, 0, 0
41 };
42
43 /* Number of sectors per track, for all tracks */
44 const int num_sectors[NUM_TRACKS + 1] = {
45 0,
46 21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,
47 19,19,19,19,19,19,19,
48 18,18,18,18,18,18,
49 17,17,17,17,17
50 };
51
52 /* Actual RPM of the drive, and double step flag */
53 static int drive_rpm = 300;
54 static int double_step = 0;
55
56 /* Clock table (nominal number of Catweasel clocks per inter-flux-change gap) */
57 static int clock_table[4] = {0, 0, 0, 0};
58
59 /* Threshold table */
60 static int thresh_table[3] = {0, 0, 0};
61
62 /* Track buffer */
63 static unsigned char track_buf[MAX_SECTORS * SECTOR_SIZE];
64
65 /* Catweasel controller struct */
66 catweasel_contr c;
67
68
69 /* Delay specified number of milliseconds */
70 static void msdelay(int ms)
71 {
72 usleep(ms * 1000);
73 }
74
75
76 /* Set speed zone and tables */
77 static void set_zone(int track)
78 {
79 int zone = std_speed[track];
80 clock_table[0] = 0;
81 clock_table[1] = CW_FREQ * NOMINAL_RPM * 1 / (bps[zone] * drive_rpm);
82 clock_table[2] = CW_FREQ * NOMINAL_RPM * 2 / (bps[zone] * drive_rpm);
83 clock_table[3] = CW_FREQ * NOMINAL_RPM * 3 / (bps[zone] * drive_rpm);
84 thresh_table[0] = (clock_table[0] + clock_table[1]) / 2;
85 thresh_table[1] = (clock_table[1] + clock_table[2]) / 2;
86 thresh_table[2] = (clock_table[2] + clock_table[3]) / 2;
87 }
88
89 #endif