Compare commits

...

10 Commits

Author SHA1 Message Date
David Given
61ff48c005 Merge pull request #236 from erichelgeson/eric/typo
Fix minor typo
2021-02-20 22:02:46 +01:00
Eric Helgeson
5fc8a1e52a Fix minor typo 2021-02-20 14:42:02 -06:00
David Given
df1ac74069 Merge pull request #233 from davidgiven/ibm
Refactor the IBM readers and writers.
2021-02-16 23:47:50 +01:00
David Given
91f718bf38 Fold the Atari ST writer into write ibm. Update documentation. 2021-02-16 23:24:41 +01:00
David Given
46e987e393 Refactor the IBM readers so they just set flags and readibm.cc is doing all the
work.
2021-02-16 23:07:25 +01:00
David Given
a59b4f7be7 Document writing 1581 disks. 2021-02-16 21:04:40 +01:00
David Given
ca66e3c35c Merge pull request #218 from hpingel/ibm_enc_swapsides_preset_1581
Adding preset for Commodore 1581 (cbm1581) to IBM writer frontend
2021-02-16 21:01:19 +01:00
hpingel
320f32895a adding preset cbm1581 to ibm writer frontend 2021-01-18 23:08:33 +01:00
David Given
d4db131d3c Merge pull request #217 from davidgiven/writes
Update sequencer to not lose one tick from every non-zero interval.
2021-01-18 11:22:02 +01:00
David Given
27c2c9045e Update sequencer to not lose one tick from every non-zero interval. 2021-01-18 00:27:00 +01:00
18 changed files with 280 additions and 331 deletions

View File

