.TITLE DMPROM -- DUMP KDJ11-B ROM .IDENT /V02.00/ CSR == 177520 ;CONTROL/STATUS REGISTER PCR == 177522 ;PAGE CONTROL REGISTER ROM == 165000 ;ROM ADDRESS DIS65 == 100 ;DISABLE 165000 ROM BIT EE == 40 ;EEPROM AT 165000 BIT WE == 20 ;EEPROM WRITE ENABLE BIT $JSX == 4 ;EXTENDED JOB STATUS WORD NOVBG$ == 100 ;DISABLE VBGEXE BIT $ERRBY == 52 ;EMT ERROR BYTE CH0 = 0 ;CHANNEL FOR FILE I/O SIZE = 64. ;ROM FILE SIZE .MCALL .CLOSE,.EXIT,.ENTER,.FETCH .MCALL .PRINT,.SERR,.TRPSET,.WRITW .ASECT .=$JSX .WORD NOVBG$ ;DISABLE RUNNING UNDER VBGEXE .PSECT CODE,I,RO START:: .TRPSET #AREA,#UTRAP ;SET TRAP TO 4/10 HANDLER MOV @#CSR,-(SP) ;SAVE CSR MOV @#PCR,-(SP) ;SAVE PCR BIC #DIS65!EE!WE,@#CSR ;ENABLE ROM AT 165000 .SERR ;FORCE SOFT USR ERRORS .FETCH LIMIT+2,#DBLK ;FETCH HANDLER BCC 20$ ;IF CC OK MOV #BUFF,R0 ;SET BUFFER ADDRESS MOV #EFET,R1 ;SET FORMAT STRING ADDRESS 10$: MOV #DBLK,R2 ;SET ARGUMENT BLOCK ADDRESS BR FATAL ;FATAL EXIT 20$: .ENTER #AREA,#CH0,#DBLK,#SIZE ;OPEN FILE BCC 40$ ;IF CC OK MOV #BUFF,R0 ;SET BUFFER ADDRESS MOV #EOPN,R1 ;SET FORMAT STRING ADDRESS 30$: MOVB @#$ERRBY,R2 ;CONVER EMT ERROR TO WORD MOV R2,CODE ;SET EMT ERROR CODE BR 10$ ;FATAL EXIT 40$: CLR R5 ;INITIALIZE BLOCK NUMBER MOV #256.,R3 ;INITIALIZE WORD COUNT 50$: MOV R5,R0 ;CALCULATE VALUE FOR PCR ASL R0 ; MOV R0,@#PCR ;SET ROM PAGE NUMBER MOV #ROM,R0 ;SET ROM ADDRESS MOV #BUFF,R1 ;SET BUFFER ADDRESS MOV R3,R2 ;SET WORD COUNT 60$: MOV (R0)+,(R1)+ ;COPY ROM PAGE SOB R2,60$ ; .WRITW #AREA,#CH0,#BUFF,R3,R5 ;WRITE BLOCK TO FILE BCC 70$ ;IF CC OK MOV #BUFF,R0 ;SET BUFFER ADDRESS MOV #EWRT,R1 ;SET FORMAT STRING ADDRESS BR 30$ ;FATAL EXIT 70$: INC R5 ;UPDATE BLOCK NUMBER CMP #SIZE,R5 ;ALL BLOCKS PROCESSED? BNE 50$ ;NO, GO FOR NEXT .CLOSE #CH0 ;CLOSE FILE MOV (SP)+,@#PCR ;RESTORE PCR MOV (SP)+,@#CSR ;RESTORE CSR BR EXIT ;EXIT UTRAP:: MOV @SP,EARG+2 ;SAVE PC BEFORE TRAP MOV #START,SP ;RESET STACK POINTER MOV #4,EARG ;ASSUME TRAP TO 4 BCC 10$ ;CC - TRAP TO 4 ASL EARG ;CS - TRAP TO 10 10$: MOV #BUFF,R0 ;SET BUFFER ADDRESS MOV #ETRP,R1 ;SET FORMAT STRING ADDRESS MOV #EARG,R2 ;SET ARGUMENT BLOCK ADDRESS FATAL:: CALL $EDMSG ;FORMAT MESSAGE FOR OUTPUT CLRB @R0 ;MAKE IT ASCIZ .PRINT #BUFF ;PRINT MESSAGE EXIT:: CLR R0 ;FORCE HARD RESET .EXIT ;EXIT .PSECT DATA,D,RW AREA: .BLKW 5 ;EMT AREA BUFF: .BLKW 256. ;BUFFER EARG: .BLKW 2 ;UNEXPECTED TRAP ARGUMENT BLOCK DBLK:: .RAD50 /DK 165000ROM/ ;DEVICE/FILE BLOCK .BLKW ;RESERVED CODE: .BLKW ;EMT ERROR CODE .PSECT RODATA,D,RO LIMIT: .LIMIT ;PROGRAM LO/HI ADDRESSES ETRP: .ASCIZ /?DMPROM-F-Unexpected trap to %O, PC=%P/ EFET: .ASCIZ /?DMPROM-F-Failed to fetch handler %R/ EOPN: .ASCIZ /?DMPROM-F-File %X open error %D/ EWRT: .ASCIZ /?DMPROM-F-File %X write error %D/ .END START ;THE END