.TITLE DISK1 .MCALL .LOOKUP,.CLOSE,.TLQ,.KS,.MOVS,.TL,.READW,.ENTER,.WRITW .GLOBL .OPEN1,.CLOS1,.PT1,.FILE1,.RAD50,.CALL,.DISK1 .PT1: .BLKW 2 .FILE1: .BLKB 40 ADRFIL: .BLKW 1 READWR: .BLKW 1 .OPEN1: MOV R0,-(SP) MOV R1,-(SP) .CLOSE #1 CLRF .PT1 MOV #-1,BKOLD MOV #-1,BKMAX TST ADRFIL BEQ TRY .MOVS ADRFIL,#.FILE1 BR RAD50 TRY: TST READWR BGT WFILE .TLQ <.READ1 FILE?> BR S1 WFILE: .TLQ <.WRIT1 FILE?> S1: .KS #.FILE1 RAD50: MOV #.FILE1,.RAD50-2 CALL .RAD50 TST READWR BGT ENT BCS LOOKER .LOOKUP #AREA,#1,#.RAD50-12,#-1 BCC RRETT LOOKER: .TLQ <.READ1 FILE OPEN ERROR> BR S2 ENT: BCS ENTERR .ENTER #AREA,#1,#.RAD50-12,#-1 BCC RRETT ENTERR: .TLQ <.WRIT1 FILE OPEN ERROR> S2: TST ADRFIL BEQ JTRY JMP ERROR JTRY: JMP TRY RRETT: MOV (SP)+,R1 MOV (SP)+,R0 RETURN BI: .BLKB 1 RW: .BLKB 1 DATA: .BLKW 1 .DISK1: MOV R0,-(SP) MOV R1,-(SP) MOV .PT1,R0 MOV .PT1+2,R1 ASHC #-9.,R0 MOV R1,BKWANT INMEM: CMP BKWANT,BKOLD BEQ GET TSTB RW BEQ READ TST BKOLD BLT SKIP .WRITW #LIST,#1,#B,#256.,BKOLD BCS ERR SKIP: CMP BKWANT,BKMAX BLE READ INC BKMAX MOV #256.,R0 MOV #B,R1 LCLR: CLR (R1)+ SOB R0,LCLR MOV BKMAX,BKOLD BR INMEM READ: .READW #LIST,#1,#B,#256.,BKWANT BCS ERR MOV BKWANT,BKOLD GET: MOV .PT1+2,R1 BIC #177000,R1 TSTB RW BGT WRITE TSTB BI BGT S6 MOVB B(R1),DATA BR RETB S6: MOV B(R1),DATA BR RETI WRITE: TSTB BI BGT S4 MOVB DATA,B(R1) BR RETB S4: MOV DATA,B(R1) RETI: ADD #2,.PT1+2 BR RET RETB: ADD #1,.PT1+2 RET: ADC .PT1 MOV (SP)+,R1 MOV (SP)+,R0 CLC RETURN ERR: CMPB 52,#1 BGT ERROR2 BEQ ERROR1 TSTB RW BGT ERROR0 MOV (SP)+,R1 MOV (SP)+,R0 SEC RETURN ERROR0: .TLQ .CLOSE #1 JMP ERROR ERROR2: .TLQ JMP ERROR ERROR1: .TLQ ERROR: .TLQ .TL #.FILE1 JMP .CALL .CLOS1: MOV R0,-(SP) .WRITW #LIST,#1,#B,#256.,BKOLD ;WRITE LAST BLOCK BCS ERR .CLOSE #1 MOV (SP)+,R0 RETURN BKOLD: .BLKW 1 BKMAX: .WORD 0 BKWANT: .BLKW 1 B: .BLKB 1000 AREA: .WORD 0,0,0 LIST: .WORD 0,0,0,256.,0 .END