@@ -29,17 +29,17 @@
:400700000F3900000B390000123900002A3900003D390000ED81FF1FFE81FF1F47390000BC380000BE3800005639000072390000C0380000206FFFF74BFE94F8780001F081
:40074000F5FD94F8780001F0D9FD02F009FCB94BDFF8FC821A78002702F0FB021A701A7842F001021A701A7802F0FE021A701A7802F0FE021A7002F0F7FB0220FFF7DCFCF9
:40078000012141F6FF734FF48042084602F046FB84F8B60001F068FF08F807000137402FF8D1DFF8B0A200270AF195091FFA89F80137402F14BF3A4600221AF8010F2244C0
:4007C000062392F82420402101F082FF424646F24E419AF8000001F08DFF08F14008402F1FFA88F8E4D196F8793053B196F87C30F36000233374237C002BFCD000233374E1
:4007C000062392F82420402101F082FF424646F240419AF8000001F08DFF08F14008402F1FFA88F8E4D196F8793053B196F87C30F36000233374237C002BFCD000233374EF
:40080000F36000234FF0FF32236062602372236894F8B600234493F8241001F0DDFE94F8B60001F09BFE012194F8B60001F06EFE2368002BFCD0002398467360D6F814A0D4
:40084000012701F0A3FF6369B4F87A20CAEB030393420DD367B1042195F8B60001F0C8FE94F8B60001F0D4FE0028F9D107463072237AFBB96A682B689A4202D1002FE0D1D9
:4008800018E00220FFF758FC6968402209EB8111022000F005FE6A68674B01321340002BBEBF03F1FF3363F03F03013308F101086360C6E70220277AFFF73EFC0022114687
:4008C000022000F0EDFD0220FFF736FCFFB2FFF7A5FC002001F012FD37B15848FFF7EBFC0220FFF70FFD06E0554B08A81B88ADF82030FFF7F5FC227C4146237A5148FFF7BB
:40090000DAFC15E25048FFF7D6FCD4F87A7017F03F0701D0032009E2286FFFF759FD95F8780001F003FD95F8780001F0E7FC012001F002FD02F014FB444BDFF814811A7857
:4009400042F004021A701A7842F001021A701A7802F0FE021A701A7802F0FE021A7002F003FB01214FF4804341F6FF72084601F0E9FC85F8B60001F077FE08F8070001378C
:40098000402FF8D1DFF8CC90002709F195031FFA83F804930137402F14BF3A46002219F8010F2244052392F82420402101F090FE414646F24B5299F8000001F09BFE08F1FF
:40098000402FF8D1DFF8CC90002709F195031FFA83F804930137402F14BF3A46002219F8010F2244052392F82420402101F090FE414646F2475299F8000001F09BFE08F103
:4009C0004008402F1FFA88F8E4D100274FF0FF33376098467360BB463B46D6F87A9037725FEA99190CBF4FF0010A4FF0000A2168114A01310A40002ABCBF02F1FF3262F03B
:400A00003F026068B8BF013282426FD02BB1227A002A7AD12A7C002A77D12068049A059302EB8010BAF1000F16D040223F2102F0F7FA1CE09E6400403F0000807C390000C9
:400A4000C238000096390000A93900009B650040AC81FF1FAB81FF1F014601370120FFF7BDFBC7EB0903D3F1000A4AEB030A2168B34A01310A40002ABEBF02F1FF3262F0BB
:400A00003F026068B8BF013282426FD02BB1227A002A7AD12A7C002A77D12068049A059302EB8010BAF1000F16D040223F2102F0F7FA1CE0906400403F0000807C390000D7
:400A4000C238000096390000A939000097650040AC81FF1FAB81FF1F014601370120FFF7BDFBC7EB0903D3F1000A4AEB030A2168B34A01310A40002ABEBF02F1FF3262F0BF
:400A80003F02013222606268059B01322ED12A683F2A2BD14FF00008C5F8048001F080FC85F808806B6895F8B6002B4493F8241001F092FD95F8B60001F050FD012195F8BF
:400AC000B60001F023FD95F87E30EB6085F81080237C002BFCD04FF00008012086F8108001F06AFC404601F027FC00E023B1237A5BB92B7C4BB90123626842453FF477AFC1
:400B00000BF1010BD5F8048071E701F04FFC012001F012FC002001F04FFC042194F8B60001F066FD94F8B60001F072FD80460028F8D196F8B60001F0FFFC337C327A029318
@@ -60,9 +60,9 @@
:400EC0002378A2F5863243F040032370413A137843F010031370464A464B07CA03C31A80454A2833106843F8250C127903F8212C424A07CA03C31A80414AE83B07CA03C33B
:400F00001A80404A083307CA03C31A803E4A3F4BA2F5616203CBC2F8100EC2F8141E1378042043F008031370394B02F5AA521B783D78DBB298F80060EDB203F007010C329F
:400F40001B091170F6B2537045F003033B7046F0030388F800302F4B48221A702E4A402313702E49937013729372082382F81F3220220A7048710A72294A0A20137001F0C7
:400F8000DDFB284B88F8006044223D70264D1A7094E80F0007C52B80BDE8F081004800405C0900480F010049A146004025420040224200400440004006400040A2430040AF
:400FC000A0430040153A0000E8460040FCFFFF478C0000480076004064090048F8460040207600406809004828760040035001401C090048C051004028090048300900485A
:401000003C090048480900483251004054090048CF0100491D51004001590040235B0040585B004076580040B0430040F946004008B501F0C9FF03680C2B00D1FEE7FEE79D
:400F8000DDFB284B88F8006044223D70264D1A7094E80F0007C52B80BDE8F081004800404C0A00480F010049A146004025420040224200400440004006400040A2430040BE
:400FC000A0430040153A0000E8460040FCFFFF478C00004800760040540A0048F846004020760040580A004828760040035001400C0A0048C0510040180A0048200A0048A5
:401000002C0A0048380A004832510040440A0048CF0100491D51004001590040235B0040585B004076580040B0430040F946004008B501F0C9FF03680C2B00D1FEE7FEE7CA
:40104000084908B50B68084A1844821A802A01DC086005E001F0B8FF0C2303604FF0FF33184608BDCC80FF1F9093FF1F80B51148114B0025C0B1A3F1100192C92246043933
:40108000161BB74204D051F8046F42F8046BF7E7114653F8046C8C1AA64202D041F8045BF9E701381033E5E701F094FFFFF7DCF9FEE700BF01000000E43B0000124A134BF0
:4010C00010B51A60124A134C1368134843F4007313600023032B98BF54F823204FEA830188BF0E4A0133302B4250F3D10C4B1A780C4B1A700C4B084A1A60FFF73BFEBDE8CA
@@ -137,11 +137,11 @@
:4022000033D1BDE83840FFF7BFBE194B9B78012B2BD1214A137803F0FD0315E003F00303012B13D008D3022B1FD1114B9B78E3B9BDE83840FFF77EBE0D4B9B78012B14D1B7
:40224000154A137843F0020313700AE0084B1A795AB998781B791749DBB2CA5C22EA0002CA54BDE83840FFF79BBA002038BD00BF00600040C492FF1FD092FF1FA03A000049
:40228000043B00008C3A0000773B00006893FF1FDC92FF1F8192FF1FD392FF1FD592FF1FC292FF1FC092FF1FD492FF1FD192FF1F4A93FF1FD792FF1F074B1A78120609D546
:4022C0005B78012B06D1054B054A5A6012781A80FFF786BB0020704700600040C492FF1F643A0000014B1870704700BF7A640040014B1878704700BF6B650040014B18702D
:40230000704700BF79640040064A0123136002F688321268E0211064034A1170A2F540721360704780E100E000E400E0014B1870704700BF7A650040014B1870704700BF89
:402340007865004073B515461E460B4C05230022019200920A4601461846237000F064F932462946207800F01FF90221207800F009F9207802B070BDD080FF1F064A04232E
:4022C0005B78012B06D1054B054A5A6012781A80FFF786BB0020704700600040C492FF1F643A0000014B1870704700BF76650040014B1878704700BF67640040014B187035
:40230000704700BF77640040064A0123136002F688321268E0211064034A1170A2F540721360704780E100E000E400E0014B1870704700BF74640040014B1870704700BF92
:402340007565004073B515461E460B4C05230022019200920A4601461846237000F064F932462946207800F01FF90221207800F009F9207802B070BDD080FF1F064A042331
:40238000136002F688321268E0219064034A1170A2F202321360704780E100E002E400E0014B04221A60704700E100E0014B04221A60704780E100E0014B1870704700BF30
:4023C0007E640040704738B505460078012428B100F066FD285D0134E4B2F8E738BD08B50D2000F05DFDBDE808400A2000F058BDF7B516461F460B4C002303250193009359
:4023C00074650040704738B505460078012428B100F066FD285D0134E4B2F8E738BD08B50D2000F05DFDBDE808400A2000F058BDF7B516461F460B4C002303250193009362
:402400000A4601462846257000F00EF93A463146207800F0C9F80221207800F0B3F8207803B0F0BDE080FF1FF7B516461F460B4C00230225019300930A4601462846257030
:4024400000F0F2F83A463146207800F0ADF82946207800F097F8207803B0F0BDE180FF1FF7B516461F460B4C00230125019300930A4601462846257000F0D6F83A463146DE
:40248000207800F091F80221207800F07BF8207803B0F0BDE280FF1F73B515461E460B4C0023019300930A4601461846237000F0BBF832462946207800F076F8022120782A
@@ -182,9 +182,9 @@
:402D40001A701A7842F001021A7070470059004010B5084B1C7814F0010403D10028F9D0002404E02046FFF7E9FC024B1B78204610BD00BF01590040034A044B1B88108822
:402D8000181A00B2704700BF5C93FF1FA05B00400E4A13881BB223B111880A2309B2594301E00B4B19680B4B1B88C01A42F2107300B203FB00F2022391FBF3F30028D8BF86
:402DC0005B42134493FBF1F000B270475E93FF1F6493FF1F6093FF1F70470000034A00F0F800137803431370704700BF02410040034A00F0F800137803431370704700BF9A
:402E000006410040014B1870704700BF78640040014B1870704700BF7965004073B515461E460B4C04230022019200920A46014618462370FFF7F8FB324629462078FFF7AB
:402E000006410040014B1870704700BF72640040014B1870704700BF7864004073B515461E460B4C04230022019200920A46014618462370FFF7F8FB324629462078FFF7B3
:402E4000B3FB02212078FFF79DFB207802B070BDFC80FF1F074A0223136002F688321268E0215064044A11706FF440710A441360704700BF80E100E001E400E0014B18708C
:402E8000704700BF7C640040014B1870704700BF7B640040014B1870704700BF7F640040FEB5494652465B460EB40746244909688A46244A12682448022100F071F803009B
:402E8000704700BF75640040014B1870704700BF76640040014B1870704700BF79640040FEB5494652465B460EB40746244909688A46244A12682448022100F071F80300AD
:402EC00020480068C018204900F06AF8143883460121C9430C460125002600F041F8814651460B7823400B705846013000F030F83800F04028400B78234003430B705846AA
:402F000000F026F80136072EF2D9002001300138013001200B78234003430B705846043000F016F8484600F01FF800BF00BF00BF0EBC894692469B46FEBD00BFAFF3008039
:402F4000D480FF1FF880FF1F00C20100000000000230800803D000BF01380046FCD17047EFF3108072B6704780F31088704700BF094A137803F00303012B0AD0022B09D181
@@ -4098,48 +4098,48 @@
:40FF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041
:40FFC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
:0200000480007A
:400000000145004009520040015B0040016500400101014003030140010501400307014052080140500901404F0A0140480B0140490C0140470D0140400E0140360F01409E
:4000400002150140031701405C18014057190140471A0140531B01400B400140124101400B4201400D43014002440140074501400B4601400C470140104801401149014069
:40008000154C01400D4D014005500140045101407E02080209411080110218041902600C61157C402721290AE204E601EA20EE02E202E608EA10EE04000801080404050568
:4000C0000708080809080C400D080E1011011201130E143A16401708180819081C021E042305240825042701280629082A782C202D012E402F02307F310F327F330F380AE4
:400100003B0A580459045B045C995F018203830187018A108C018D018E248F08907C9282930E961097019A809D019E1C9F04A101A210A302A510A610AA10AB01AC01AE48FD
:40014000B01FB10FB4F0B510BA20BB02BF10D608D80BD90BDB04DC99DD90DF01012202010488051007800A860B100C020DA00E2011011208134414021504162017201804BE
:4001800019021A041B011CA01E202008220126012790282029202A012C022E282F4032493514360139013B443C803D2A5980614069906F0278417B0288049141928093D450
:4001C00094249602970A982299249A019B409C019D019EC0A188A208A402A504A709B404B502B604C0FBC2FFC4EFCAF7CCEBCEFBD608D808DE01E608EA10EE0400FC0108A1
:4002000002020310071408200AD00BE40CE10D100E080F8212031314161017141D1F1E101F4020802110223C2321261028402A302B142CE12E04301F310F33F034E03B08A2
:40024000580B590B5B045C995F0180368209852A86128740882D89098A128B148E098F209080924093C09440968098079C249D089F13A03FA180A320A840A908ADEAB0076D
:40028000B1E0B280B301B438B518B640B706BE44D808D904DB04DC99DF0100820120040A07050A420B100EA80F01110112091304171219201A401D8A1E081F4020602101B0
:4002C000231025102652275029202A012C022F483249364239033B543D283E806102620169406C0C6F0178017F0187058C028D04900292809345946495029642971298206E
:4003000099049B069C019D219E449F01A041A208A418A701B040B204B7C0C0FBC2FDC45FCAB5CC9BCE7FDE11E40800020104040806140A010C1C101012081301140215050D
:400340001601170220032B022D062E022F0130043107320336183A083F015608580459045B045C095D905F018128829083118401853F86448A9C8C208D3F8EC090C191FFA2
:40038000922895149690972199019A039B0E9D409E90A0FCA202A902AA90AB01ADC0AE90B140B330B41FB50FB6E0B780BA80D608D80BD90BDB04DC99DD90DF0101A604240E
:4003C0000501070208400A240B400EA0120113121401164019801A041B401D841EA02080229C2344260129602C082F0230023294370539063A053B403F01580259025A0213
:400400005B405F806140670168036A806B026C016F06780182019440950296E4974698209C429D209E049F02A412A580A741B240B420B540C0FFC23FC49BCA3CCCCFCE8BAA
:40044000D618D818DE01EA20EE0203900401060407900A100B9C0D010E100F4812101520161017C01A031B031DFC1E1C1F02201C2202239025C127242A102B902C012E08A9
:400480002F9033E0341F351F3B08420147E0482049FF4AFF4BFF4F83580859085A045B045C995D095F018310871C8B108D018F0893109F03A310A501A704AB10AD1CAF0254
:4004C000B71FD908DB04DC90DF0100400120032008420A281110134219101A0820042120220826802701284229202A042B202C422D202F20312032483402368039123B4544
:400500003C203D103F454180520159105A445B0160046208638269406E8078807C807F018201C007C20FC40BCAFFCC9ECEFFD008D60FD80FDE18EA01EE08E020E623EE0BF2
:40054000022005880612083209880C080E010F011049118812321432151017A0182119461A1C1BB81D9A1E091F20206321422204230424322588282029882A022C322D04B6
:400580003020313F324033C1341F37C1398A3A203E055608580459045B045C995D905F018401860289018D028E039002920199089B049D049F08A004B002B102B204B304D8
:4005C000B401B501B708B822B988BE15BF55C043C520C802C9FFCAFFCBFFCD20CEF0D110D804D904DA04DB04DD09DF01E108E240E340E480E640E740000801400320051496
:40060000060107400A800D800EA8108016441799181019021B101C401E081F0420012111220424A02505264227A02D202F52324033203504360137A039903C243E4040504B
:40064000488049204A0459405A205D045E085F4064016580670268046A806C036E406F01831085118B4491D0938094A89504970A984099449B509C019D119EC89F20A0500A
:40068000A188A211A402A535A708A980C0F5C2F8C4F8CAF0CCFCCE7CD003D61CD810E022E620EA04EE0B010129022C013102350136013E403F115608580459045B045D9048
:4006C0005F0180478208830885218626874E880189018A388B708D4E8E40914E92029426974E98269B029D809E11A010A201A321A520A604A701A811AA26AB04AC26AD0FF1
:40070000AF10B040B380B43FB57FB63FBAA0BB20BF04C003C50EC70CC811C9FFCAFFCBFFD004D601D804D904DA04DB04DC99DD09DF01E2C0040205940DA20E201002150580
:40074000162017A01B401D111E011F102040221024042530260827082B042E642F40344035043602371038013C803D283E0145084F04570858905C406001630868026C042B
:400780006D016E046F02768981028410860888808D028E049002910492409380940C96209724984099869A049BB09D119E899F08A040A18CA212A530A74AA881AE04B74049
:4007C000C0F0C2F0C4F1CAF4CCF0CEF1D040D61CD80CE008E404E602E8041B011F083180330836843B408340C630CCF0CE10E22032043380364037023B043F808180A0042B
:40080000A340A580A604AE80AF41B004CCF0CE60E680EE40531057208510960897049F02A004A644A780D460E240860491209608972498809F02A004A640A7A0AA04B48062
:40084000E610EE201680C40458405E019A80A404AC04D401D6011B04844096019C40A404A710B680B710C608EA08EE0808080B080E020F4087048A209601A404A710AB043D
:40088000C20FE00425808004871089808B04912097249880A004A720AB02AE40AF80C820E6C0EED0511054045880700477809008912098809B80A004AB80AF20D4E0DC8000
:4008C000DE20EA80EE1005200A400C100F201C0852225620610186029641A220A404A710AA41AC08AF40C001C20DC601D407D80270018001852086018810960198109920A0
:40090000AA20B501DC01E204EC0201010D010F0111011D0100FF01AB02021105BF0000A09F001F000000000000000000100000004000000000000000C0000000FF0000B88D
:4009400047004700000100008000000282008200000000000007070007000000270018012700180100040000000500000000000000000000000000000000000000000000C4
:400980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037
:4009C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F7
:400A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B6
:400A40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000076
:400000000145004009520040015B00400165004047000140380101404E0201404703014046040140440501404C060140490701402C08014031090140040B0140030D014075
:400040006C14014057150140591601404B17014011190140071B01400B400140104101400C4201400F43014002440140054501400A4601400B4701400C480140104901404C
:40008000174C01400C4D014006500140045101407E02080409021082110218021904601561137C402721240A02E40303040E0520064107C00A840B900E840F901001120693
:4000C00013901684179019011A841B481C081DFC1E221F0221C122182324268427902B9C2CE72E10300733E0351F36F83A023B084204460E480449FF4AFF4BFF4F83580B46
:40010000590B5A045B045C995D095F01868088028A8190E7921094019686980F9A409C0F9E20A2E0A618A804AA81AE80B207B4F8D80BDC09DF010022022003010524084089
:4001400009080A080B400C420D200E2010021108130215801610172119011A011C241E201F0C210422082308284029042B88312032643301382039883A013B804240528017
:400180005A215B4A600461016218634278027C028280C06FC2FFC4FDCA07CC0FCE0FD001D60FD80FDE8103140404050806110710081F0A800C010E1E0FE4101F124015102D
:4001C00016E0178218021A111B141C1F1E20211023212408261127142B142D1F2F4032F0330F360F37F03A083B80580B590B5B045C995F018203830884618608873088204C
:4002000089108A508B828DC78E108F2892109304961C97C49A109B04A061A110A204A341A440A630A704AB04AC7CAE02AF04B01FB30FB460B5F4BB08D80BD90BDB04DC99FF
:40024000DF01012A02200301040805400708081009080B8C0C420E200F04104211081504180819221A0C1B011C221D4C1E211F4820042218242025442731285029402B8839
:400280002C022E042F883204331134103508380439813A103D8C3E016230680269806A806D4078027C029308942096E897809C029D249F61A403A50CA620A781AA01AB0889
:4002C000C0EFC2FEC42DCAFFCC67CEDFDE81E208021004400620080C0C010E0210081101140818051A081C04200828202AC02CE02F0130603280341E3501360138203E40ED
:400300005608580459045B045C995D905F0181608209842487108A128B108F10903F93039407950197089B1C9D40A036A209A310A710A82DA901AA12AB04AC40AD7CAF0220
:40034000B11FB238B440B540B607B720BE10D608D80BD90BDB04DC99DD90DF01000201280302040A070409980B800C020E20104212081550170119281A401B401E201FA0A5
:4003800022102662274828022C022E052F043302364237283C203D803F0558805D80600267016B026D106F017C0287208B848F4091409205930496409B209C029F48A0124A
:4003C000A140A208A620A780AD01AE08C07FC23FC4DBCAF8CCF1CEF0D618D818DE80E208E408EA040104020F0440068008700A800C800E200F0110011106130114081602E9
:40040000170218011C0F1EF0200124072608288029052A102B022C082E04310736FF3E403F01580459045B045F018001811C820283E18402852087C0880489828B218C0248
:400440008D088F10900491FF940495089710980599029C049D04A002A1FCA402A520A740A802AC03AE04AF02B007B3FCB503BB20BE01D804D904DB04DC90DF010081012440
:4004800004450520084009080A080B810C080D010E020F041008120113861544172219011C0220042114222C23282740280229012B202D1030083180321033023705396892
:4004C0003A013D82588068066C016D806F048004810184048F0191109220940A9780980299209B019C409F04A401A598A702A880A980AF02C0FFC2FFC4FFCA2BCCCFCE9F8E
:40050000D608E24CE402E605EA04EC02EE0C06010B0410041304160119021C022101240829042C013001310232043304340236083701380239083E553F45560858045904A9
:400540005B045D905F0183018A029501A401AC02B401B501B602B880B920BE50BF10D804D904DB04DF01030804080D800F50100212101410154019101A021E2A1F022210BD
:40058000250226882C802F083308372138023F10584059105DA45E01645266106A406C076D406F09800282C085808608890293409980AF40C022C2B0C4A5CAA0CCA2CE2157
:4005C000D6FCD8F0EA04EE0C9980E208E448EA049980B180E208018002200608070108280B100C020D210E2C1028110F1434152117081828192F1C101E021F2F202821210D
:40060000230224022740282829212B042C202D212E012F0E321F336035803620371F39083E443F1040524720482049FF4AFF4BFF4D204EF05110580459045A045B045C9038
:400640005D095F01610862406340648066406740800F810183028503861087FC88208A018B048C208DFF8E0290039302942395809608970499049A409B209D049E2F9FF9AF
:40068000A023A104A20CA308A423A504A604A740A82FA904AB10AF02B060B3FFB460B61FB822BF04D804D904DB04DC09DF01012202200301040205040608070209880A04D5
:4006C0000B800C080D800E48118012081305144015051610171019881C401D401E041F602118228023112410284129082A102D202E402F6030083240331234013680372A63
:40070000381039423A083C063D803F1041104980510159025A0269806C016D806F0285018D409004914592C2930494429604979199249A089B3B9D40A009A180A22CA548B8
:40074000A722AC02B704C0FFC2FFC47FCAFFCCFFCEFFD004D208E402E808EE1200FF01880403054606FC07B8080C09880A100C0C0EF10F0112081510160417A0180C198849
:400780001A401C011D421E021F04218822022480259A260C2720280C29882A202E022F0431C132FF333F35C137C139A23E043F04580459045B045C905F01800282058521EF
:4007C000870288028C0291279403950896049B389D049F01A118A340A706AC02AF01B006B107B310B401B560B708BE10BF40C006C5ECC803C9FFCAFFCBFFD004D601D8046C
:40080000D904DA04DB04DC99DD09DF01E2C00020010203020406056007100A200C010D800E040F1013801542172819131D042003218022D5240425102605278128102901DB
:400840002A802D202E402F603180321433023680372838043C043D803F11481049104B0264016701684869476A406C02728873068410860194419546978799209B2C9F827A
:40088000A228A448A598A601A722AB40B002B481C0FBC2F4C4F1CAFBCC7FCEF2D204E220E604EA4082108A018E048F029222960197109D209F20A214A302B080B104B6017C
:4008C000E220EA10EC808F209F20AF10B211B520E412EE021B011F083240330836843B408140C630CCF0CE10E62030803204358037083A023D408480914096809740A6046A
:40090000AE80AF01CCF0CE60E210508057208580968897409D809E02A604AB08D460E210EA20832284808E02968097409E02A480A620A720AA24AE04E230E620EC80EE30D9
:400940001501C4045D828740B101D605EE011B04850287108D8097809D82A480A880C608E4020B880C800F108A109798A480A740AB44AF04C20FE404262080018A01974061
:40098000A280A302A620AA40B680C820E620EE8052805302551070017E0190029202A110A280A302AF40B510D4E0DC80DE20EE40052008040E020F801F1053805610588014
:4009C00063028E208F809A109D20A740B120C001C20DC601D407D602E002E402EA04762084809A209C80AF10B004B301B601DE04E801EA08EE01010109010B010D011101C4
:400A00001B0100FF01AB020211050000BF0000A09F001F000000000000000000100000004000000000000000C0000000FF0000B847004700000100008000000282008200DC
:400A400000000000000707000700000027001801270018010004000000050000000000000000000000000000000000000000000000000000000000000000000000000000D8
:400A80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036
:400AC00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F6
:400B000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B5
@@ -4615,12 +4615,12 @@
:0200000490105A
:04000000BC90ACAF55
:0200000490303A
:02000000CEC56B
:02000000F830D6
:0200000490402A
:4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C0
:400040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080
:400080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040
:4000C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
:0200000490501A
:0C00000000012E16106900002E2FDF2ECC
:0C00000000012E16106900002E30089937
:00000001FF

