home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol115 / romsum.asm < prev    next >
Encoding:
Assembly Source File  |  1984-04-29  |  2.2 KB  |  190 lines

  1. ;ROMSUM--COMPUTES CHECKSUM OF ANY AREA OF MEMORY
  2. ;INTENDED FOR TESTING ROMS AGAINST KNOWN VALUE
  3. ;WRITTEN BY RUSS BAKKE
  4. ;02-17-83
  5. ;
  6.     ORG    100H
  7.     LXI    D,MSG1
  8. AGAIN    CALL    MSG
  9.     CALL    RHV    ;GET START ADDR
  10.     SHLD    START    ;SAVE IT
  11.     LXI    D,MSG2
  12.     CALL    MSG
  13.     CALL    RHV    ;GET STOP ADDR
  14.     INX    H    ;ADD 1
  15.     SHLD    STOP    ;SAVE IT
  16.     LXI    D,0    ;CLEAR WORKING REG
  17.     LHLD    START
  18. ;
  19. BYTE    MVI    B,8    ;BIT COUNTER
  20.     MOV    A,M    ;GET BYTE
  21. ;
  22. BIT    MOV    C,A    ;SAVE IT
  23. ;THIS FORMS THE XOR OF 4 BITS IN DE
  24. ;AND LSB OF A
  25.     PUSH    B
  26.     PUSH    D
  27.     PUSH    PSW
  28.     MVI    B,6    ;BIT 6 OF E
  29.     MOV    A,E
  30. BIT1    RAR
  31.     DCR    B
  32.     JNZ    BIT1
  33.     MOV    B,A
  34.     POP    PSW
  35.     XRA    B
  36.     XRA    D    ;BIT 0 OF D
  37.     MVI    B,3
  38.     CALL    XORBD
  39.     MVI    B,4    ;4 MORE
  40.     CALL    XORBD
  41.     POP    D
  42.     RAR    ;PUT BIT INTO CARRY
  43.     MOV    A,E    ;MOVE INTO E
  44.     RAL
  45.     MOV    E,A    ;& ON INTO D
  46.     MOV    A,D
  47.     RAL
  48.     MOV    D,A
  49.     POP    B
  50.     MOV    A,C
  51.     RAR    ;NEXT BIT
  52.     DCR    B
  53.     JNZ    BIT
  54. ;
  55.     INX    H
  56.     LDA    STOP+1
  57.     CMP    H
  58.     JNZ    BYTE
  59.     LDA    STOP
  60.     CMP    L
  61.     JNZ    BYTE
  62. ;
  63. ;DONE
  64.     PUSH    D
  65.     LXI    D,MSG3
  66.     CALL    MSG
  67.     POP    D
  68.     CALL    DWORD    ;DISPLAY DE
  69.     LXI    D,MSG4
  70.     CALL    MSG
  71.     MVI    C,RDCON
  72.     CALL    DOS    ;GET 1 CHAR
  73.     CPI    'Y'
  74.     RNZ
  75.     LXI    D,MSG1A
  76.     JMP    AGAIN
  77. ;
  78. ;SUBROUTINES
  79. ;XORBD--XOR BIT FROM D
  80. XORBD    PUSH    PSW
  81.     MOV    A,D
  82. XOR1    RAR
  83.     DCR    B
  84.     JNZ    XOR1
  85.     MOV    B,A
  86.     POP    PSW
  87.     XRA    B
  88.     RET
  89. ;
  90. ;DWORD--DISPLAY DE AS HEX WORD
  91. DWORD    PUSH    D
  92.     MOV    A,D
  93.     CALL    DBYT
  94.     POP    D
  95.     MOV    A,E
  96. ;
  97. ;DBYT--DISPLAY A AS HEX
  98. DBYT    PUSH PSW
  99.     RRC
  100.     RRC
  101.     RRC
  102.     RRC
  103.     CALL    TAD
  104.     POP    PSW
  105. ;
  106. ;TAD--CONVERT A TO ASCII & DISPL.
  107. TAD    ANI    0FH
  108.     ADI    90H
  109.     DAA
  110.     ACI    40H
  111.     DAA
  112.     MOV    E,A
  113. ;
  114. ;COUT--OUTPUT CHAR IN E
  115. COUT    MVI    C,WRCON
  116.     JMP    DOS
  117. ;
  118. ;MSG--OUTPUT BUFFER AT DE
  119. MSG    MVI    C,PUTBUF
  120.     JMP    DOS
  121. ;
  122. ;RHV--READ A HEX VALUE, RET IN HL
  123. RHV    LXI    D,BUFFER
  124.     MVI    A,6    ;BUFFER LENGTH
  125.     STAX    D
  126.     MVI    C,GETBUF
  127.     CALL    DOS
  128.     MVI    E,LF    ;ADD LF
  129.     CALL    COUT
  130.     LXI    D,BUFFER+1
  131.     LDAX    D    ;CHAR COUNT
  132.     INX    D
  133.     LXI    H,0
  134.     MOV    B,A
  135. RH1    LDAX    D
  136.     CALL    AHTB    ;CONVERT TO HEX
  137.     DAD    H
  138.     DAD    H
  139.     DAD    H
  140.     DAD    H;*16
  141.     ADD    L
  142.     MOV    L,A
  143.     INX    D    ;NEXT CHAR
  144.     DCR    B
  145.     JNZ    RH1
  146.     RET
  147. ;
  148. ;AHTB--CONVERT A FROM ASCII TO HEX
  149. AHTB    SUI    30H
  150.     RC
  151.     ADI    0E9H
  152.     RC
  153.     ADI    6
  154.     JP    AH1
  155.     ADI    7
  156.     RC
  157. AH1    ADI    0AH
  158.     ORA    A
  159.     RET
  160. ;
  161. ;
  162. ;MESSAGES
  163. MSG1    DB 'ROM SIGNATURE ANALYSIS'
  164. ;
  165. MSG1A    DB    CR,LF
  166.     DB 'ENTER STARTING ADDRESS IN HEX: $'
  167. ;
  168. MSG2    DB 'ENTER ENDING ADDRESS IN HEX: $'
  169. ;
  170. MSG3    DB 'CHECKSUM IS $'
  171. ;
  172. MSG4    DB    CR,LF
  173.     DB 'AGAIN? $'
  174. ;
  175. ;STORAGE
  176. START    DS    2
  177. STOP    DS    2
  178. BUFFER    DS    6
  179. ;
  180. ;EQUATES
  181. DOS    EQU    5    ;DOS CALL
  182. ;
  183. ;DOS FUNCTIONS
  184. RDCON    EQU    1
  185. WRCON    EQU    2
  186. PUTBUF    EQU    9
  187. GETBUF    EQU    10
  188. CR    EQU    0DH
  189. LF    EQU    0AH
  190.