Created
June 27, 2017 16:15
-
-
Save nvsofts/5a774ee3c535f866f064bf0dddfb66b9 to your computer and use it in GitHub Desktop.
CD format visualizer
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env ruby | |
| NONE = 0 # N/A | |
| MODE1 = 1 # CD-ROM Mode 1 | |
| MODE2 = 2 # CD-ROM Mode 2 (not XA) | |
| MODE2_FORM1 = 3 # CD-ROM XA Form 1 | |
| MODE2_FORM2 = 4 # CD-ROM XA Form 2 | |
| OTHER = 5 # Other (e.g. CD-DA) | |
| # CD-ROM sync header | |
| CDROM_SYNC = [0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00] | |
| def get_mode_string(mode) | |
| case mode | |
| when NONE | |
| 'None (maybe bug?)' | |
| when MODE1 | |
| 'CD-ROM Mode 1' | |
| when MODE2 | |
| 'CD-ROM Mode 2 (not CD-ROM XA)' | |
| when MODE2_FORM1 | |
| 'CD-ROM XA Form 1' | |
| when MODE2_FORM2 | |
| 'CD-ROM XA Form 2' | |
| when OTHER | |
| 'Other (e.g. CD-DA)' | |
| else | |
| '(maybe bug?)' | |
| end | |
| end | |
| name = ARGV[0] | |
| size = File.size(name) | |
| if size % 2352 != 0 then | |
| puts 'Error: Not a CD raw image file!' | |
| exit 1 | |
| end | |
| f = File.open(name, 'rb') | |
| mode = NONE | |
| prev_mode = NONE | |
| sectors = size / 2352 | |
| sectors.times do |i| | |
| f.pos = i * 2352 | |
| header = f.read(24).bytes | |
| if header.first(12) == CDROM_SYNC then | |
| case header[15] | |
| when 0x01 | |
| mode = MODE1 | |
| when 0x02 | |
| if header[16..19] == header[20..23] then | |
| if header[18] & 0x04 != 0 then | |
| mode = MODE2_FORM2 | |
| else | |
| mode = MODE2_FORM1 | |
| end | |
| else | |
| mode = MODE2 | |
| end | |
| else | |
| mode = OTHER | |
| end | |
| else | |
| mode = OTHER | |
| end | |
| if prev_mode != mode then | |
| puts 'Sector 0x%X : %s' % [i, get_mode_string(mode)] | |
| end | |
| prev_mode = mode | |
| end | |
| f.close |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment