1
0
Fork 0
Commit graph

976 commits

Author SHA1 Message Date
Joshua Fern
f2029d71d8 Update copyright dates to 2020 2020-03-07 00:18:01 +01:00
krcroft
16dbd1cec6 Whitespace cleanup 2020-03-06 19:21:44 +01:00
krcroft
08c6fc10c1 Add a signed integer ceiling divide function 2020-03-06 19:21:44 +01:00
krcroft
96a9723df5 Drop "[bug]" postfix in assets 2020-03-06 19:21:44 +01:00
krcroft
1e65bb2cdc Curtail an excessively noisy DEBUG output case
Some games repeatedly query for the first track's position during
playback, perhaps as a dual-purpose "CDROM health/heart-beat"
check.

This excessive console output in DEBUG mode tends to add far more
noise than signal, and prevents the maintainer from seeing the
overall flow of the CDROM calls.
2020-03-06 19:21:44 +01:00
krcroft
818e923296 Let the code describe the functionality when reading sectors
Moves to using a member vector to provide a persistent buffer,
instead of repeatedly allocating and deleting memory on every
invocation (during DAE, this can be called hundreds of times
per second, with requsts of up 24 sectors or ~56KB of memory
per call).

The buffer is only resized upward, which avoids 'zig-zag'
re-allocations when switching between raw (2352-byte) and cooked
(2048-byte) sectors.

Only writes as much data was was successfully read into
the DOS program's buffer, avoiding (potential) garbage-fill.
2020-03-06 19:21:44 +01:00
krcroft
c76cc09d97 Add support for mono tracks when performing DAE (digital-audio-extraction)
This commit:
- Adds more sanity checks and comments
- Lets the seek() function to take care of monitoring the track's
  post-seek decode position, instead of managing it in read(..).
- Adds in-place conversion from mono-to-stereo
- Adds micro-second-level DEBUG timing around the mono converter
- Makes use of the more intuitive ceil_divide() support function
  to avoid excessive casting and floating-point conversion.
2020-03-06 19:21:44 +01:00
krcroft
cff1ded8e9 Improve seeking for audio tracks
This commit:
- Comments why we convert from byte-to-time offset.
- Checks for underlying stream validity before seeking.
- Tracks the new as-seeked decode position.
- Skips seeking if it's unecessary.
- Adds DEBUG messaging and a warning if the seek took
  longer than that of an average physical CDROM.
2020-03-06 19:21:44 +01:00
krcroft
e8e9e0ef4f Replace code with existing support function 2020-03-06 19:21:44 +01:00
krcroft
c7eebacde9 Allow the code to describe the return value 2020-03-06 19:21:44 +01:00
krcroft
9bebfdabd3 Make more logic assertions and cleanup multi-line comments 2020-03-06 19:21:44 +01:00
krcroft
1393c1316c Refine types and eliminate implicit-casting and magic-numbers
The commit refines several types to their logical use-cases.
For example, a CDROM will at-most contain 400,000 sectors and be
less than 1B bytes in size. Likewise, both are 'physical'
quantities and this should always be zero-or-greater
(therefore, uint32_t is used).

Fortunately, there are almost no cases where these values are
overloaded to mean something else (ie: negative return codes to
indicate failure).

Besides eliminating many implicit cast warnings, differing-signed
comparison warnings, and overflowable type-cast warnings, the
more correct use of types helps logically bound expectations of the
values they contain, which should improve maintainability.
2020-03-06 19:21:44 +01:00
krcroft
459f7d32f9 Define more CD-DA magic numbers 2020-03-06 19:21:44 +01:00
krcroft
a6251d7e9f Fix iterator-past-end-of-container Coverity warning 2020-03-04 16:03:40 +01:00
krcroft
eef8c51419 Address code-review comments (squash-me) 2020-03-04 05:11:40 +01:00
krcroft
908ddafb5f Reserve the trackFile shared_ptr prior to its test 2020-03-04 05:11:40 +01:00
krcroft
5bbf876f0c Expand trackFile's shared_ptr life 2020-03-04 05:11:40 +01:00
krcroft
1d123367a5 Use MixerObject's singleton-pattern to manage the channel 2020-03-04 05:11:40 +01:00
krcroft
91cd907c4e Migrate some members of the Player class to smart pointers
1. Moves the mutex and mixer channel members to unique pointers
2. Moves the trackFile to a weak pointer
3. Move member initialization to the class definition

