relnotes20B
13.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
Nov 20 release RELEASE NOTES
============================
SUMMARY:
--------
This release of Ultra 64 (version 2.0B for RCP 2.0 and version 1.0F for
RCP 1.0) contains various bug fixes and enhancements. Please note
that some applications (such as bumpmap, print, and spbench) can only
run on RCP 2.0.
NEW FEATURES:
-------------
1) IMPORTANT: Flexible support for boot address
---------
The memory map has changed. The final machine will have 4 MB
of 9-bit RDRAM memory. The color and z framebuffers can reside
anywhere in memory. The default boot address is 0x80000400 and can be
changed by adding the statement "address 0x80XXXXXX" to the BOOT
segment in the spec file. See the spec files in simple and onetri for
more info.
2) 3D Turbo graphics ucode
This new microcode version is feature-limited, precision-
reduced, but faster. It is intended for "characters"
that remain in the center of the viewing area.
There is documentation about the turbo graphics in the
man pages, the "Performance Tuning" guide, and elsewhere
in the developer documentation.
Here are the new, turbo-related man pages:
gspTurbo3D.3p
gDPClearOtherMode.3p
gDPEndDisplayList.3p
gtStateSetOthermode.3p
guMtxCatF.3p
guMtxCatL.3p
guMtxF2L.3p
guMtxIdent.3p
guMtxL2F.3p
guMtxXFMF.3p
guMtxXFML.3p
plus changes to all other guMtx* man pages
3) gspFast3D_fifo microcode. (Performance improvement)
This new microcode is very similar to gspFast3D and gspFast3D_dram
microcode. It uses the DRAM to buffer data flowing from the RSP to
the RDP (like the gspFast3D_dram microcode), but it allows the DP to
read the data as it is being generated (like the gspFast3D microcode).
The data buffer (which the developer must supply in DRAM) is used as
a circular buffer for RSP output (RDP input). The microcode sets up
all neccessary DMA's so that you do not need to call osDpSetNextBuffer
(which is neccessary with the gspFast3D_dram code). You can use it
exactly the way you use gspFast3D code except that you must supply the
pointer and length of the buffer in the task header. Make
task->output_buff point to the beginning of the buffer and make
task->output_buff_size be the size of the buffer in bytes.
IMPORTANT NOTE: In gspFast3D_dram the output_buff_size is a POINTER
to a u64 where the microcode will store the length of the buffer. In
gspFast3D_fifo the output_buff_size is a u32 which has been cast to
to a (u64 *), and represents the length og the buffer, NOT a pointer.
The length of the buffer must be at least 0x100 bytes long. However
the advantage of the gspFast3D_fifo microcode is that you can use a
larger buffer than the gspFast3D microcode uses and therefore gain
performance through better parallelism. The gspFast3D buffer is 1024
bytes long, so the buffer you use with gspFast3D_fifo should be
significantly larger (several times larger or more reccommended).
See the man page for osSpTaskLoad.
NEW DEMO APPLICATIONS:
----------------------
1) autofill - performance benchmark, see README_DEMOS file.
2) ci8fb - performance benchmark, see README_DEMOS file.
3) gtdemo - turbo ucode demo, see README_DEMOS file.
4) hostio - U64-Indy interface demo, see README_DEMOS file.
5) spbench - sprite benchmark, see README_DEMOS file.
6) turbomonkey - turbo performance tool, see README_DEMOS file.
BUG FIXES:
----------
1) Due to bug fixes for floating point exception handling, the
thread structure has been changed. You need to "make clobber" your
application before using this new release.
2) There are bug fixes in the boot code to correct the power-up hang
problem and the DMA size from ROM.
3) The thread initialization bug is fixed. There is no need to
initialize the next and queue fields of a thread structure before
calling osCreateThread.
4) There are bug fixes in the VI manager to set the display to black
upon the calling of osCreateViManager. To resolve the problem of
having uninitialized frame buffer displayed on the TV screen,
osViBlack (i.e. osViBlack(TRUE)) can be called immediately after
osViSetMode to set the display to black. And, when frame buffer is
ready for display, osViBlack can be called again (i.e. osViBlack(FALSE))
to turn off the black mode so that VI manager can display the real
frame buffer. Please see the man page on osViBlack for more info.
5) Applications using audio must make several small but important
changes to operate successfully. These changes, implemented with
releases from 10/16/95 forward are listed below in the audio section.
6) There was a bug with the gsSPFogPosition and gsSPFogFactor macros.
They used to take 3 parameters (n, min, max) (n was ignored). They
now take only 2 parameters (min, max). Note that gSPFogPosition and
gSPFogFactor are unchanged; it is only gsSPFogPosition and
gsSPFogFactor which had the extra unneccessary parameter.
7) A bug in the scheduler that caused the RDP to hang (not complete)
in rare situations has been fixed.
FEATURES ENHANCED:
------------------
1) The application blockmonkey has been enhanced to allow the VI mode
(Lpn1) to dynamically change the width (or x-resolution); this feature
can be used to assess the best video resolution for a game with a
given performance requirement. Global transformations, flat shading,
lighting and mip-mapped textures have also been added. Some performance
improvements have been added.
2) A new gbi macro: gSPLightColor has been added for changing light
colors. The advantage of this macro over using gSPLight or
gSPSetLights is speed and memory savings. This command allows you to
specify an immediate color in the display list so no separate light
structure is needed to store various different colors for different
objects. It is also fast because the lights do not need to be
recalculated in the RSP the way they are when you change the direction
with gSPLight or gSPSetLights.
FEATURES NO LONGER SUPPORT:
---------------------------
1) There is no longer any support for osAsyncPrintf. Please use
osSyncPrintf to write to the debug port.
THINGS TO WATCH OUT FOR:
------------------------
1) ROM images sent to Nintendo don't work
Symptom: ROM images sent to Nintendo don't work on the real hardware
while images run on the development board do.
Fix: Compile with the non-debug library (libultra.a), remove all
printfs and argument parsing code from your game.
2) RDP hangs
Symptom: The scheduler hangs waiting for an RDP interrupt which never
occurs. Audio still runs.
Workaround: If you are running audio, the first thing to try is to set
the flags field for *audio* tasks as follows
t->list.t.flags = OS_TASK_DP_WAIT; /* do not set this to 0 */
Note: The RDP will also hang if the display list is corrupted, if the
RDP message queue is too small (and the RDP message is dropped), or if
code overwrites the exception table.
3) Clicks in the audio
Symptom: Audio occasionally clicks or crashes.
Fix: Make sure that the sound bank data is cache aligned. The easiest
way to do this is to allocate from the audio heap with alHeapAlloc().
4) Initialization of Bss in each segment
Symptom: Variables in Bss segments contain garbage.
Fix: Make sure that Bss of each segment is initialized to zero. See the
app overlay to see how this can be accomplished by using bzero().
The system only initializes the Bss of the boot segment.
CAVEATS---------------------------------------------------------------------
Graphics
---------------------------------------------------------------------
Audio
Fixed bug in alSynRemovePlayer that would cause players to not be
successfully removed.
Fixed bug in osScRemoveClient that would cause corruption of the client
list.
A bug in the synthesizer that would occasionally hang the system
for about 30 seconds when both the Sound Player and Sequence Player
were in use has been fixed.
Changes effective 11/12/95
AL_MAX_PRIORITY has been changed from 16 to 127.
midiDmon has a couple of bug fixes, and now uses the sample rate given
in the bank.inst file, instead of a default of 44100.
A sound player bug which caused sounds which were stopped and restarted
to play incorrectly has been fixed.
A bug in the synthesizer which caused noise when playing sounds at very
low pitch values has been fixed. There is still a potential problem with
pitch values below 0.01 which we are investigating.
Changes needed after 10/16/95:
Both the compact sequence player and the regular sequence player now
implement a method of vibrato and tremelo, using callbacks to routines
provided by the application. This new system of handling tremelo and
vibrato is demonstrated in the playseq example. If the application
chooses not to use this feature it must set the callback pointers to
zero in the ALSeqpConfig structure, before calling alSeqpNew or
alCSPNew.
The following code demonstrates how you would init the config struct to
not use vibrato or tremelo:
seqc.maxVoices = MAX_VOICES;
seqc.maxEvents = EVT_COUNT;
seqc.maxChannels = 16;
seqc.heap = &hp;
seqc.initOsc = 0;
seqc.updateOsc = 0;
seqc.stopOsc = 0;
Failure to set initOsc, updateOsc and stopOsc to zero when not
implementing vibrato and tremelo will cause the CPU to jump to garbage
addresses. (If you implement the vibrato and tremelo then set these
pointers to your routines. See playseq.c for an example.)
The above change, adds eight bytes to every instrument structure in
a bank .ctl file. For this reason, you must be sure you are using the
new version of ic, and that you remake any banks you have. If you are
using your own tools to build banks, you should be aware of the changes
in the ALInstrument structure, (listed in libaudio.h) and adjust your
tools accordingly.
AL_MAX_PRIORITY has been changed to 127 to allow for a greater range
of priorities. If you have hardwired priority values you should adjust
them to reflect the new max.
The following routines have been implemented.
ALMicroTime alSeqpGetTime(ALSeqPlayer *seqp);
void alSeqpSetTime(ALSeqPlayer *seqp, ALMicroTime time);
u8 alSeqpGetChannelPriority(ALSeqPlayer *seqp, u8 chan);
void alSeqpSetChannelPriority(ALSeqPlayer *seqp, u8 chan,
u8 priority);
ALMicroTime alCSPGetTime(ALCSPlayer *seqp);
void alCSPSetTime(ALCSPlayer *seqp, ALMicroTime time);
u8 alCSPGetChannelPriority(ALCSPlayer *seqp, u8 chan);
void alCSPSetChannelPriority(ALCSPlayer *seqp, u8 chan,
u8 priority);
void alCSeqNewMarker(ALCSeq *seq, ALCSeqMarker *m, u32 ticks);
void alCSeqSetLoc(ALCSeq *seq, ALCSeqMarker *marker);
void alCSeqGetLoc(ALCSeq *seq, ALCSeqMarker *marker);
Changes prior to 10/16/95:
A new application called midiDmon allows you to download your audio
banks and playback on the Ultra64 with midi from keyboard or sequencer.
To use this application, the ultra inst image depends on installation
of the dmedia_eoe (version 5.5) image. The 5.5 dmedia_eoe is included
on the inst tape sent to you.
---------------------------------------------------------------------
audio performance has dramatically improved on this release. We have
rearranged code to minimize the ICache misses. The cost for audio
is 1% per channel at 30Hz update for 22KHz output.
---------------------------------------------------------------------
Operating System
---------------------------------------------------------------------
Demos
To build applications for RCP 1.0, make sure that the environment
variable HW_FLAGS is set to "-D_HW_VERSION_1".
---------------------------------------------------------------------
Tools
---------------------------------------------------------------------
Debugger
gvd sometimes can't find the source because it gets confused on the
path to the source. A definite occurance is when you login the graphics
console as root. If you login as guest and su - root, everything seems
to work.
---------------------------------------------------------------------
There has been a bug fix for the multi-thread window in gvd.
After user has switched to a specific thread, he can then invoke
the multi-thread window to obtain a complete list of all active threads
running on the target machine. There is still a bug in showing the
actual state of the threads in this window; that is, a stopped thread
can still be listed as running on the window. Therefore, user should
use the threadstatus utility to obtain accurate state information of
a specific thread.
---------------------------------------------------------------------
Currently, the debugger cannot support background mode debugging.
That is, if a breakpoint is encountered, all user threads are stopped.
gvd does not support private breakpoints per thread; all breakpoints
are shared globally. Furthermore, the Continue button on the main gvd
window only resumes execution of the thread being debugged. To resume
or stop execution of all threads, user should use the Continue or Stop
button in the multi-thread window.
---------------------------------------------------------------------