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.5 by cebix, 2004-12-04T13:24:35Z vs.
Revision 1.7 by cebix, 2010-04-22T09:09:28Z

# Line 1 | Line 1
1   /*
2   *  SID_linux.h - 6581 emulation, Linux specific stuff
3   *
4 < *  Frodo (C) 1994-1997,2002-2004 Christian Bauer
4 > *  Frodo Copyright (C) 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
26  
27   /*
28   *  Initialization
# Line 142 | Line 128 | void DigitalRenderer::EmulateLine(void)
128                  buffer_pos = 0;
129          }
130   }
145
146
147 /*
148 *  Renderer for Catweasel card
149 */
150
151 // Renderer class
152 class CatweaselRenderer : public SIDRenderer {
153 public:
154        CatweaselRenderer();
155        virtual ~CatweaselRenderer();
156
157        virtual void Reset(void);
158        virtual void EmulateLine(void) {}
159        virtual void WriteRegister(uint16 adr, uint8 byte);
160        virtual void NewPrefs(Prefs *prefs) {}
161        virtual void Pause(void) {}
162        virtual void Resume(void) {}
163
164 private:
165        int cwsid_fh; // Catweasel device file handle
166 };
167
168 // Constructor: Open Catweasel device and reset SID
169 CatweaselRenderer::CatweaselRenderer()
170 {
171        cwsid_fh = open("/dev/sid", O_WRONLY);
172        if (cwsid_fh >= 0) {
173                int i;
174                if (ioctl(cwsid_fh, CWSID_IOCTL_CARDTYPE, &i) < 0 || i != CWSID_MAGIC) {
175                        close(cwsid_fh);
176                        cwsid_fh = -1;
177                } else {
178                        ioctl(cwsid_fh, CWSID_IOCTL_RESET);
179                        ioctl(cwsid_fh, CWSID_IOCTL_DOUBLEBUFFER, 0);
180                }
181        }
182
183        Reset();
184 }
185
186 // Destructor: Reset SID and close Catweasel device
187 CatweaselRenderer::~CatweaselRenderer()
188 {
189        Reset();
190
191        if (cwsid_fh >= 0) {
192                close(cwsid_fh);
193                cwsid_fh = -1;
194        }
195 }
196
197 // Reset SID
198 void CatweaselRenderer::Reset(void)
199 {
200        if (cwsid_fh >= 0) {
201                uint8 zero = 0;
202                ioctl(cwsid_fh, CWSID_IOCTL_RESET);
203                lseek(cwsid_fh, 24, SEEK_SET);
204                write(cwsid_fh, &zero, 1);
205        }
206 }
207
208 // Write to register
209 void CatweaselRenderer::WriteRegister(uint16 adr, uint8 byte)
210 {
211        if (cwsid_fh >= 0 && adr < 0x1a) {
212                lseek(cwsid_fh, adr, SEEK_SET);
213                write(cwsid_fh, &byte, 1);
214                lseek(cwsid_fh, adr, SEEK_SET);
215                write(cwsid_fh, &byte, 1);
216        }
217 }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines