; RDDISK -- Subroutine for reading a disk - block by block ; ; Synanon Church ; Mike Vandeman ; May 20, 1983 ; ; ;MAP1 BLOCK'NUMBER,B,4 ;MAP1 BUFFER'ADDRESS,B,4 ;MAP1 DISK'NUMBER,B,2 ;MAP1 ERROR'CODE,B,1 ;MAP1 INPUT'BUFFER,X,512 ; ;INPUT "DISK? ", DISK'NUMBER ;INPUT "BLOCK #? ", BLOCK'NUMBER ; ;XCALL RDDISK, DISK'NUMBER, BLOCK'NUMBER, INPUT'BUFFER, BUFFER'ADDRESS, & ; ERROR'CODE OBJNAM RDDISK.SBR ;assemble with this name SEARCH SYS SEARCH SYSSYM RADIX 10 ;use decimal arithmetic PHDR -1,PV$RSM,PH$REU START: LEA A0,DDB MOV 34(A3),A1 ;return buffer address MOVW 24(A3),2(A1) ;move high order word MOVW 26(A3),@A1 ;move low order word ANDB #D$INI,D.FLG(A0) ;DDB initialized? BNE READ ;yes, set up for the read ORB #D$ERC,D.FLG(A0) ;return even if errors MOVW #[DSK],D.DEV(A0) ;device: "DSK" MOV #512,D.SIZ(A0) ;default buffer size ORB #D$INI,D.FLG(A0) ;indicate DDB is initialized READ: MOV 4(A3),A1 ;get address of driver MOVW @A1,D.DVR(A0) ;enter driver # in DDB MOV 14(A3),A1 ;get address of block # MOVW @A1,D.REC+2(A0) ;enter physical record # in DDB (low order word) MOVW 2(A1),D.REC(A0) ;enter physical record # in DDB (high order word) MOV 24(A3),D.BUF(A0) ;enter buffer address in DDB CLRB D.ERR(A0) ;clear errors and flags READ @A0 ;read disk block MOV 44(A3),A1 ;return error code MOVB D.ERR(A0),@A1 ;return error code RTN EVEN DDB: BLKB D.DDB END .