This class still retains a raw *cd member, however fixing this
ripples up to the array of [26] CD images, and across more
code that generically deals with mount points; so this work
remains to do.
2020-03-04 05:11:40 +01:00
Patryk Obara
d47450c6d7 Fix memory leak in dos_execute 2020-03-01 21:23:04 +01:00
Patryk Obara
9fc21dc294 Allow GNU extensions for GCC to avoid MinGW bugs
Most MinGW versions work correctly with and without _POSIX_C_SOURCE
or XOPEN macros [1] and don't need any special handling, but some
installations refuse to work correctly.

To be more precise: *some* MinGW installations turn off POSIX support
after turning on -std=c++11 WITHOUT -ansi -Wpedantic, -pedantic-errors
and similar.  This behaviour is inconsistent between various Windows
versions and MinGW distributions and manifests itself only when using
GCC (Clang behaves correctly).

[1] https://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html
2020-03-01 21:13:19 +01:00
krcroft
6c0e1a4607 Switch write protected set to unordered_set 2020-02-24 12:08:01 +01:00
krcroft
b302b535c3 Add DEBUG messages for protected-file handling 2020-02-24 12:08:01 +01:00
krcroft
9603c961c0 Fix spacing and effc++ warnings
Apply code review recommendations
2020-02-24 12:07:53 +01:00
krcroft
c730e5d70a
Permit the use of protected game data files
Many DOS games open all their files in write-mode regardless if the
game actually intends to write to them or not.

This can result the files' metadata being updated (lossing the
original date-stamp) as well as putting the file at-risk of
corruption if the game crashes with the file open for writing.

Under the existing DOSBox implementation, if a user attempts to
write-protect their data files then DOSBox will quit with an error in
the above scenario.

This commit allows the use of write-protected files (similar to
running a game from CDROM) and indicates which files are being
actively protected against modification.

Typically the only files that need to be left writable are those that
the game actually changes, such as: save-game files, highscore
files, in-game settings, and so on.  If these are also protected,
then the game will quit/crash immediately after the protected message
is printed, and thus indicate which file require write-allowance.
2020-02-23 21:45:20 -08:00
krcroft
6804faf931 Fix a pointer invalidation corner-case in CD-DA 2020-02-23 13:08:08 +01:00
Patryk Obara
c619445003 Avoid buffer underflow by copying all fields
This code made silent assumption that first fields in direntry are
exactly 14 bytes - this was fine, except would break as soon as anyone
would touch the struct (or e.g. if a compiler would lack support for
packed structures and inject some padding in there); rewrite the copy
code to follow the same pattern as other fields - now the code will be
fine even if someone will change fields in the direntry struct.

