From: Spiro Trikaliotis (ml-cbmhackers_at_trikaliotis.net)
Date: 2005-04-21 20:18:19
Hello, I have a question about writing to the 1541 (and 1571) drives, and I hope you will be able to help me. Looking at the "write to disk" DC routine ($F56E), you see the following code: .8:f5bf B1 30 LDA ($30),Y ; write the last bytes .8:f5c1 50 FE BVC $F5C1 .8:f5c3 B8 CLV .8:f5c4 8D 01 1C STA $1C01 .8:f5c7 C8 INY .8:f5c8 D0 F5 BNE $F5BF .8:f5ca 50 FE BVC $F5CA ; make sure the last byte is written .8:f5cc AD 0C 1C LDA $1C0C ; set read mode again .8:f5cf 09 E0 ORA #$E0 .8:f5d1 8D 0C 1C STA $1C0C .8:f5d4 A9 00 LDA #$00 ; data port as input .8:f5d6 8D 03 1C STA $1C03 Ok, this works fine - as we all know, we can write to a disk with that routine. Now, the format routine handles the same (writing a block to disk) a little bit differently: .8:fd1e 50 FE BVC $FD1E ; make sure the last byte is written .8:fd20 B8 CLV .8:fd21 50 FE BVC $FD21 ; write another (!) byte to disk .8:fd23 B8 CLV .8:fd24 20 00 FE JSR $FE00 ; set read mode and data port as input .8:fe00 AD 0C 1C LDA $1C0C .8:fe03 09 E0 ORA #$E0 .8:fe05 8D 0C 1C STA $1C0C .8:fe08 A9 00 LDA #$00 .8:fe0a 8D 03 1C STA $1C03 .8:fe0d 60 RTS Does anyone know why the routine waits an additional byte to be written? I was correcting the cbmformat routine of cbm4win as I found out something strange. My own format routine only had one "BVC *" inside of it before setting the DC to read mode again. Reading the disk worked perfectly, but somehow, my verify (doing a byte-by-byte compare) always failed. By comparing my format routine with the routine of the ROM, I encountered the double "BVC *". Adding another one, the formatting works as expected. Unfortunately, I do not understand this. Can anyone explain me why I need two "BVC *" in the formatting case, but only one in the writing case? Regards, Spiro. -- Spiro R. Trikaliotis http://www.trikaliotis.net/ Message was sent through the cbm-hackers mailing list
Archive generated by hypermail pre-2.1.8.