home *** CD-ROM | disk | FTP | other *** search
/ World of Shareware - Software Farm 2 / wosw_2.zip / wosw_2 / CPROG / BCIV.ZIP / READ.ME < prev   
Text File  |  1990-02-18  |  16KB  |  452 lines

  1.  
  2.                            The Bubble Chamber Installation
  3.                              (c) Copyright 1988, 1989
  4.                                  Rh Factor Software
  5.  
  6.                    The following files are on the master diskette:
  7.  
  8.           BUBBLE.EXE - Main program file.  DOS requires that it be either
  9.                        in the default directory or in the path.
  10.  
  11.           BUBBLE.DAT - This file contains data critical to the operation of
  12.                        the program.  It will not run without it.  If it is
  13.                        not found in the default directory, the Bubble Chamber
  14.                        will look for it in the path.  Note: All data is
  15.                        read at startup, this file will not be required
  16.                        after that.
  17.  
  18.           BUBBLE.HLP - This is the help file.  It is not required.  The
  19.                        program will search the path if help is requested.
  20.  
  21.  
  22.           To install the Bubble Chamber, copy these files using the DOS
  23.           Copy command.  The program is not copy protected, and requires no
  24.           unusual installation.
  25.  
  26.  
  27.  
  28.  
  29.                                    NOTICE:
  30.  
  31. This is Beta-ware.  You are licensed to use this release for evaluation
  32. only.  The beta release, while very functional, does not include all the
  33. advantages of registration.
  34.  
  35. To receive a copy of The Bubble Chamber, Release 1.2 send $29.00 to:
  36.  
  37.                             Rh Factor Software 
  38.                               P.O. Box 6466
  39.                             Kent, WA  98064-6466
  40.  
  41. Comments are always welcome.
  42.  
  43. Registration includes The Bubble Chamber Manual. The manual contains details
  44. on modifying the Bubble Chamber data file, adding macros, command line
  45. options, and other customizing information.
  46.  
  47. Thank You for trying out the Bubble Chamber!!!
  48.  
  49.                              Health and Happiness,
  50.                              Rh Factor Software
  51.  
  52.                             __________________
  53.  
  54.           A brief explanation of the labels:
  55.  
  56.           Jxxxxx:  -  This line is a destination of a jump instruction.
  57.  
  58.           Dxxxxx   -  This line starts at an address used in the program.
  59.                       Note that the address depends upon the setting of the
  60.                       appropriate segment register, which may not be
  61.                       correct.  Where this label appear in an operand, an
  62.                       offset directive may be required.
  63.  
  64.           Rxxxxx   -  A relocation table address was set for this position.
  65.                       It is considered to be a segment boundary.
  66.  
  67.                       xxxxx is hex code for the file position, with
  68.                       00000 being the first byte in the file.
  69.  
  70.                       The labels will not be included if the map is not
  71.                       properly defined  (ie. if a Jxxxxx label is in an
  72.                       area mapped to ASCII).  This should cause an
  73.                       assembler error, and alert you to the condition.
  74.  
  75.           ================================================================
  76.  
  77.           Support is available thru:
  78.  
  79.           GEnie Email address RH-FACTOR.
  80.  
  81.                     - or -
  82.  
  83.           Rh Factor Software
  84.           P.O. Box 6466
  85.           Kent, WA   98064-6466
  86.  
  87.    Thank you.
  88.  
  89.                                           Health and Happiness,
  90.                                           R.S. Heller
  91.  
  92. ========================================================================
  93. Macros make assembly language programs far  easier to write, as well  as
  94. to read.  They combine many commands  into one, and make writing at  the
  95. 'machine' level more like working in higher level languages.  One of the
  96. most useful features of  the Bubble Chamber is  that it can  disassemble
  97. these macros, returning a single command in place of a section of  code.
  98. But, it  is  entirely up  to  you to  'program'  the Bubble  Chamber  to
  99. recognize the macros you choose.  This  article is intended to help  you
  100. in that regard.
  101.  
  102. There are  two  files  you  should be  concerned  with:  the  data  file
  103. (BUBBLE.DAT) and the include file (BUBBLE.INC).  The data file  contains
  104. the actual machine code  for the macro, while  the include file has  the
  105. source code.  The Bubble Chamber compares  the machine code in the  data
  106. file with the program you are disassembling; and when a match is  found,
  107. it returns  only the  macro.   The include  file provides  the  detailed
  108. commands to be substituted for the  macro during assembly.  Even if  you
  109. don't intend to  reassemble the program  your working on,  it is a  good
  110. idea to keep this  file up to  date.  This will insure  that you have  a
  111. readable record of the macro commands.
  112.  
  113. Let's look at some of the most common macros you are likely to see,  and
  114. will want to use...
  115.  
  116.  
  117.                          PC & COMPATIBLE ROM-BIOS
  118.  
  119. The basic I/O system (ROM-BIOS), is a standard set of callable  routines
  120. built into your computer's read only memory.  Every 100% compatible must
  121. handle this set of calls, and  produce a certain result, or it  wouldn't
  122. be compatible.   Rather  than  remember the  specific  codes  for  these
  123. routines, most programmers set up macros to call them.  You will find  a
  124. list of these at the end of this article.
  125.  
  126. The whole function of ROM-BIOS should become more clear as you read this
  127. article, and review the macros.  You may also wish to consult one of the
  128. books listed  in the  bibliography  of the  Bubble Chamber  Manual.   An
  129. outside source is especially important if  you want to be sure to  cover
  130. all the  services,  as  the  attached list  is  not  complete.   I  have
  131. intentionally left off cassette and machine specific services; and there
  132. may be others of which I am not aware.
  133.  
  134. Using these  BIOS services  in assembly  language involves  a four  step
  135. process:
  136.  
  137.      1) Move the applicable data to the registers (values
  138.         that will be used by the routine).
  139.  
  140.      2) Move the desired service # to AH (ie: MOV AH,01h).
  141.  
  142.      3) Generate the appropriate software interrupt.
  143.  
  144.      4) Act on the results.
  145.  
  146. Steps 1 and 4 are  not always required, and  they are not included  with
  147. the macros listed.  I simplified the list because steps 1 and 4 can  add
  148. a great many variations,  and it is simply  not practical to cover  them
  149. all here.  I have provided the basic  part of each function, it will  be
  150. up to you to add the detail.  As you will see, the Bubble Chamber can be
  151. modified to 'fit' the program you are working with.
  152.  
  153. Let's look at the @SetCurSz macro as an example.  This routine sets  the
  154. video cursor size.  The assembler source code for this macro would  look
  155. like this:
  156.  
  157.      MOV     AH,01   ; Move Service Request #1 (set cursor size)
  158.                      ; to AH register.
  159.      INT     10h     ; Call BIOS.
  160.  
  161. The corresponding line for the BUBBLE.DAT file would be:
  162.  
  163.      127, @SerCurSz   B4h 01h CDh 10h
  164.  
  165. which breaks down as follows:
  166.  
  167.      127,       -  Type code for macros.
  168.      @SetCurSz  -  The name of the macro (you can use
  169.                    whatever you like).
  170.      B4h        -  The hex code for the command:  MOV AH,
  171.      01h        -  Service # for BIOS set cursor size.
  172.      CDh        -  The hex code for the command:  INT
  173.      10h        -  The video interrupt number.
  174.  
  175. You may be wondering how  the BIOS function will  know what size to  set
  176. for the cursor?  As  I mentioned, step 1  has not been included.   Let's
  177. add it for a more complete macro.
  178.  
  179. Add to BUBBLE.INC:
  180.  
  181. @SetCurSz MACRO   sline, eline
  182.           MOV     CH, sline
  183.           MOV     CL, eline
  184.           MOV     AH, 01h
  185.           INT     10h
  186. ENDM
  187.  
  188. Add to BUBBLE.DAT:
  189.  
  190. 127, @SetCurSz B5h #H1 B1h #H1 B4h 01h CDh 10h;BIOS ...
  191.  
  192. Step 1 here involves setting the both  CH and CL with the starting  line
  193. and ending line respectively.  Step 4 is not required.  You should  note
  194. that the ROM-BIOS service does not care in what order the registers  are
  195. set.  Thus, to be  sure you detect every  cursor size service call,  you
  196. would have to account for  AH, CH, and CL being  set in any order -  six
  197. possible combinations.   To  make  matters worse,  anything  can  go  on
  198. between setting the registers and the  interrupt; as long as it  doesn't
  199. change their values.  Fortunately, once  you have established a  pattern
  200. for the  program you  are working  with  (or for  a given  compiler,  or
  201. programmer), it is  not likely  to change.   You may  choose to  include
  202. every possible combination  in your  BUBBLE.DAT file,  or establish  the
  203. pattern for what you're working with.  It's up to you.
  204.  
  205.  
  206. I should point  out that, instead  of using the  MOV AH,0 command  where
  207. appropriate, I  have substituted  XOR AH,AH.   This is  the more  common
  208. method of zeroing a register.  It  is slightly faster.  The XOR  command
  209. includes a direction flag,  which further complicates disassembly.   The
  210. direction flag is  meaningless when a  register is both  the source  and
  211. destination.  Set or not,  the result is the  same.  Thus, the hex  code
  212. for the command: XOR AH,AH;  can be 30h E4h, or  32h E4h.  I have  taken
  213. this into account for  the first occurrence.  You  may choose to do  the
  214. rest, or simply change to the code you find most often.
  215.  
  216. A final note: You will  find that adding macros  to the data file  slows
  217. down the program.  I am working on improvements to speed it  up.   Until
  218. then, you  may want to run The Bubble Chamber the way I do.  I build the
  219. map using  a bare bones data file  (no macros),   then when I'm ready to
  220. print a listing, I use a complete set.
  221.  
  222. Health and Happiness,
  223.  
  224. Rh-Factor.
  225.  
  226. ///////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
  227. copy   to BUBBLE.DAT:
  228.  
  229. 127, @SetVideo   30h E4h CDh 10h ; BIOS Set video mode.
  230. 127, @SetVideo   32h E4h CDh 10h ; BIOS Set video mode.
  231. 127, @SetCurSz   B4h 01h CDh 10h ; BIOS Set cursor size.
  232. 127, @SetCurPos  B4h 02h CDh 10h ; BIOS Set cursor position.
  233. 127, @GetCurPos  B4h 03h CDh 10h ; BIOS Get cursor position.
  234. 127, @VSetPage   B4h 05h CDh 10h ; BIOS Set display page.
  235. 127, @ScrollUp   B4h 06h CDh 10h ; BIOS Scroll window up.
  236. 127, @ScrollDn   B4h 07h CDh 10h ; BIOS Scroll window down.
  237. 127, @VGetChrA   B4h 08h CDh 10h ; BIOS Video get character
  238.                                    & attribute.
  239. 127, @VPutChrA   B4h 09h CDh 10h ; BIOS Video put character
  240.                                    & attribute.
  241. 127, @VPutChr    B4h 0Ah CDh 10h ; BIOS Video put character.
  242. 127, @SetColor   B4h 0Bh CDh 10h ; BIOS Set color palette.
  243. 127, @PutPixel   B4h 0Ch CDh 10h ; BIOS Set pixel dot.
  244. 127, @GetPixel   B4h 0Dh CDh 10h ; BIOS Get pixel status.
  245. 127, @TTYPutChr  B4h 0Eh CDh 10h ; BIOS Put character in TTY
  246.                                    mode.
  247. 127, @GetVideo   B4h 0Fh CDh 10h ; BIOS Get current video
  248.                                    mode.
  249. 127, @GetPhrp            CDh 11h ; BIOS Get list of
  250.                                    peripherals.
  251. 127, @MemSize            CDh 12h ; BIOS Get memory size.
  252. 127, @RsetDskt   30h E4h CDh 13h ; BIOS Reset the diskette.
  253. 127, @GetDsktSt  B4h 01h CDh 13h ; BIOS Get diskette status.
  254. 127, @ReadSec    B4h 02h CDh 13h ; BIOS Get diskette sector.
  255. 127, @WriteSec   B4h 03h CDh 13h ; BIOS Put diskette sector.
  256. 127, @VfySector  B4h 04h CDh 13h ; BIOS Verify diskette
  257.                                    sector.
  258. 127, @FmtTrack   B4h 05h CDh 13h ; BIOS Format diskette
  259.                                    track.
  260. 127, @InitSPort  30h E4h CDh 14h ; BIOS Initialize serial
  261.                                    port.
  262. 127, @SPutChr    B4h 01h CDh 14h ; BIOS Send character to
  263.                                    serial port.
  264. 127, @SGetChr    B4h 02h CDh 14h ; BIOS Read character from
  265.                                    serial port.
  266. 127, @GetSerSt   B4h 03h CDh 14h ; BIOS Get serial port
  267.                                    status.
  268. 127, @GetKey     30h E4h CDh 16h ; BIOS Get next keyboard
  269.                                    character.
  270. 127, @ChkKey     B4h 01h CDh 16h ; BIOS Check for character.
  271. 127, @GetSftSt   B4h 02h CDh 16h ; BIOS Get keyboard shift
  272.                                    status.
  273. 127, @PrintChr   30h E4h CDh 17h ; BIOS Print character.
  274. 127, @InitPrint  B4h 01h CDh 17h ; BIOS Initialize Printer.
  275. 127, @GetPrintSt B4h 02h CDh 17h ; BIOS Get Printer Status.
  276. 127, @GetClock   30h E4h CDh 1Ah ; BIOS Get clock count.
  277. 127, @SetClock   B4h 01h CDh 1Ah ; BIOS Set clock count.
  278. \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\//////////////////////////////
  279. //////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
  280. copy to BUBBLE.INC:
  281.  
  282. @SetVideo MACRO
  283.                 XOR     AH, AH
  284.                 INT     10h
  285. ENDM
  286.  
  287. @SetCurSz MACRO
  288.                 MOV     AH, 01h
  289.                 INT     10h
  290. ENDM
  291.  
  292. @SetCurPos      MACRO
  293.                 MOV     AH, 02h
  294.                 INT     10h
  295. ENDM
  296.  
  297. @GetCurPos      MACRO
  298.                 MOV     AH, 03h
  299.                 INT     10h
  300. ENDM
  301. @VSetPage       MACRO            ; BIOS Set display page.
  302.                 MOV     AH, 05h
  303.                 INT     10h
  304. ENDM
  305.  @ScrollUp       MACRO            ; BIOS Scroll window up.
  306.                 MOV     AH, 06h
  307.                 INT     10h
  308. ENDM
  309.  @ScrollDn       MACRO            ; BIOS Scroll window down.
  310.                 MOV     AH, 07h
  311.                 INT     10h
  312. ENDM
  313.  @VGetChrA       MACRO            ; BIOS Video get character
  314.                 MOV     AH, 08h
  315.                 INT     10h
  316. ENDM
  317.  
  318. @VPutChrA       MACRO             ; BIOS Video put character
  319.                 MOV     AH, 09h
  320.                 INT     10h
  321. ENDM
  322.  
  323. @VPutChr        MACRO             ; BIOS Video put character.
  324.                 MOV     AH, 0Ah
  325.                 INT     10h
  326. ENDM
  327.  
  328. @SetColor       MACRO             ; BIOS Set color palette.
  329.                 MOV     AH, 0Bh
  330.                 INT     10h
  331. ENDM
  332.  
  333. @PutPixel       MACRO
  334.                 MOV     AH, 0Ch
  335.                 INT     10h
  336. ENDM
  337.  
  338. @GetPixel       MACRO
  339.                 MOV     AH, 0Dh
  340.                 INT     10h
  341. ENDM
  342.  
  343. @TTYPutCHr      MACRO
  344.                 MOV     AH, 0Eh
  345.                 INT     10h
  346. ENDM
  347.  
  348. @GetVideo       MACRO
  349.                 MOV     AH, 0Fh
  350.                 INT     10h
  351. ENDM
  352.  
  353. @GetPhrp       MACRO
  354.                INT     11h
  355. ENDM
  356.  
  357. @MemSize         MACRO
  358.                  INT     12h
  359. ENDM
  360.  
  361. @RsetDskt        MACRO
  362.                 XOR     AH, AH
  363.                 INT     13h
  364. ENDM
  365.  
  366. @GetDsktSt      MACRO
  367.                 MOV     AH, 01h
  368.                 INT     13h
  369. ENDM
  370.  
  371. @ReadSec        MACRO
  372.                 MOV     AH, 02h
  373.                 INT     13h
  374. ENDM
  375.  
  376. @WriteSec       MACRO
  377.                 MOV     AH, 03h
  378.                 INT     13h
  379. ENDM
  380.  
  381. @VfySector      MACRO
  382.                 MOV     AH, 04
  383.                 INT     13h
  384. ENDM
  385.  
  386. @FmtTrack       MACRO
  387.                 MOV     AH, 05h
  388.                 INT     13h
  389. ENDM
  390.  
  391. @InitSPort      MACRO
  392.                 XOR     AH, AH
  393.                 INT     14h
  394. ENDM
  395.  
  396.  
  397. @SPutChr        MACRO
  398.                 MOV     AH, 01h
  399.                 INT     14h
  400. ENDM
  401.  
  402. @SGetChr        MACRO
  403.                 MOV     AH, 02h
  404.                 INT     14h
  405. ENDM
  406.  
  407. @GetSerSt       MACRO
  408.                 MOV     AH, 03h
  409.                 INT     14h
  410. ENDM
  411.  
  412. @GetKey         MACRO
  413.                 XOR     AH,AH
  414.                 INT     16h
  415. ENDM
  416. @ChkKey         MACRO
  417.                 MOV     AH, 01h
  418.                 INT     16h
  419. ENDM
  420.  
  421. @GetSftSt       MACRO
  422.                 MOV     AH, 02h
  423.                 INT     16h
  424. ENDM
  425.  
  426. @PrintChr       MACRO
  427.                 XOR     AH, AH
  428.                 INT     17h
  429. ENDM
  430.  
  431. @InitPrint      MACRO
  432.                 MOV     AH, 01h
  433.                 INT     17h
  434. ENDM
  435.  
  436. @GetPrintSt     MACRO
  437.                 MOV     AH, 02h
  438.                 INT     17h
  439. ENDM
  440.  
  441. @GetClock       MACRO
  442.                 XOR     AH,AH
  443.                 INT     1Ah
  444. ENDM
  445.  
  446. @SetClock       MACRO
  447.                 MOV     AH, 01h
  448.                 INT     1Ah
  449. ENDM
  450.   \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\//////////////////////////////
  451.  
  452.