ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/Frodo4/Src/SID_linux.h
(Generate patch)

Comparing Frodo4/Src/SID_linux.h (file contents):
Revision 1.1 by cebix, 2003-07-01T17:36:32Z vs.
Revision 1.3 by cebix, 2004-01-10T18:11:07Z

# Line 1 | Line 1
1   /*
2   *  SID_linux.h - 6581 emulation, Linux specific stuff
3   *
4 < *  Frodo (C) 1994-1997,2002 Christian Bauer
4 > *  Frodo (C) 1994-1997,2002-2003 Christian Bauer
5   *
6   *  This program is free software; you can redistribute it and/or modify
7   *  it under the terms of the GNU General Public License as published by
# Line 23 | Line 23
23   #include <sys/ioctl.h>
24   #include <linux/soundcard.h>
25  
26 + // Catweasel ioctls (included here for convenience)
27 + #include <linux/ioctl.h>
28 + #define CWSID_IOCTL_TYPE ('S')
29 + #define CWSID_IOCTL_RESET        _IO(CWSID_IOCTL_TYPE, 0)
30 + #define CWSID_IOCTL_CARDTYPE     _IOR(CWSID_IOCTL_TYPE, 4, int)
31 + #define CWSID_IOCTL_PAL          _IO(CWSID_IOCTL_TYPE, 0x11)
32 + #define CWSID_IOCTL_NTSC         _IO(CWSID_IOCTL_TYPE, 0x12)
33 + #define CWSID_IOCTL_DOUBLEBUFFER _IOW(CWSID_IOCTL_TYPE, 0x21, int)
34 + #define CWSID_IOCTL_DELAY        _IOW(CWSID_IOCTL_TYPE, 0x22, int)
35 + #define CWSID_MAGIC 0x100
36 + #define HAVE_CWSID 1
37 +
38   #include "VIC.h"
39  
40  
# Line 136 | Line 148 | void DigitalRenderer::EmulateLine(void)
148          buffer_pos = 0;
149      }    
150   }
151 +
152 +
153 + /*
154 + *  Renderer for Catweasel card
155 + */
156 +
157 + // Rendere class
158 + class CatweaselRenderer : public SIDRenderer {
159 + public:
160 +        CatweaselRenderer();
161 +        virtual ~CatweaselRenderer();
162 +
163 +        virtual void Reset(void);
164 +        virtual void EmulateLine(void) {}
165 +        virtual void WriteRegister(uint16 adr, uint8 byte);
166 +        virtual void NewPrefs(Prefs *prefs) {}
167 +        virtual void Pause(void) {}
168 +        virtual void Resume(void) {}
169 +
170 + private:
171 +        int cwsid_fh; // Catweasel device file handle
172 + };
173 +
174 + // Constructor: Open Catweasel device and reset SID
175 + CatweaselRenderer::CatweaselRenderer()
176 + {
177 +        cwsid_fh = open("/dev/sid", O_WRONLY);
178 +        if (cwsid_fh >= 0) {
179 +                int i;
180 +                if (ioctl(cwsid_fh, CWSID_IOCTL_CARDTYPE, &i) < 0 || i != CWSID_MAGIC) {
181 +                        close(cwsid_fh);
182 +                        cwsid_fh = -1;
183 +                } else {
184 +                        ioctl(cwsid_fh, CWSID_IOCTL_RESET);
185 +                        ioctl(cwsid_fh, CWSID_IOCTL_DOUBLEBUFFER, 0);
186 +                }
187 +        }
188 +
189 +        Reset();
190 + }
191 +
192 + // Destructor: Reset SID and close Catweasel device
193 + CatweaselRenderer::~CatweaselRenderer()
194 + {
195 +        Reset();
196 +
197 +        if (cwsid_fh >= 0) {
198 +                close(cwsid_fh);
199 +                cwsid_fh = -1;
200 +        }
201 + }
202 +
203 + // Reset SID
204 + void CatweaselRenderer::Reset(void)
205 + {
206 +        if (cwsid_fh >= 0) {
207 +                uint8 zero = 0;
208 +                ioctl(cwsid_fh, CWSID_IOCTL_RESET);
209 +                lseek(cwsid_fh, 24, SEEK_SET);
210 +                write(cwsid_fh, &zero, 1);
211 +        }
212 + }
213 +
214 + // Write to register
215 + void CatweaselRenderer::WriteRegister(uint16 adr, uint8 byte)
216 + {
217 +        if (cwsid_fh >= 0 && adr < 0x1a) {
218 +                lseek(cwsid_fh, adr, SEEK_SET);
219 +                write(cwsid_fh, &byte, 1);
220 +                lseek(cwsid_fh, adr, SEEK_SET);
221 +                write(cwsid_fh, &byte, 1);
222 +        }
223 + }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines