home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / pub / rt11pascal / rtload.mac < prev    next >
Text File  |  2020-01-01  |  3KB  |  144 lines

  1.     .TITLE    LOAD
  2. ;
  3. ;    LOAD 'SAV' FILE FROM 'HEX'
  4. ;
  5. ;    ENTER FILES BELOW:
  6. ;
  7. ;    *<sav-file>=<hex-file>
  8. ;
  9. ERRWD=52    ;ERROR WORD
  10. INCH=3        ;INPUT CHANNEL NO.
  11. OUTCH=0        ;OUTPUT CHANNEL NO.
  12. CR=15        ;CARRAGE RETURN
  13. LF=12        ;LINE FEED
  14. ;*****************************************************
  15.     .MCALL .PRINT,.EXIT,.INTEN,.SYNCH
  16.     .MCALL .CSIGEN,.READ,.WRITE
  17.     .MCALL .WAIT,.WRITW,.CLOSE,.READW
  18. ;********************************************************
  19. LOAD:    .PRINT    #MSG0
  20.     MOV    SP,R1                ;SAVE STACK
  21.     .CSIGEN    #FREE,#DEFEXT,#0        ;OPEN FILE
  22.     MOV    R1,SP                ;RESTORE STACK
  23.     .WAIT    #INCH                ;CHECK CORRECT CHAN
  24.     BCC    12$
  25.     JMP    FLERR                ;OPEN ERROR
  26. 12$:    .WAIT    #OUTCH                ;CORRECT CHANNEL ?
  27.     BCC    11$                ;ERROR ?
  28.     JMP    FLERR                ;YES, OPEN ERROR
  29. 11$:    CLR    R2                ;BLOCK NO
  30.     JSR    PC,OPEN
  31. 1$:    .READW    #AREA,#INCH,#BUFA,#256.,R2    ;READ A BLOCK
  32.     BCS    4$                ;READ ERROR OR EOF ?
  33.     MOV    #512.,R4            ;NO, CHAR COUNT
  34.     MOV    #BUFA,R5            ;POINT TO BUFFER
  35. 2$:    MOVB    (R5)+,R0            ;GET CHAR
  36.     CMPB    R0,#'0                ;VS '0
  37.     BLT    3$
  38.     JSR    PC,CVT                ;CONVERT
  39. 3$:    DEC    R4                ;DEC CHAR COUNT
  40.     BNE    2$                ;BLOCK DONE ?
  41.     INC    R2                ;YES, NEXT BLOCK
  42.     BR    1$                ;AGAIN
  43. 4$:    TSTB    @#ERRWD                ;EOF ?
  44.     BEQ    9$                ;YES, DONE
  45.     JSR    PC,RDERR            ;READ ERROR
  46. 9$:    .CLOSE    #INCH                ;CLOSE FILE
  47.     JSR    PC,CLOSE            ;CLOSE OTHER FILE
  48.     .EXIT
  49. ;*****************************************************
  50. ;OPEN OUTPUT FILE
  51. OPEN:    MOV    #BUFB,OPNT            ;BUFFER POINTER
  52.     CLR    OBLK                ;BLOCK COUNT
  53.     MOV    #512.,OCHR            ;CHARACTER COUNT
  54.     RTS    PC
  55. ;*****************************************************
  56. CLOSE:    CMP    OCHR,#512.            ;ANY WORDS
  57.     BEQ    2$
  58.     MOVB    #0,@OPNT            ;PAD BUFFER WITH NULLS
  59.     INC    OPNT
  60.     DEC    OCHR
  61.     BNE    CLOSE
  62.     MOV    OBLK,R3
  63.     .WRITW    #AREA,#OUTCH,#BUFB,#256.,R3
  64.     BCC    2$                ;ERROR ?
  65.     JMP    WRTERR                ;WRITE ERROR
  66. 2$:    .CLOSE    #OUTCH                ;CLOSE FILE
  67. 9$:    RTS    PC
  68. ;*****************************************************
  69. CVT:    TST    FLAG                ;2ND NIBBLE ?
  70.     BNE    10$
  71.     JSR    PC,CVT1                ;CONVERT
  72.     ASL    R0                ;SHIFT UP
  73.     ASL    R0
  74.     ASL    R0
  75.     ASL    R0
  76.     MOV    R0,R1                ;SAVE IN R1
  77.     INC    FLAG                ;SET ON 
  78.     RTS    PC                ;RETURN
  79. ;
  80. 10$:    JSR    PC,CVT1
  81.     BISB    R1,R0                ;OR TOGETHER        
  82.     CLR    FLAG
  83.     TST    FLAGS    
  84.     BNE    20$
  85.     MOV    R0,SVWORD
  86.     INC     FLAGS
  87.     RTS    PC
  88. ;        
  89. 20$:    SWAB    SVWORD
  90.     BISB    R0,SVWORD
  91.     MOV    SVWORD,@OPNT            ;MOVE WORD TO IN BUFFER
  92.     CLR    FLAGS
  93.     INC    OPNT                ;ADVANCE POINTER
  94.     INC    OPNT
  95.     DEC    OCHR                ;BLOCK FULL?
  96.     DEC    OCHR
  97.     BNE    3$                ;NO, SKIP
  98.     MOV    OBLK,R3
  99.     .WRITW    #AREA,#OUTCH,#BUFB,#256.,R3
  100.     BCC    2$
  101.     JMP    WRTERR                ;WRITE ERROR
  102. 2$:    INC    OBLK                ;RESET POINTERS
  103.     MOV    #512.,OCHR
  104.     MOV    #BUFB,OPNT
  105. 3$:    RTS    PC
  106. ;*****************************************************
  107. CVT1:    BITB    #100,R0
  108.     BNE    10$
  109.     BIC    #177760,R0            ;KEEP BOTTOM 4 BITS
  110.     RTS    PC    
  111. 10$:    BIC    #177770,R0            ;KEEP BOTTOM 3 BITS
  112.     ADD    #9.,R0                ;ADD 9
  113.     RTS    PC
  114. ;*****************************************************
  115. ;FATAL ERRORS - ABNORMAL TERMINATION
  116. FLERR:    .PRINT    #MSG2                ;OPEN FILE ERROR
  117.     .EXIT
  118. WRTERR:    .PRINT    #MSG5                ;WRITE ERROR
  119.     .EXIT
  120. RDERR:    .PRINT    #MSG3                ;READ ERROR
  121.     .EXIT
  122. ;*****************************************************
  123. DEFEXT:    .RAD50    "HEX"                ;DEFAULTS
  124.     .RAD50    "SAV"
  125.     .WORD    0
  126.     .WORD    0
  127.     .EVEN
  128. FLAG:    .WORD    0                ;ON IF 2ND NIBBLE
  129. FLAGS:    .WORD    0                ;ON IF 2ND BYTE
  130. SVWORD:    .WORD    0
  131. OPNT:    .WORD    0                ;OUTPUT BUFFER POINTER
  132. OBLK:    .WORD    0                ;OUTPUT BLOCK COUNT
  133. OCHR:    .WORD    0                ;OUTPUT CHAR COUNT
  134. AREA:    .BLKW    10
  135. MSG0:    .ASCIZ    <CR><LF>"#  ENTER FILES BELOW:"
  136. MSG2:    .ASCIZ    <CR><LF>"#  FILE OPEN ERROR"
  137. MSG3:    .ASCIZ    <CR><LF>"#  FILE READ ERROR"
  138. MSG5:    .ASCIZ    <CR><LF>"#  FILE WRITE ERROR"
  139.     .EVEN
  140. BUFA:    .BLKW    256.                ;INPUT BUFFER
  141. BUFB:    .BLKW    256.                ;OUTPUT BUFFER
  142. FREE:    .+2                    ;START OF FREE CORE
  143.         .END LOAD
  144.