annotate dvdread/nav_read.c @ 249:5d643668f1e3 src

I added this code myself a long time ago, but now I am quite convinced that it is wrong: Why would we filter out SPU stream change events that switch SPUs off? This breaks watching the trailer on the RC2 of "Girl, interrupted", because you always get unwanted subtitles. When I added this code, it fixed a problem with the RC2 of "Terminator", but I cannot reproduce this problem any more. Back then, the menu highlights would not show up, but they do now. I assume the problem really got fixed with proper support for forced subtitles in xine, so this crappy workaround here can go away. After all, this way it is more symmetric to audio stream change events, because these are not filtered.
author mroi
date Sun, 12 Sep 2004 15:12:43 +0000
parents e75c52894630
children a5319a5c34f4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
225
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
1 /*
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
2 * Copyright (C) 2000, 2001, 2002, 2003 Håkan Hjort <d95hjort@dtek.chalmers.se>
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
3 *
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
4 * This program is free software; you can redistribute it and/or modify
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
5 * it under the terms of the GNU General Public License as published by
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
7 * (at your option) any later version.
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
8 *
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
9 * This program is distributed in the hope that it will be useful,
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
12 * GNU General Public License for more details.
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
13 *
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
14 * You should have received a copy of the GNU General Public License
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
15 * along with this program; if not, write to the Free Software
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
17 */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
18
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
19 #include "config.h"
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
20
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
21 #include <stdio.h>
243
e75c52894630 * assert(0) does not always and the program (see NDEBUG)
mroi
parents: 240
diff changeset
22 #include <stdlib.h>
225
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
23 #include <string.h>
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
24 #include <inttypes.h>
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
25
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
26 #include "bswap.h"
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
27 #include "nav_types.h"
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
28 #include "nav_read.h"
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
29 #include "dvdread_internal.h"
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
30
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
31 typedef struct {
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
32 uint8_t *start;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
33 uint32_t byte_position;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
34 uint32_t bit_position;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
35 uint8_t byte;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
36 } getbits_state_t;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
37
243
e75c52894630 * assert(0) does not always and the program (see NDEBUG)
mroi
parents: 240
diff changeset
38 static int getbits_init(getbits_state_t *state, uint8_t *start) {
e75c52894630 * assert(0) does not always and the program (see NDEBUG)
mroi
parents: 240
diff changeset
39 if ((state == NULL) || (start == NULL)) return 0;
225
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
40 state->start = start;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
41 state->bit_position = 0;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
42 state->byte_position = 0;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
43 state->byte = start[0];
243
e75c52894630 * assert(0) does not always and the program (see NDEBUG)
mroi
parents: 240
diff changeset
44 return 1;
225
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
45 }
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
46
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
47 /* Non-optimized getbits. */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
48 /* This can easily be optimized for particular platforms. */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
49 static uint32_t getbits(getbits_state_t *state, uint32_t number_of_bits) {
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
50 uint32_t result=0;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
51 uint8_t byte=0;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
52 if (number_of_bits > 32) {
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
53 printf("Number of bits > 32 in getbits\n");
243
e75c52894630 * assert(0) does not always and the program (see NDEBUG)
mroi
parents: 240
diff changeset
54 abort();
225
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
55 }
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
56
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
57 if ((state->bit_position) > 0) { /* Last getbits left us in the middle of a byte. */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
58 if (number_of_bits > (8-state->bit_position)) { /* this getbits will span 2 or more bytes. */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
59 byte = state->byte;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
60 byte = byte >> (state->bit_position);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
61 result = byte;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
62 number_of_bits -= (8-state->bit_position);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
63 state->bit_position = 0;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
64 state->byte_position++;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
65 state->byte = state->start[state->byte_position];
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
66 } else {
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
67 byte=state->byte;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
68 state->byte = state->byte << number_of_bits;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
69 byte = byte >> (8 - number_of_bits);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
70 result = byte;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
71 state->bit_position += number_of_bits; /* Here it is impossible for bit_position > 8 */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
72 if (state->bit_position == 8) {
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
73 state->bit_position = 0;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
74 state->byte_position++;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
75 state->byte = state->start[state->byte_position];
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
76 }
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
77 number_of_bits = 0;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
78 }
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
79 }
240
585e0f683973 nesting and indentation do not match, but I think the braces do not actually
mroi
parents: 225
diff changeset
80 if ((state->bit_position) == 0) {
225
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
81 while (number_of_bits > 7) {
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
82 result = (result << 8) + state->byte;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
83 state->byte_position++;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
84 state->byte = state->start[state->byte_position];
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
85 number_of_bits -= 8;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
86 }
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
87 if (number_of_bits > 0) { /* number_of_bits < 8 */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
88 byte = state->byte;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
89 state->byte = state->byte << number_of_bits;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
90 state->bit_position += number_of_bits; /* Here it is impossible for bit_position > 7 */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
91 byte = byte >> (8 - number_of_bits);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
92 result = (result << number_of_bits) + byte;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
93 number_of_bits = 0;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
94 }
240
585e0f683973 nesting and indentation do not match, but I think the braces do not actually
mroi
parents: 225
diff changeset
95 }
225
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
96
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
97 return result;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
98 }
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
99
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
100 #if 0 /* TODO: optimized versions not yet used */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
101
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
102 /* WARNING: This function can only be used on a byte boundary.
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
103 No checks are made that we are in fact on a byte boundary.
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
104 */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
105 static uint16_t get16bits(getbits_state_t *state) {
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
106 uint16_t result;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
107 state->byte_position++;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
108 result = (state->byte << 8) + state->start[state->byte_position++];
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
109 state->byte = state->start[state->byte_position];
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
110 return result;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
111 }
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
112
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
113 /* WARNING: This function can only be used on a byte boundary.
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
114 No checks are made that we are in fact on a byte boundary.
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
115 */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
116 static uint32_t get32bits(getbits_state_t *state) {
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
117 uint32_t result;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
118 state->byte_position++;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
119 result = (state->byte << 8) + state->start[state->byte_position++];
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
120 result = (result << 8) + state->start[state->byte_position++];
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
121 result = (result << 8) + state->start[state->byte_position++];
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
122 state->byte = state->start[state->byte_position];
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
123 return result;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
124 }
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
125
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
126 #endif
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
127
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
128 void navRead_PCI(pci_t *pci, unsigned char *buffer) {
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
129 int32_t i, j;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
130 getbits_state_t state;
243
e75c52894630 * assert(0) does not always and the program (see NDEBUG)
mroi
parents: 240
diff changeset
131 if (!getbits_init(&state, buffer)) abort(); /* Passed NULL pointers */
225
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
132
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
133 /* pci pci_gi */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
134 pci->pci_gi.nv_pck_lbn = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
135 pci->pci_gi.vobu_cat = getbits(&state, 16 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
136 pci->pci_gi.zero1 = getbits(&state, 16 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
137 pci->pci_gi.vobu_uop_ctl.zero = getbits(&state, 7 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
138 pci->pci_gi.vobu_uop_ctl.video_pres_mode_change = getbits(&state, 1 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
139
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
140 pci->pci_gi.vobu_uop_ctl.karaoke_audio_pres_mode_change = getbits(&state, 1 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
141 pci->pci_gi.vobu_uop_ctl.angle_change = getbits(&state, 1 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
142 pci->pci_gi.vobu_uop_ctl.subpic_stream_change = getbits(&state, 1 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
143 pci->pci_gi.vobu_uop_ctl.audio_stream_change = getbits(&state, 1 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
144 pci->pci_gi.vobu_uop_ctl.pause_on = getbits(&state, 1 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
145 pci->pci_gi.vobu_uop_ctl.still_off = getbits(&state, 1 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
146 pci->pci_gi.vobu_uop_ctl.button_select_or_activate = getbits(&state, 1 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
147 pci->pci_gi.vobu_uop_ctl.resume = getbits(&state, 1 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
148
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
149 pci->pci_gi.vobu_uop_ctl.chapter_menu_call = getbits(&state, 1 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
150 pci->pci_gi.vobu_uop_ctl.angle_menu_call = getbits(&state, 1 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
151 pci->pci_gi.vobu_uop_ctl.audio_menu_call = getbits(&state, 1 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
152 pci->pci_gi.vobu_uop_ctl.subpic_menu_call = getbits(&state, 1 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
153 pci->pci_gi.vobu_uop_ctl.root_menu_call = getbits(&state, 1 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
154 pci->pci_gi.vobu_uop_ctl.title_menu_call = getbits(&state, 1 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
155 pci->pci_gi.vobu_uop_ctl.backward_scan = getbits(&state, 1 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
156 pci->pci_gi.vobu_uop_ctl.forward_scan = getbits(&state, 1 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
157
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
158 pci->pci_gi.vobu_uop_ctl.next_pg_search = getbits(&state, 1 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
159 pci->pci_gi.vobu_uop_ctl.prev_or_top_pg_search = getbits(&state, 1 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
160 pci->pci_gi.vobu_uop_ctl.time_or_chapter_search = getbits(&state, 1 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
161 pci->pci_gi.vobu_uop_ctl.go_up = getbits(&state, 1 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
162 pci->pci_gi.vobu_uop_ctl.stop = getbits(&state, 1 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
163 pci->pci_gi.vobu_uop_ctl.title_play = getbits(&state, 1 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
164 pci->pci_gi.vobu_uop_ctl.chapter_search_or_play = getbits(&state, 1 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
165 pci->pci_gi.vobu_uop_ctl.title_or_time_play = getbits(&state, 1 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
166 pci->pci_gi.vobu_s_ptm = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
167 pci->pci_gi.vobu_e_ptm = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
168 pci->pci_gi.vobu_se_e_ptm = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
169 pci->pci_gi.e_eltm.hour = getbits(&state, 8 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
170 pci->pci_gi.e_eltm.minute = getbits(&state, 8 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
171 pci->pci_gi.e_eltm.second = getbits(&state, 8 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
172 pci->pci_gi.e_eltm.frame_u = getbits(&state, 8 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
173 for(i = 0; i < 32; i++)
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
174 pci->pci_gi.vobu_isrc[i] = getbits(&state, 8 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
175
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
176 /* pci nsml_agli */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
177 for(i = 0; i < 9; i++)
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
178 pci->nsml_agli.nsml_agl_dsta[i] = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
179
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
180 /* pci hli hli_gi */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
181 pci->hli.hl_gi.hli_ss = getbits(&state, 16 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
182 pci->hli.hl_gi.hli_s_ptm = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
183 pci->hli.hl_gi.hli_e_ptm = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
184 pci->hli.hl_gi.btn_se_e_ptm = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
185 pci->hli.hl_gi.zero1 = getbits(&state, 2 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
186 pci->hli.hl_gi.btngr_ns = getbits(&state, 2 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
187 pci->hli.hl_gi.zero2 = getbits(&state, 1 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
188 pci->hli.hl_gi.btngr1_dsp_ty = getbits(&state, 3 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
189 pci->hli.hl_gi.zero3 = getbits(&state, 1 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
190 pci->hli.hl_gi.btngr2_dsp_ty = getbits(&state, 3 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
191 pci->hli.hl_gi.zero4 = getbits(&state, 1 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
192 pci->hli.hl_gi.btngr3_dsp_ty = getbits(&state, 3 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
193 pci->hli.hl_gi.btn_ofn = getbits(&state, 8 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
194 pci->hli.hl_gi.btn_ns = getbits(&state, 8 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
195 pci->hli.hl_gi.nsl_btn_ns = getbits(&state, 8 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
196 pci->hli.hl_gi.zero5 = getbits(&state, 8 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
197 pci->hli.hl_gi.fosl_btnn = getbits(&state, 8 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
198 pci->hli.hl_gi.foac_btnn = getbits(&state, 8 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
199
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
200 /* pci hli btn_colit */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
201 for(i = 0; i < 3; i++)
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
202 for(j = 0; j < 2; j++)
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
203 pci->hli.btn_colit.btn_coli[i][j] = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
204
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
205 /* NOTE: I've had to change the structure from the disk layout to get
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
206 * the packing to work with Sun's Forte C compiler. */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
207
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
208 /* pci hli btni */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
209 for(i = 0; i < 36; i++) {
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
210 pci->hli.btnit[i].btn_coln = getbits(&state, 2 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
211 pci->hli.btnit[i].x_start = getbits(&state, 10 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
212 pci->hli.btnit[i].zero1 = getbits(&state, 2 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
213 pci->hli.btnit[i].x_end = getbits(&state, 10 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
214
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
215 pci->hli.btnit[i].auto_action_mode = getbits(&state, 2 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
216 pci->hli.btnit[i].y_start = getbits(&state, 10 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
217 pci->hli.btnit[i].zero2 = getbits(&state, 2 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
218 pci->hli.btnit[i].y_end = getbits(&state, 10 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
219
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
220 pci->hli.btnit[i].zero3 = getbits(&state, 2 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
221 pci->hli.btnit[i].up = getbits(&state, 6 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
222 pci->hli.btnit[i].zero4 = getbits(&state, 2 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
223 pci->hli.btnit[i].down = getbits(&state, 6 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
224 pci->hli.btnit[i].zero5 = getbits(&state, 2 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
225 pci->hli.btnit[i].left = getbits(&state, 6 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
226 pci->hli.btnit[i].zero6 = getbits(&state, 2 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
227 pci->hli.btnit[i].right = getbits(&state, 6 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
228 /* pci vm_cmd */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
229 for(j = 0; j < 8; j++)
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
230 pci->hli.btnit[i].cmd.bytes[j] = getbits(&state, 8 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
231 }
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
232
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
233
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
234
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
235 #ifndef NDEBUG
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
236 /* Asserts */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
237
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
238 /* pci pci gi */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
239 CHECK_VALUE(pci->pci_gi.zero1 == 0);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
240
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
241 /* pci hli hli_gi */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
242 CHECK_VALUE(pci->hli.hl_gi.zero1 == 0);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
243 CHECK_VALUE(pci->hli.hl_gi.zero2 == 0);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
244 CHECK_VALUE(pci->hli.hl_gi.zero3 == 0);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
245 CHECK_VALUE(pci->hli.hl_gi.zero4 == 0);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
246 CHECK_VALUE(pci->hli.hl_gi.zero5 == 0);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
247
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
248 /* Are there buttons defined here? */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
249 if((pci->hli.hl_gi.hli_ss & 0x03) != 0) {
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
250 CHECK_VALUE(pci->hli.hl_gi.btn_ns != 0);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
251 CHECK_VALUE(pci->hli.hl_gi.btngr_ns != 0);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
252 } else {
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
253 CHECK_VALUE((pci->hli.hl_gi.btn_ns != 0 && pci->hli.hl_gi.btngr_ns != 0)
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
254 || (pci->hli.hl_gi.btn_ns == 0 && pci->hli.hl_gi.btngr_ns == 0));
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
255 }
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
256
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
257 /* pci hli btnit */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
258 for(i = 0; i < pci->hli.hl_gi.btngr_ns; i++) {
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
259 for(j = 0; j < (36 / pci->hli.hl_gi.btngr_ns); j++) {
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
260 int n = (36 / pci->hli.hl_gi.btngr_ns) * i + j;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
261 CHECK_VALUE(pci->hli.btnit[n].zero1 == 0);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
262 CHECK_VALUE(pci->hli.btnit[n].zero2 == 0);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
263 CHECK_VALUE(pci->hli.btnit[n].zero3 == 0);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
264 CHECK_VALUE(pci->hli.btnit[n].zero4 == 0);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
265 CHECK_VALUE(pci->hli.btnit[n].zero5 == 0);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
266 CHECK_VALUE(pci->hli.btnit[n].zero6 == 0);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
267
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
268 if (j < pci->hli.hl_gi.btn_ns) {
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
269 CHECK_VALUE(pci->hli.btnit[n].x_start <= pci->hli.btnit[n].x_end);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
270 CHECK_VALUE(pci->hli.btnit[n].y_start <= pci->hli.btnit[n].y_end);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
271 CHECK_VALUE(pci->hli.btnit[n].up <= pci->hli.hl_gi.btn_ns);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
272 CHECK_VALUE(pci->hli.btnit[n].down <= pci->hli.hl_gi.btn_ns);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
273 CHECK_VALUE(pci->hli.btnit[n].left <= pci->hli.hl_gi.btn_ns);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
274 CHECK_VALUE(pci->hli.btnit[n].right <= pci->hli.hl_gi.btn_ns);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
275 /* vmcmd_verify(pci->hli.btnit[n].cmd); */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
276 } else {
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
277 int k;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
278 CHECK_VALUE(pci->hli.btnit[n].btn_coln == 0);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
279 CHECK_VALUE(pci->hli.btnit[n].auto_action_mode == 0);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
280 CHECK_VALUE(pci->hli.btnit[n].x_start == 0);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
281 CHECK_VALUE(pci->hli.btnit[n].y_start == 0);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
282 CHECK_VALUE(pci->hli.btnit[n].x_end == 0);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
283 CHECK_VALUE(pci->hli.btnit[n].y_end == 0);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
284 CHECK_VALUE(pci->hli.btnit[n].up == 0);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
285 CHECK_VALUE(pci->hli.btnit[n].down == 0);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
286 CHECK_VALUE(pci->hli.btnit[n].left == 0);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
287 CHECK_VALUE(pci->hli.btnit[n].right == 0);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
288 for (k = 0; k < 8; k++)
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
289 CHECK_VALUE(pci->hli.btnit[n].cmd.bytes[k] == 0); /* CHECK_ZERO? */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
290 }
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
291 }
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
292 }
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
293 #endif /* !NDEBUG */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
294 }
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
295
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
296 void navRead_DSI(dsi_t *dsi, unsigned char *buffer) {
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
297 int i;
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
298 getbits_state_t state;
243
e75c52894630 * assert(0) does not always and the program (see NDEBUG)
mroi
parents: 240
diff changeset
299 if (!getbits_init(&state, buffer)) abort(); /* Passed NULL pointers */
225
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
300
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
301 /* dsi dsi gi */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
302 dsi->dsi_gi.nv_pck_scr = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
303 dsi->dsi_gi.nv_pck_lbn = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
304 dsi->dsi_gi.vobu_ea = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
305 dsi->dsi_gi.vobu_1stref_ea = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
306 dsi->dsi_gi.vobu_2ndref_ea = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
307 dsi->dsi_gi.vobu_3rdref_ea = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
308 dsi->dsi_gi.vobu_vob_idn = getbits(&state, 16 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
309 dsi->dsi_gi.zero1 = getbits(&state, 8 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
310 dsi->dsi_gi.vobu_c_idn = getbits(&state, 8 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
311 dsi->dsi_gi.c_eltm.hour = getbits(&state, 8 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
312 dsi->dsi_gi.c_eltm.minute = getbits(&state, 8 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
313 dsi->dsi_gi.c_eltm.second = getbits(&state, 8 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
314 dsi->dsi_gi.c_eltm.frame_u = getbits(&state, 8 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
315
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
316 /* dsi sml pbi */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
317 dsi->sml_pbi.category = getbits(&state, 16 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
318 dsi->sml_pbi.ilvu_ea = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
319 dsi->sml_pbi.ilvu_sa = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
320 dsi->sml_pbi.size = getbits(&state, 16 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
321 dsi->sml_pbi.vob_v_s_s_ptm = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
322 dsi->sml_pbi.vob_v_e_e_ptm = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
323 for(i = 0; i < 8; i++) {
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
324 dsi->sml_pbi.vob_a[i].stp_ptm1 = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
325 dsi->sml_pbi.vob_a[i].stp_ptm2 = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
326 dsi->sml_pbi.vob_a[i].gap_len1 = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
327 dsi->sml_pbi.vob_a[i].gap_len2 = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
328 }
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
329
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
330 /* dsi sml agli */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
331 for(i = 0; i < 9; i++) {
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
332 dsi->sml_agli.data[ i ].address = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
333 dsi->sml_agli.data[ i ].size = getbits(&state, 16 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
334 }
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
335
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
336 /* dsi vobu sri */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
337 dsi->vobu_sri.next_video = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
338 for(i = 0; i < 19; i++)
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
339 dsi->vobu_sri.fwda[i] = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
340 dsi->vobu_sri.next_vobu = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
341 dsi->vobu_sri.prev_vobu = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
342 for(i = 0; i < 19; i++)
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
343 dsi->vobu_sri.bwda[i] = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
344 dsi->vobu_sri.prev_video = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
345
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
346 /* dsi synci */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
347 for(i = 0; i < 8; i++)
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
348 dsi->synci.a_synca[i] = getbits(&state, 16 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
349 for(i = 0; i < 32; i++)
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
350 dsi->synci.sp_synca[i] = getbits(&state, 32 );
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
351
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
352
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
353 /* Asserts */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
354
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
355 /* dsi dsi gi */
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
356 CHECK_VALUE(dsi->dsi_gi.zero1 == 0);
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
357 }
9b1b740e3fc9 big build system changes
mroi
parents:
diff changeset
358