Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

formats/imd_dsk: implement get_sectors_per_track() #11672

Merged
merged 1 commit into from Oct 29, 2023

Conversation

lkundrak
Copy link
Contributor

Otherwise imgtool gets unhappy with IMD images:

Starting program: ./imgtool identify ./altos586/SDX-586.IMD
...
Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ?? ()
(gdb) bt
#0 0x0000000000000000 in ?? ()
#1 0x000000000025d426 in bml3_diskimage_open (image=..., dummy=...)
at .../src/tools/imgtool/modules/bml3.cpp:520
#2 0x000000000024807d in imgtool_floppy_open_internal (stream=..., image=...)
at .../src/tools/imgtool/iflopimg.cpp:83
#3 imgtool_floppy_open (image=..., stream=...)
at .../src/tools/imgtool/iflopimg.cpp:101
#4 0x000000000024bbdf in imgtool::image::internal_open
(module=module@entry=0x302320, filename="./altos586/SDX-586.IMD",
read_or_write=read_or_write@entry=0, createopts=createopts@entry=0x0,
outimg=std::unique_ptrimgtool::image = {...})
at .../src/tools/imgtool/imgtool.cpp:986
#5 0x000000000024bd19 in imgtool::image::open (module=module@entry=0x302320,
filename="./altos586/SDX-586.IMD", read_or_write=read_or_write@entry=0,
outimg=std::unique_ptrimgtool::image = {...})
at .../src/tools/imgtool/imgtool.cpp:1010
#6 0x0000000000250413 in evaluate_module (fname=fname@entry=0x2fa610
"./altos586/SDX-586.IMD", module=0x302320, result=@0x7fffffffd4dc: 0)
at .../src/tools/imgtool/imgtool.cpp:271
#7 0x000000000025075f in imgtool::image::identify_file (fname=0x2fa610
"./altos586/SDX-586.IMD", modules=modules@entry=0x7fffffffd5d0, count=127,
count@entry=128)
at/usr/include/c++/13/bits/unique_ptr.h:199
#8 0x000000000025382e in cmd_identify (c=0x229d50 <cmds+400>, argc=, argv=0x7fffffffda00)
at .../src/tools/imgtool/main.cpp:578
#9 0x0000000000253efc in main (argc=3, argv=0x7fffffffd9f0)
at .../src/tools/imgtool/main.cpp:939
(gdb) up
#1 0x000000000025d426 in bml3_diskimage_open (image=..., dummy=...)
at .../src/tools/imgtool/modules/bml3.cpp:520
520 int sectors_per_track = callbacks->get_sectors_per_track(floppy, 0, 20);
(gdb) print *callbacks
$2 = {read_sector = 0x28de1c <imd_read_sector(...)>,
write_sector = 0x0,
read_indexed_sector = 0x28de03 <imd_read_indexed_sector(...)>,
write_indexed_sector = 0x28de35 <imd_write_indexed_sector(...)>,
read_track = 0x0,
write_track = 0x0,
format_track = 0x0,
post_format = 0x0,
get_heads_per_disk = 0x28dfef <imd_get_heads_per_disk(...)>,
get_tracks_per_disk = 0x28dfff <imd_get_tracks_per_disk(...)>,
get_sectors_per_track = 0x0,
get_track_size = 0x0,
get_sector_length = 0x28dd1c <imd_get_sector_length(...)>,
get_indexed_sector_info = 0x28d95c <imd_get_indexed_sector_info(...)>,
get_track_data_offset = 0x0}
(gdb)

With patch applied:

$ ./imgtool identify ./altos586/SDX-586.IMD

imd_vzdos IMD floppy disk image (VZ-DOS format)
imd_dgndos IMD floppy disk image (Dragon DOS format)

