home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / lambda / misc / locate.lbr / LOCATE.AZM / LOCATE.ASM
Encoding:
Assembly Source File  |  1993-10-25  |  6.0 KB  |  356 lines

  1. ;---------------------------------------------------------------------
  2. ;
  3. ;    TITLE    'LOCATE.COM - Display Essential CP/M Jump Addresses.'
  4. ;
  5. ;    Notes
  6. ;
  7. ;    1) Based on TELL.COM by Howard Moulton, Milford RCP/M.
  8. ;    2) LOCATE.COM is a derivative of TELL.COM, which in this
  9. ;       enhanced form, eliminates more than 500 bytes of extra
  10. ;          code from the older program.  The source listing which
  11. ;       follows is presented in the conventional style for easy
  12. ;       reading.  The program now fits within a 1K file (1024
  13. ;       bytes).
  14. ;
  15. ;    by Robert C. Kuhman
  16. ;    Sysop of the Cro'sNest RCP/M - RBBS
  17. ;    Released to the PUBLIC DOMAIN for nonprofit use only.
  18. ;    Original version June 23, 1983.
  19. ;
  20. ;    Assemble with ASM.COM or MAC.COM
  21. ;
  22. ;---------------------------------------------------------------------
  23. ;
  24. ;    EQUATES
  25. ;
  26. VERS:    EQU    100        ;PROGRAM VERSION NUMBER
  27. MONTH:    EQU    06        ;MONTH OF LAST REVISION
  28. DAY:    EQU    23        ;DAY OF LAST REVISION
  29. YEAR:    EQU    83        ;YEAR OF LAST REVISION
  30. ;
  31. TRUE:    EQU    -1
  32. FALSE:    EQU    NOT TRUE
  33. ;
  34. ;
  35. ;    USER DEFINED EQUATES
  36. ;
  37. STDCPM:    EQU    TRUE        ;0100H LOAD LOCATION
  38. ;
  39. ;    END OF USER DEFINED EQUATES
  40. ;
  41.     IF STDCPM
  42. CPMBAS:    EQU    0000H        ;STD BASE ADDR
  43.     ENDIF
  44. ;
  45.     IF NOT STDCPM
  46. CPMBAS:    EQU    4200H        ;NON STD BASE
  47.     ENDIF
  48. ;
  49. ;    BDOS FUNCTION EQUATES
  50. ;
  51. BDOS:    EQU    5
  52. PBUFL:    EQU    9
  53. CONOUT:    EQU    2
  54. ;
  55. ;    ASCII DEFINITIONS
  56. ;
  57. CR:    EQU    0DH
  58. LF:    EQU    0AH
  59. ;
  60. ;
  61. ;    PROGRAM ORGIN
  62. ;
  63.     ORG    CPMBAS+100H
  64. ;
  65. ;
  66. ;    START OF PROGRAM
  67. ;
  68. BEGIN:    LXI    D,SIGNON    ;DISPLAY SIGNON MESSAGE AND REVISION
  69.     CALL    PRINT
  70. ;
  71.     LHLD    1        ;GET WBOOT ADDR
  72.     DCX    H        ;DECR DOWN 3 TO CBOOT ADDR
  73.     DCX    H
  74.     DCX    H
  75. ;
  76. ;    STORE BEGINNING OF THE JUMP TABLE
  77. ;
  78.     SHLD    JMPTBL
  79. ;
  80. ;    LOCATE THE CCP ADDRESS
  81. ;
  82.     MOV    A,H        ;GET HI ADDR
  83.     SUI    16H        ;SUBTRACT 1600H
  84.     MOV    H,A        ;PUT IT BACK
  85.     SHLD    CCPADD        ;GOT CCP ADDRESS
  86. ;
  87. ;    AND THE BDOS ENTRY ADDRESS
  88. ;
  89.     LXI    D,806H        ;GET OFFSET FOR BDOS ENTRY
  90.     DAD    D
  91.     SHLD    DOSENT        ;GOT BDOS ENTRY POINT
  92. ;
  93. ;    SHOW WHERE CCP IS LOCATED
  94. ;
  95.     LXI    D,CCPMSG    ;GET STRING READY
  96.     CALL    PRINT        ;CALL PRINT ROUTINE
  97.     LHLD    CCPADD        ;GET CCP ADDRESS
  98.     CALL    SWAP        ;GO FORMAT FOR DISPLAY
  99. ;
  100. ;    NEXT THE BDOS ENTRY ADDRESS
  101. ;
  102.     LXI    D,DOSMSG     ;POINT TO MESSAGE
  103.     CALL    PRINT
  104.     LHLD    DOSENT        ;GET DOS ENTRY ADD IN H
  105.     CALL    SWAP    
  106. ;
  107. ;    START OF THE JUMP TABLE
  108. ;
  109.     LXI    D,JMPMSG
  110.     CALL    PRINT
  111.     LHLD    JMPTBL
  112.     CALL    SWAP
  113. ;
  114. ;    LIST JUMP TABLE ITSELF
  115. ;
  116. ;    COLD START
  117. ;
  118.     LXI    D,JPMSG0
  119.     CALL    PRINT
  120.     LXI    D,0        ;NO OFFSET
  121.     CALL    SETUP
  122. ;
  123. ;    WARM START
  124. ;
  125.     LXI    D,JPMSG1
  126.     CALL    PRINT
  127.     LXI    D,3        ;OFFSET OF 3 BYTES
  128.     CALL    SETUP
  129. ;
  130. ;    CONSOLE STATUS
  131. ;
  132.     LXI    D,JPMSG2
  133.     CALL    PRINT
  134.     LXI    D,6        ;OFFSET OF 6
  135.     CALL    SETUP
  136. ;
  137. ;    CONSOLE INPUT
  138. ;
  139.     LXI    D,JPMSG3
  140.     CALL    PRINT
  141.     LXI    D,9        ;OFFSET OF 9
  142.     CALL    SETUP
  143. ;
  144. ;    CONSOLE OUTPUT
  145. ;
  146.     LXI    D,JPMSG4
  147.     CALL    PRINT
  148.     LXI    D,0CH        ;OFFSET OF 12
  149.     CALL    SETUP
  150. ;
  151. ;    LIST DEVICE
  152. ;
  153.     LXI    D,JPMSG5
  154.     CALL    PRINT
  155.     LXI    D,0FH        ;OFFSET OF 15
  156.     CALL    SETUP
  157. ;
  158. ;    PUNCH
  159. ;
  160.     LXI    D,JPMSG6
  161.     CALL    PRINT
  162.     LXI    D,12H        ;OFFSET OF 18
  163.     CALL    SETUP
  164. ;
  165. ;    READER
  166. ;
  167.     LXI    D,JPMSG7
  168.     CALL    PRINT
  169.     LXI    D,15H        ;OFFSET OF 21
  170.     CALL    SETUP
  171. ;
  172. ;    HOME DISK
  173. ;
  174.     LXI    D,JPMSG8
  175.     CALL    PRINT
  176.     LXI    D,18H        ;OFFSET OF 24
  177.     CALL    SETUP
  178. ;
  179. ;    SELECT DISK
  180. ;
  181.     LXI    D,JPMSG9
  182.     CALL    PRINT
  183.     LXI    D,1BH        ;OFFSET OF 27
  184.     CALL    SETUP
  185. ;
  186. ;    SET TRACK
  187. ;
  188.     LXI    D,JPMSGA
  189.     CALL    PRINT
  190.     LXI    D,1EH        ;OFFSET OF 30
  191.     CALL    SETUP
  192. ;
  193. ;    SET SEC
  194. ;
  195.     LXI    D,JPMSGB
  196.     CALL    PRINT
  197.     LXI    D,21H        ;OFFSET OF 33
  198.     CALL    SETUP
  199. ;
  200. ;    DMA
  201. ;
  202.     LXI    D,JPMSGC
  203.     CALL    PRINT
  204.     LXI    D,24H        ;OFFSET OF 36
  205.     CALL    SETUP
  206. ;
  207. ;    READ THE DISK
  208. ;
  209.     LXI    D,JPMSGD
  210.     CALL    PRINT
  211.     LXI    D,27H        ;OFFSET OF 39
  212.     CALL    SETUP
  213. ;
  214. ;    WRITE DISK 
  215. ;
  216.     LXI    D,JPMSGE
  217.     CALL    PRINT
  218.     LXI    D,2AH        ;OFFSET OF 42
  219.     CALL    SETUP
  220. ;
  221. ;    LIST STATUS
  222. ;
  223.     LXI    D,JPMSGF
  224.     CALL    PRINT
  225.     LXI    D,2DH        ;OFFSET OF 45
  226.     CALL    SETUP
  227. ;
  228. ;    SECTOR TRANSLATE
  229. ;
  230.     LXI    D,JPMSGG
  231.     CALL    PRINT
  232.     LXI    D,30H        ;OFFSET OF 48
  233.     CALL    SETUP
  234. ;
  235.     RET            ;EXIT TO CP/M
  236. ;
  237. ;    DO SETUP OF NEW ADDRESS - D+E = OFFSET
  238. ;    FROM LOCATION JMPTBL, WHICH GETS INTO HL FROM HERE
  239. ;
  240. SETUP:    LHLD    JMPTBL
  241.     DAD    D
  242.     INX    H
  243.     MOV    D,M
  244.     INX    H
  245.     MOV    E,M
  246.     XCHG
  247.     SHLD    TMPADR
  248. ;
  249. ;    SENDS ADDR IN ASCII TO CON
  250. ;
  251. SENDH:    LXI    D,TMPADR
  252.     MVI    C,2
  253. ;
  254. ;    ROUTINE TO CONVERT BINARY TO ASCII
  255. ;    ENTERS WITH D+E POINTING TO THE BYTE OR WORD TO
  256. ;    CONVERT AND THE COUNT IN C
  257. ;
  258. CONV:    LDAX    D
  259.     PUSH    D        ;SAVE THE ENTRY ADD
  260.     PUSH    B
  261.     PUSH    PSW        ;SAVE THE LOWER HALF
  262.     CALL    BINH
  263.     POP    PSW        ;GET LOWER HALF BACK
  264.     CALL    BINL
  265.     POP    B        ;GET BACK COUNT
  266.     POP    D        ;GET BACK POINT
  267.     DCR    C
  268.     JZ    HCRLF        ;JMP IF NO MORE TO HCRLF
  269.     INX    D        ;MOV D UP ONE
  270.     JMP    CONV
  271. BINH:    RAR
  272.     RAR
  273.     RAR
  274.     RAR
  275. BINL:    ANI    15
  276.     ADI    48
  277.     CPI    58
  278.     JC    AOUT
  279.     ADI    7
  280. AOUT:    MOV    E,A
  281.     MVI    C,CONOUT
  282.     CALL    BDOS
  283.     RET
  284. ;
  285. ;    SEND 'H', CR, AND LF TO CONSOLE
  286. ;
  287. HCRLF:    LXI    D,CRLF
  288.     CALL    PRINT
  289.     RET
  290. ;
  291. ;    PRINT BUFFERED LINE
  292. ;
  293. PRINT:    MVI    C,PBUFL
  294.     CALL    BDOS
  295.     RET
  296. ;
  297. ;    SWAP WHAT IS IN HL AND STORE AT TMPADR
  298. ;
  299. SWAP:    MOV    E,H
  300.     MOV    D,L
  301.     XCHG            ;SWAP
  302.     SHLD    TMPADR
  303.     CALL    SENDH
  304.     RET
  305. ;
  306. ;    ASCII MESSAGES AND STORAGE
  307. ;
  308. ;    SIGNON MESSAGE
  309. ;
  310. SIGNON:    DB    CR,LF,'LOCATE.COM v'
  311.     DB    VERS/100+'0','.',VERS MOD 100/10+'0'
  312.     DB    VERS MOD 10+'0',' as of '
  313.     DB    MONTH/10+'0',MONTH MOD 10+'0','/'
  314.     DB    DAY/10+'0',DAY MOD 10+'0','/'
  315.     DB    YEAR/10+'0',YEAR MOD 10+'0'
  316.     DB    CR,LF,LF
  317.     DB    '$'
  318. ;
  319. ;    CRLF
  320. ;
  321. CRLF:    DB    'H',CR,LF,'$'
  322. ;
  323. ;    CP/M MODULE MESSAGES
  324. ;
  325. CCPMSG:    DB    'CCP start        ','$'
  326. CCPADD:    DW    0
  327. DOSMSG:    DB    'BDOS entry       ','$'
  328. DOSENT:    DW    0
  329. JMPMSG:    DB    'CBIOS jump table ','$'
  330. JMPTBL:    DW    0
  331. ;
  332. ;    JUMP TABLE MESSAGES
  333. ;
  334. JPMSG0:    DB    'Cold start       ','$'
  335. JPMSG1:    DB    'Warmstart        ','$'
  336. JPMSG2:    DB    'Console status   ','$'
  337. JPMSG3:    DB    'Console input    ','$'
  338. JPMSG4:    DB    'Console out      ','$'
  339. JPMSG5:    DB    'List device out  ','$'
  340. JPMSG6:    DB    'Punch out        ','$'
  341. JPMSG7:    DB    'Reader in        ','$'
  342. JPMSG8:    DB    'Home disk        ','$'
  343. JPMSG9:    DB    'Select disk      ','$'
  344. JPMSGA:    DB    'Set track        ','$'
  345. JPMSGB:    DB    'Set the sector   ','$'
  346. JPMSGC:    DB    'Set the DMA      ','$'
  347. JPMSGD:    DB    'Read the disk    ','$'
  348. JPMSGE:    DB    'Write disk       ','$'
  349. JPMSGF:    DB    'List status      ','$'
  350. JPMSGG:    DB    'Sector translate ','$'
  351. ;
  352. TMPADR:    DW    0
  353. ;
  354.     END
  355. ;
  356.