.TITLE MTROM .IDENT /V01.00/ PCR =: 177520 ;PAGE CONTROL REGISTER $USRTO =: 50 ;USER TOP ADDRESS $ERRBY =: 52 ;EMT ERROR BYTE .MCALL .CLOSE,.ENTER,.EXIT,.FETCH ;SYSTEM MACROS .MCALL .PRINT,.TRPSET,.WRITW ;... START:: MOV @#$USRTO,R5 ;GET TOP ADDRESS TST (R5)+ ;SKIP LAST WORD MOV #ELOAD,R1 ;ASSUME FETCH FAILED .FETCH R5,#DBLK ;FETCH HANDLER BCC 20$ ;IF CC OK 10$: MOV #BUFF,R0 ;BUFFER MOV #ARGS,R2 ;ARGUMENTS CALL $EDMSG ;EDIT MESSAGE CLRB @R0 ;MAKE IT ASCIZ .PRINT #BUFF ;PRINT IT .EXIT ;EXIT 20$: MOV #EOPEN,R1 ;ASSUME ENTER FAILED .ENTER #AREA,#0,#DBLK,#256. ;ENTER FILE BCS 10$ ;IF CS FAILED CLR R3 ;INIT BLOCK NUMBER CLR R4 ;INIT PAGE NUMBER 30$: MOV #BUFF,R0 ;BUFFER CALL CPROM ;COPY TWO PAGES MOV #EWRIT,R1 ;ASSUME WRITE FAILED .WRITW #AREA,#0,#BUFF,#400,R3 ;WRITE BCS 10$ ;IF CS FAILED INC R3 ;TO NEXT BLOCK TSTB R4 ;ALL PAGES READ? BNE 30$ ;IF NE NO .CLOSE #0 ;CLOSE FILE .PRINT #CRLF ;CRLF .EXIT ;EXIT CPROM:: CALL @PC ;PROPAGATE CODE TWO TIMES CALL PRPGN ;PRINT PAGE NUMBER MOVB R4,@#PCR+1 ;SELECT PAGE MOV #173400,R1 ;ROM MOV #200,R2 ;WORD COUNT 10$: MOV (R1)+,(R0)+ ;COPY SOB R2,10$ ;... INC R4 ;UPDATE PAGE NUMBER RETURN ;RETURN PRPGN:: JSR R2,$SAVVR ;SAVE VOLATILE REGISTERS MOV #PAGE+1,R0 ;CONVERT PAGE NUMBER TO MOV R4,R1 ;A MOV PC,R2 ; S CALL $CBOMG ; C .PRINT #PAGE ; I RETURN ; I ARGS: .WORD $ERRBY ;EDMSG ARG BLOCK DBLK: .RAD50 /DK 173000DAT/ ;FILE NAME BLOCK BUFF: .BLKW 256. ;FILE I/O BUFFER AREA: .BLKW 5 ;EMT AREA PAGE: .ASCII <15>/XXXXXX/<200> ELOAD: .ASCIZ /FETCH ERROR %B/ EOPEN: .ASCIZ /ENTER ERROR %B/ EWRIT: .ASCIZ /WRITE ERROR %B/ CRLF: .BYTE 0 .END START