File: DMPSI1.PA of Disk: Disks/Build-2007/Build-11-03-07
(Source file text)
/SI43 DISK DUMP Program / / This program will send a Disk image out the console port. / The format of the data sent is 0xff (0377) or 0xfd if read error / followed by 128 word of data for each block. / After the last block a 0xfe (0376) is sent / with a two byte checksum, low 8 bits first then upper 4. / The words in a block are sent as three bytes for each 2 words. / Like this: / +--------------------+ / ! byte1 ! byte2h ! / +--------------------+ / ! byte2l ! byte 3 ! / +--------------------+ / / 1 = low 8 bits first word / 2 = upper 4 bits first and lower 4 bits second / 3 = upper 8 bits second word / / The program (PC) receiving the data should be started before this program / / To run start at 0200. / SR 11 should be drive, only 0 and 1 supported without reassembling / SR 6-8 should be maximum memory field in computer, needs 8k minimum / The receiving program should be running first. / At normal exit hitting cont will restart the program / / Should halt at finish (177) with number of recoverable errors in AC / The current block being read will be displayed in the AC / while running. / / If a unrecoverable error occurs the program will halt with the error in / the AC. Hit continue to dump more or comment out hlt. / The PC program will print out the bad location if an error occurs / *100 RETRY, 7775 /RETRY UP TO 3 TIMES NUMBLK, 6260 /TOTAL NUMBER OF BLOCKS ON DISK BLKFLD, 17 /15 256 WORD BLOCKS PRESERVES OS8 /WRAPPING PAST END OF LAST FIELD DOESN'T WORK ERRCN2, 0 /COUNTING ERRORS RDSIZE, 0 /NUMBER BLOCKS PER READ CBLOCK, 0 /CURRENT DECTAPE BLOCK TO XFER BLOCK, 0 /USED BY ERROR ROUTINE CHKSM, 0 READST, 0 LOC, 0 LEN, 0 BCNT, 0 /BLOCKS TO SEND TO PC REASON, 0 TEMP, 0 C10, 10 C17, 17 C200, 200 C400, 400 *176 MEMERR, RDF /SIGNAL MEMORY ERROR!!! FINISH, HLT /NORMAL GOOD HALT OR SELERR START, CDF 0 CAF CLA CLL OSR /GET DRIVE AND (7 /8 UNITS TAD JMSI DCA DRVSEL DCA ERRCN2 TAD BLKFLD DCA RDSIZE /TOTAL NUMBER OF BLOCKS IN ONE GO = BATCH DCA CBLOCK /START WITH BLOCK 0 DCA CHKSM DUMPLP, CLA TAD RDSIZE TAD CBLOCK /(TOTAL - BATCH) - CURRENT CIA TAD NUMBLK /MORE BLOCKS LEFT THAN BATCH? SMA /NO, NUMBER OF BLOCKS LEFT CLA /YES, ONLY BATCH SIZE TAD RDSIZE SNA /ANY MORE BLOCKS? JMP DONE /NO, DO FINISH STUFF BSW CLL RAL /TO 128 PAGES TAD C10 /IN FIELD 1 DCA ARGSZ /TO NUMBER OF BLOCKS REQUEST TAD CBLOCK /TO CURRENT BLOCK TO START WITH DCA ARGBK TAD DRVSEL JMS I DRVSEL ARGSZ, 3610 /READ IN FIELD 1 0 /FROM POS 0 ARGBK, 0 JMP ERRRET /SOME DUST ON THE DISK? TAD (377 /ALL BLOCKS GOOD DCA READST /Send data, each block starts with FF CLA CLL / then 2 12 bit words in 3 bytes DCA LOC / ERRRET DUPLICATES SOME OF THIS TAD BLKFLD CIA DCA BCNT /SET UP COUNTER OF NUMBER OF BLOCKS XFERRED OUTBL1, JMS I (OUTBLK /SEND A BLOCK ISZ CBLOCK /NEXT BLOCK ISZ BCNT /BATCH XFERRED? JMP OUTBL1 /NO TAD CBLOCK DCA BLOCK JMP DUMPLP /GO READ NEXT BATCH JMSI, DK0 DRVSEL, DK0 DONE, CLA / Send FE and -checksum of all words TAD (376 JMS I (PUN TAD CHKSM / Send checksum in two bytes, low bits first CIA JMS I (PUN TAD CHKSM CIA RTR RTR RTR RTR AND C17 JMS I (PUN TAD ERRCN2 / Leave AC with # of errors JMP FINISH ERRRET, SZA JMP NOSEL CLA CMA JMP FINISH /SELECT ERROR WITH AC = 7777 NOSEL, DCA REASON /ERROR CODE HLT /SEND GOOD BLOCKS READ WITH GOOD BLOCK FLAG DCA LOC TAD CBLOCK CIA TAD BLOCK /Get - number good blocks read CIA /Last was bad SNA JMP FSTBAD /First block is bad, no good to send DCA BCNT TAD (377 DCA READST OUTBL2, JMS I (OUTBLK /Send good blocks ISZ CBLOCK ISZ BCNT JMP OUTBL2 FSTBAD, TAD REASON RAL SZA CLA /WAS IT CHECKSUM ERROR? CLA CMA /SEND 374 FOR CHECKSUM ERROR TAD (375 /NOW SEND BAD BLOCK (TIMING ERROR) DCA READST JMS I (OUTBLK ISZ CBLOCK ISZ ERRCN2 CDF 0 JMP DUMPLP /And read from here on PAGE OUTBLK, 0 /Send a block of data out serial port CLA CDF 10 TAD C400 DCA LEN /COUNT FOR ONE BLOCK TAD READST /Send good/bad flag JMS PUN OUT, CLA CLL TAD I LOC TAD CHKSM / Keep checksum of all words sent DCA CHKSM TAD I LOC / Send 2 words as 3 bytes CLL RTR / WvdM: Left 8 Bits first RTR / WvdM: JMS PUN CLA CLL TAD I LOC AND C17 CLL RTL / WvdM: Low 4 Bits to high byte 2 RTL / WvdM DCA TEMP ISZ LOC ISZ LEN /END IF BUFFER? SKP /NO JMP ENDBK /YES TAD I LOC TAD CHKSM DCA CHKSM TAD I LOC CLL RTL RTL RAL / New: High 4 bits to low byte 2 AND C17 / TAD TEMP JMS PUN CLA CLL TAD I LOC JMS PUN ISZ LOC ISZ LEN JMP OUT JMP EXITBK ENDBK, TAD TEMP /SEND LAST PART OF WORD JMS PUN EXITBK, CDF 0 JMP I OUTBLK PUN, 0 / Send byte out serial port PLS / Punch for testing with emulator / TLS2 / Send out console CLA CLL TAD CBLOCK PSF / TSF2 /Wait until character sent JMP .-1 CLA JMP I PUN PAGE /SYS.IND. M43 NONSYS HANDLER / / / / / /COPYRIGHT (C) 1980 BY WVDMARK, ZURICH / / / / /WVDM, ZURICH, 1-SEP-80 / / /OS/8 V3 NON-SYS HANDLER FOR MOD 43 /ORIGIN:/SYSTEM INDUSTRIES, INC. /535 DEL REY AVENUE /SUNNYVALE, CALIFORNIA 94086 /THIS HANDLER WILL SUPPORT TWO /SERIES 43 DISK DRIVE ON PORT 0 & 1 /OF A 3040 DISK CONTROLLER /RK(A-B)0 AND RK(A-B)2 RESIDE ON THE /FIXED PLATTERS /RK(A-B)1 AND RK(A-B)3 ARE ON THE /REMOVABLE PLATTERS /RAL 6/74 /WVDM 9/74 /NEW DATE: 1-SEP-80 VERSION="N&77 DCODE=50 /CONTROLLER DEVICE CODE DSDD=10^DCODE+6001 DLCR=10^DCODE+6002 DCSR=10^DCODE+6004 DSDE=10^DCODE+6011 DLSR=10^DCODE+6012 DSRR=10^DCODE+6013 DLTR=10^DCODE+6014 DWCA=10^DCODE+6017 DOFF=146^40 UNIT0=0^10 UNIT1=1^10 PLATTER=1^2 FTEMP=DKTR1 DKERCT=DK0 DKWD1=DKNO BSW=7002 DKE, 0 /DON'T MOVE!!! DKHLP, DLCR /SET CONTROLLER BREAK FIELD DCSR /CLEAR STATUS JMS DKTR1 /GET POINTER DKTR1, 0 //ALSO USED AS TEMP BUFF TAD DKTR1 TAD (DKWCT-DKTR1 DWCA CLA CLL TAD (DLTR DCA DKIOU /SET UP FOR READ TAD DKWD1 SPA ISZ DKIOU /CHANGE TO WRITE BSW AND (7000 /GET DATA BUFFER FIELD DCA FTEMP DKST2, HLT /GET CONTROL TABLE ENTRY DCA DKWCT+3 TAD DKWCT+3 AND (10 TAD FTEMP DLCR /EMA + UNIT CLA CLL TAD DKWCT+2 AND (17 DLSR /OUTPUT SECTOR ADDRESS CLL CLA TAD DKWCT+2 AND MIN20 TAD DKWCT+3 RTR;RTR /13 BIT WORD DKIOU, HLT /OUTPUT TRACK ADDRESS AND PLATTER CLL CLA DSDD JMP .-1 /WAIT FOR DISK TO FINISH DKTAD, TAD DK7600 KRS /CHK. FOR ^C TAD (-7603 SNA CLA KSF JMP DCTL1 DKCDI, CIF CDF 0 JMP I DK7600 DCTL1, DSDE /WAS THERE A DISK ERROR? JMP DKNORM /NO, GO EXIT ISZ DKERCT JMP DKHLP CLL CML JMP DKERR /AVOID EXIT FIXER DKNO, 0 DKWCT, 0 0 0 0 /THIS IS REAL ENTRY CHAIN DK0, VERSION ISZ DKNO ISZ DKNO ISZ DKNO ISZ DKNO ISZ DKNO ISZ DKNO ISZ DKNO DK7600, 7600 /CLEAR AC TAD DKNO CMA TAD DKTAD DCA DKST1 TAD DKST1 TAD (DKOFFS-DK0 DCA DKST2 CLA CLL CML RTR /=2000+TAD=DCA TAD DKST1 DCA DKOUT /SET UP ENTRY RESTORE DKST1, HLT /GET CALLER ADDRESS DCA DKE /PUT IT IN A CANONICAL LOCATION RDF /FIND OUT CALLER'S FIELD TAD DKCDI DCA DKFLD /FIX UP EXIT FOR FIELD CHANGING TAD I DKE / DCA DKWD1 ISZ DKE TAD I DKE DCA DKWCT+1 /SAVE CORE ADDRESS ISZ DKE TAD I DKE /BLK # DCA DKWCT+2 /PICK UP ALL THE ARGUMENTS ISZ DKE /PARTIALLY FIX THE EXIT /STILL MORE INITIALIZATION TO DO TAD DKWD1 AND DK3700 CLL RAL DCA DKWCT /GENERATE WORD COUNT FOR DATA X-FER TAD MIN20 /THIS SEEMS QUITE LARGE DCA DKERCT /FOR ERROR COUNT TAD DKWCT+2 TAD LGLBLK /CHECK FOR LAST LEGAL BLK SZL CLA JMP DKERR /FATAL:LINK ON JMP DKHLP /GO DO REAL WORK DKNORM, CLA CLL ISZ DKE /EXIT CONTROL - NORMAL EXIT DKERR, TAD (ISZ DKNO DKOUT, HLT /RESET ENTRY ISZ DCA DKNO CLA RAR DKFLD, HLT /CHANGE BACK TO CALLERS FIELD JMP I DKE /EXIT DK3700, 3700 MIN20, -20 LGLBLK, -6260 /- LENGTH OF RK COMPATIBLE DISK /EQUATION FOR DKOFFS IS: / TRACK OFFSET*40+PLATTER BIT*2+UNIT BIT*10 / PLATTER BIT IS 1 FOR REMOVABLE PLATTER, 0 FOR FIXED / UNIT BIT IS 0 FOR UNIT 0, 1 FOR UNIT 1 / \OOO\OOO\OHU\0P0\ DKOFFS, UNIT0 /RKA0 UNIT0+DOFF /RKB0 UNIT0+PLATTER /RKA1 UNIT0+PLATTER+DOFF /RKB1 UNIT1 /RKA2 UNIT1+DOFF /RKB2 UNIT1+PLATTER /RKA3 UNIT1+PLATTER+DOFF /RKB3 PAGE $$$$