Fixes 2 PVS static analysis issues (buffer underflow on src and dst).
2020-02-23 01:13:11 +01:00
Patryk Obara
6011c016c5 Replace var_read with host_to_le where possible
Effect is the same, except packed values are not referenced via pointer
so there's no address-of-packed-member warning, and no need for
unaligned memory access.
2020-02-22 22:47:40 +01:00
Patryk Obara
bdf67cdbcc Merge branch 'svn/trunk' r4330 2020-02-22 21:10:57 +01:00
Peter Veenstra
57bf045cc8 some big endian improvents and drive_fat fixes. (jmarsh)
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4330
2020-02-22 12:06:40 +00:00
krcroft
c132263116 Add partial DAE support for compressed Redbook-compliant tracks 2020-02-18 18:54:41 +01:00
krcroft
fdf103a111
Fix sector 0 playback bug
This bug prevented reporting of correct playback position on
pure-audio CDs with zero PREGAP.
2020-02-17 12:19:21 -08:00
Patryk Obara
5bd3a4ac8d Merge branch 'svn/trunk' r4328 2020-02-15 21:27:20 +01:00
Peter Veenstra
27610a2e66 Small cleanup and move to ++i instead of i++ for iterators in this file
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4328
2020-02-15 17:22:00 +00:00
Patryk Obara
80d71e7442 Merge branch 'svn/trunk' r4320 2020-02-12 09:00:33 +01:00
ripsaw8080
c91f46905b Report Q-Channel track number in BCD, meaning it is not converted to binary by the CD-ROM device driver. Fixes the CD-Player feature of DOS Navigator 1.51 when playing past track 15.
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4320
2020-02-11 22:02:03 +00:00
krcroft
36e3789e91
Remove unecessary check and zeroing of arguments
This function uses its boolean return code to indicate success
or failure, which all callers check prior to using any of the
referenced arguments.  Therefore it's unecessary to zero-out
referenced arguments or use intermediate variables.
2020-02-07 00:23:36 -08:00
krcroft
8382eb0e7e
Reduce the track number's type to comply with MSCDEX 2020-02-07 00:23:36 -08:00
krcroft
e1fec4beb7
Refactor slightly to clarify the flow and move to one return-point
This also squashes a PVS high issue mentioning that 'subUnit'
is checked after it was used.
2020-02-07 00:23:35 -08:00
krcroft
0272145955
Make the MSCDEX Audio Disk Info return compliant track-ranges
The specification says that legal track values range from 1 to 99,
where as the prior code would return 0 if any issue was encountered.
The spec has no allowance for issues in this function, and therefore
we're bound to simply return 1 instead.
2020-02-07 00:23:34 -08:00
krcroft
1cc88953de
Simplify Pause and Stop CD states 2020-02-07 00:23:34 -08:00
krcroft
7cac8e4c4f
Mimick CD players when first positioning the play head
For example, audio CD players will typically position themselves in
preparation to play the first audio track when "Play" is pushed.
This even occurs for mixed-mode CDs, where the player will start
playing at the first audio track. Therefore, we try to find the most
viable audio track and only fall back to defaults if needed.
(instead of "all zeros" like before).
2020-02-07 00:23:34 -08:00
krcroft
7f39fe86b4
Use "=" assignment when creating references and iterators 2020-02-07 00:23:31 -08:00
krcroft
eb1a9285fd
Simplify some combersome math statements
With types refined, we can switch to cleaner integer
math and avoid casting (to float and back to ints), and also
avoid ceil((float) a / b) by using the pure-integer form
of (a + b - 1) / b
2020-02-07 00:22:46 -08:00
krcroft
0dd9eca6d6
Reformat a couple statements and improve some log messages 2020-02-07 00:22:46 -08:00
krcroft
55f6e4307f
Simplify ISO size calculation
This is simplified by no longer retaining the read position,
which is unecessary because all read operations are offset
from an initial absolute position (so this was unecessary code).
2020-02-07 00:22:45 -08:00
krcroft
4aa3311021
Refine types and sizes to more accurately reflect the values they hold
This allows for fewer casts, simpler math, and more readable code
in subsequent commits.
2020-02-07 00:22:40 -08:00
Patryk Obara
81954dfe28 Use safe_strcat 2020-02-06 09:24:05 +01:00
Patryk Obara
2983de4db4 Use unsigned for numbers in shortened filenames
Bitu (aka uintptr_t) is not necessary for handling shortened files,
as we can represent max 10^7 shortened files anyway; unsigned is good
enough.

This allows use to use simple %u for conversion instead of PRIuPTR,
which caused a bug on AmigaOS on PPC.

Fixes: #162
2020-02-06 09:24:05 +01:00
Patryk Obara
4a6704367b Reorder includes for drive_cache
Class DOS_Drive_Cache is declared in dos_system.h, but this header was
indirectly included.  Remove faulty windows.h include (the correct one
exists in cross.h already).
2020-02-06 09:24:05 +01:00