.mcall .readw,.writw,.close,.print .mcall .csigen,.exit,.sreset errbyte = 52 nwords = 256. nib: .word 0 rblk: .word 0 wblk: .word 0 start: .csigen #dspace,#dext mov #wbuff,r3 mov #nwords,r0 $0: clr (r3)+ sob r0,$0 read: .readw #area,#3,#rbuff,#nwords,rblk inc rblk bcc trans tstb @#errbyt beq done .print #rerr br exit trans: mov #rbuff,r1 mov #nwords*2,r2 loop: movb (r1)+,r0 cmp #12,r0 beq cont cmp #15,r0 beq cont sub #'a,r0 bcs $10 sub #'a-'A,r0 $10: add #'a,r0 sub #'A,r0 bcc $1 add #'A-'0,r0 br $2 $1: add #10.,r0 $2: mov nib,r3 ash #-1,r3 bit #1,nib bne $4 ash #4,r0 bic #017,r0 movb r0,wbuff(r3) inc nib br cont $4: bic #360,r0 bisb wbuff(r3),r0 movb r0,wbuff(r3) inc nib cmp #nwords*4,nib bne cont .writw #area,#0,#wbuff,#nwords,wblk inc wblk bcc $5 .print #werr br exit $5: mov #wbuff,r3 mov #nwords,r0 $6: clr (r3)+ sob r0,$6 clr nib cont: sub #1,r2 bne loop br read done: tst nib bne close .writw #area,#0,#wbuff,#nwords,wblk bcc close .print #werr br exit close: .close #0 .print #donem exit: .sreset .exit dext: .word 0,0,0,0 area: .word 0 .word 0 .word 0 .word 0 .word 0 rbuff: .blkw 256. wbuff: .blkw 256. rerr: .asciz / read error / werr: .asciz / write error / donem: .asciz / complete / .even dspace: .end start