// DiExStatus.bcpl get "DiEx.defs" static @CurrentDr manifest noStat = -1 let DisplayStatus() be [ Active = false DisplayParam(ListETable, 0, Tab3) DisplayParam(GetStatus, 0, Tab2) DisplayParam(DoRestore, 0, Tab1) DisplayParam(ResetET, 1, Tab0) DisplayParam(Chain, 8, Tab3) ] and GetStatus() be [ external TP2 if Returns eq 0 then CurrentDr = FirstDr let status = nil let last1 = Button(Left%Middle,Up) if Active then test last1 ifnot return ifso [ SelectDrive(CurrentDr,false); status = DiskStatus() if last1 eq Left then break Wait(1000) if Button(Left%Middle,Down) then break ] repeat //unless status<>"); break ] ] repeat DiskStatus() //unless status<>P.Chain = T>>P.Chain eq 0 PrintParam("Chain: $S",T>>P.Chain?"Yes","No") ] and ListETable(Print,FT) be [ if Returns eq 0 then CurrentDr = FirstDr if NewBoolian("Print contents of Error Table") then [ ListET(CurrentDr); CurrentDr = CurrentDr ls LastDr? CurrentDr+1,FirstDr ] PrintParam("List E.T.") ] and ResetET(Print,FT) be [ if NewBoolian("Clear contents of Error Table",true) then [ initCounters(); Hint("Done") ] PrintParam("Reset E.T.") ] and ResetDisk(restore) be [ external [ Idle; InitializeCbStorage; GetCb; DoDiskCommand ] let CA = vec 256 let zone = vec CBzoneLength InitializeCbStorage(zone, 1, CBzoneLength, 0) let cb1 = GetCb(zone) let cb2 = GetCb(zone) let DA1,DA2 = 0,0 DA1<>P.FirstCyl, lastDiskAddress>>DA.track @lastDiskAddress = -1 @nextDiskCommand = 0// In case there is not microcode - assums that the disk is idle if restore then DoDiskCommand(cb1, 0, DA1, 0, 0,msb rshift offset DC.seekOnly )//Restore DoDiskCommand(cb2, 0, DA2, 0, 0,msb rshift offset DC.seekOnly )//do Seek //wait for command issued for i = 0 to 32000 do if (cb2>>CB.status & DSTdoneBits) ne 0 then break //if diskStatus>>DST.NotLoaded eq 3 then return //wait for seek completed for i = 0 to 32000 do [ Idle(); if diskStatus>>DST.seekInProgress ne 1 then break ] ] and SelectDrive(drive,reset) be [ if (drive eq DiskSel) & not reset then return DiskSel=drive ResetDisk(true) ] and DiskStatus() =valof [ @diskStatus = noStat Msg(" Diablo-$S Disk status:",nTracks eq 203? "31","44") Wait(20) if @diskStatus ne noStat then [ Msg(" for Drive #$D: Last track ",lastDiskAddress>>DA.disk) test @lastDiskAddress eq true ifso Msg("unknown") ifnot Msg("= $D",lastDiskAddress>>DA.track) Msg(", Current sector = $D.*n",diskStatus>>DST.sector) ] test (@diskStatus & #367) ne 0 ifso Msg(" Status error(s) are:*n ") ifnot Msg(" No errors.*n") TypeErrors(@diskStatus,false) Msg("*n*n>>") resultis @diskStatus ] and TypeErrors(status,ComStat; numargs nargs) be [ if nargs ls 2 then ComStat = true let sndmsg(txt) be Msg("$S*n ",txt) if status eq noStat then [ sndmsg("No response from Disk Microcode"); return ] if status<