summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/imagedev/floppy.cpp
Commit message (Collapse)AuthorAgeFilesLines
* casio/fz1.cpp: Add floppy to FZ-1 and clones (#13849) Devin Acker2025-06-211-0/+37
| | | * fz1: drive select is not connected
* New sound infrastructure. Olivier Galibert2025-04-271-4/+3
| | | | | | | | | | | | | | | | | Should be added soon: - mute - speaker/microphone resampling To be added a little later: - compression - reverb Needs to be added by someone else: - coreaudio - direct - portaudio - xaudio2 - js
* imagedev/floppy.cpp: Return INVALIDIMAGE from floppy_image_device::identify ↵ AJR2025-03-031-1/+4
| | | | if no format scores
* floppy: Start the ready dance on insertion even if motor is always on Olivier Galibert2025-01-111-0/+2
|
* 86f_dsk: add read 86f image support cracyc2024-10-151-0/+2
|
* sun/sun4.cpp: Less convoluted way of changing default SCSI devices. Vas Crabb2024-09-221-4/+2
|
* srcclean in preparation for 0.270 release branch. Vas Crabb2024-09-221-2/+2
|
* Floppy fixes and refinements AJR2024-09-121-0/+28
| | | | | | | | - imagedev/floppy.cpp: Add 3-inch double-sided quad-density format - oric_microdsk: Add DSQD drives to configuration and enable one by default - amstrad/pcw.cpp: Upgrade all configurations using double-sided drives to quad density - bbc_ams3: Make drives single-density since 8271 controller doesn't support MFM - oric_dsk: Don't blindly trust the number of tracks and sides to be valid
* imagedev/floppy.cpp: Add single-density 3" drive types AJR2024-09-081-2/+54
| | | | * bml3mp1805: Use correct SSSD drive type
* floppy.cpp: Use standard drives for hard-sectored systems (#12727) Mark Garlanger2024-09-081-127/+179
| | | | | * floppy.cpp: Use standard drives for hard-sectored systems * fix typo
* Floppy hard-sector support. Mix of Eric Anderson's and Mark Eric Anderson2024-09-011-199/+57
| | | | | | | Gallager's patches. Removal of the flux screen experiment. Removal of the unused get_pos().
* floppy: Remove HFE image format from the general list for rewrite. Michael Zapf2024-08-171-1/+0
|
* Cleaned up various stuff. Vas Crabb2024-06-301-12/+10
| | | | | | | | | | * sony_news.xml: Added proper compatibility flags for different generations. * cpu/pic16x8x: This is very much a derivative work. * cpu/tms32025.cpp: Allow stack push/pop to be inlined. * tecmo/bombjack.cpp: Avoid needing to remove and replace devices in machine configuration. * Various other cleanup.
* imagedev/floppy.cpp: fix out-of-bounds access to the seek sample (#12452) Roman Donchenko2024-06-081-0/+3
| | | | | | | | | | | | | | Currently, when `floppy_sound_device::step` selects a new seek sample, the value of `m_seek_samplepos` remains the same as it was the last time a seek sample was played. This might be an invalid position for the new sample, since the seek samples have different lengths. When this is the case, the next call to `floppy_sound_device::sound_stream_update` makes an out-of-bounds memory access as it reads the sample data. Fix this by resetting `m_seek_samplepos` to 0 when a new seek sample is selected. This also makes the seek sounds more consistent, since previously they would start from a semi-random position each time.
* imagedev/floppy: fix a bug with reading the first 1-bit on a track (#12439) Roman Donchenko2024-06-041-27/+12
| | | | | | | | | | | | | | | | | | | | | | | `floppy_image_device::find_index` uses binary search to find the index for which `buf[spos] <= position < buf[spos + 1]`. However, the algorithm behaves incorrectly when `position < buf[0]`. In this case, the algorithm returns 0, as if `position` was between `buf[0]` and `buf[1]`. The effect of this is that if `get_next_transition` is called with a timestamp that is between the start of the revolution and the first transition, then instead of returning the timestamp of that transition, it returns the timestamp of the second transition instead. Essentially, the first 1-bit on the track gets flipped to a 0. I have encountered this in Apple II emulation, where this bug manifests as sporadic I/O errors. Fix it by doing two things: 1. Replace `find_index` with a call to `upper_bound` from the standard library, which behaves correctly in edge cases. 2. If `upper_bound` signals that `position < buf[0]`, then adjust `base` and `index` to point to the last transition of the previous revolution.
* imagedev/floppy.cpp: Delete unused getter that leaked details AJR2024-02-111-5/+0
| | | | * util/options.h: Use forwarding header
* floppy.cpp: Update class variables to current naming convention. (#11851) Mark Garlanger2024-01-201-550/+550
|
* imagedev/floppy.cpp: Remvoed hard-sectored floppy support. Vas Crabb2023-11-021-42/+6
| | | | | | | | | This caused numerous regressions, including floppy formats not working and application hangs when using some formats. This reverts commit b2c399c61d65063ae95e8387d34b098e9516b1a9. This reverts commit cf510adc9d34b4ad9a065f3d5bfbcf17115ea06f.
* Floppy format API refinements AJR2023-10-081-3/+3
| | | | | - Add noexcept to format information overrides and several simple floppy_image accessors. - Be more const-correct and use references instead of raw pointers wherever applicable. In particular, floppy_image_device::load and floppy_image_device::save now take a reference to floppy_image rather than a pointer, const-qualified in the latter case.
* imagedev/floppy.cpp: Workaround for index timing regression AJR2023-10-021-2/+2
|
* Remove flopimg.h and fsmgr.h from floppy device header AJR2023-09-241-0/+16
|
* imagedev/floppy.cpp: Add hard-sector floppy support Eric Anderson2023-09-051-6/+42
|
* floppy.cpp: add Teac FD55-A and FD55-B drive types (#11342) Mark Garlanger2023-06-161-2/+62
|
* Restored ability of for image devices to report specific error messages. Vas Crabb2023-04-081-13/+9
| | | | | | | | | | | | | | Restores ability to give specific/detailed messages removed in 6f7e4141ea14acaaf9cb973c66788fabb3457023 while pandering to obsession with single return value. Moved responsibility for displaying the error message in the UI to the caller rather than device_image_interface, and made device_image_interface always log the error along with the full path and error condition content. Gave several image devices more detailed error messages. Added some FIXME comments for apparent bugs.
* API change for device_image_interface AJR2023-03-301-21/+15
| | | | | | | | | - Remove the seterror method for recording error messages and conditions. Condition codes have been made return values for call_load, call_create and various related callbacks. Error messages (which many devices weren't generating) are now displayed through osd_printf_error. - Eliminate the image_init_result and image_verify_result pass/fail enumeration types. Update many functions that were returning these enumerations or simply bools to return std::error_condition instead. In some cases, this type is now passed down from internal parsing/loading functions which were already returning it. In various other cases, the former default UNSPECIFIED has been used as a catchall for I/O errors; anticipated future refactorings should make these error returns more specific. - Expand the image_error categories to include INVALIDLENGTH, NOSOFTWARE and BADSOFTWARE. The first is largely self-explanatory. The second is generated by the core to indicate failure to find software items in lists. The third is provided for devices to indicate semantic errors in software list entries. - Change the return type of floppy_image_device::identify to a pair so the potential error condition can be passed along to the UI without storing it in a member variable. - Move device_image_interface::message down into snapshot_image_device and change its implementation to use string_format instead of printf. - Correct a typo in the shortname of the generic snapshot device.
* imagedev/floppy.cpp: Fix build AJR2023-02-261-1/+1
|
* Various cleanups: Vas Crabb2023-02-271-5/+0
| | | | | | | * cpu/dsp56156: Removed vestigial (and excessively slow) "new" execution code. * apple/bandit.cpp: Got rid of unnecessary friend declaration. * nintendo/n64_v.cpp: More const. * Fixed a few "const qualifier has no effect" warnings.
* floppy sound: fix spin sample oob access hap2022-12-061-3/+6
|
* Changed fs::manager_t::enumerate_f() to simplify logic within file system ↵ npwoods2022-09-191-2/+8
| | | | | | | | | | | | | | | | | | | | | drivers (#10106) * Changed fs::manager_t::enumerate_f() to simplify logic within file system drivers enumerate_f() used to contain quite a bit of boilerplate logic to determine whether a particular floppy type should be added. This change attempts to move this logic outside the file system drivers to simplify the drivers. The riskiest part of this change is unformatted_image::enumerate_f(). I attempted to replicate the logic that was previously determining with unformatted image types to use, but the logic is tricky and it isn't clear to me that replicating the logic is the correct action - I may be cargo culting. * Fix to floppy_image_device::fs_enum::add_raw() * Updating FS_FAT to reflect this PR * On the advise of Sarayan, I moved the filtering to the fs::manager_t::fs_enum base class. This is actually a less intrusive change than what I originally had because it keeps the unformatted raw image handling closer to what we had previously. Some misgivings about these changes: 1. We now have fs::manager_t::fs_enum::add() being a thin call that invokes a protected method called fs::manager_t::fs_enum::add_format(). Better ideas for names are welcome. 2. It feels odd that we've removed the need to do filtering from the various FS modules, but the unformatted module has to ask the fs_enum() for its internal variables for filtering to perform the same logic. This seems to be the least worst option Feedback is welcome
* - Removed device_timer, device_timer_id, et al in favor of direct callback ↵ MooglyGuy2022-06-041-9/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | members. (#9788) Primarily, this removes device_t::device_timer, device_t::timer_set, device_t::synchronize, device_t::timer_expired, and device_timer_id. Use of device_timer often resulted in unnecessary trampolining in addition to switch/case overhead on a driver/device level, and additional logic to manage delegated vs. ID-based timers on a core level. In the worst cases, devices were performing a switch/case with only one valid case. device_scheduler::timer_set is marked deprecated as the only remaining direct uses are via the Lua engine and a few drivers that need refactoring anyway. The remaining uses occur via device_scheduler::synchronize. As a middle ground between the extremely short timer_alloc() and the extremely long machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(widget_device::contoso_tick), this)), a helper function in device_t has been added which can be invoked with the following syntax: timer_alloc(FUNC(widget_device::contoso_tick), this) - Additional changes/cleanups performed along the way: - Converted to use logmacro: * src/devices/bus/ieee488/hp9895.cpp * src/devices/bus/ieee488/remote488.cpp * src/devices/bus/isa/hdc.cpp * src/devices/bus/isa/omti8621.cpp * src/devices/bus/isa/sc499.cpp * src/devices/bus/vip/vp550.cpp * src/devices/cpu/i86/i186.cpp * src/devices/cpu/lc8670/lc8670.cpp * src/devices/machine/68230pit.cpp * src/devices/machine/corvushd.cpp * src/devices/machine/ds1994.cpp * src/devices/machine/ticket.cpp * src/mame/audio/pinsnd88.cpp * src/mame/drivers/notetaker.cpp * src/mame/machine/asic65.cpp * src/mame/machine/rmnimbus.cpp * src/mame/machine/victor9k_fdc.cpp * src/mame/video/uv201.cpp - Made usage of m_member prefix consistent: * src/devices/bus/isa/hdc.cpp * src/devices/bus/isa/omti8621.cpp * src/devices/bus/vme/vme_fccpu20.cpp * src/devices/machine/ds1386.cpp * src/devices/machine/i7220.cpp - Spacing consistency pass: * src/devices/bus/isa/hdc.cpp * src/devices/bus/isa/omti8621.cpp * src/devices/bus/thomson/nanoresau.cpp * src/devices/bus/ti99/internal/992board.cpp * src/devices/bus/ti99/internal/genkbd.cpp * src/devices/bus/ti99/internal/joyport/handset.cpp * src/devices/bus/vme/vme_fccpu20.cpp * src/devices/cpu/i86/i186.cpp * src/devices/cpu/lc8670/lc8670.cpp * src/devices/machine/68230pit.cpp * src/devices/machine/cop452.cpp * src/devices/machine/corvushd.cpp * src/devices/machine/hp_dc100_tape.cpp * src/devices/machine/hp_taco.cpp * src/devices/machine/meters.cpp * src/devices/machine/microtch.cpp * src/devices/machine/phi.cpp * src/devices/video/ef9365.cpp * src/devices/video/v9938.cpp * src/mame/drivers/alphaskop41xx.cpp * src/mame/drivers/myb3k.cpp * src/mame/drivers/notetaker.cpp * src/mame/drivers/wpc_an.cpp * src/mame/machine/midikbd.cpp * src/mame/machine/rmnimbus.cpp * src/mame/machine/wpc_lamp.cpp * src/mame/machine/wpc_out.cpp - Removed string-based ioport lookups: * src/devices/bus/ti99/internal/joyport/handset.cpp * src/devices/bus/ti99/internal/joyport/mecmouse.cpp * src/devices/bus/vme/vme_hcpu30.cpp * src/mame/machine/k7659kb.cpp * src/mame/machine/ti85.cpp - Adjustments to grammar/wording in comments * src/devices/bus/sms_ctrl/lphaser.cpp * src/devices/bus/sms_ctrl/sports.cpp * src/devices/bus/snes/event.cpp * src/devices/bus/snes/sa1.cpp * src/devices/bus/thomson/nanoresau.cpp * src/devices/bus/z88/z88.cpp * src/devices/machine/ds1386.cpp * src/devices/machine/vic_pl192.cpp - Favored BIT() macro for single-bit checks * src/devices/bus/ti99/internal/992board.cpp * src/devices/bus/ti99/joyport/handset.cpp * src/mame/drivers/notetaker.cpp * src/mame/machine/wpc_lamp.cpp * src/mame/machine/wpc_out.cpp - Removed C89-style variable declarations when noticed * src/devices/bus/isa/hdc.cpp * src/devices/bus/sms_ctrl/lphaser.cpp * src/devices/bus/ti99/joyport/mecmouse.cpp * src/devices/machine/acorn_vidc.cpp * src/devices/sound/ymz280b.cpp * src/devices/video/vic4567.cpp - Removed FUNCNAME to avoid compiler-specific #define checks in devices * src/devices/bus/vme/vme_fccpu20.cpp * src/devices/bus/vme/vme_hcpu30.cpp * src/devices/machine/68230pit.cpp * src/devices/machine/mc14411.cpp * src/mame/drivers/myb3k.cpp - Removed unecessary member prefixes/suffixes * src/devices/video/ef9340_1.cpp * src/mame/drivers/fuukifg2.cpp * src/mame/drivers/fuukifg3.cpp * src/mame/drivers/intv.cpp * src/mame/drivers/simpsons.cpp * src/mame/drivers/socrates.cpp * src/mame/drivers/special_gambl.cpp * src/mame/drivers/sprint4.cpp * src/mame/drivers/ti990_10.cpp * src/mame/drivers/tubep.cpp * src/mame/drivers/vectrex.cpp * src/mame/drivers/wpc_an.cpp * src/mame/drivers/wpc_dot.cpp * src/mame/drivers/wpc_flip1.cpp * src/mame/drivers/wpc_flip2.cpp * src/mame/machine/z80ne.cpp * src/mame/video/rollerg.cpp - Switched to lower-case hex constants * src/devices/video/ef9365.cpp * src/mame/machine/rmnimbus.cpp - Re-ordered driver overrides and function members * src/mame/drivers/boxer.cpp * src/mame/drivers/eurocom2.cpp * src/mame/drivers/exidy.cpp * src/mame/drivers/gpworld.cpp * src/mame/drivers/h19.cpp * src/mame/drivers/ibmpcjr.cpp * src/mame/drivers/mekd5.cpp * src/mame/drivers/mgolf.cpp * src/mame/drivers/myb3k.cpp * src/mame/drivers/nightmare.cpp * src/mame/drivers/notetaker.cpp * src/mame/drivers/ptcsol.cpp * src/mame/drivers/pwrview.cpp * src/mame/drivers/rabbit.cpp * src/mame/drivers/sitcom.cpp * src/mame/drivers/socrates.cpp * src/mame/drivers/sprint4.cpp * src/mame/drivers/techno.cpp * src/mame/drivers/thayers.cpp * src/mame/drivers/ti990_10.cpp * src/mame/drivers/ti990_4.cpp * src/mame/drivers/tv912.cpp * src/mame/drivers/tv990.cpp * src/mame/drivers/uchroma68.cpp * src/mame/drivers/vk100.cpp * src/mame/drivers/votrhv.cpp * src/mame/drivers/wicat.cpp * src/mame/drivers/wpc_an.cpp * src/mame/includes/abc80.h * src/mame/includes/asterix.h * src/mame/includes/fuukifg2.h * src/mame/includes/fuukifg3.h * src/mame/includes/gunbustr.h * src/mame/includes/intv.h * src/mame/includes/namcona1.h * src/mame/includes/newbrain.h * src/mame/includes/poly.h * src/mame/includes/prof80.h * src/mame/includes/rollerg.h * src/mame/includes/s11.h * src/mame/includes/segahang.h * src/mame/includes/simpsons.h * src/mame/includes/spacefb.h * src/mame/includes/tandy2k.h * src/mame/includes/trucocl.h * src/mame/includes/tubebp.h * src/mame/includes/vidbrain.h * src/mame/includes/wolfpack.h * src/mame/includes/wpc_dot.h - Made capitalization consistent on class members * src/devices/machine/meters.cpp * src/mame/drivers/namcona1.cpp * src/mame/drivers/notetaker.cpp -src/devices/bus/isa/hdc.cpp: * Removed fixed-size std::vector in favor of std::unique_ptr -src/devices/bus/isa/s3virge.cpp: * Moved unusually large (for a header) functions into .cpp from header -src/devices/bus/vip/vp550.cpp * Switched to required_device_array to simplify code paths -src/devices/machine/arm_iomd.cpp * Added initializers to constructor * Favored std::size over fixed static sizes -src/devices/machine/ds1386.cpp * Moved register #defines into header enums -src/devices/machine/mc68901.cpp * Removed unnecessary parameters and emu_timer::enable calls -src/devices/machine/mccs1850.cpp * Removed inline overuse -src/devices/machine/meters.cpp * Removed unused members -src/devices/machine/mos6526.cpp * Removed inline overuse -src/devices/machine/nsc810.cpp * Converted to arrays rather than individually-numbered members -src/devices/machine/pxa255.cpp * Simplified DMA transfer code -src/devices/machine/saa1043.cpp * Removed extraneous members in favor of resolve_all_safe -src/devices/machine/vic_pl192.cpp * Shifted constructors, start-up, and maps to be at the top of the source file -src/devices/machine/z8536.cpp * Removed stray uses of device_timer_id -src/devices/sound/cdp1869.cpp * Removed inline overuse -src/devices/sound/mos7360.cpp * Converted to arrays rather than individually-numbered members -src/emu/device.cpp * Removed ID-based timer_alloc * Removed timer_set * Removed synchronize * Removed timer_expired * Added shorthand timer_alloc to avoid lengthy machine().scheduler().timer_alloc() calls -src/emu/schedule.cpp * Removed now-unused m_id and m_device members -src/mame/audio/alesis.cpp * Added initializers to constructor -src/mame/drivers/alto2.cpp * Removed custom-named driver init in favor of driver_init override * Removed octal constant in favor of more standard hex -src/mame/drivers/astinvad.cpp * Fixed 'kamizake' typo -src/mame/drivers/tm990189.cpp * Removed unnecessary machine reset override -src/mame/drivers/unichamp.cpp * Removed custom-named driver init in favor of driver_init override -src/mame/drivers/votrhv.cpp * Fixed ROM_LOAD macros and region() usage in memory maps -src/mame/machine/victor9k_fdc.cpp * Made bracing style consistent across the file -src/mame/video/gime.cpp * Removed unnecessary void specifiers in function prototypes
* Revert "tests" hap2022-04-261-23/+0
| | | | This reverts commit 922eb1b23c0e3bd36cf4974e13e61aa12fc32764.
* Revert "debug" hap2022-04-261-2/+1
| | | | This reverts commit 3a65661f2f7d0e3ebbfa2a707f8c5a5fadffcb77.
* debug Olivier Galibert2022-04-261-1/+2
|
* tests Olivier Galibert2022-04-261-0/+23
|
* Changed floppy_image_device::identify() to take std::string_view instead of ↵ npwoods2022-04-241-1/+1
| | | | std::string (#9616)
* srcclean in preparation for 0.243 Vas Crabb2022-04-241-1/+1
|
* Consolidated floppy_image_device::m_create_fs and ↵ npwoods2022-04-111-5/+2
| | | | | | | | | floppy_image_device::m_io_fs vectors (#9542) * Consolidated floppy_image_device::m_create_fs and floppy_image_device::m_io_fs vectors We had two separate members in floppy_image_device (m_create_fs and m_io_fs) that contained the same data. Whether the file systems can be formatted or read can be identified by querying fs::manager_t. For this reason, it seems bad to have these separate members, the seemingly only reason to make the UI code slightly less complicated. For this reason I consolidated these two members and moved the burden of selecting which ones are creatable to the UI code.
* Changed floppy_image_device::init_fs() to set the dirty bit on the floppy ↵ npwoods2022-04-031-0/+3
| | | | | image (#9507) This is not an actual user facing bug right now, because in the MAME UI the call to init_fs() is followed up by a call to setup_write(), which forces the image to commit without regard to the dirty bit. There is an argument that this is itself code smell; setup_write() perhaps should be set_output_format() and not arbitrarily perform a commit.
* floppy: revisit the identify returns Olivier Galibert2022-03-301-0/+2
|
* floppy: Change the internal format to flux changes, update the mfi format ↵ Olivier Galibert2022-03-301-146/+120
| | | | accordingly (keep read compatibility with the old mfi)
* floppy: remove the intermediate allocator Olivier Galibert2022-03-301-25/+17
|
* Remove void *ptr parameter from emu_timer, timer_device and all related ↵ AJR2022-01-261-1/+1
| | | | callbacks
* device_image_interface: Interface overhaul AJR2022-01-061-1/+6
| | | | | | | | | | | | | - Remove the iodevice_t classification, which was not used that much and was incomplete anyway. Image device implementations must now provide their own instance names and brief instance names. Several new parent classes have been created to make it easier to use the old standard names. - Change must_be_loaded from a pure virtual function to be overridden in implementations to a getter for a base class property that can be set on the host side (as was formerly made possible for NES, MD and "generic" cartridge slots) but defaults to false for all types. This restrictive property has been unset for a small number of cases. - Create parent classes for paper tape and magnetic tape devices. At present these are dummy classes that do little to nothing, but may help unify implementations in the future. - Change several member functions to take std::string_view parameters rather than const std::string & or const char *. - Make update_names take into account brief names, as discussed in PR #2555. - Remove the obsolete uses_file_extension function (which used thread-unsafe strtok). * portfolio_ccm_slot: Change image type from "cartridge" to "memcard" * i7220, datapack: Add custom instance names that weren't there before * pc11: Add note
* Move filesystem library into separate namespace and use shorter uX type ↵ AJR2021-12-311-6/+6
| | | | names there
* util: Further API cleanups: (#8661) Vas Crabb2021-10-051-3/+4
| | | | | * Turned `core_file` into an implementation of `random_read_write`. * Turned PNG errors into a standard error category. * Added a helper for generating what look like derived classes on-the-fly.
* formats, osd, util: Started refactoring file I/O stuff. (#8456) Vas Crabb2021-08-221-102/+42
| | | | | | | | | Added more modern generic I/O interfaces with implementation backed by stdio, osd_file and core_file, replacing io_generic. Also replaced core_file's build-in zlib compression with a filter. unzip.cpp, un7z.cpp: Added option to supply abstract I/O interface rather than filename. Converted osd_file, core_file, archive_file, chd_file and device_image_interface to use std::error_condition rather than their own error enums. Allow mounting TI-99 RPK from inside archives.
* enmirage: fixed and updated to load and play via MIDI, panel controls hooked ↵ tim lindner2021-06-031-1/+37
| | | | up [Tim Lindner]
* floppy: Change the formats from an intrusive list to a vector Olivier Galibert2021-05-271-17/+8
|
* flux viewer switched on by mistake Olivier Galibert2021-05-261-1/+1
|
* vtech: Add floppy formats and fs Olivier Galibert2021-05-261-1/+1
|