Comments (11)
Ночной, ты что, своих не узнаёшь?
"Лечение" треков у меня уже есть, см. MfmTrack#cleanup
. Посмотри — может, вытянешь. Вот обратной конвертации из MfmTrack
в KryoFluxReader
пока нет, потому как не требовалось. Скажи — если будет надо, напишу.
from bktools.
Узнаёшь, но все же типа международная площадка всё такое ;) После подыхания телефона контактов много посеялось.
У KryoFluxReader свой формат, сходу тулзы для конвертации из FluxEngine в его формат не нашел, так что не получается твою библиотеку использовать пока к сожалению. С самой МФМ записью пока не разбирался как генерится сигнал.
Во FluxEngine заявлена поддержка БК800 дискет, но что-то декодирование странный результат дает, а новое записал - БКшка не видит.
Так что если будет настроение допилисть генерацию, а то и прям запись - будет очень круто =-.-= Запись можно через опенсорсный GreaseWeazle, он из bluepill (микро девборда STM32) за полчаса паяется подлапными средствами. Цепляется на УСБ как виртуальный ком порт через него работает.
Так-то я сделал свой контроллер на СТМ32 который эмулирует и память СМК и флоп и хард, его пользую. А тут надыбал флоповодный контроллер для БК и встрял с дискетами начиная с того что на новых машинах дисковод тупо некуда воткнуть %)
from bktools.
У KryoFluxReader свой формат
У меня обе платы есть. GreaseWeasle, кстати, поддерживает файлы формата KryoFlux. Но трахаться с исходными файлами было неудобно, поэтому сделал свой формат .trk
, где всё в человекочитаемом (и редактируемом) виде. Обратное преобразование .trk
-> .raw
тоже вполне себе можно написать. Только тогда нужна помощь тестировать.
С самой МФМ записью пока не разбирался как генерится сигнал.
На википедии есть, с примерами, посмотри. Всё очень просто.
from bktools.
гм. напрямую утилитой от GreaseWeasle не пробовал ибо там не было заявлено поддержки БК, гляну.
С тестированием помогу конечно чем смогу. Если что есть и осцил и лог анализатор.
from bktools.
Утилита от GreaseWeasle делает прямой снимок диска, то есть её не волнует, от чего диск. Она как ксерокс. Там есть другая утилита для анализа снимков, и вот там уже важен формат, но я ею не пользовался. Кстати, БКшный формат - это стандартный IBMовский на 720 (он же 800, когда на дороже 10 секторов, а не 9).
Я сохранял свои диски вот таким батничком:
mkdir %1
gw read --device=COM4 --drive=B --track=c=0-82:h=0,1:step=1 --revs=10 --retries=2 --rpm=300 --rate=1000 %1/%1..raw
from bktools.
что-то у меня ключи --rpm=300 --rate=1000 не приняло, сграбил без них. Поставил Руби под виндой и что-то туплю как конвертировать.
Имя папки с .raw файлами - _new_rec
На Руби раньше никогда не писал, первый раз его вижу, сорри...
C:\bktools\lib>irb -I
irb(main):001:0> $: << '.'
=>
["C:/Ruby31-x64/lib/ruby/site_ruby/3.1.0",
"C:/Ruby31-x64/lib/ruby/site_ruby/3.1.0/x64-ucrt",
"C:/Ruby31-x64/lib/ruby/site_ruby",
"C:/Ruby31-x64/lib/ruby/vendor_ruby/3.1.0",
"C:/Ruby31-x64/lib/ruby/vendor_ruby/3.1.0/x64-ucrt",
"C:/Ruby31-x64/lib/ruby/vendor_ruby",
"C:/Ruby31-x64/lib/ruby/3.1.0",
"C:/Ruby31-x64/lib/ruby/3.1.0/x64-mingw-ucrt",
"."]
irb(main):003:0> require 'kryo_flux_reader'; KryoFluxReader::convert_disk '_new_rec';
C:/bktools/lib/kryo_flux_reader.rb:165:in `convert_disk': uninitialized constant KryoFluxReader::Pathname (NameError)
full_path = Pathname.new(dir).realpath
^^^^^^^^
from (irb):3:in `<main>'
from C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/irb-1.4.1/exe/irb:11:in `<top (required)>'
from C:/Ruby31-x64/bin/irb:33:in `load'
from C:/Ruby31-x64/bin/irb:33:in `<main>'
from bktools.
Тэк. С конвертированием формата КриоФлюкс трэков вроде разобрался. Добавил require
ruby -e "$:<<'.';require 'pathname'; require 'Tools'; require 'kryo_flux_reader'; KryoFluxReader::convert_disk './andos';"
from bktools.
- Можно запустить консоль - из командной строки
rake console
, тогда ты будешь в интерпретаторе и команды можно вводить по одной. - имена файлов в require задаются строчными буквами (хотя винде пофиг)
convert_disk
переведёт набор треков из формата KryoFlux (raw
) в соответствующиеtrk
, с которым уже работает моя читалка, см. документацию.
from bktools.
попробовал декодировать
ruby -e "$:<<'.';require 'pathname'; require 'tools'; require 'disk'; require 'mfm_track'; require 'mfm_track'; require 'disk_sector'; require 'colorize'; disk = Disk.load('./andos'); disk.export('./andos.img');"
печаль на первых дорогах :(
Track 0, side 0, sectors read: 6
Track 0, side 1, sectors read: 6
Track 1, side 0, sectors read: 8
Track 1, side 1, sectors read: 3
Track 2, side 0, sectors read: 9
Track 2, side 1, sectors read: 10
Track 3, side 0, sectors read: 10
Track 3, side 1, sectors read: 10
Track 4, side 0, sectors read: 10
Track 4, side 1, sectors read: 10
плюс при конвертации формата треков последние дорожки странно записывает и декодер не находит файлы, вываливается не записав вообще ничего
.....
andos79.1.raw.79.D.trk
andos80.0.raw
andos80.0.raw.80.U.trk
andos80.1.raw
andos80.1.raw.80.D.trk
andos81.0.raw
andos81.0.raw._._.trk
andos81.1.raw
andos81.1.raw._._.trk
andos82.0.raw
andos82.0.raw._._.trk
andos82.1.raw
andos82.1.raw._._.trk
from bktools.
Переименовал последние файлы, но не помогло :(
Track 79, side 0, sectors read: 10
Track 79, side 1, sectors read: 10
Track 80, side 0, sectors read: 10
Track 80, side 1, sectors read: 10
Track , side , sectors read: 0
Track , side , sectors read: 0
Track , side , sectors read: 0
Track , side , sectors read: 0
Tracks/sides read: 166
D:/_floppy/bktools/lib/disk.rb:35:in `block in export': undefined method `*' for nil:NilClass (NoMethodError)
tracks.sort_by{ |track| track.track_no * 2 + track.side }.each { |track|\r
^
from D:/_floppy/bktools/lib/disk.rb:35:in `each'
from D:/_floppy/bktools/lib/disk.rb:35:in `sort_by'
from D:/_floppy/bktools/lib/disk.rb:35:in `export'
from -e:1:in `<main>'
from bktools.
- Полный диск имеет 80 дорожек, но многие дисководы позволяли иметь 81, а то и 82 дорожки, и некоторые юзеры их тоже форматировали и использовали, поэтому я считываю с запасом. Если видно, что последние дорожки не форматированы (а это видно по тому, что на них не детектируется маркер сектора), то эти файлы просто вручную выкидываю.
- Вот то, что у тебя в первых дорожках не все сектора прочитались — это уже проблема пореальнее. Попробуй их обработать отдельно, вручную. Я добавил новый метод для автоматического поиска, попробуй так:
track = MfmTrack.load("file_name.trk")
track.find_sync_pulse_length
Если оно определило и вернуло подходящую длину синхроимпульса, с которой дорожка прочиталась, то можно после этого сделать track.save("file_name.trk")
— оно это значение запомнит в самом файле, и с тех пор файл будет читататься нормально.
Если не прочиталось, то можно попробовать сделать так:
- определить примерную длительность синхроимпульса:
track.scan
- с этой длительностью сделать чистку дорожки:
track.cleanup(значение)
- после этого попробовать её прочитать:
track.read
Если прочиталось — то отлично, можно сохранять. Если нет — то можно этим значением поиграться, каждый раз уменьшая/увеличивая его на пару десятых (каждый раз придётся загружать файл дорожки по новой). Если и после этого не читается — то делать нечего, надо смотреть вручную.
from bktools.
Related Issues (1)
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from bktools.