| | Monte Carlos
Registered: Jun 2004 Posts: 358 |
Error message: "Found more than one drive on IEC bus" with C128D metal and recent demos
Sorry for this lamer question. I use an C128D(metal), currently (although i have used C64 for years until i got room problems with the complete setup).
I have attached a 1541 ultimate and changed the internal 1571 drive to device no 10 by cutting the solder pads. The ultimate has dev no 8. This way i can watch many, mostly old, demos with 1541U. However, the most current demos always complain about more than one drive being enabled. Ok, i thought, plugging off the internal 1571 from the mainbord should fix the problem. I was wrong. The loaders still complain about more than one drive.
Am i wrong with my understanding that plugging off the internal drive also disables the ATN signal? |
|
... 34 posts hidden. Click here to view all posts.... |
| | Monte Carlos
Registered: Jun 2004 Posts: 358 |
I did already with this
#include <cbm.h>
#include <stdio.h>
char openFile(void){
char openErr;
if ( (openErr = cbm_k_open()) ){
printf("Open failed: Return value = %d\n", openErr);
}
return openErr;
}
void main(void){
char drivecmd[] = "u0>\x09";
char openErr;
cbm_k_setlfs (15, 8,15);
cbm_k_setnam (drivecmd);
if ( !(openErr = openFile()) ){
cbm_k_close(15);
printf("Successfully changed device\n");
}else{
printf("Could not change device\n");
cbm_k_close(15);
}
}
and this
OPEN 1,ID,15,"M-W"+CHR$(119)+CHR$(0)+CHR$(2)+CHR$(0)+CHR$(0):CLOSE 1
My software solution attemps were not of much use up to now.
However, your drive code suggestion is different.
I could place an installation code into the root dir of the 1541U usb stick, so that i could execute it anytime before watching demos.
Didn't know that ATN call and answer chain could be influenced by software. |
| | Krill
Registered: Apr 2002 Posts: 2969 |
The ATN problem is automatic acknowledgement by hardware on the physical layer, not the drive's address on the protocol layer.
The drive automatically pulls the DATA line low if the incoming ATN signal does not match the drive's ATNA setting.
Since the typical demo loader uses a 2bit+ATN protocol, ATN is used for clocking and is being toggled all the time. Any device on the bus not setting its ATNA value to match the incoming ATN signal in time would then invalidate what's sent on the DATA line by the current talker.
So the solution is to have a small routine running on all other drives than the one you're running the demo from, which would sample ATN and set ATNA accordingly, in a very tight loop, while it leaves the DATA and CLK lines unasserted.
(Note: 1581 ATN acknowledgement can be turned off, but 1541 and 1571 in all their variants must run software to achieve the same effect.) |
| | Monte Carlos
Registered: Jun 2004 Posts: 358 |
Unfortunately i did not bother very much about drive code and iec protocol and so on during my scene times. However, thank you very much for the discussion. Maybe i should have a look in the floppy chapter of my holy c64 bible.
No one who still uses a C128 dcr? |
| | Krill
Registered: Apr 2002 Posts: 2969 |
I will hack up something as soon as time permits, and your problem has finally convinced me to add this feature to the upcoming next iteration of my loader. :)
Oh, and i have a C128DCR which Graham once gave me, but i rarely use it, and then only with the built-in drive. |
| | Krill
Registered: Apr 2002 Posts: 2969 |
Here it is now, a little program to silence offending drives when running demos with 2-bit+ATN loaders. This one is hardcoded for #9. ACME source. Not tested on realthing yet.
tightloop = 0; 1 might work better on 1541, 0 might work better on 1571
!to "busoff.prg", cbm
* = $0801
!word 2048, 2017; link, line number
!byte $9e; SYS
!text "2064"
!byte 0, 0, 0; end
!text "+H!"
lda #9 ; device number
jsr listen
!if tightloop {
ldx #0
datalo: lda atnlo,x
jsr $ffa8; IECOUT
inx
cpx #atnloend - atnlo
bne datalo
jsr $ffae; UNLSTN
lda $ae ; FA
jsr listen
ldx #0
datahi: lda atnhi,x
jsr $ffa8; IECOUT
inx
cpx #atnhiend - atnhi
bne datahi
jsr $ffae; UNLSTN
lda $ae ; FA
jsr listen
}
ldx #0
exec: lda command,x
jsr $ffa8; IECOUT
inx
cpx #endcommand - command
bne exec
jmp $ffae; UNLSTN
listen: ldx #0
stx $90 ; STATUS
sta $ae ; FA
jsr $ffb1; LISTEN
lda #$6f ; open channel 15 (command/error channel)
jsr $ff93; LSTNSA
lda $90
bmi error
rts
error: brk
command:
!text "M-E"; memory-execute
!word drivecode
!pseudopc $0205 {
drivecode:
!if tightloop = 0 {
; the simple approach
sei
lda #$20
sta $1801; 2 MHz on 1571
lda #$00 ; ATNA cleared, CLK OUT low, DATA OUT low
ldx #$10 ; ATNA set, CLK OUT low, DATA OUT low
-- bit $1800; wait for ATN IN high
bpl --
stx $1800; set ATNA
- bit $1800; wait for ATN IN low
bmi -
sta $1800; clear ATNA
bpl -- ; loop
} else {
; the not-so-simple approach
sei
lda #$ff
sta $1803; set all port bits as outputs
lda #>$0300
sta $1801
lda #$7f
sta $1802; set only ATN IN as input
lda #$00 ; ATNA cleared, CLK OUT low, DATA OUT low
ldx #$10 ; ATNA set, CLK OUT low, DATA OUT low
sta $1800
jmp ($1800)
}
}
endcommand:
!if tightloop {
atnlo: !text "M-W"; memory-write
!word $0300
!byte $16
jmp ($1800)
!byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
sta $1800
jmp ($1800)
atnloend:
atnhi: !text "M-W"; memory-write
!word $0380
!byte $13
stx $1800
jmp ($1800)
!byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
jmp ($1800)
atnhiend:
} |
| | Monte Carlos
Registered: Jun 2004 Posts: 358 |
Wow that was fast. I'm very curious to test it on the real hw. |
| | Krill
Registered: Apr 2002 Posts: 2969 |
Would be cool if you could check both variants. Both should work, but i'm not so sure about various bus setups. The internal 1571 has the shortest physical path to the host computer's serial port, so it should all just work.
Anyhow, if your tests prove successful, i can safely add this feature to the loader. :) |
| | Bitbreaker
Registered: Oct 2002 Posts: 504 |
Might shamelessly copy that, been too lazy so far :-) |
| | Krill
Registered: Apr 2002 Posts: 2969 |
As long as i show up in the credits under "help" or "additional code" or something, all is well. Open source works fine as long as there is proper attribution. :) |
| | Monte Carlos
Registered: Jun 2004 Posts: 358 |
Hhhm, i just compiled it with acme (compiled without problems). However, when executed i just get the ready prompt as with run/stop restore. Maybe something went wrong when the src was copied into csdb? Or do i have to specify specific compile options? I disassembled code which showed that branch and jump targets were ok. |
Previous - 1 | 2 | 3 | 4 | 5 - Next | |