The ROM for the 1541-II can be used for any older drive without problems, and it contains many fixes to the CBM-DOS V2.6. However, the modifications introduced in the 1541-II firmware are incompatible with many floppy speeder systems. To make the 1541-II firmware to work with fastloader systems such as SpeedDOS, it needs to be prepared. Patches that are located in the upper bank (0xE000-0xFFFF) need to be moved to the lower bank (0xC000-0xDFFF), so that the upper bank can be replaced by the floppy speeder firmware without losing the patches. The file "1541-II-relocated.bin" has been prepared in the above mentioned way. This file documents the changes. It also documents the changes between the most common firmware for the upper bank (901229-05, 0xE000-0xFFFF) and the upper bank of the prepared 1541-II firmware. diff 1541-II.251968-03.od.txt 1541-II-relocated.od.txt Changes made to create the 1541-II ROM named "1541-II CBM IMPR". Mainly the patches for the 0xE000 ROM part were moved from the upper ROM address 0xFF2F to the lower ROM address 0xC09F. All references to these patches must be changed also. || update of the 0xC000 ROM checksum < 00c000 97 e0 43 4f 50 59 52 49 47 48 54 20 28 43 29 31 --- > 00c000 97 db 43 4f 50 59 52 49 47 48 54 20 28 43 29 31 *****.... moved patches from 0xFF2F < 00c090 4c aa e6 c9 03 b0 05 a9 72 20 c7 e6 a9 01 60 aa < 00c0a0 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa < 00c0b0 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa < 00c0c0 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa < 00c0d0 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa < 00c0e0 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa --- > 00c090 4c aa e6 c9 03 b0 05 a9 72 20 c7 e6 a9 01 60 a9 > 00c0a0 ff 85 51 4c c6 c8 85 ff 4c 00 c1 c9 02 90 07 c9 > 00c0b0 0f f0 03 4c 6b d3 4c 73 d3 78 a2 45 9a 4c 25 eb > 00c0c0 2c 01 18 4c 5b e8 bd ff 00 60 a6 7f bd ff 00 4c > 00c0d0 1b f0 a9 00 9d ff 00 4c b7 c1 98 9d ff 00 4c 64 > 00c0e0 c6 95 1c 9d ff 00 4c 75 d0 aa aa aa aa aa aa aa || || updated patch location < 00c1b0 8e 02 aa 4c 62 ff ea 20 bd c1 4c da d4 a0 28 a9 --- ** ** > 00c1b0 8e 02 aa 4c d2 c0 ea 20 bd c1 4c da d4 a0 28 a9 || || updated patch locations || || < 00c660 7f 4c 6a ff d0 03 20 42 d0 a6 7f 4c 56 ff 48 20 --- ** ** ** ** > 00c660 7f 4c da c0 d0 03 20 42 d0 a6 7f 4c c6 c0 48 20 || || updated patch location < 00d070 00 4c 71 ff ea 20 3a ef a0 04 a9 00 aa 18 71 6d --- ** ** > 00d070 00 4c e1 c0 ea 20 3a ef a0 04 a9 00 aa 18 71 6d updated patch location || || < 00d360 29 3f aa b5 00 30 fc 4c 3b ff ea a6 6f e0 07 90 --- ** ** > 00d360 29 3f aa b5 00 30 fc 4c ab c0 ea a6 6f e0 07 90 updated patch location || || < 00ea60 10 09 60 ad 00 18 10 fa 4c 50 ff 4c d7 e8 a2 00 --- ** ** > 00ea60 10 09 60 ad 00 18 10 fa 4c c0 c0 4c d7 e8 a2 00 || || updated patch location < 00eb20 71 ea 4c 49 ff ad 00 1c 29 f7 8d 00 1c a9 01 8d --- ** ** > 00eb20 71 ea 4c b9 c0 ad 00 1c 29 f7 8d 00 1c a9 01 8d || || updated patch location < 00ec00 a5 7c f0 03 4c 50 ff 58 a9 0e 85 72 a9 00 85 6f --- ** ** > 00ec00 a5 7c f0 03 4c c0 c0 58 a9 0e 85 72 a9 00 85 6f updated patch location || || < 00ee10 a5 e2 10 05 a9 33 4c c8 c1 29 01 85 7f 20 36 ff --- ** ** > 00ee10 a5 e2 10 05 a9 33 4c c8 c1 29 01 85 7f 20 a6 c0 updated patch location || || < 00ee30 12 b9 01 02 95 13 20 07 d3 a9 01 85 80 20 2f ff --- ** ** > 00ee30 12 b9 01 02 95 13 20 07 d3 a9 01 85 80 20 9f c0 updated patch location || || < 00f010 60 a5 6f 48 a5 70 48 4c 5a ff ea f0 05 a9 74 20 --- ** ** > 00f010 60 a5 6f 48 a5 70 48 4c ca c0 ea f0 05 a9 74 20 update of the || 0xE000 ROM checksum < 00fee0 03 04 05 06 07 07 79 6c 65 00 8d 00 1c 8d 02 1c --- ** > 00fee0 03 04 05 06 07 07 61 6c 65 00 8d 00 1c 8d 02 1c *****.... removed patches from 0xFF2F < 00ff20 ad 00 18 29 01 d0 f9 a9 01 8d 05 18 4c df e9 a9 < 00ff30 ff 85 51 4c c6 c8 85 ff 4c 00 c1 c9 02 90 07 c9 < 00ff40 0f f0 03 4c 6b d3 4c 73 d3 78 a2 45 9a 4c 25 eb < 00ff50 2c 01 18 4c 5b e8 bd ff 00 60 a6 7f bd ff 00 4c < 00ff60 1b f0 a9 00 9d ff 00 4c b7 c1 98 9d ff 00 4c 64 < 00ff70 c6 95 1c 9d ff 00 4c 75 d0 aa aa aa aa aa aa aa --- > 00ff20 ad 00 18 29 01 d0 f9 a9 01 8d 05 18 4c df e9 aa > 00ff30 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa > 00ff40 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa > 00ff50 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa > 00ff60 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa > 00ff70 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa Special notes: The remaining spare space of the lower ROM patch area (0xC0E9) could be used for version string informations instead of changing the ident string (CBM-DOS V2.6 1541). The lower ROM checksum byte (0xC001) needs to be adjusted accordingly then. Changes in the upper ROM area (0xE000) from the latest 1541-I model ROM to the improved 1541-II ROM version. This is made, so that these changes can be injected into certain speeder system ROMs. This way, these ROMs may also profit from the patches integrated into the 1541-II. If you want to patch another speeder ROM (upper ROM) only, so that it uses the patches of the lower ROM part of the improved 1541-II ROM version, then you would have to carefully check the following addresses, if the changes could be integrated. 0xE69C (3): 0xE780 (1): 0xEA69 (2): 0xEB22 (3): 0xEC05 (2): 0xEE1E (2): 0xEE3E (2): 0xEFC5 (4): 0xF017 (4): 0xFCAF (2): 0xFEE6 (1): 0xFFE5 (1): If the code of the speeder ROM doesn't match the code of the old 1541-I upper system ROM as shown below, it would be better to omit this particular change. Probably the speeder ROM applied it's own patch or fix at this location. diff 1541-e000.901229-05.od.txt 1541-II-relocated.od.txt ** 0xE69C (3): call patch instead of "lda #00; sed" || || || < 00e690 d1 c9 04 b0 03 20 27 d2 4c e7 eb aa a9 00 f8 e0 --- ** ** ** > 00e690 d1 c9 04 b0 03 20 27 d2 4c e7 eb aa 4c 7f c0 e0 ** 0xE780 (1): || old, unneeded code removed < 00e780 60 ea ea ea ea ea ea ea ea ea ea ea ea ea ea ea --- ** > 00e780 ea ea ea ea ea ea ea ea ea ea ea ea ea ea ea ea ** 0xEA69 (2): call patch || || < 00ea60 10 09 60 ad 00 18 10 fa 4c 5b e8 4c d7 e8 a2 00 --- ** ** > 00ea60 10 09 60 ad 00 18 10 fa 4c c0 c0 4c d7 e8 a2 00 ** 0xEB22 (3): || || || call patch instead of "ldx #45; txs" < 00eb20 71 ea a2 45 9a ad 00 1c 29 f7 8d 00 1c a9 01 8d --- ** ** ** > 00eb20 71 ea 4c b9 c0 ad 00 1c 29 f7 8d 00 1c a9 01 8d ** 0xEC05 (2): || || call patch < 00ec00 a5 7c f0 03 4c 5b e8 58 a9 0e 85 72 a9 00 85 6f --- ** ** > 00ec00 a5 7c f0 03 4c c0 c0 58 a9 0e 85 72 a9 00 85 6f ** 0xEE1E (2): call patch || || < 00ee10 a5 e2 10 05 a9 33 4c c8 c1 29 01 85 7f 20 00 c1 --- ** ** > 00ee10 a5 e2 10 05 a9 33 4c c8 c1 29 01 85 7f 20 a6 c0 ** 0xEE3E (2): call patch || || < 00ee30 12 b9 01 02 95 13 20 07 d3 a9 01 85 80 20 c6 c8 --- ** ** > 00ee30 12 b9 01 02 95 13 20 07 d3 a9 01 85 80 20 9f c0 ** 0xEFC5 (4): call patch || || || || instead of "cmp #03; bcs efce" < 00efc0 d0 0c bd fa 02 c9 03 b0 05 a9 72 20 c7 e6 60 20 --- ** ** ** ** > 00efc0 d0 0c bd fa 02 4c 93 c0 ea a9 72 20 c7 e6 60 20 ** 0xF017 (4): call patch || || || || instead of "ldx 7f; lda ff,x" < 00f010 60 a5 6f 48 a5 70 48 a6 7f b5 ff f0 05 a9 74 20 --- ** ** ** ** > 00f010 60 a5 6f 48 a5 70 48 4c ca c0 ea f0 05 a9 74 20 ** 0xFCAF (2): || || call patch < 00fca8 8f f7 a9 00 85 32 20 0e fe a9 ff 8d 01 1c a2 05 --- ** ** > 00fca8 8f f7 a9 00 85 32 20 4e c0 a9 ff 8d 01 1c a2 05 ** 0xFEE6 (1): || changed checksum byte < 00fee0 03 04 05 06 07 07 3e 6c 65 00 8d 00 1c 8d 02 1c --- ** > 00fee0 03 04 05 06 07 07 61 6c 65 00 8d 00 1c 8d 02 1c ** 0xFFE5 (1): || alternative 1541-II checksum? < 00ffe0 aa aa aa aa aa aa c6 c8 8f f9 5f cd 97 cd 00 05 --- ** > 00ffe0 aa aa aa aa aa eb c6 c8 8f f9 5f cd 97 cd 00 05