; ; ; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ; ; CORE DUMP TO TU-58 CASSETTE TAPE ; ; DUMPS FROM LOCATION 0 TO 157000-2 TO BLOCK 20 ; ; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ; .ABSOLUTE .=157000 START: MOV #176160,R0 ;DEVICE ADDR-DL11 MOV #STACK,SP ; ; POWER UP SEQUENCE ; BIS #1,4(R0) ;SET BREAK ON TX TO POWER UP CLR R1 ;CHARACTER TO SEND JSR PC,TX ;SEND IT JSR PC,TX ;TWO NULLS REQUIRED TU01: BIT #200,4(R0) ;WAIT FOR READY AGAIN BEQ TU01 BIC #1,4(R0) ;OK CLEAR BREAK ; ; INITIALISATION ; MOV #4,R1 ;INIT CHARACTER JSR PC,TX ;SEND IT TWICE JSR PC,TX TU02: BIT #200,(R0) ;WAIT FOR CONTINUE BEQ TU02 MOVB 2(R0),R2 CMPB R2,#20 ;CONTINUE? BNE TU02 ; ; SEND WRITE COMMAND ; CLR R4 CLR COUNT MOV #WRIT,R3 ;START OF BUFFER MOV #14.,R5 ;NO OF BYTES TU03: MOVB (R3)+,R1 JSR PC,TX ;TX CHARS DEC R5 BNE TU03 ; ; WAIT FOR CONTINUE ; TU04: BIT #200,(R0) ;WAIT FOR RX READY BEQ TU04 MOVB 2(R0),R2 ;GET CHAR CMPB R2,#20 ;CONTINUE? BNE TU07 ;NO-MUST BE END PACKET ; ; NOW SEND DATA--R4 POINTS AT CORE ; CMP R4,#157000 BLO TU09 HALT ;WRONG!! TU09: MOV 200(R4),R2 ;SAVE CORE WORD MOV R4,R5 ADD #128.,R5 ;R5 POINTS AT END MOV #100001,R3 ;CHECKSUM TU05: ADD (R4)+,R3 ADC R3 CMP R4,R5 ;END? BNE TU05 ;NO MOV R3,(R5) ;YES DUMP CRC IN CORE MOV #1,R1 ;FLAG BYTE JSR PC,TX MOV #128.,R1 ;BYTE COUNT JSR PC,TX SUB #128.,R4 ;RESET POINTER ADD #2,R5 TU06: MOVB (R4)+,R1 ;WRITE BYTE JSR PC,TX CMP R4,R5 BNE TU06 ;NOT FINISHED INC COUNT ;NO OF TRANSFERS SUB #2,R4 MOV R2,(R4) ;RESTORE MEMORY WORD BR TU04 ;KEEP GOING TILL END ; ; MUST BE END PACKET ; TU07: MOV #BUF,R3 ;COMMAND PACKET BUFFER MOVB R2,(R3)+ TU08: BIT #200,(R0) ;GET REST OF PACKET BEQ TU08 MOVB 2(R0),(R3)+ ;SAVE IT CMP R3,#BUF+14. BNE TU08 HALT ;THE END ; ; TX ROUTINE ; TX: BIT #200,4(R0) ;READY? BEQ TX BIC #177400,R1 MOVB R1,6(R0) ;SEND CHAR RTS PC ; ; COMMAND PACKET BUFFER ; BUF: .WORD 0,0,0,0,0,0,0 WRIT: .WORD 5002,3,0,0,157000,10,164015 .=.+10 STACK: .WORD 0 COUNT: .WORD 0 .END