home *** CD-ROM | disk | FTP | other *** search
/ Hall of Fame / HallofFameCDROM.cdr / pcjr / basicm.lzh / BASICM.TXT
Text File  |  1980-01-01  |  6KB  |  199 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.          CARTRIDGE (COMPLICATED) BASIC
  8.  
  9.            THERE ARE SO MANY THINGS TO TALK ABOUT HERE I DON'T KNOW
  10.          WHERE TO BEGIN. LET'S START WITH THE SIMPLE THINGS FOR THE
  11.          BASIC PROGRAMMER (AVERAGE USER).  TRY THIS BASIC STATEMENT.
  12.  
  13.            SCREEN 6
  14.  
  15.            IT DOESN'T WORK. MODE 6 ON THE SCREEN COMMAND IS NEW TO
  16.          BASIC BECAUSE IT SETS UP (OR SHOULD SET UP) THE 4 COLOR 640 X
  17.          200 COLOR GRAPHICS MODE.  THIS MODE IS AVAILABLE ONLY ON
  18.          JUNIOR, THANKS TO THE DIFFERENT VIDEO CIRCUITRY.  THE OLD PC
  19.          WILL ONLY DO BLACK AND WHITE AT THIS RESOLUTION, JUNIOR GIVES
  20.          YOU 4 COLORS.
  21.          BUT IF YOU TRY TO USE THIS NEW MODE CARTRIDGE BASIC WILL GIVE
  22.          YOU AN ILLEGAL FUNCTION CALL ERROR MESSAGE.  IN FACT THE
  23.          SCREEN 5 COMMAND DOESN'T WORK EITHER.  THIS COMMAND WOULD PUT
  24.          YOU INTO THE 16 COLOR 320 X 200 MEDIUM RESOLUTION MODE, IF IT
  25.          WORKED.
  26.               THE USUAL SOLUTION TO THESE PROBLEMS BEGINS BY LOOKING
  27.          IN THE BASIC MANUAL UNDER THE SCREEN COMMAND.  THERE ARE NO
  28.          EXAMPLES THERE AS TO HOW TO USE THE SCREEN MODE 6 OR 5. THERE
  29.          ARE EXAMPLES OF ALL THE OTHER MODES BUT NONE FOR 6 OR 5.
  30.               THE SOLUTION IS FOUND ONLY UNDER THE CLEAR COMMAND
  31.          (PAGE 4-57). IN ORDER TO USE THE THESE NEW HIGHER RES. MODES
  32.          YOU MUST FIRST RESERVE THE MEMORY FOR THE VIDEO SCREEN. YOU
  33.          CAN DO THIS BY USING THE FOLLOWING COMMAND;
  34.  
  35.               CLEAR,,,32768
  36.  
  37.               NOW BOTH SCREEN 5 AND SCREEN 6 COMMANDS WORK FINE.  YOU
  38.          JUST HAVE TO LEARN TO HUNT THROUGH THE MANUAL TO FIND THESE
  39.          THINGS.
  40.  
  41.  
  42.  
  43.           THE SECOND TOPIC COMES FROM THE QUESTIONS WE HAVE BEEN
  44.          GETTING FROM PEOPLE USING LEGACY EXPANSIONS ON THEIR JUNIORS.
  45.          THE QUESTION IS 'WHY DOES LEGACY HAVE PROBLEMS WITH BASIC?'
  46.           THE ANSWER HAS TWO PARTS. FIRST, BASIC FORCES THE VIDEO
  47.          MEMORY BACK TO THE TOP OF THE 128K THAT JUNIOR IS "SUPPOSED"
  48.          TO HAVE AS A MAXIMUM. THE LEGACY SYSTEM MOVES THE VIDEO PAGE
  49.          DOWN INTO LOWER MEMORY TO CONSERVE SPACE. BASIC DEFEATS THIS
  50.          BY BYPASSING BIOS LEVEL CALLS AND CHANGING THE VIDEO BY BRUTE
  51.          FORCE. IT OUTPUTS THE VALUE 3FH TO THE PORT ADDRESS 03DFH TO
  52.          CHANGE THE VIDEO TO PAGE 7, RATHER THAN USE THE BIOS CALL TO
  53.          CHANGE THE PAGE.  USING DEBUG YOU CAN SEE THE CODE AT
  54.          E800:80F9. FOR BEGINNERS, RUN THE PROGRAM DEBUG ON YOUR DOS
  55.          2.1 SUPPLEMENTAL DISK. MAKE SURE YOUR BASIC CARTRIDGE IS
  56.          INSTALLED FIRST. DEBUG WILL COME BACK WITH THE MINUS SIGN AS
  57.          A PROMPT. LIKE SO;
  58.  
  59.          -
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.           FROM THERE JUST TYPE THE FOLLOWING COMMAND:
  74.  
  75.          -U E800:80F9
  76.  
  77.            THIS WILL SHOW YOU THE ASSEMBLY LANGUAGE CODE OF THE BASIC
  78.          INTERPRETER. YOU SHOULD THEN SEE THE FOLLOWING:
  79.  
  80.          E800:80F9 B03F           MOV    AL,3F
  81.          E800:80FB BADF03         MOV    DX,03DF
  82.          E800:80FE EE             OUT    DX,AL
  83.          .
  84.          .
  85.          .
  86.          .     AND SO ON
  87.  
  88.           THOSE FIRST THREE LINES ARE THE CAUSE OF THE PROBLEMS. THEY
  89.          DO SIMILAR THINGS AT E800:8E27 AND AT E800:8E87. IF ONLY THEY
  90.          HAD USED BIOS EVERYTHING WOULD WORK FINE.
  91.  
  92.            THE SECOND PROBLEM IS DUE TO BASICS' MEMORY ALLOCATION
  93.          SCHEME. WHEN BASIC BEGINS IT TELLS YOU HOW MANY BYTES IT HAS
  94.          FREE AND AVAILABLE FOR USE. NORMALLY YOU WOULD THINK THAT
  95.          BASIC WOULD USE THE VALUE OF MEMORY_SIZE (THE AMOUNT OF
  96.          MEMORY AVAILABLE, THIS IS STORED IN THE WORD AT ADDRESS
  97.          40:13) TO DETERMINE HOW MUCH MEMORY IT CAN USE.  ACTUALLY,
  98.          BASIC DOES AN INTERRUPT 12H TO DETERMINE THE MEMORY SIZE.
  99.          THIS IS JUST A CONVENIENT, AND SAFE, WAY TO GET MEMORY_SIZE.
  100.          BUT THEN THEY GO AND ONLY USE THE LOW BYTE OF THE VALUE!
  101.          SEE THE CODE AT E800:264. THIS CAUSES PROBLEMS WHEN YOU ADD
  102.          MEMORY TO JUNIOR BEYOND THE 128K JUNIOR IS SUPPOSED TO HAVE.
  103.          WITH A 128K JUNIOR THE VALUE OF MEMORY_SIZE IS 0070H. IF YOU
  104.          NOW ADD 128K MORE TO MAKE A TOTAL OF 256K THEN MEMORY_SIZE
  105.          BECOMES 00F0H. THIS IS OK BECAUSE YOU HAVEN'T LET MEMORY_SIZE
  106.          CARRY INTO THE UPPER BYTE YET. BASICA WILL STILL THINK, AND
  107.          RIGHTFULLY SO, THAT THERE ARE 60130 BYTES FREE.
  108.           BUT, WHEN YOU ADD ANOTHER 64K BYTES TO JUNIOR MAKING A TOTAL
  109.          OF 384K THE TROUBLE BEGINS. THE NEW VALUE OF MEMORY_SIZE IS
  110.          0130H. NOW WHEN BASIC LOOKS AT MEMORY_SIZE'S LOW BYTE IT WILL
  111.          THINK IT HAS VERY LITTLE MEMORY TO WORK WITH, WHEN IN FACT IT
  112.          HAS MORE THAN IT DID WITH 256K INSTALLED. SINCE IT ONLY USES
  113.           THE VALUE 30H, BASIC WILL SAY IT ONLY HAS 18962 BYTES FREE.
  114.            TO RUN BASIC WITH LEGACY JUST BOOT YOUR STANDARD DOS 2.1
  115.          DISK RATHER THAN YOUR LEGACY DOS DISKETTE, AND HOPE THAT
  116.          MICROSOFT COMES OUT WITH A NEW CARTRIDGE BASIC THAT SOLVES
  117.          BOTH OF THESE PROBLEMS.
  118.  
  119.            FOR PEOPLE WHO ARE WRITING PROGRAMS TO PUT INTO CARTRIDGES
  120.          YOU SHOULD NOTE WHAT APPEAR TO BE ERRORS IN THE TECHNICAL
  121.          REFERENCE MANUAL ON PAGES 2-110 AND 2-111. THE MOST IMPORTANT
  122.          THING IS THE JUMPS TO NAMED ROUTINES. THE MANUAL SAYS THEY
  123.          SHOULD BE WORD VALUES THAT POINT TO ROUTINES TO BE EXECUTED.
  124.          THE BASIC CARTRIDGE HAS SOMETHING VERY DIFFERENT. THEY ARE
  125.          ACTUALLY THREE BYTES LONG AND ARE JMP COMMANDS FOLLOWED BY A
  126.          TWO BYTE OFFSET. INSTEAD OF DOING AN INDIRECT JUMP OR CALL
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.          TO A POINTER STORED HERE YOU WOULD DO AN IMMEDIATE JUMP OR
  140.          CALL TO THE CODE HERE. CARTRIDGE BASIC CONTAINS TWO NAMED
  141.          COMMANDS, BASIC AND BASICA, AND IS A GOOD EXAMPLE OF WHAT A
  142.          DOS COMMAND CARTRIDGE HEADER SHOULD LOOK LIKE.
  143.           THE SECOND DIFFERENCE IS THAT MY CARTRIDGE BASIC STARTS AT
  144.          E800:0 NOT E000:0 AS STATED ON PAGE 2-111 OF THE TRM.
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.