View File

@@ -65,7 +65,10 @@ begin
if (dataclocked)
begin
pulsepending <= opcode[7];
countdown <= opcode[5:0];
if (opcode[5:0] == 0)
countdown <= 0;
else
countdown <= opcode[5:0] - 1; /* compensate for extra tick in state machine */
state <= STATE_WRITING;
end

View File

@@ -35,4 +35,5 @@ fluxengine read adfs
```
You should end up with an `adfs.img` of the appropriate size for your disk
format.
format. This is an alias for `fluxengine read ibm` with preconfigured
parameters.

View File

@@ -23,4 +23,5 @@ fluxengine read dfs
```
You should end up with an `dfs.img` of the appropriate size for your disk
format.
format. This is an alias for `fluxengine read ibm` with preconfigured
parameters.

View File

@@ -23,7 +23,8 @@ fluxengine read ampro
```
You should end up with an `ampro.img` which is 409600 or 819200 bytes long.
You can pass this straight into [cpmtools](http://www.moria.de/~michael/cpmtools/):
This is an alias for `fluxengine read ibm` with preconfigured parameters. You
can pass this straight into [cpmtools](http://www.moria.de/~michael/cpmtools/):
```
$ cpmls -f ampdsdd ampro.img

View File

@@ -14,7 +14,8 @@ Just do:
fluxengine read atarist
...and you'll end up with an `atarist.st` file. The size of the disk image will
vary depending on the format.
vary depending on the format. This is an alias for `fluxengine read ibm` with
preconfigured parameters.
Writing disks
-------------
@@ -23,51 +24,39 @@ FluxEngine can also write Atari ST scheme disks.
The syntax is:
fluxengine write atarist -i input.st <options>
fluxengine write ibm -i input.st <options>
The format of `input.st` will vary depending on the kind of disk you're writing,
which is configured by the options. By default FluxEngine will write an 80
track, 9 sector, double-sided disk. If that doesn't match your target format you
will need to pass some options. There are some presets, which you will almost
certainly want to use if possible:
The format of `input.st` will vary depending on the kind of disk you're
writing, which is configured by the options. You will almost certainly need to
pass one of these:
- `--st-preset-360`: a 360kB 3.5" disk, with 80 cylinders,
1 side, and 9 sectors per track.
- `--st-preset-370`: a 370kB 3.5" disk, with 82 cylinders,
1 side, and 9 sectors per track.
- `--st-preset-400`: a 400kB 3.5" disk, with 80 cylinders,
1 side, and 10 sectors per track.
- `--st-preset-410`: a 410kB 3.5" disk, with 82 cylinders,
1 side, and 10 sectors per track.
- `--st-preset-720`: a 720kB 3.5" disk, with 80 cylinders,
2 sides, and 9 sectors per track.
- `--st-preset-740`: a 740kB 3.5" disk, with 82 cylinders,
2 sides, and 9 sectors per track.
- `--st-preset-800`: a 800kB 3.5" disk, with 80 cylinders,
2 sides, and 10 sectors per track.
- `--st-preset-820`: a 820kB 3.5" disk, with 82 cylinders,
2 sides, and 10 sectors per track.
- `--ibm-preset-atarist-360`: a 360kB 3.5" disk, with 80 cylinders, 1 side,
and 9 sectors per track.
- `--ibm-preset-atarist-370`: a 370kB 3.5" disk, with 82 cylinders, 1 side,
and 9 sectors per track.
- `--ibm-preset-atarist-400`: a 400kB 3.5" disk, with 80 cylinders, 1 side,
and 10 sectors per track.
- `--ibm-preset-atarist-410`: a 410kB 3.5" disk, with 82 cylinders, 1 side,
and 10 sectors per track.
- `--ibm-preset-atarist-720`: a 720kB 3.5" disk, with 80 cylinders, 2 sides,
and 9 sectors per track.
- `--ibm-preset-atarist-740`: a 740kB 3.5" disk, with 82 cylinders, 2 sides,
and 9 sectors per track.
- `--ibm-preset-atarist-800`: a 800kB 3.5" disk, with 80 cylinders, 2 sides,
and 10 sectors per track.
- `--ibm-preset-atarist-820`: a 820kB 3.5" disk, with 82 cylinders, 2 sides,
and 10 sectors per track.
These options simply preset the output destination flag (`-d`) and the
following, lower-level options. Note that options are processed left to right,
so it's possible to use a preset and then change some settings. To see the
values for a preset, simply append `--help`.
- `--st-sector-size=N`: the size of a sector, in bytes. Must be a power of
two.
- `--st-gap1-bytes=N`: the size of gap 1 in bytes (between the IAM record
and the first sector record).
- `--st-gap2-bytes=N`: the size of gap 2 in bytes (between each sector
record and the data record).
- `--st-gap3-bytes=N`: the size of gap 3 in bytes (between the data record
and the next sector record).
- `--st-sector-skew=0123...`: a string representing the order in which to
write sectors: each character represents on sector, with `0` being the
first. Sectors 10 and above are represented as letters from `A` up.
See [the IBM format documentation](disk-ibm.md) for more information.
Useful references
-----------------
- [Atari ST Floppy Drive Hardware Information](https://info-coach.fr/atari/hardware/FD-Hard.php) by Jean Louis-Guerin
- [Atari ST Floppy Drive Hardware
Information](https://info-coach.fr/atari/hardware/FD-Hard.php) by Jean
Louis-Guerin
- [Atari ST Floppy Drive Software Information](https://info-coach.fr/atari/software/FD-Soft.php) by Jean Louis-Guerin
- [Atari ST Floppy Drive Software
Information](https://info-coach.fr/atari/software/FD-Soft.php) by Jean
Louis-Guerin

View File

@@ -25,8 +25,8 @@ quickly.)
A standard 1541 disk has 35 tracks of 17 to 21 sectors, each 256 bytes long.
Reading discs
-------------
Reading 1541 disks
------------------
Just do:
@@ -43,6 +43,24 @@ complicated due to the way the tracks are different sizes and the odd sector
size, so you need the special D64 or LDBS output formats to represent them
sensibly. Don't use IMG unless you know what you're doing.
Reading 1581 disks
------------------
These are handled by the IBM reader. Just do:
```
fluxengine read ibm
```
Writing 1581 disks
------------------
These are handled by the IBM writer. Just do:
```
fluxengine write ibm --ibm-preset-cbm1581 -i file.img
```
Useful references
-----------------

View File

@@ -61,7 +61,7 @@ public:
break;
default:
Error() << fmt::format("don't understant DiskCopy disks of type {}", encoding);
Error() << fmt::format("don't understand DiskCopy disks of type {}", encoding);
}
std::cout << "reading DiskCopy 4.2 image\n"

View File

@@ -252,7 +252,6 @@ buildlibrary libfrontend.a \
src/fe-testvoltages.cc \
src/fe-upgradefluxfile.cc \
src/fe-writeamiga.cc \
src/fe-writeatarist.cc \
src/fe-writebrother.cc \
src/fe-writeibm.cc \
src/fe-writemac.cc \

View File

@@ -1,29 +1,13 @@
#include "globals.h"
#include "flags.h"
#include "reader.h"
#include "fluxmap.h"
#include "decoders/decoders.h"
#include "sector.h"
#include "sectorset.h"
#include "record.h"
#include "ibm/ibm.h"
#include "fmt/format.h"
static FlagGroup flags { &readerFlags };
static IntFlag sectorIdBase(
{ "--sector-id-base" },
"Sector ID of the first sector.",
0);
#include "readibm.h"
int mainReadADFS(int argc, const char* argv[])
{
setReaderDefaultSource(":t=0-79:s=0-1");
setReaderDefaultOutput("adfs.img");
flags.parseFlags(argc, argv);
IbmDecoder decoder(sectorIdBase);
readDiskCommand(decoder);
return 0;
sectorIdBase.setDefaultValue(0);
return mainReadIBM(argc, argv);
}

View File

@@ -1,30 +1,15 @@
#include "globals.h"
#include "flags.h"
#include "reader.h"
#include "fluxmap.h"
#include "decoders/decoders.h"
#include "sector.h"
#include "sectorset.h"
#include "record.h"
#include "ibm/ibm.h"
#include "fmt/format.h"
static FlagGroup flags { &readerFlags };
static IntFlag sectorIdBase(
{ "--sector-id-base" },
"Sector ID of the first sector.",
17);
#include "readibm.h"
int mainReadAmpro(int argc, const char* argv[])
{
setReaderDefaultSource(":t=0-79:s=0");
setReaderDefaultOutput("ampro.adf");
setReaderRevolutions(2);
flags.parseFlags(argc, argv);
IbmDecoder decoder(sectorIdBase);
readDiskCommand(decoder);
return 0;
sectorIdBase.setDefaultValue(17);
return mainReadIBM(argc, argv);
}

View File

@@ -1,24 +1,14 @@
#include "globals.h"
#include "flags.h"
#include "reader.h"
#include "fluxmap.h"
#include "decoders/decoders.h"
#include "sector.h"
#include "sectorset.h"
#include "record.h"
#include "dataspec.h"
#include "ibm/ibm.h"
#include "fmt/format.h"
static FlagGroup flags { &readerFlags };
#include "readibm.h"
int mainReadAtariST(int argc, const char* argv[])
{
setReaderDefaultSource(":t=0-79:s=0-1");
setReaderDefaultOutput("atarist.st");
flags.parseFlags(argc, argv);
IbmDecoder decoder(1);
readDiskCommand(decoder);
return 0;
sectorIdBase.setDefaultValue(1);
return mainReadIBM(argc, argv);
}

View File

@@ -1,30 +1,14 @@
#include "globals.h"
#include "flags.h"
#include "reader.h"
#include "fluxmap.h"
#include "decoders/decoders.h"
#include "sector.h"
#include "sectorset.h"
#include "record.h"
#include "ibm/ibm.h"
#include "fmt/format.h"
static FlagGroup flags { &readerFlags };
static IntFlag sectorIdBase(
{ "--sector-id-base" },
"Sector ID of the first sector.",
0);
#include "readibm.h"
int mainReadDFS(int argc, const char* argv[])
{
setReaderDefaultSource(":t=0-79:s=0");
setReaderDefaultOutput("dfs.img");
sectorIdBase.setDefaultValue(0);
setReaderRevolutions(2);
flags.parseFlags(argc, argv);
IbmDecoder decoder(sectorIdBase);
readDiskCommand(decoder);
return 0;
return mainReadIBM(argc, argv);
}

View File

@@ -12,17 +12,17 @@
static FlagGroup flags { &readerFlags };
static IntFlag sectorIdBase(
IntFlag sectorIdBase(
{ "--ibm-sector-id-base" },
"Sector ID of the first sector.",
1);
static BoolFlag ignoreSideByte(
BoolFlag ignoreSideByte(
{ "--ibm-ignore-side-byte" },
"Ignore the side byte in the sector ID, and use the physical side instead.",
false);
static RangeFlag requiredSectors(
RangeFlag requiredSectors(
{ "--ibm-required-sectors" },
"A comma seperated list or range of sectors which must be on each track.",
"");

View File

@@ -1,138 +0,0 @@
#include "globals.h"
#include "flags.h"
#include "decoders/decoders.h"
#include "encoders/encoders.h"
#include "ibm/ibm.h"
#include "writer.h"
#include "fmt/format.h"
#include <fstream>
static FlagGroup flags { &writerFlags };
static IntFlag sectorSize(
{ "--st-sector-size" },
"Size of the sectors to write (bytes).",
512);
static IntFlag gap1(
{ "--st-gap1-bytes" },
"Size of gap 1 (the post-index gap).",
60);
static IntFlag gap2(
{ "--st-gap2-bytes" },
"Size of gap 2 (the post-ID gap).",
22);
static IntFlag gap3(
{ "--st-gap3-bytes" },
"Size of gap 3 (the post-data or format gap).",
40);
static StringFlag sectorSkew(
{ "--st-sector-skew" },
"Order to emit sectors.",
"");
static BoolFlag swapSides(
{ "--ibm-swap-sides" },
"Swap sides while writing.",
false);
static ActionFlag preset360(
{ "--st-preset-360" },
"Preset parameters to a 3.5\" 360kB disk (1 side, 80 tracks, 9 sectors).",
[] {
setWriterDefaultDest(":d=0:s=0:t=0-79");
setWriterDefaultInput(":c=80:h=1:s=9:b=512");
sectorSkew.setDefaultValue("012345678");
});
static ActionFlag preset370(
{ "--st-preset-380" },
"Preset parameters to a 3.5\" 370kB disk (1 side, 82 tracks, 9 sectors).",
[] {
setWriterDefaultDest(":d=0:s=0:t=0-81");
setWriterDefaultInput(":c=82:h=1:s=9:b=512");
sectorSkew.setDefaultValue("012345678");
});
static ActionFlag preset400(
{ "--st-preset-400" },
"Preset parameters to a 3.5\" 400kB disk (1 side, 80 Tracks, 10 sectors).",
[] {
setWriterDefaultDest(":d=0:s=0:t=0-79");
setWriterDefaultInput(":c=80:h=1:s=10:b=512");
sectorSkew.setDefaultValue("0123456789");
});
static ActionFlag preset410(
{ "--st-preset-410" },
"Preset parameters to a 3.5\" 410kB disk (1 side, 82 tracks, 10 sectors).",
[] {
setWriterDefaultDest(":d=0:s=0:t=0-81");
setWriterDefaultInput(":c=82:h=1:s=10:b=512");
sectorSkew.setDefaultValue("0123456789");
});
static ActionFlag preset720(
{ "--st-preset-720" },
"Preset parameters to a 3.5\" 720kB disk (2 sides, 80 tracks, 9 sectors).",
[] {
setWriterDefaultDest(":d=0:s=0-1:t=0-79");
setWriterDefaultInput(":c=80:h=2:s=9:b=512");
sectorSkew.setDefaultValue("012345678");
});
static ActionFlag preset740(
{ "--st-preset-740" },
"Preset parameters to a 3.5\" 740kB disk (2 sides, 82 tracks, 9 sectors).",
[] {
setWriterDefaultDest(":d=0:s=0-1:t=0-81");
setWriterDefaultInput(":c=82:h=2:s=9:b=512");
sectorSkew.setDefaultValue("012345678");
});
static ActionFlag preset800(
{ "--st-preset-800" },
"Preset parameters to a 3.5\" 800kB disk (2 sides, 80 tracks, 10 sectors).",
[] {
setWriterDefaultDest(":d=0:s=0-1:t=0-79");
setWriterDefaultInput(":c=80:h=2:s=10:b=512");
sectorSkew.setDefaultValue("0123456789");
});
static ActionFlag preset820(
{ "--st-preset-820" },
"Preset parameters to a 3.5\" 820kB disk (2 sides, 82 tracks, 10 sectors).",
[] {
setWriterDefaultDest(":d=0:s=0-1:t=0-81");
setWriterDefaultInput(":c=82:h=2:s=10:b=512");
sectorSkew.setDefaultValue("0123456789");
});
int mainWriteAtariST(int argc, const char* argv[])
{
setWriterDefaultDest(":d=0:t=0-79:s=0-1");
flags.parseFlags(argc, argv);
IbmParameters parameters;
parameters.trackLengthMs = 200;
parameters.sectorSize = sectorSize;
parameters.emitIam = false;
parameters.startSectorId = 1;
parameters.clockRateKhz = 250;
parameters.useFm = false;
parameters.idamByte = 0x5554;
parameters.damByte = 0x5545;
parameters.gap0 = 0;
parameters.gap1 = gap1;
parameters.gap2 = gap2;
parameters.gap3 = gap3;
parameters.sectorSkew = sectorSkew;
parameters.swapSides = swapSides;
IbmEncoder encoder(parameters);
writeDiskCommand(encoder);
return 0;
}

View File

@@ -79,40 +79,160 @@ static BoolFlag swapSides(
"Swap sides while writing. Needed for Commodore 1581, CMD FD-2000, Thomson TO7.",
false);
/* --- IBM disks ----------------------------------------------------------- */
static void set_ibm_defaults()
{
sectorSize.setDefaultValue(512);
emitIam.setDefaultValue(true);
idamByte.setDefaultValue(0x5554);
damByte.setDefaultValue(0x5545);
gap0.setDefaultValue(80);
gap1.setDefaultValue(50);
gap2.setDefaultValue(22);
gap3.setDefaultValue(80);
swapSides.setDefaultValue(false);
}
static ActionFlag preset1440(
{ "--ibm-preset-1440" },
"Preset parameters to a 3.5\" 1440kB disk.",
"Preset parameters to a PC 3.5\" 1440kB disk.",
[] {
setWriterDefaultInput(":c=80:h=2:s=18:b=512");
trackLengthMs.setDefaultValue(200);
sectorSize.setDefaultValue(512);
emitIam.setDefaultValue(true);
clockRateKhz.setDefaultValue(500);
idamByte.setDefaultValue(0x5554);
damByte.setDefaultValue(0x5545);
gap0.setDefaultValue(80);
gap1.setDefaultValue(50);
gap2.setDefaultValue(22);
gap3.setDefaultValue(80);
sectorSkew.setDefaultValue("0123456789abcdefgh");
set_ibm_defaults();
});
static ActionFlag preset720(
{ "--ibm-preset-720" },
"Preset parameters to a 3.5\" 720kB disk.",
"Preset parameters to a PC 3.5\" 720kB disk.",
[] {
setWriterDefaultInput(":c=80:h=2:s=9:b=512");
trackLengthMs.setDefaultValue(200);
clockRateKhz.setDefaultValue(250);
sectorSkew.setDefaultValue("012345678");
});
/* --- Commodore disks ----------------------------------------------------- */
static ActionFlag presetCBM1581(
{ "--ibm-preset-commodore-1581" },
"Preset parameters to a Commodore 3.5\" 800kB 1581 disk.",
[] {
setWriterDefaultInput(":c=80:h=2:s=10:b=512");
trackLengthMs.setDefaultValue(200);
sectorSize.setDefaultValue(512);
emitIam.setDefaultValue(true);
startSectorId.setDefaultValue(1);
emitIam.setDefaultValue(false);
clockRateKhz.setDefaultValue(250);
idamByte.setDefaultValue(0x5554);
damByte.setDefaultValue(0x5545);
gap0.setDefaultValue(80);
gap1.setDefaultValue(50);
gap1.setDefaultValue(80); //as emitIam is false this value remains unused
gap2.setDefaultValue(22);
gap3.setDefaultValue(80);
gap3.setDefaultValue(34);
sectorSkew.setDefaultValue("0123456789");
swapSides.setDefaultValue(true);
});
/* --- Atari ST disks ------------------------------------------------------ */
static void set_atari_defaults()
{
trackLengthMs.setDefaultValue(200);
sectorSize.setDefaultValue(512);
startSectorId.setDefaultValue(1);
emitIam.setDefaultValue(false);
clockRateKhz.setDefaultValue(250);
idamByte.setDefaultValue(0x5554);
damByte.setDefaultValue(0x5545);
gap0.setDefaultValue(80);
gap1.setDefaultValue(80); //as emitIam is false this value remains unused
gap2.setDefaultValue(22);
gap3.setDefaultValue(34);
swapSides.setDefaultValue(true);
}
static ActionFlag presetAtariST360(
{ "--ibm-preset-atarist-360" },
"Preset parameters to an Atari ST 3.5\" 360kB disk.",
[] {
setWriterDefaultDest(":d=0:s=0:t=0-79");
setWriterDefaultInput(":c=80:h=1:s=9:b=512");
sectorSkew.setDefaultValue("012345678");
set_atari_defaults();
});
static ActionFlag presetAtariST370(
{ "--ibm-preset-atarist-380" },
"Preset parameters to an Atari ST 3.5\" 370kB disk.",
[] {
setWriterDefaultDest(":d=0:s=0:t=0-81");
setWriterDefaultInput(":c=82:h=1:s=9:b=512");
sectorSkew.setDefaultValue("012345678");
set_atari_defaults();
});
static ActionFlag presetAtariST400(
{ "--ibm-preset-atarist-400" },
"Preset parameters to an Atari ST 3.5\" 400kB disk.",
[] {
setWriterDefaultDest(":d=0:s=0:t=0-79");
setWriterDefaultInput(":c=80:h=1:s=10:b=512");
sectorSkew.setDefaultValue("0123456789");
set_atari_defaults();
});
static ActionFlag presetAtariST410(
{ "--ibm-preset-atarist-410" },
"Preset parameters to an Atari ST 3.5\" 410kB disk.",
[] {
setWriterDefaultDest(":d=0:s=0:t=0-81");
setWriterDefaultInput(":c=82:h=1:s=10:b=512");
sectorSkew.setDefaultValue("0123456789");
set_atari_defaults();
});
static ActionFlag presetAtariST720(
{ "--ibm-preset-atarist-720" },
"Preset parameters to an Atari ST 3.5\" 720kB disk.",
[] {
setWriterDefaultDest(":d=0:s=0-1:t=0-79");
setWriterDefaultInput(":c=80:h=2:s=9:b=512");
sectorSkew.setDefaultValue("012345678");
set_atari_defaults();
});
static ActionFlag presetAtariST740(
{ "--ibm-preset-atarist-740" },
"Preset parameters to an Atari ST 3.5\" 740kB disk.",
[] {
setWriterDefaultDest(":d=0:s=0-1:t=0-81");
setWriterDefaultInput(":c=82:h=2:s=9:b=512");
sectorSkew.setDefaultValue("012345678");
set_atari_defaults();
});
static ActionFlag presetAtariST800(
{ "--ibm-preset-atarist-800" },
"Preset parameters to an Atari ST 3.5\" 800kB disk.",
[] {
setWriterDefaultDest(":d=0:s=0-1:t=0-79");
setWriterDefaultInput(":c=80:h=2:s=10:b=512");
sectorSkew.setDefaultValue("0123456789");
set_atari_defaults();
});
static ActionFlag presetAtariST820(
{ "--ibm-preset-atarist-820" },
"Preset parameters to an Atari ST 3.5\" 820kB disk.",
[] {
setWriterDefaultDest(":d=0:s=0-1:t=0-81");
setWriterDefaultInput(":c=82:h=2:s=10:b=512");
sectorSkew.setDefaultValue("0123456789");
set_atari_defaults();
});
int mainWriteIbm(int argc, const char* argv[])

View File

@@ -35,7 +35,6 @@ extern command_cb mainTestBandwidth;
extern command_cb mainTestVoltages;
extern command_cb mainUpgradeFluxFile;
extern command_cb mainWriteAmiga;
extern command_cb mainWriteAtariST;
extern command_cb mainWriteBrother;
extern command_cb mainWriteIbm;
extern command_cb mainWriteMac;
@@ -97,7 +96,6 @@ static std::vector<Command> readables =
static std::vector<Command> writeables =
{
{ "amiga", mainWriteAmiga, "Writes Amiga disks.", },
{ "atarist", mainWriteAtariST, "Writes Atari ST disks.", },
{ "brother", mainWriteBrother, "Writes 120kB and 240kB Brother word processor disks.", },
{ "ibm", mainWriteIbm, "Writes the ubiquitous IBM format disks.", },
{ "mac", mainWriteMac, "Writes Apple Macintosh disks.", },

14
src/readibm.h Normal file
View File

@@ -0,0 +1,14 @@
#ifndef READIBM_H
#define READIBM_H
#include "flags.h"
#include "dataspec.h"
extern IntFlag sectorIdBase;
extern BoolFlag ignoreSideByte;
extern RangeFlag requiredSectors;
extern int mainReadIBM(int argc, const char* argv[]);
#endif