+ X; SAVE#D:BBAS042.M65X; SAVE#D1:ARC2:BBAS042.M65X; (EI2 START<X;FX; Code equatesPX;Z CASINId BUFR2n BUFR24x SCDEV6 SCCMD7 DATALL8 DATALH9DATADIR: COLCRSU ERRFRE ERRDIR ERRMSGERRBUSFR)ERRMODAT;; MORE DATA THAN EXPECTEDERRTIMO ERRRSTERRNOCMD RUNADDDEVIC DUNIT"DCOMND,DSTATS6DBUFLO@DBUFHIJ DTIMTDBYTLO^DBYTHI h DAUX1 r DAUX2 | ICCOMB ICBALD ICBAHE ICBLLH ICBLHISCCTRLpѸSCDATAqSCDDRCrSCDDRDs SCPCR|SCSTAT CIOVVBMANASPIBUFBPRODASPIBUFBREVASPIBUF VARIABNILBLOVARIAB&NILBHINILBLO0 BCOLCRSNILBHI;; 2 BYTES:X;DX; Start of codeNX;X STARTbX;l PRGSTv !ASPIINITX; GOASPI !ASPIX; TCOPY  ABB ATASPI maA An V0.42 (c)A A 2000 by mscA X; TSCAN Ascanning Id#AX;  TSPACE A A  A A*X;4TID> AIdAHX;RTCLASS A CA\X;f TANSIp A SAzX; TNAME  AName:AX;TREV A Rev:AX;TINI  ABB ATASPI maA An initializeA Ad at $AX; BSZ00 ;; 00X;$ BSZ05. ;; 058X;B DEVTBLL ;; TYPEV ;; UNUSED` ;; BLOCKSIZEjX;t ~  X;   X;   X;    X;  ( 2X;< F P ZX;d ASPIINITn $>4TCOPYx %>5TCOPYQ>& OUTPUT QCOLCRS PBCOLCRSQCOLCRSPBCOLCRSQ> PDEVTBLPDEVTBLPDEVTBLPDEVTBL PDEVTBLPDEVTBLPDEVTBLQ> PSCDEV" APINI00, $>4TSCAN6 %>5TSCAN@Q> J OUTPUTT QSCDEV^ BCDOUTh QBCOLCRSr PCOLCRS|QBCOLCRSPCOLCRS X;ASPINIO4X; LDY #36X; LDA #$AA X;ASPINI08X; STA ASPIBUF,Y X; INYX; BPL ASPINI08 QSCDEV BFRSELA GASPINI1 $>4CMDINQ %>5CMDINQ CMDOXY GASPINI1Q>4ASPIBUF& PBUFR0Q>5ASPIBUF: PBUFRDQ>$N PDATALLXQ>b PDATALHlQ>@v PDATADIR DATAEXC IASPINI12 ASPINI1)>ERRTIMO;; TIMEOUT? FNEXTC HEXOUT NEWLINE INEXT ASPINI12 DEVOUTNEXT #SCDEV QSCDEV R> DAPINI00  $>4TSPACE* %>5TSPACE4Q>> OUTPUTH QBCOLCRSR PCOLCRS\QBCOLCRSfPCOLCRSp $>4TINIz %>5TINIQ> OUTPUT Q>5GOASPIPCASINI HEXOUT Q>4GOASPI PCASINI HEXOUT NEWLINE:X; DEVOUT $>4TID %>5TID Q> OUTPUT$ QSCDEV. BCDOUT8 Q> B AKOUTL $>4BMANV %>5BMAN` Q>j OUTPUTt $>4TCLASS~ %>5TCLASS Q> OUTPUT QASPIBUF M>;; 00011111 HEXOUT QASPIBUF ILP05 Q> r  , LP05 Q> AKOUT $>4TANSI %>5TANSI Q> OUTPUT( QASPIBUF2 M>;; 00000111< 5F HLP06P Q>;; SCSI1 HAS A 0 HEREZ LP06d BCDOUTn 7x R>;; SCSI1 WITH CSS HLP07 Q> c AKOUT LP07 !NEWLINE X; RTS X; NEWLINE Q> HAKOUT HEXOUT 5 V? V? V? V?" BCD001, 76 BCDOUT@ M>;; 00001111J BCD001T R> ;; 00001010^ DBCD004h O>;; 00000110r BCD004| O>0;; 00110000 AKOUT 5 $> A PICBLL9 PICBLH9 Q> PICCOM9 7 !CIOV X; OUTPUT 5 A $> PICBAL9& C0 PICBAH9: 7D PICBLL9N Q>X PICBLH9b Q> l PICCOM9v !CIOV X; EXECCMD QDAUX1 PBUFR2 QDAUX2 PBUFR2 %> Q@BUFR27 PSCDEV BFRSELA GEXCMDEND #BUFR2 HEXCMD00 #BUFR2 EXCMD00 CMDOUT GEXCMDEND* SETDPAR4 DATAEXC> QDATALLH PDBYTLOR QDATALH\ PDBYTHIf EXCMDENDp :z X; DEXC00 SCRESET GDEXC99 %>ERRDIR DEXC99 : X; DEXC80 *DATADIR IDEXC00 SDDROUT WRHNDSH PTDS00%>QDATALH;; STILL WHOLE PAGEFPTDS02;; NO$ PTDS01. PUTBLKS8&EPTDS20;; LESS BYTES THAN EXPECTEDB "DATALHL HPTDS01V PTDS02`QDATALL;; ANY BYTES LEFTjFPTDS16;; NOt?~, OBUFR PBUFR EPTDS04 "BUFR PTDS04CN>;; 11111111?3 PUTBLKS EPTDS20 PTDS16 CALCBY  PTDS17 *SCCTRLKPTDS24;; not busy anymore(GPTDS17;; no request2 QSCCTRL<M>;; 11000010 only status?FFPTDS23;; yesP4 SCRESET;; oh no, more Data, but we can't handleZGPTDS30;; was Reset OK?d*%>ERRMODAT;; yeah, then set our errmsgn:xX; PTDS20C, OBUFR PBUFR DPTDS22 #BUFR PTDS22 CALCBY PTDS23 !STATUSX; PTDS24%> PTDS30:"X;, DATAEXC6 BSYREQ@ QSCCTRLJV?TM>;; 00000001 CD?^ HDEXC02h !STATUSrX;| DEXC02EDEXC80;; WRITE *DATADIR JDEXC00 SDDRIN RDHNDSHX; JSR SETBUFRX; LDA DAUX1 ; LOOK IF!X; STA BUFR2 ; CMD IS READX; LDA DAUX2X; STA BUFR2+1X; LDY #2X; LDA (BUFR2),YX; AND #$5F ; 01011111X; CMP #08 ; 00001000X; BEQ GTDB00 GTDS00&%>0QDATALH;; STILL WHOLE PAGE:FGTDS02;; NOD GTDS01N GETBLKSX&EGTDS20;; LESS BYTES THAN EXPECTEDb "DATALHl HGTDS01v GTDS02QDATALL;; ANY BYTES LEFT?FGTDS16;; NO?, OBUFR PBUFR EGTDS04 "BUFR GTDS04CN>;; 11111111?3 GETBLKS EGTDS20;; LESS BYTES ? GTDS16  CALCBY* GTDS174 *SCCTRL> KGTDS24H GGTDS17R QSCCTRL\M>;; 11000010f FGTDS23p SCRESET;; MEHR DATENz GGTDS30%>ERRMODAT:X; GTDS20C, OBUFR PBUFR DGTDS22 #BUFR GTDS22 CALCBY GTDS23(!STATUS;; WENIGER BYTES ALS ERWARTETX; GTDS24$%>. GTDS308:BX;L GTDB00V SETBY`%>j QDATALHt FGTDB02~ GTDB01 GETBLK "DATALH HGTDB01 GTDB02 QNILBLO FGTDB08? QBUFR; SNILBLO PBUFR EGTDB04 "BUFR  GTDB04 GETBLK GTDB08( %DATALL2 FGTDB12< GETNILF GTDB12P QNILBHIZ FGTDB16d GTDB14n GETNILx "NILBHI HGTDB14 GTDB16 QBUFR; SDBUFLO PDATALL QBUFR SDBUFHI PDATALH:X; STATUS RDHNDSH%> QSCSTATM>;; 00010000"HMSG10;; MESSAGE, QSCDATA6$FMSG00;; STATUS COMMAND COMPLETE@L>;; 11000000J?T MSG00^ *SCCTRLhKMSG04;; BUS FREErGMSG00;; WAIT FOR REQ| QSCSTATM>;; 00010000 FMSG00 MSG10 QSCDATAFMSG04;; MESSAGE CMD COMPL SCRESET GMSG20 %>ERRMSG MSG04C;; TO RESET STATUS MSG20:X; GETBLKS QSCDATA P@BUFR7& GTBKS040 QSCCTRL:GGTBKS05;; NO REQUESTDM>;; 10000010NFGTBKS10;; STATUSX3b HGETBLKSl,v #BUFR:X; GTBKS05Q>> GTBKS07 *SCCTRL IGTBKS042 HGTBKS07,O> HGTBKS07 QSCCTRL ;: X;* GTBKS1034 HGTBKS12> #BUFRH GTBKS12R;\:fX;p PUTBLKSz Q@BUFR7 PSCDATA PTBKS04 QSCCTRLGPTBKS05;; NO REQUESTM>;; 10000010FPTBKS10;; STATUS3 HPUTBLKS, #BUFR:X; PTBKS05Q>> PTBKS07$ *SCCTRL. IPTBKS0482B HPTBKS07L,VO>` HPTBKS07j QSCCTRLt;~:X; PTBKS103 HPTBKS12 #BUFR PTBKS12;:X; RDHNDSH Q>;; 11101011 PULSE RDHNDSH PSCPCR: X; WRHNDSHQ>;; 11101001( PSCPCR2:<X;F REQACKPQ>;; 11101101Z PSCPCRd REQ01n *SCCTRLx IREQ01L>;; 00000010 PSCPCR:X; BSYREQ$>%>;; 11100110 BSY01 *SCCTRL JBSY20 BSY042 HBSY01 BSY0977" !TIMEOUT,X;6 BSY20@Q>J>T %>;; 230^ BSY22h *SCCTRLr IBSY30|,O> HBSY222 HBSY223 HBSY22X; NOP ; BRK? ***77 !TIMEOUTX; BSY30:X; CMDOXY &BUFR2& 'BUFR20 CMDOUT:$>D %>;; 224N CMDO00X QSCCTRLbM>;; 11000010l FCMDO04v2 HCMDO003 HCMDO00 CMDO04 WRHNDSH%> Q@BUFR27>; OBUFR2 PBUFR2 ECMDO05 "BUFR2 CMDO05 AN>;; 11111111 ?*34 CMDO08> Q@BUFR27H PSCDATAR X; ;;;;;\(X; OLD CODE WHEN HANDSH WILL NOT WORKfX; LDA #$ED ; 11101101pX; STA SCPCR ; ACKzX;X; LDA #0 X;CMDO12X; INX ;**X; BEQ CMDO20X; BIT SCCTRLX; BPL CMDO12X;X; ORA #$02 ; 00000010X; STA SCPCR3 FCMDEND CMDO16 *SCCTRL KCMDO30 GCMDO16 QSCCTRL$M>;; 00000010. FCMDO088 CMDENDB%>L:VX;`)X;CMDO20 ; FOR BUG FIXING ONLYjX; LDA #1 ;***t X; BRK~ X;CMDO24X; LDA #2 ;*** X; BRKX; CMDO30Q> PDATALL PDATALH"%>ERRBUSFR;; $84 UNEXP BUSFREE 'DSTATS:X; BFRSELAQ>;; 11101111  PSCPCRQ> ;; 00001100 PSCDDRC( *SCCTRL2 KSEL00< SCRESETF ISEL00P:ZX;d SEL00n SDDROUTx QSCDEV> QBITMASK9 PSCDATA$>;;11111011 SEL &SCCTRL %>;; 224$> SEL04*SCCTRL;; 3JSEL08;; 22;; 2HSEL04;; 3(2)=25593;; 2HSEL04;; 3 CA.46 MS TIMEOUTQ>;; 111011111" PSCPCR, SDDRIN6$> ;; 00001101@ &SCDDRCJ0T &SCCTRL^Q>h PDATALLr PDATALH|%>ERRTIMO;; $8A 138 'DSTATS:X; SEL08Q>;; 11111111 PSCCTRL PSCDATA%>:X; SCRESET%>$>;; 11110111 &SCCTRL SCR01 0& HSCR010 0: &SCCTRLD SCR04N SCR20X 1b HSCR04l 0v HSCR04 *SCCTRL KSCR08 %>ERRRST;; $8E 142 : X; SCR08 %> SCR20 : X; SDDRIN Q>  ,! SDDROUT !Q>! PSCDDRD !:*!X;4! BITMASK>! ;; 10000001H! ;; 10000010R! ;; 10000100\! ;; 10001000f! ;; 10010000p! ;; 10100000z! ;; 11000000! ;; 10000000!X;! SETDPAR! QDBUFLO! PBUFR! PBUFR2! QDBUFHI! PBUFR! PBUFR2! QDBYTLO! PDATALL! QDBYTHI! PDATALH" QDSTATS" PDATADIR":$"X;." GETBLK8" QSCDATA8B" P@BUFR7L"3V" HGETBLK`" #BUFRj":t"X;~" GETNIL" QSCDATA8"3" HGETNIL":"X;" SETBY" QSCDEV"T?"T?"?"QDEVTBL8";# SDATALL #>#QDEVTBL8# SDATALH(# ETOLOW2#QDEVTBL8<# PDATALLF#QDEVTBL8P# PDATALHZ#Q>d#>n# TOLOWx# PNILBHI# &NILBLO#:#X;# CALCBY# QBUFR#;# SBUFR2# PDATALL# QBUFR# SBUFR2# PDATALH#:#X;$ CMDINQ$ $ ==="$ $,$ 6$X;@$ HAINQJ$:T$X;^$ GDEVTPh$:r$X;|$ XSCCMD$ EXECCMD$C$ !STATRET$X;$ ASCCMD$:$X;$ RSTSC$ SCRESET$Q>$ PDBYTLO$ PDBYTHI$ FOKRET% SHAPAR%:%X;&% GDRVIN0%::%X;D% BACKCLCN%,X%:b%X;l% NOATCMDv%%>ERRNOCMD;; $92 146% HSTATRET% OKRET%%>% STATRET% 'DSTATS%;%:%X;%ASPI% QDDEVIC%R>p;; 01110000% HBACKCLC% QDUNIT&R> & HBACKCLC& QDCOMND & %>;; 253*& ASPI044&3>&3H&3R&)>ASPICENDASPICMD\& FNOATCMDf& RASPICMD8p& HASPI04z& ASPI08&QASPICMD8&5&QASPICMD8&5&:&X;& ASPICMD& & HAINQ& & GDEVTP& & XSCCMD' ' ASCCMD' $' RSTSC.' 8' SHAPARB' L' GDRVINV'X;`'ASPICEND j'ASPIBUFSTARTt'X;~'X; .BYTE "TENTION !" ***'X; .BYTE $9B ***'X; .BYTE "THIS WILL ER" ***'X; .BYTE "ASE THE WHOL" ***'X; .BYTE "E CHIP" ***'X; .BYTE $9B ***'X; .BYTE "WHEN YOU ARE" ***'X; .BYTE " " ***'X;' RUNAD'X;' START