home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG038.ARK / RELHDR.ASM < prev    next >
Assembly Source File  |  1984-04-29  |  2KB  |  77 lines

  1. ;
  2. ; TITLE        HEADER FOR REL.UTL   MOVE UP AND RELOCATE
  3. ; FILENAME    RELHDR.ASM
  4. ; AUTHOR    Robert A. Van Valzah   7/23/78
  5. ; LAST REVISED    R. A. V.   11/25/79
  6. ; REASON    ADDED LENGTH BYTE
  7. ;
  8. ;
  9. BDOS    EQU    5
  10. ;
  11. ;
  12.     ORG    100H
  13. ENTRY:
  14.     lhld    len    ;get length of code to relocate
  15.     mov    b,h    ;copy length to reg bc
  16.     mov    c,l
  17.     xra    a    ;set carry if len is not a 256
  18.     sub    l    ;boundry
  19.     LDA    BDOS+2    ;GET CURRENT SID BASE PAGE
  20.     SbB    h    ;CALCULATE BASE OF REL AS SID BASE -
  21.             ;LENGTH OF REL
  22.     MOV    H,A    ;DESTINATION ADDRESS -> HL
  23.     MVI    L,0
  24.     PUSH    H    ;SAVE DEST FOR ENTRY WHEN RELOC IS DONE
  25.     LXI    D,CODE0    ;POINTER TO CODE ORGED FOR 0
  26.     PUSH    B    ;SAVE LENGTH
  27.     PUSH    H    ;SAVE DEST
  28. MOVE:
  29.     LDAX    D    ;GET A BYTE FROM CODE 1 IMAGE
  30.     MOV    M,A    ;MOVE TO DEST
  31.     INX    D    ;BUMP CODE 1 POINTER
  32.     INX    H    ;BUMP DEST POINTER
  33.     DCX    B    ;MOVED WHOLE THING YET?
  34.     MOV    A,B
  35.     ORA    C
  36.     JNZ    MOVE
  37.     POP    H    ;GET DEST BACK
  38.     POP    B    ;GET LENGTH BACK
  39.     push    d    ;push reloc table address to stack
  40.     MOV    D,H    ;BIAS IN REG D
  41. NEWBYT:
  42.     XTHL        ;GET RELOC TBL ADR
  43.     MOV    E,M    ;KEEP A REL BYTE IN REG E
  44.     INX    H    ;BUMP RELOC TBL POINTER
  45.     XTHL        ;PUT TBL PTR BACK
  46. RELBYT:
  47.     MOV    A,E    ;GET RELOC BYTE
  48.     RLC        ;MOVE A BIT INTO CARY
  49.     MOV    E,A    ;SAVE THE REST OF THE RELOC BITS
  50.     JNC    NOREL    ;BIT WAS 0, DON'T RELOCATE THIS BYTE
  51.     MOV    A,D    ;GET BIAS TO ADD
  52.     ADD    M    ;ADD TO BYTE FROM DEST
  53.     MOV    M,A
  54. NOREL:
  55.     INX    H    ;BUMP DEST POINTER
  56.     DCX    B    ;DONE WITH ALL BYTES?
  57.     MOV    A,B
  58.     ORA    C
  59.     JZ    MOVEDONE ;YUP - VECTOR TO REL BASE
  60.     MOV    A,L    ;NOPE - TEST IF AT 8 BYTE BOUNDRY
  61.     ANI  0000$0111B    ;IF SO, TIME FOR A NEW BYTE FROM TABLE
  62.     JNZ    RELBYT    ;NOT AT BOUNDRY
  63.     JMP    NEWBYT    ;AT A BOUNDRY
  64. MOVEDONE:
  65.     POP    B    ;REMOVE RELOC TBL ADR FROM STACK
  66.     ret        ;vector to base of now relocated code
  67. ;
  68.     org    (($-1) and 0fff8h) + 8
  69. ;
  70. code0:            ;address where code orged for zero goes
  71. bias    equ    $    ;bias used to read code orged for zero
  72. ;
  73.     org    $+26h    ;displacement to length word
  74. len    ds    2
  75. ;
  76.     END    ENTRY
  77.