Re: Question about writing to 1541

From: Patrycjusz R. Łogiewa (
Date: 2005-05-04 00:39:43

On 2005-05-03, at 13:35, Baltissen, GJPAA (Ruud) wrote:

> Andre wrote:
>> Second: Indeed in the write block routine ($f575) the last
>> "BVC *" at $F5CA waits for the last data byte (from ($30),y)
>> to be _loaded_ into the shift register.
> (After studying the schematics) Yep, you're absolutely right. So it is 
> not
> the end of the writing proces, but the beginning.
>> Immediately after that the PCR is set to input again, so there
>> is no time to shift the last data byte out to the RW-head
>> completely.
> Illogical, but that seems to be the case.
> Regarding the two BVC's were the discussion started with: the first one
> starts the proces of writing the last $55 and the second one makes 
> sure it
> is written and not dumped like the databyte during the proces 
> mentioned by
> Andre. I'm just wondering why the programmer cared so much for this 
> $55 byte
> and neglected this databyte. Only one thing comes to my mind: two 
> different
> programmers. One that likes to see things neatly closed and a sloppy 
> one who
> knew that the 1541 didn't do anything with the last byte and so didn't 
> care
> about it. It even can be a programming error but as it had no visible
> result, nobody noticed it.

Yup. Still quite strange..

> For Patryk:
>> 	LDA #$55
>> 	LDX $45
>> L784:
>> 	BVC L784
>> 	CLV
>> 	STA $1C01
>> 	DEX
>> 	BNE L784
> Where do you initialise $45?

	LDX #$04
	LDA $22
	CMP L50D,X	; check the speedzone boundaries
	LDA $FED1,X	; get number of sectors per track
	STA $43
	LDA L511,X	; interleave? gap?
	STA $45
	lsr			; move the
	ror			; speedzone number bits
	ror			; to bits 4 and 5
	ror			; as required by VIA2PB
	STA $44		; $44 - bitrate aka density?
	LDA $1C00
	AND #$9F		; isolate the bitrate bits
	ORA $44		; get the bits from $44
	STA $1C00		; and set the bitrate

   .BYTE $FF,$1F,$19,$12
   .BYTE $07,$07,$08,$09

> Anyway, your routine also proofs the statement
> I made above. I also question the use of 'STA $1C01' here; it doesn't 
> add
> anything. IMHO it could have been placed immediatly after 'LDA #$55'. 
> BTW,
> the 1541 does the same. Why?

You tell me please :-)  Parts of the routines here are clear 
derivatives of the ROM routines. Possibly because nobody understood 
what they really do, yet they worked well.. You mean that the byte 
written to the $1c01 gets written again and again until stopped? And 
that re-writing the register doesn't affect anything in the write 
process? Timing? Doesn't look so.. Dunno. Will have to do some tests 
with those routines. I will try to adapt this to the DD3 board so I 
would also like to know what I am doing.

To Spiro:

What was the exact process when you originally noticed the 

Any man at the age of less than 30 not being a liberal has no heart.
Any man at the age of more than 30 and not being a conservative has no 
- supposedly Sir Winston Churchill

       Message was sent through the cbm-hackers mailing list

Archive generated by hypermail pre-2.1.8.