// TDISK8 // get "streams.d" external [ Gets Endofs Closes Ws ResetLine OpenFile CallSwat keys dsp Puts ] static [ Name MBFile oWord junk ] manifest [ ioIn = #177030 ioOut = #177016 ] structure str: [ length byte bite^1,255 byte ] structure DA: [ sector bit 4 cylinder bit 9 head bit 1 disk bit 1 restore bit 1 ] let DownLoad() be [ oWord = 0 InitPort() for i = 0 to 100 do [ Ws("*NHit return to start transferring disk*N") until Endofs(keys) do Gets(keys); Gets(keys) Transfer() ] ] and InitPort() be [ @ioOut = #400 // negate -stb Ws("init output done, start other program, and hit key*N"); until Endofs(keys) do Gets(keys); Gets(keys) until (@ioIn & #40000) ne 0 do [ junk = 1 ] ] and Transfer() be [ let i = 0 for i = 0 to 4871 do [ MovePage(i) ] Ws("*N Disk move complete*N") ] and MovePage(page) be [ // first build a disk command // read page // compute checksum // transfer seal, pagenum, header, label, data, checksum let dcb = vec 10 let header = vec 2 let label = vec 8 let data = vec 256 let cksum = 0 // build disk command dcb!0 = 0 // chain pointer dcb!1 = 0 // status field dcb!2 = 110B * 256 // read HLD dcb!3 = header // pointer to header buffer dcb!4 = label // pointer to label buffer dcb!5 = data // pointer to data buffer dcb!6 = 0 // command complete interrupts dcb!7 = 0 // error complete interrupts dcb!8 = 0 // unused dcb!9<