; AIMDMP V1A-QDX Edit #42 25-Feb-82 Autor: -tf- File: AIMDMP.MAC ; ====== ; ; AIM-DUMP, ^Z ==>EOF ; FIXES OUTPUT-FILE: AIMDMP.LOD ; KEIN TEST AUF 'OVERRUN' !!!!!!!!!! ; .NLIST SYM,TOC ; ; .MCALL .FETCH,.WRITE,.WAIT,.ENTER,.WRITW .MCALL .PRINT,.EXIT,.CLOSE,.QSET ; PRVEC=70 ; PC PRCSR=177550 ; PC ; ; PRVEC=160 ; DL ; PRCSR=176560 ; DL ; PRIN=PRCSR+2 PROUT=PRCSR+6 ; N=1. ; BUFFER-COUNT RK05 ; START: .QSET #QU,#5 ; ADD FIVE ELEMENTS TO THE QUEUE .PRINT #IMSG ; INTRODUCTION .FETCH #HSPACE,#RKNAME ; GET RK HANDLER BCS FERR ; NOT AVAILABLE MOV #AREA,R1 ; EMT ARGUMENT AREA .ENTER R1,#1,#RKNAME,#-1 ; ENTER THE FILE LARGEST EMPTY= #-1 BCS ENERR ; SOME ERROR IN ENTER BR BEGIN ; FERR: .PRINT #FMSG ; ERROR ACTION GOES HERE .EXIT ENERR: .PRINT #EMSG .EXIT LKERR: .PRINT #LMSG ; 'CHANNEL NOT OPEN' ERRORS ARE NOT .EXIT ; PROCESSED IN THE FOLLOWING CODE ; ; ; BEGIN: MOV @#60,SAV60 ; KEYBOARD INTERRUPT MOV #TTINT,@#60 MOV #-1,BUFFUL ; EMPTY CLR BYTCNT CLR R5 ; USE R5 FOR BLOCK NUMBER JSR PC,CLRB1 ; RESET WHOLE BUFFER MOV #BUF1,R3 MOV #BUF2,R4 .WRITW R1,#1,R4,#256.,R5 ; WRITE BUF ZUM POSITIONIEREN ; MOV #INT,@#PRVEC ; INITIALIZE INTERRUPTS MOV #340,@#PRVEC+2 TST @#PRIN ; CLEAR FLAG MOV #100,@#PRCSR ; INTERRUPT ENABLE ; LOOP: TST BUFFUL ; BUFFER FULL ? BEQ 2$ CMP LSTCHR,#32 ; ^Z BNE LOOP BR EOF ; 2$: MOV #-1,BUFFUL ; AGAIN EMPTY MOV R4,R0 ; CHANGE BUFFERS MOV R3,R4 MOV R0,R3 ; .WAIT #1 .WRITE R1,#1,R4,#256.*N,R5 ; WRITE BUF BCS WTERR ADD #N,R5 ; BUMP BLOCK NUMBER BR LOOP ; EOF: CLR @#PRCSR ; STOP INTERRUPTS CLRB @POINT INC BYTCNT MOV BYTCNT,R3 ASR R3 ; WORD-COUNT ; CMP R4,#BUF2 ; LAST BUFFER BEQ 1$ MOV #BUF2,R4 BR 2$ ; 1$: MOV #BUF1,R4 ; 2$: .WAIT #1 .WRITW R1,#1,R4,R3,R5 ; WRITE BUF .CLOSE #1 .PRINT #FIN BR FERTIG ; WTERR: .PRINT #WTM ; HARD READ ERROR .CLOSE #1 CLR @#PRCSR ; STOP INTERRUPTS FERTIG: MOV SAV60,@#60 .EXIT ; ; CLRB1: MOV #BUF1,R3 ; RESET WHOLE BUFFER MOV #256.*N,R0 1$: CLR (R3)+ SOB R0,1$ ; MOV #BUF2,R3 ; RESET WHOLE BUFFER MOV #256.*N,R0 2$: CLR (R3)+ SOB R0,2$ RTS PC ; INT: MOVB @#PRIN,@POINT ; READ DATA MOVB @POINT,@#177566 ; MUSS SCHNELLER SEIN ALS LINK, KEIN XOFF ! INC POINT INC BYTCNT CMP BYTCNT,#512.*N BNE 1$ CLR BUFFUL CLR BYTCNT CMP POINT,#BUF2 ; CHANGE BUFFER-POINTER BEQ 1$ MOV #BUF1,POINT 1$: RTI ; TTINT: MOVB @#177562,LSTCHR CMP LSTCHR,#32 ; ^Z BEQ 1$ MOVB LSTCHR,@#PROUT ; NUR 'LANGSAM' TIPPEN ! 1$: RTI ; RKNAME: .RAD50 /RK / .RAD50 /AIMDMPLOD/ AREA: .BLKW 10. QU: .BLKW 7*5 ; QUEUE AREA SAV60: 0 ; LSTCHR: 0 POINT: BUF1 BYTCNT: 0 BUFFUL: .WORD 0 ;+++++++++++++++++++++++: BUF1: .BLKW 256.*N ; BUF2: .BLKW 256.*N ; ;-----------------------; ; .NLIST BEX .ENABL LC ; IMSG: .ASCIZ /AIM-Dump to AIMDMP.LOD/ FMSG: .ASCIZ /NO DEVICE?/ EMSG: .ASCIZ /ENTRY ERROR?/ LMSG: .ASCIZ /LOOKUP ERROR?/ WTM: .ASCIZ !WR ERR/NO ROOM! FIN: .ASCIZ /AIM-Dump fertig: AIMDMP.LOD/<7> .EVEN ; HSPACE=. ; .END START