Otherwise imgtool gets unhappy with IMD images:

  Starting program: ./imgtool identify ./altos586/SDX-586.IMD
  ...
  Program received signal SIGSEGV, Segmentation fault.
  0x0000000000000000 in ?? ()
  (gdb) bt
  #0  0x0000000000000000 in ?? ()
  mamedev#1  0x000000000025d426 in bml3_diskimage_open (image=..., dummy=...)
      at .../src/tools/imgtool/modules/bml3.cpp:520
  mamedev#2  0x000000000024807d in imgtool_floppy_open_internal (stream=..., image=...)
      at .../src/tools/imgtool/iflopimg.cpp:83
  mamedev#3  imgtool_floppy_open (image=..., stream=...)
      at .../src/tools/imgtool/iflopimg.cpp:101
  mamedev#4  0x000000000024bbdf in imgtool::image::internal_open
      (module=module@entry=0x302320, filename="./altos586/SDX-586.IMD",
      read_or_write=read_or_write@entry=0, createopts=createopts@entry=0x0,
      outimg=std::unique_ptr<imgtool::image> = {...})
      at .../src/tools/imgtool/imgtool.cpp:986
  mamedev#5  0x000000000024bd19 in imgtool::image::open (module=module@entry=0x302320,
      filename="./altos586/SDX-586.IMD", read_or_write=read_or_write@entry=0,
      outimg=std::unique_ptr<imgtool::image> = {...})
      at .../src/tools/imgtool/imgtool.cpp:1010
  mamedev#6  0x0000000000250413 in evaluate_module (fname=fname@entry=0x2fa610
      "./altos586/SDX-586.IMD", module=0x302320, result=@0x7fffffffd4dc: 0)
      at .../src/tools/imgtool/imgtool.cpp:271
  mamedev#7  0x000000000025075f in imgtool::image::identify_file (fname=0x2fa610
      "./altos586/SDX-586.IMD", modules=modules@entry=0x7fffffffd5d0, count=127,
      count@entry=128)
      at/usr/include/c++/13/bits/unique_ptr.h:199
  mamedev#8  0x000000000025382e in cmd_identify (c=0x229d50 <cmds+400>, argc=<optimized
      out>, argv=0x7fffffffda00)
      at .../src/tools/imgtool/main.cpp:578
  mamedev#9  0x0000000000253efc in main (argc=3, argv=0x7fffffffd9f0)
      at .../src/tools/imgtool/main.cpp:939
  (gdb) up
  mamedev#1  0x000000000025d426 in bml3_diskimage_open (image=..., dummy=...)
      at .../src/tools/imgtool/modules/bml3.cpp:520
  520             int sectors_per_track = callbacks->get_sectors_per_track(floppy, 0, 20);
  (gdb) print *callbacks
  $2 = {read_sector = 0x28de1c <imd_read_sector(...)>,
      write_sector = 0x0,
      read_indexed_sector = 0x28de03 <imd_read_indexed_sector(...)>,
      write_indexed_sector = 0x28de35 <imd_write_indexed_sector(...)>,
      read_track = 0x0,
      write_track = 0x0,
      format_track = 0x0,
      post_format = 0x0,
      get_heads_per_disk = 0x28dfef <imd_get_heads_per_disk(...)>,
      get_tracks_per_disk = 0x28dfff <imd_get_tracks_per_disk(...)>,
      get_sectors_per_track = 0x0,
      get_track_size = 0x0,
      get_sector_length = 0x28dd1c <imd_get_sector_length(...)>,
      get_indexed_sector_info = 0x28d95c <imd_get_indexed_sector_info(...)>,
      get_track_data_offset = 0x0}
  (gdb)

With patch applied:

  $ ./imgtool identify ./altos586/SDX-586.IMD

  imd_vzdos IMD floppy disk image (VZ-DOS format)
  imd_dgndos IMD floppy disk image (Dragon DOS format)
@lkundrak lkundrak marked this pull request as ready for review October 29, 2023 09:26
@ajrhacker ajrhacker merged commit c40d893 into mamedev:master Oct 29, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants