| |
Oswald
Registered: Apr 2002 Posts: 5094 |
drivecoding
Hi people!
I have looked for info on the topic with google, but I think there is very little info on this out there. Anyone can post some useful links?
other questions:
- anyone can give me a sourcecode which would upload any kind of prg to the drive, and execute it ?
- why atn cant be used to send bits ?
- where is the entry point in the drive rom of the soft reset routine?
|
|
... 11 posts hidden. Click here to view all posts.... |
| |
Radar Account closed
Registered: Jul 2003 Posts: 259 |
Quote: Hi people!
I have looked for info on the topic with google, but I think there is very little info on this out there. Anyone can post some useful links?
other questions:
- anyone can give me a sourcecode which would upload any kind of prg to the drive, and execute it ?
- why atn cant be used to send bits ?
- where is the entry point in the drive rom of the soft reset routine?
Look at all IFFL-routines back from 90-92. The scanner-code has been sent into the 1541-memory and got executed. That's the way we liked it ;-) Afterwards you can read bits/bytes out of the routine. Why not reading the 'Big 1541 Book' from Data Becker from 1988? There you will find all solutions to all your questions... |
| |
cadaver
Registered: Feb 2002 Posts: 1160 |
Ah, a mistake, reset vector is of course at $fffc. Btw I would be interested in sourcecode of IFFL routines too but all readily available sources, according to my searches, seem to be lame (ie. not real scanning IFFL, but instead read bytes off the file until correct position reached) |
| |
Radar Account closed
Registered: Jul 2003 Posts: 259 |
Quote: Ah, a mistake, reset vector is of course at $fffc. Btw I would be interested in sourcecode of IFFL routines too but all readily available sources, according to my searches, seem to be lame (ie. not real scanning IFFL, but instead read bytes off the file until correct position reached)
Nah, that's just a trick just like reading seq-files and then calculating t/s/b. Look at the public ftp's and you'll find something neat then, eg. arnold-ftp
And btw, why did you start 3 threads with the same question? |
| |
Graham Account closed
Registered: Dec 2002 Posts: 990 |
@oswald:
sending stuff to drive is fairly easy:
; send LISTEN to drive:
LDA $BA ; device number (usually 8)
JSR $FFB1 ; LISTEN
LDA #$6F ; secondary adress (15)
JSR $FF93 ; SECLSN
; send M-W command to drive:
LDA #"M"
JSR $FFA8 ; IECOUT
LDA #"-"
JSR $FFA8
LDA #"W"
JSR $FFA8
; send adress and size to drive:
LDA #$00 ; adress in drive (low byte)
JSR $FFA8
LDA #$04 ; adress in drive (high byte)
JSR $FFA8
LDA #$20 ; 32 bytes
JSR $FFA8
; transfer stuff:
LDY #$00
.bla
LDA drivestuff,Y
JSR $FFA8
INY
CPY #$20
BNE .bla
; send UNLISTEN to drive:
JSR $FFAE ; UNLSN
that's it. the maximum transfer size in one go is 36 bytes, so typically people will use the M-W command in 32 bytes chunks. |
| |
Oswald
Registered: Apr 2002 Posts: 5094 |
thanks for all the help so far!
atn seems to be quite tricky.
$1800:
Bit #4: ATNA OUT; 1 = Enable device presence detection by acknowledging ATN IN signals on DATA OUT
Bit #7: ATN IN; 0 = Low; 1 = High.
so this means, that bit 4 must be set high, to be able to read a high ATN signal on bit 7 ? but when c64 sets atn high this will also pull DATA to 0 ?
it looks that atn then can set to low by the c64 without bit 4 in 1800 being high, this is what I saw in krill's sources.
can anyone verify that this works the way I wrote?:)
|
| |
Graham Account closed
Registered: Dec 2002 Posts: 990 |
if you want to read ATN IN you must set ATN OUT to 0, same with DATA and CLK. same with $DD00 in the c64, with the difference that the two IN bits are inverted there. |
| |
Oswald
Registered: Apr 2002 Posts: 5094 |
this is how krill did it:
(hope he wont mind, he released the source to public anyway)
LDA #$00
STA $1800 ;ATN 2 LO
BIT $1800
BPL *-3 ;wait 4 ATN LO
DSENDLUP LDX GCRSPLT3+1,Y
LDA NUGCRDEC-$09,X
LDX GCRSPLT2+1,Y
BIT $1800 ;wait 4 ATN HI
BMI *-3
STA $1800 ;send 2 bits
ASL A
ORA #%00010000
BIT $1800 ;wait 4 ATN LO
BPL *-3
STA $1800 ;send 2 bits,ATN to HI
LDA NUGCRDEC-$09,X
BIT $1800 ;wait 4 ATN HI
BMI *-3
STA $1800 ;send 2 bits ATN to LO
ASL A
ORA #%00010000
BIT $1800 ;wait 4 ATN LO
BPL *-3
why does he need to set atn out to high every second time?
maybe atn high can only be read when atn out is also high?
aint it possible to read atn lo/hi state leaving atn out 0 all the time? |
| |
Hoogo
Registered: Jun 2002 Posts: 105 |
If I remember it correctly, DATA works fine when ATN OUT of the floppy and of the C64 have the same value. It is part of the serial protocol that all devices on the bus shall pull Data down when ATN is set. In the 1541 that was partly done in hardware and partly in software. But I don't remember the exact meaning. |
| |
Oswald
Registered: Apr 2002 Posts: 5094 |
Quote: if you want to read ATN IN you must set ATN OUT to 0, same with DATA and CLK. same with $DD00 in the c64, with the difference that the two IN bits are inverted there.
it doesnt quite looks so in krill's source, he reads ATN IN without taking care of the state of DATA and CLK, but there is this fiddling with ATN OUT, even he cant explain why its there... |
| |
Cybernator
Registered: Jun 2002 Posts: 154 |
Quote: it doesnt quite looks so in krill's source, he reads ATN IN without taking care of the state of DATA and CLK, but there is this fiddling with ATN OUT, even he cant explain why its there...
You misunderstood Graham's point. When you want to read ATN IN, you must set ATN OUT to 0. When you want to read DATA IN, you must set DATA OUT to 0, etc... |
Previous - 1 | 2 | 3 - Next |