Path: utzoo!attcan!uunet!tut.cis.ohio-state.edu!ucbvax!agate!shelby!neon!kaufman From: kaufman@Neon.Stanford.EDU (Marc T. Kaufman) Newsgroups: comp.sys.mac.hardware Subject: Re: Sharing the SCSI bus? Message-ID: <1989Dec12.041004.13885@Neon.Stanford.EDU> Date: 12 Dec 89 04:10:04 GMT References: <1989Nov29.030959.27969@Neon.Stanford.EDU> <8252@pogo.WV.TEK.COM> <1989Dec5.165138.5192@Neon.Stanford.EDU> <4945@celit.fps.com> <1989Dec7.090026.16543@Neon.Stanford.EDU> <5168@celit.fps.com> Sender: USENET News System Distribution: na Organization: Computer Science Department, Stanford University Lines: 113 The sound you hear is that of crunched crow... I just assumed that the current system acted like an earlier one -- wrong! As you can see, system 6.0.4 does a respectable job of SCSI arbitration, and EVEN seems to have provision for making the address of the Mac OTHER THAN 7! Sorry for generating confusion. By the way: If this kind of disassembly doesn't convince you to buy MacNosy, you must not be doing real systems code (though I cheated a little by editing in the symbolic SCSI offsets from HardwareEqu.a) Marc Kaufman (kaufman@Neon.stanford) ----- ; This Disassembly of scsiGet via MacNosy - MacIIx, system 6.0.4 SCSiDispatch 11DFA: 205F ' _' POP.L A0 11DFC: 301F '0.' POP D0 11DFE: 2F08 '/.' PUSH.L A0 11E00: 0C40 0018 '.@..' CMPI #24,D0 11E04: 640A 1011E10 BHS.S mmw_1 11E06: 4E56 FFFA 'NV..' LINK A6,#-6 11E0A: 4EF9 4082 66B4 $8266B4 JMP.L com_366 ;selector in range 11E10: 4EF9 4082 66FE $8266FE mmw_1 JMP.L com_367 ;-refs - SCSiDispatch 8266B4: 48E7 3F38 'H.?8' com_366 MOVEM.L D2-D7/A2-A4,-(A7) 8266B8: 2678 0C00 $C00 MOVEA.L SCSIBase,A3 8266BC: 2878 0C0C $C0C MOVEA.L SCSIGlobals,A4 8266C0: 7E00 '~.' MOVEQ #0,D7 8266C2: 7800 'x.' MOVEQ #0,D4 8266C4: 3200 '2.' MOVE D0,D1 8266C6: E548 '.H' LSL #2,D0 8266C8: 2074 0000 ' t..' MOVEA.L 0(A4,D0.W),A0 8266CC: 4ED0 'N.' JMP (A0) ;jump to selected routine ;note that 97 is (3*24-1) + 2 11E16: 08EC 0000 0061 '.....a scsiGet BSET #0,97(A4) ;set the low memory interlock 11E1C: 6708 1011E26 BEQ.S mmx_1 11E1E: 7007 'p.' MOVEQ #scMgrBusyErr,D0 11E20: 4EF9 4082 6744 $826744 JMP.L com_370 ;error return 11E26: 4EF9 4082 673A $82673A mmx_1 JMP.L com_369 82673A: 6100 019C $8268D8 com_369 BSR proc1517 ;do the arbitration 82673E: 6704 $826744 BEQ.S com_370 ;successful 826740: 1947 0061 '.G.a' MOVE.B D7,97(A4) ;failure - release lock ;-refs - scsiGet 826744: 3D40 0008 '=@..' com_370 MOVE D0,8(A6) ;return error code to user 826748: 60DA $826724 BRA com_368 826724: 7000 'p.' com_368 MOVEQ #0,D0 826726: 6000 01A4 $8268CC BRA com_372 8268CC: 4CDF 1CFC 'L...' com_372 MOVEM.L (A7)+,D2-D7/A2-A4 8268D0: 4E5E 'N^' UNLK A6 8268D2: 205F ' _' POP.L A0 8268D4: DEC0 '..' ADDA.W D0,A7 8268D6: 4ED0 'N.' JMP (A0) ;exit 8268D8: QUAL proc1517 ; b# =2163 s#0 =proc1517 ;-refs - com_369 ; A3 points to the SCSI chip ;note that 96 is (3*24-1)+1 ;96(A4) contains '0x80', a '1' in bit 7 8268D8: 16AC 0060 '...`' proc1517 MOVE.B 96(A4),sODR(A3) ;our address 8268DC: 1747 0020 '.G. ' mdi_1 MOVE.B D7,sMR(A3) 8268E0: 7200 'r.' MOVEQ #0,D1 8268E2: 3238 0DA6 $DA6 MOVE TimeSCSIDB,D1 8268E6: E189 '..' LSL.L #8,D1 8268E8: 2A01 '*.' MOVE.L D1,D5 8268EA: 4845 'HE' SWAP D5 8268EC: 177C 0001 0020 '.|... ' MOVE.B #iDB,sMR(A3) 8268F2: 082B 0006 0010 '.+.... mdi_2 BTST #bAIP,sICR(A3) 8268F8: 56C9 FFF8 $8268F2 DBNE D1,mdi_2 ;wait for arbitration 8268FC: 56CD FFF4 $8268F2 DBNE D5,mdi_2 ; in progress 826900: 6608 $82690A BNE.S mdi_3 826902: 1747 0020 '.G. ' MOVE.B D7,sMR(A3) ;something is up on the bus 826906: 7003 'p.' MOVEQ #scArbNBErr,D0 ;arbitration fails 826908: 4E75 'Nu' RTS 82690A: 6100 0364 $826C70 mdi_3 BSR proc1525 ;wait for arbitration 82690E: 082B 0005 0010 '.+....' BTST #bLA,sICR(A3) ;lost arbitration bit 826914: 66C6 $8268DC BNE mdi_1 ;yes, retry 826916: 7000 'p.' MOVEQ #0,D0 826918: 7400 't.' MOVEQ #0,D2 82691A: 1013 '..' MOVE.B sCDR(A3),D0 ;read who won 82691C: 142C 0060 '.,.`' MOVE.B 96(A4),D2 826920: B500 '..' EOR.B D2,D0 ;turn off 'us' 826922: B440 '.@' CMP.W D0,D2 826924: 65B6 $8268DC BLO mdi_1 ;the other guy won 826926: 082B 0005 0010 '.+....' BTST #bLA,sICR(A3) 82692C: 66AE $8268DC BNE mdi_1 82692E: 7000 'p.' MOVEQ #noErr,D0 826930: 4E75 'Nu' RTS 826C70: 3038 0D00 $D00 proc1525 MOVE TimeDBRA,D0 826C74: EE48 '.H' LSR #7,D0 826C76: 51C8 FFFE $826C76 mdq_1 DBRA D0,mdq_1 ;wait... 826C7A: 4E75 'Nu' RTS -----