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 / CPMINFO / TELL02.LBR / TELL.AQM / TELL.ASM
Assembly Source File  |  2000-06-30  |  6KB  |  388 lines

  1. ; TELL program by Howard Moulton (since revised by others)
  2. ;
  3. ;
  4. ; This is a small utility used to find out various locations of what and
  5. ; where various addresses are within the CP/M for which this utility
  6. ; operates.  Quite useful if your writing software for CP/M, but need
  7. ; to find out the EXACT addresses that some CBOIS routines are operating
  8. ; when the occasion arises that the software CAN'T access it through
  9. ; CP/M, like rewriting FORMAT programs and such utilities as those.....
  10. ;
  11. ; Any mods or changes or enhancements would be appreciated......Howard
  12. ;
  13. ;
  14. ; Equates
  15. ;
  16. BDOS    EQU    0005H
  17. CR    EQU    0DH
  18. LF    EQU    0AH
  19. TAB    EQU    09H
  20. ;
  21. RDCON    EQU    1
  22. WRCON    EQU    2
  23. PRINT    EQU    9
  24. RESET    EQU    13
  25. SELDS    EQU    14
  26. SEAFF    EQU    17
  27. SEANF    EQU    18
  28. RESEC    EQU    20
  29. ;
  30. ;
  31. BEGIN:    ORG    100H
  32.     LXI    D,INTRO
  33.     MVI    C,PRINT
  34.     CALL    BDOS
  35.     CALL    CRLF
  36.     JMP    START
  37. ;
  38. INTRO:    DB    CR,LF,'This is a utility that tells you where your CCP'
  39.     DB    CR,LF,'starts, what your BDOS entry address is, and'
  40.     DB    CR,LF,'where your BIOS jump table begins, as well as'
  41.     DB    CR,LF,'useful information'
  42.     DB    CR,LF,CR,LF,'$'
  43. ;
  44. ;
  45. ; We'll use the CP/M stack since we're so small, we couldn't possibly
  46. ; overwrite the CCP, which would require a warm start....
  47. ;
  48. START:    LHLD    1        ; Get WBOOT address
  49.     DCX    H
  50.     DCX    H
  51.     DCX    H        ; Bump down to CBOOT address
  52. ;
  53. ;
  54. ; Now store the aquired beginning of the jump table
  55. ;
  56.     SHLD    JMPTBL
  57. ;
  58. ;
  59. ; Now get the CCP address....
  60. ;
  61.     MOV    A,H        ; Get the high address
  62.     SUI    16H        ; Subtract 1600H
  63.     MOV    H,A
  64.     SHLD    CCPADD        ; Now have CCP address
  65. ;
  66. ;
  67. ; Now get the BDOS entry address...
  68. ;
  69.     LXI    D,806H        ; Get offset for BDOS entry
  70.     DAD    D
  71.     SHLD    DOSENT        ; Now has BDOS entry point
  72. ;
  73. ;
  74. ; Now tell them something about the environment we have found...
  75. ; first, tell where CCP is...
  76. ;
  77.     LXI    D,CCPMSG
  78.     MVI    C,PRINT
  79.     CALL    BDOS
  80.     LHLD    CCPADD        ; Get CCP
  81.     CALL    SWAP        ; Swap them for now
  82.     CALL    SNDH
  83. ;
  84. ;
  85. ; Now for the BDOS entry address....
  86. ;
  87.     LXI    D,DOSMSG    ; Point to message
  88.     MVI    C,PRINT        ; And print...
  89.     CALL    BDOS        ; It out..
  90.     LHLD    DOSENT        ; Get DOS entry, add in "H"
  91.     CALL    SWAP        ; Swap them for now
  92.     CALL    SNDH
  93. ;
  94. ;
  95. ; Now for the jump table...
  96. ;
  97.     LXI    D,JMPMSG
  98.     MVI    C,PRINT
  99.     CALL    BDOS
  100.     LHLD    JMPTBL
  101.     CALL    SWAP
  102.     CALL    SNDH
  103. ;
  104. ;
  105. ; List jump table now...give address of cold start
  106. ;
  107.     LXI    D,J0
  108.     MVI    C,PRINT
  109.     CALL    BDOS
  110.     LXI    D,0        ; No offset
  111.     CALL    SETUP
  112.     CALL    SNDH
  113. ;
  114. ;
  115. ; Next in jump table...
  116. ;
  117.     LXI    D,J1        ; Start listing jump table
  118.     MVI    C,PRINT
  119.     CALL    BDOS
  120.     LXI    D,3
  121.     CALL    SETUP
  122.     CALL    SNDH
  123. ;
  124. ;
  125. ; Now the rest...
  126. ;
  127.     LXI    D,J2
  128.     MVI    C,PRINT
  129.     CALL    BDOS
  130.     LXI    D,6
  131.     CALL    SETUP
  132.     CALL    SNDH
  133. ;
  134. ;
  135. ; The console-in routine
  136. ;
  137.     LXI    D,J3
  138.     MVI    C,PRINT
  139.     CALL    BDOS
  140.     LXI    D,09H
  141.     CALL    SETUP
  142.     CALL    SNDH
  143. ;
  144. ;
  145. ; The console-out routine...
  146.     LXI    D,J4
  147.     MVI    C,PRINT
  148.     CALL    BDOS
  149.     LXI    D,0CH
  150.     CALL    SETUP
  151.     CALL    SNDH
  152. ;
  153. ;
  154. ; Now the list device...
  155. ;
  156.     LXI    D,J5
  157.     MVI    C,PRINT
  158.     CALL    BDOS
  159.     LXI    D,0FH
  160.     CALL    SETUP
  161.     CALL    SNDH
  162. ;
  163. ;
  164. ; Next jmp...
  165. ;
  166.     LXI    D,J6
  167.     MVI    C,PRINT
  168.     CALL    BDOS
  169.     LXI    D,12H
  170.     CALL    SETUP
  171.     CALL    SNDH
  172. ;
  173. ;
  174. ; Now the reader..
  175. ;
  176.     LXI    D,J7
  177.     MVI    C,PRINT
  178.     CALL    BDOS
  179.     LXI    D,15H
  180.     CALL    SETUP
  181.     CALL    SNDH
  182. ;
  183. ;
  184. ; Now the home disk
  185. ;
  186.     LXI    D,J8
  187.     MVI    C,PRINT
  188.     CALL    BDOS
  189.     LXI    D,18H
  190.     CALL    SETUP
  191.     CALL    SNDH
  192. ;
  193. ;
  194. ; Select disk routine
  195. ;
  196.     LXI    D,J9
  197.     MVI    C,PRINT
  198.     CALL    BDOS
  199.     LXI    D,1BH
  200.     CALL    SETUP
  201.     CALL    SNDH
  202. ;
  203. ;
  204. ; Set track routine...
  205. ;
  206.     LXI    D,J10
  207.     MVI    C,PRINT
  208.     CALL    BDOS
  209.     LXI    D,1EH
  210.     CALL    SETUP
  211.     CALL    SNDH
  212. ;
  213. ;
  214. ; Set sec...
  215. ;
  216.     LXI    D,J11
  217.     MVI    C,PRINT
  218.     CALL    BDOS
  219.     LXI    D,21H
  220.     CALL    SETUP
  221.     CALL    SNDH
  222. ;
  223. ;
  224. ; The DMA
  225. ;
  226.     LXI    D,J12
  227.     MVI    C,PRINT
  228.     CALL    BDOS
  229.     LXI    D,24H
  230.     CALL    SETUP
  231.     CALL    SNDH
  232. ;
  233. ;
  234. ; Read the disk
  235. ;
  236.     LXI    D,J13
  237.     MVI    C,PRINT
  238.     CALL    BDOS
  239.     LXI    D,27H
  240.     CALL    SETUP
  241.     CALL    SNDH
  242. ;
  243. ;
  244. ; Write disk ....
  245. ;
  246.     LXI    D,J14
  247.     MVI    C,PRINT
  248.     CALL    BDOS
  249.     LXI    D,2AH
  250.     CALL    SETUP
  251.     CALL    SNDH
  252. ;
  253. ;
  254. ; List status
  255. ;
  256.     LXI    D,J15
  257.     MVI    C,PRINT
  258.     CALL    BDOS
  259.     LXI    D,2DH
  260.     CALL    SETUP
  261.     CALL    SNDH
  262. ;
  263. ;
  264. ; Sector translate
  265. ;
  266.     LXI    D,J16
  267.     MVI    C,PRINT
  268.     CALL    BDOS
  269.     LXI    D,30H
  270.     CALL    SETUP
  271.     CALL    SNDH
  272. ;
  273.     RET            ; Pop off to CP/M
  274. ;.....
  275. ;
  276. ;
  277. ; Setup does setup of new address, i.e., D+E = OFFSET from location
  278. ; JMPTBL, which gets into HL from here.
  279. ;
  280. SETUP:    LHLD    JMPTBL
  281.     DAD    D
  282.     INX    H
  283.     MOV    D,M
  284.     INX    H
  285.     MOV    E,M
  286.     XCHG
  287.     SHLD    TMPADR
  288.     RET
  289. ;.....
  290. ;
  291. ;
  292. ; Sends address in ASCII to console
  293. ;
  294. SNDH:    LXI    D,TMPADR
  295.     MVI    C,2
  296.     CALL    CONV
  297.     RET
  298. ;....
  299. ;
  300. ;
  301. ; Routine to convert binary to ASCII - enters with D+E pointing to the
  302. ; byte or word to convert and the count in C...
  303. ;
  304. CONV:    LDAX    D
  305.     PUSH    D        ; Save the entry address
  306.     PUSH    B
  307.     PUSH    PSW        ; Save the lower half
  308.     CALL    BINH
  309.     POP    PSW        ; Get lower half back
  310.     CALL    BINL
  311.     POP    B        ; Get back count
  312.     POP    D        ; Get back point
  313.     DCR    C
  314.     JZ    CRLF        ; Done with this line
  315.     INX    D        ; Mov "D" up one
  316.     JMP    CONV
  317. ;
  318. BINH:    RAR
  319.     RAR
  320.     RAR
  321.     RAR
  322. ;
  323. BINL:    ANI    15
  324.     ADI    48
  325.     CPI    58
  326.     JC    AOUT
  327.     ADI    7
  328. ;
  329. AOUT:    MOV    E,A
  330.     MVI    C,WRCON
  331.     CALL    BDOS
  332.     RET
  333. ;.....
  334. ;
  335. ;
  336. ; Send carriage return and line feed to console
  337. ;
  338. CRLF:    MVI    E,CR
  339.     MVI    C,WRCON
  340.     CALL    BDOS
  341.     MVI    E,LF
  342.     MVI    C,WRCON
  343.     CALL    BDOS
  344.     RET
  345. ;.....
  346. ;
  347. ;
  348. ; Swap routine - swaps what is in HL and stores @ TMPADR
  349. ;
  350. SWAP:    MOV    E,H
  351.     MOV    D,L
  352.     XCHG            ; Swap them
  353.     SHLD    TMPADR
  354.     RET
  355. ;.....
  356. ;
  357. ;
  358. ; Message area
  359. ;
  360. J0:    DB    'cold start routine',TAB,TAB,'$'
  361. J1:    DB    'warmstart routine',TAB,TAB,'$'
  362. J2:    DB    'console status routine',TAB,TAB,'$'
  363. J3:    DB    'console Input routine',TAB,TAB,'$'
  364. J4:    DB    'console out routine',TAB,TAB,'$'
  365. J5:    DB    'list device out routine',TAB,TAB,'$'
  366. J6:    DB    'punch out routine',TAB,TAB,'$'
  367. J7:    DB    'reader in routine',TAB,TAB,'$'
  368. J8:    DB    'home disk routine',TAB,TAB,'$'
  369. J9:    DB    'select disk routine',TAB,TAB,'$'
  370. J10:    DB    'the set track routine',TAB,TAB,'$'
  371. J11:    DB    'set the sector routine',TAB,TAB,'$'
  372. J12:    DB    'set the dma routine',TAB,TAB,'$'
  373. J13:    DB    'read disk routine',TAB,TAB,'$'
  374. J14:    DB    'write disk routine',TAB,TAB,'$'
  375. J15:    DB    'list status routine',TAB,TAB,'$'
  376. J16:    DB    'sector translate routine',TAB,'$'
  377. ;
  378. CCPMSG:    DB    'CCP starts',TAB,TAB,TAB,'$'
  379. CCPADD:    DW    0
  380. DOSMSG:    DB    'BDOS entry address is',TAB,TAB,'$'
  381. DOSENT:    DW    0
  382. JMPMSG:    DB    'BIOS jump table starts',TAB,TAB,'$'
  383. JMPTBL:    DW    0
  384. TMPADR:    DW    0
  385. ;
  386. ;
  387.     END
  388.