]> Shamusworld >> Repos - virtualjaguar/blob - src/cdrom.cpp
Adding 1.0.1/2 uncompressed tarballs to tags for historical purposes.
[virtualjaguar] / src / cdrom.cpp
1 #include "include/cdrom.h"\r
2 \r
3 //#define CDROM_LOG\r
4 \r
5 static uint8  cdrom_ram[0x100];\r
6 static uint16  cdrom_cmd=0;\r
7 \r
8 //////////////////////////////////////////////////////////////////////////////\r
9 //\r
10 //////////////////////////////////////////////////////////////////////////////\r
11 //\r
12 //\r
13 //\r
14 //\r
15 //\r
16 //\r
17 //////////////////////////////////////////////////////////////////////////////\r
18 void cdrom_init(void)\r
19 {\r
20 }\r
21 //////////////////////////////////////////////////////////////////////////////\r
22 //\r
23 //////////////////////////////////////////////////////////////////////////////\r
24 //\r
25 //\r
26 //\r
27 //\r
28 //\r
29 //\r
30 //////////////////////////////////////////////////////////////////////////////\r
31 void cdrom_reset(void)\r
32 {\r
33         memset(cdrom_ram,0x00,0x100);\r
34         cdrom_cmd=0;\r
35 \r
36 }\r
37 //////////////////////////////////////////////////////////////////////////////\r
38 //\r
39 //////////////////////////////////////////////////////////////////////////////\r
40 //\r
41 //\r
42 //\r
43 //\r
44 //\r
45 //\r
46 //////////////////////////////////////////////////////////////////////////////\r
47 void cdrom_done(void)\r
48 {\r
49 }\r
50 //////////////////////////////////////////////////////////////////////////////\r
51 //\r
52 //////////////////////////////////////////////////////////////////////////////\r
53 //\r
54 //\r
55 //\r
56 //\r
57 //\r
58 //\r
59 //////////////////////////////////////////////////////////////////////////////\r
60 void cdrom_byte_write(uint32 offset, uint8 data)\r
61 {\r
62         offset&=0xff;\r
63         cdrom_ram[offset]=data;\r
64 \r
65 #ifdef CDROM_LOG\r
66         fprintf(log_get(),"cdrom: writing byte 0x%.2x at 0x%.8x\n",data,offset);\r
67 #endif\r
68 }\r
69 //////////////////////////////////////////////////////////////////////////////\r
70 //\r
71 //////////////////////////////////////////////////////////////////////////////\r
72 //\r
73 //\r
74 //\r
75 //\r
76 //\r
77 //\r
78 //////////////////////////////////////////////////////////////////////////////\r
79 void cdrom_word_write(uint32 offset, uint16 data)\r
80 {\r
81         offset&=0xff;\r
82         cdrom_ram[offset+0]=(data>>8)&0xff;\r
83         cdrom_ram[offset+1]=data&0xff;\r
84                 \r
85         // command register\r
86 /*\r
87         if (offset==0x0A)\r
88         {\r
89                 cdrom_cmd=data;\r
90                 if ((data&0xff00)==0x1500)\r
91                 {\r
92                         fprintf(log_get(),"cdrom: setting mode 0x%.2x\n",data&0xff);\r
93                         return;\r
94                 }\r
95                 if (data==0x7001)\r
96                 {\r
97                         uint32 offset=cdrom_ram[0x00];\r
98                         offset<<=8;\r
99                         offset|=cdrom_ram[0x01];\r
100                         offset<<=8;\r
101                         offset|=cdrom_ram[0x02];\r
102                         offset<<=8;\r
103                         offset|=cdrom_ram[0x03];\r
104 \r
105                         uint32 size=cdrom_ram[0x04];\r
106                         offset<<=8;\r
107                         offset|=cdrom_ram[0x05];\r
108                         \r
109                         fprintf(log_get(),"cdrom: READ(0x%.8x, 0x%.4x) [68k pc=0x%.8x]\n",offset,size,s68000readPC());\r
110                         return;\r
111                 }\r
112                 else\r
113                         fprintf(log_get(),"cdrom: unknown command 0x%.4x\n",data);\r
114         }\r
115 */\r
116 #ifdef CDROM_LOG\r
117         fprintf(log_get(),"cdrom: writing word 0x%.4x at 0x%.8x\n",data,offset);\r
118 #endif\r
119 }\r
120 //////////////////////////////////////////////////////////////////////////////\r
121 //\r
122 //////////////////////////////////////////////////////////////////////////////\r
123 //\r
124 //\r
125 //\r
126 //\r
127 //\r
128 //\r
129 //////////////////////////////////////////////////////////////////////////////\r
130 uint8 cdrom_byte_read(uint32 offset)\r
131 {\r
132         offset&=0xff;\r
133 #ifdef CDROM_LOG\r
134         fprintf(log_get(),"cdrom: reading byte from 0x%.8x\n",offset);\r
135 #endif\r
136         return(cdrom_ram[offset]);\r
137 }\r
138 //////////////////////////////////////////////////////////////////////////////\r
139 //\r
140 //////////////////////////////////////////////////////////////////////////////\r
141 //\r
142 //\r
143 //\r
144 //\r
145 //\r
146 //\r
147 //////////////////////////////////////////////////////////////////////////////\r
148 uint16 cdrom_word_read(uint32 offset)\r
149 {\r
150         offset&=0xff;\r
151 \r
152         uint16 data=0x0000;\r
153         \r
154         if (offset==0x00) \r
155                 data=0x0000;\r
156         else\r
157         if (offset==0x02) \r
158                 data=0x2000;\r
159         else\r
160         if (offset==0x0a) \r
161         {\r
162                 if (cdrom_cmd==0x7001)\r
163                         data=cdrom_cmd;\r
164                 else\r
165                         data=0x0400;\r
166         }\r
167         else\r
168         {\r
169                 data=cdrom_ram[offset+0];\r
170                 data<<=8;\r
171                 data|=cdrom_ram[offset+1];\r
172         }\r
173 #ifdef CDROM_LOG\r
174         fprintf(log_get(),"cdrom: reading word 0x%.4x from 0x%.8x [68k pc=0x%.8x]\n",data,offset,s68000readPC());\r
175 #endif\r
176         return(data);\r
177 }\r