home *** CD-ROM | disk | FTP | other *** search
/ Hall of Fame / HallofFameCDROM.cdr / pcjr / jrtech.lzh / VIDEOFIX.DOC < prev   
Text File  |  1985-11-09  |  13KB  |  397 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.          MAKING PC SOFTWARE COMPATIBLE WITH PC jr
  8.  
  9.          WHILE MOST SOFTWARE WRITTEN FOR THE PC WILL RUN WITHOUT
  10.          MODIFICATION ON PC JR SOME WILL CAUSE PROBLEMS BECAUSE OF THE
  11.          DIFFERENCES BETWEEN THE MACHINES. THE MOST IMPORTANT
  12.          DIFFERENCE BETWEEN THE PC AND PC JR IS THE VIDEO HARDWARE.
  13.          THE MACHINES ARE ESENTIALLY EQUIVALENT WHEN PROGRAMMING DOWN
  14.          TO THE BIOS CALL LEVEL, IF THE PROGRAMMER ATTEMPTS TO
  15.          DIRECTLY MANIPULATE THE VIDEO HARDWARE ADDRESSES PROBLEMS
  16.          WILL OCCUR.
  17.            FOR EXAMPLE ;
  18.            MODE SWITCHES ARE VERY EASILY ACCOMPLISHED ON THE PC, YOU
  19.          MERELY WRITE THE MODE VALUE YOU WANT TO THE PORT AT ADDRESS
  20.          3D8 (THE MODE CONTROL REGISTER). WRITING A 00H TO THIS
  21.          ADDRESS WILL PUT THE PC INTO 40 COLUMN X 25 LINES OF COLOR
  22.          VIDEO MODE. WRITING A 0AH SETS UP THE 320 X 200 COLOR
  23.          GRAPHICS MODE.
  24.            WITH JUNIOR HOWEVER, IT IS NOT THAT SIMPLE. THE PORT AT
  25.          ADDRESS 3D8 DOES NOT EXIST AND JUNIORS COMPLICATED VIDEO GATE
  26.          ARRAY MAKES CHANGING MODES MUCH MORE DIFFICULT. IF A PROGRAM
  27.          THAT RUNS FINE ON THE PC FAILS ON THE JUNIOR IT MAY BE
  28.          BECAUSE OF THIS TYPE OF MODE CHANGING ERROR. TO FIND OUT IF
  29.          THIS IS THE CASE YOU CAN LOOK AT THE CODE USING DEBUG. I
  30.          MERELY SEARCH FOR THE MOST OBVIOUS WAYS THAT A MODE CHANGE
  31.          CAN BE ACCOMPLISHED ON THE PC. THE FOLLOWING CODE IS AN
  32.          EXAMPLE;
  33.  
  34.              MOV    AL,XX    ;WHERE XX IS THE NEW MODE VALUE TO BE SET
  35.              MOV    DX,3D8   ;SETUP ADDRESS OF THE MODE CONTROL PORT
  36.              OUT    DX,AL    ;OUTPUT THE NEW VALUE
  37.  
  38.           SOMETIMES YOU WIL FIND THESE INSTRUCTIONS IN SLIGHTLY
  39.          DIFERENT ODERINGS SUCH AS;
  40.  
  41.              MOV    DX,3D8
  42.              MOV    AL,XX
  43.              OUT    DX,AL
  44.  
  45.           BOTH OF THESE WILL DO THE SAME THING TO THE VIDEO HARDWARE.
  46.          THEY WILL CHANGE THE MODE TO THE VALUE OF XX, WHATEVER THAT
  47.          MAY BE.
  48.           IN HEX THESE INSTRUCTIONS LOOK LIKE THIS;
  49.  
  50.              B0 XX           ;THE MOVE AL,XX INSTRUCTION
  51.              BA D8 03        ; MOV DX,3D8
  52.              EE              ; OUT DX,AL
  53.  
  54.          THE EASIEST THING TO LOOK FOR IS THE MOV DX,3D8 INSTRUCTION.
  55.          THE DEBUG COMMAND FOR THIS IS;
  56.  
  57.          -S STARTING ADDRESS  ENDING ADDRESS  SEARCH STRING
  58.          FOR EXAMPLE;
  59.  
  60.          -S 0 FFFE BA D8 03
  61.  
  62.  
  63.                         
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.           THIS WILL SEARCH FROM ADDRESS 0 TO ADDRESS FFFE IN THE
  75.          CURRENT SEGMENT FOR THE MOV DX,3D8 INSTRUCTION. IF IT FINDS
  76.          ONE DEBUG WILL DISPLAY THE ADDRESS WHERE IT CAN BE FOUND.
  77.          LIKE SO;
  78.  
  79.          901:186
  80.          901:1B7
  81.  
  82.            THIS WOULD MEAN THAT DEBUG HAS FOUND TWO INSTANCES OF THE
  83.          MOV DX,3D8 INSTRUCTION. LET'S LOOK AT ONE OF THEM.
  84.          WE WILL USE THE DEBUG UNASSEMBLE COMMAND AND THE ADDRESS THAT
  85.          DEBUG HAS PROVIDED.
  86.  
  87.          -U 901:187
  88.  
  89.           THE RESULT OF THIS SHOULD LOOK SOMETHING LIKE THIS;
  90.  
  91.          901:0187 BAD803       MOV     DX,03D8
  92.          901:0189 B000         MOV     AL,00
  93.          901:018B EE           OUT     DX,AL
  94.          .
  95.          .
  96.          .
  97.          .    AND SO ON
  98.          .
  99.  
  100.           THIS IS DEFINATELY ONE OF THE OFFENDING PROGRAMS. THE
  101.          PROGRAMMER IS SETTING THE PC TO THE 40 X 25 COLOR
  102.          ALPHANUMERIC DISPLAY. ON JUNIOR HOWEVER, THEY ARE NOT
  103.          ACCOMPLISHING ANYTHING AT ALL. TO FIX THIS WE MUST MAKE SOME
  104.          SIMPLE CHANGES TO THE CODE.  INSTEAD OF DOING THE MODE CHANGE
  105.          DIRECTLY WE WILL LET BIOS DO IT FOR US. ALL WE NEED TO DO IS
  106.          TELL BIOS WHAT MODE WE WANT AND THEN DO A BIOS VIDEO CALL.
  107.          THAT NEW CODE WILL LOOK LIKE THIS;
  108.  
  109.          MOV    AX,0000H        ;TELL BIOS WE WANT 40 X 25 MODE
  110.          INT    10H             ;CALL THE BIOS VIDEO ROUTINE
  111.  
  112.           WE PLACE THE VALUE 00 INTO THE AH REGISTER (THE AX 16 BIT
  113.          REGISTER IS THE COMBINATION OF THE AH AND AL 8 BIT REGISTERS)
  114.          . THIS TELLS BIOS THAT WE WANT IT TO DO A MODE CHANGE. THE
  115.          VALUE WE PLACE IN THE AL REGISTER WILL TELL BIOS THE NEW MODE
  116.          WE WANT.
  117.           TO REPLACE THE OLD CODE WITH THE NEW WE WILL USE THE DEBUG
  118.          ASSEMBLE COMMAND WHICH HAS THE FOLLOWING FORM;
  119.  
  120.          -A STARTING ADDRESS
  121.  
  122.           TO PUT THE NEW CODE WHERE THE OLD CODE WAS JUST USE THE SAME
  123.          ADDRESS.
  124.  
  125.          -A 901:0186
  126.  
  127.  
  128.  
  129.                         
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.           DEBUG WILL RESPOND LIKE SO;
  140.  
  141.          901:0186 _
  142.  
  143.           FROM HERE WE JUST TYPE IN THE INSTRUCTIONS.
  144.  
  145.          901:0186 MOV    AX,0000
  146.          901:0189 INT    10H
  147.          901:018B _
  148.  
  149.           IN ORDER TO WIPE OUT THE out dx,al INSTRUCTION, WHICH INSN'T
  150.          NNEDED ANYMORE, WE WILL ADD A nop (DO NOTHING) COMMAND TO
  151.          WRITE OVER IT.
  152.  
  153.          901:018B NOP
  154.  
  155.          NOW IF WE WERE TO ONCE AGAIN DO AN UNASSEMBLE COMMAND WE
  156.          COULD SEE ALL THE CHANGES WE HAVE MADE.
  157.  
  158.          -U 901:0186
  159.  
  160.          901:0186 B80100          MOV     AX,0000
  161.          901:0189 CD10            INT     10
  162.          901:018B 90              NOP
  163.          .
  164.          .
  165.          .
  166.          .     THIS ALL SHOULD STAY THE SAME
  167.          .
  168.          .
  169.          .
  170.  
  171.           NOT ONLY WILL THIS CODE NOW FUNCTION PROPERLY ON JUNIOR, IT
  172.          WILL STILL OPERATE ON THE PC AS WELL. THIS IS BECAUSE THE TWO
  173.          MACHINES ARE COMPATIBLE AT THE BIOS CALL LEVEL. IT IS
  174.          INTERESTING TO NOTE THAT THE NEW CODE COULD BE ONE BYTE
  175.          SHORTER THAN THE OLD. THIS IS BECAUSE THE NOP WOULD NOT HAVE
  176.          BEEN NEEDED IF THE PROGRAM HAD BEEN WRITTEN THIS WAY IN THE
  177.          FIRST PLACE.
  178.           THE MOST DIFFICULT PART OF MAKING THESE TYPES OF CHANGES IS
  179.          CONVERTING FROM THE PC MODE VALUES (DESIGNATED XX ABOVE) TO
  180.          THE BIOS MODE VALUES. THE FOLLOWING TABLE SUMMARIZES THE
  181.          NEEDED CHANGES.
  182.  
  183.          PC MODE REGISTER VALUES (HEX)   BIOS CALL MODE VALUES (HEX)
  184.  
  185.                    2C                       00     40 x 25 b/w
  186.                    28                       01     40 x 25 color
  187.                    2D                       02     80 x 25 b/w
  188.                    29                       03     80 x 25 color
  189.                    0A or 2A                 04     320 x 200 4 color
  190.                    0E or 2E                 05     320 x 200 b/w
  191.                    1E or 3E                 06     640 x 200 b/w
  192.  
  193.  
  194.  
  195.                         
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.          THERE ARE OTHER VALUES AVAILABLE FOR BOTH THE PC MODE
  206.          REGISTER AND THE BIOS CALLS, ESPECIALLY ON THE JUNIOR. USING
  207.          BIOS JUNIOR CAN BE PLACED INTO ONE OF 3 MODES THAT THE PC
  208.          DOES NOT EVEN HAVE AVAILABLE.
  209.           GOING BACK TO OUR ORIGINAL SEARCH FOR THE mov dx,3D8
  210.          INSTRUCTION USING DEBUG WE FOUND TWO INSTANCES IN THIS
  211.          PROGRAM. LET'S LOOK AT THE SECOND EXAMPLE NOW. USE THE DEBUG
  212.          UNASSEMBLE COMMAND AGAIN.
  213.  
  214.          -U 901:1B7
  215.  
  216.           THIS WILL SHOW US THE FOLLOWING CODE;
  217.  
  218.          0901:01B7 BAD803      MOV    DX,03D8
  219.          0901:01BA B02A        MOV    AL,2A
  220.          0901:01BC 80FB00      CMP    BL,00
  221.          0901:01BF 7502        JNZ    01C3
  222.          0901:01C1 B02E        MOV    AL,2E
  223.          0901:01C3 EE          OUT    DX,AL
  224.          0901:01C4 BAD903      MOV    DX,03D9
  225.          0901:01C7 B030        MOV    AL,30
  226.          0901:01C9 EE          OUT    DX,AL
  227.          .
  228.          .
  229.          .
  230.  
  231.  
  232.           THIS IS A SLIGHTLY MORE COMPLICATED EXAMPLE. HERE THE
  233.          PROGRAM LOADS THE MODE REGISTER ADDRESS INTO DX AND THEN SETS
  234.          UP A MODE VALUE OF 2A IN AL. IT THEN TESTS THE BL REGISTER TO
  235.          SEE IF IT IS ZERO. IF IT IS NOT, THEN THE PROGRAM JUMPS TO
  236.          THE out dx,al INSTRUCTION WHICH SETS THE MODE TO 320X200
  237.          COLOR GRAPHICS. IF BL WAS NOT ZERO THEN A NEW MODE VALUE IS
  238.          PLACED INTO AL. THIS TIME THE MODE SELECTED IS 80 X 25 B/W
  239.          ALPHANUMERICS (2E).  THE NEXT INSTRUCTION (mov  dx,3D9) PUTS
  240.          THE ADDRESS OF THE PC'S COLOR SELECT REGISTER INTO DX IN
  241.          PREPARATION FOR THE out dx,al INSTRUCTION.  BEFORE THAT
  242.          HAPPENS THE AL REGISTER IS LOADED WITH THE COLOR SELECT VALUE
  243.          (30).
  244.           THE COLOR SELECT REGISTER AT ADDRESS 3D9 IS THE OTHER VIDEO
  245.          REGISTER THAT JUNIOR DOES NOT HAVE. COLOR SELECTION CAN BE
  246.          ACCOMPLISHED ON JUNIOR THROUGH A BIOS CALL JUST LIKE THE MODE
  247.          SELECTS.
  248.            TO MAKE THIS CODE COMPATIBLE WITH JUNIOR WE MUST MAKE THE
  249.          FOLLOWING CODE CHANGES:
  250.  
  251.          MOV    AX,0004 ;SET BIOS MODE SET COMMAND AND 320 X 200 COLOR
  252.          CMP    BL,00   ;TEST BL FOR ZERO
  253.          JNZ    int     ;JUMP IF NOT ZERO TO THE int INSTRUCTION
  254.          MOV    AL,05   ;SET MODE TO 320 X 200 B/W GRAPHICS
  255.          INT    10H     ;BIOS VIDEO CALL
  256.  
  257.           THIS IS ALL WE NEED TO MAKE THE MODE CHANGES ON JUNIOR. BUT,
  258.          THIS CODE REQUIRES 13 BYTES WHICH IS ONE BYTE SHORTER,
  259.  
  260.  
  261.                         
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.          FORTUNATELY, THAN THE EXISTING PC CODE.  UNFORTUNATELY, THE
  272.          COLOR SELECT CODE THAT FOLLOWS IT WILL USE UP ONE MORE BYTE.
  273.          SO THE TWO CHANGES TOGETHER WILL JUST FIT INTO THE SAME
  274.          SPACE.  THE CODE CHANGE FOR THE COLOR SELECT CHANGE IS:
  275.  
  276.          MOV   AH,0B     ;SET THE BIOS COLOR SELECT COMMAND BYTE
  277.          MOV   BX,0001   ;SELECTS CYAN, MAGENTA, AND WHITE COLORS
  278.          INT   10H       ;BIOS VIDEO CALL
  279.  
  280.           USING DEBUG TO ASSEMBLE THE REPLACEMENT CODE;
  281.  
  282.          -A 901:1B7
  283.  
  284.          0901:01B7  MOV   AX,0004
  285.          0901:01BA  CMP   BL,00
  286.          0901:01BD  JNC   01C1
  287.          0901:01BF  MOV   AL,05
  288.          0901:01C1  INT   10H
  289.          0901:01C3  MOV   AH,0B
  290.          0901:01C5  MOV   BX,0001
  291.          0901:01C8  INT   10H
  292.  
  293.           AFTER YOU MAKE ALL THE FIXES DO A WRITE COMMAND TO HAVE
  294.          DEBUG SAVE THE CHANGES ON THE DISK.
  295.  
  296.          THESE TYPES OF PROBLEMS CAN USUALLY BE FIXED WITH THE SAME OR
  297.          FEWER BYTES OF CODE. IF THE FIX REQUIRES MORE CODE THAN YOU
  298.          HAVE SPACE FOR IT BECOMES A REAL HEADACHE TO TRY AND FIX. YOU
  299.          MUST MAKE CORRECTIONS IN ALL THE CALL AND JUMP INSTRUCTIONS.
  300.          ANY INSTRUCTION THAT USES AN OFFSET MIGHT ALSO HAVE TO BE
  301.          REPAIRED. IN A LONG PROGRAM THIS CAN BECOME EXTREMELY
  302.          DIFFICULT. BUT IN WELL WRITTEN CODE THESE TYPES OF MODE AND
  303.          COLOR CHANGES HAPPEN ONLY RARELY.
  304.  
  305.           ANOTHER DIFFERENCE BETWEEN PC AND JUNIOR CAN BE FOUND IN THE
  306.          BIOS ROMS. THE NEXT TO LAST BYTE (F000:FFFE) CONTAINS A
  307.          SIGNATURE BYTE WHICH CAN TELL A PROGRAM IF IT IS RUNNING IN A
  308.          JUNIOR, A PC, OR A PC XT. FOR JUNIOR THIS BYTE IS FDH, FOR PC
  309.          IT IS FFH, AND THE XT HAS AN FEH AT THIS LOCATION. AT PRESENT
  310.          THE ONLY PLACE I HAVE SEEN THIS USED IS IN DOS 2.1,
  311.          COMMAND.COM.
  312.            USE DEBUG TO LOAD COMMAND.COM AND SEARCH FOR A CMP BYTE PTR
  313.          [FFFE],FD INSTRUCTION.
  314.  
  315.          A>DEBUG COMMAND.COM
  316.          -S 0 FFFE 80 3E FE FF FD
  317.  
  318.          0905:354B
  319.  
  320.           IF YOU UNASSEMBLE THIS COMMAND YOU WILL FIND THAT WHAT IS
  321.          HAPPENING HERE IS THAT WHEN COMMAND.COM DETERMINES IT IS IN A
  322.          JUNIOR IT WILL SCAN THE CARTRIDGE ADDRESS SPACE LOOKING FOR
  323.          PROGRAMS THERE. SINCE THE PC DOESN'T HAVE CARTRIDGES IT NEED
  324.          TO DO THIS IF IT IS RUNNING IN A PC. THIS EXPLAINS WHY WHEN
  325.  
  326.  
  327.                         
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.          YOU HAVE THE CARTRIDGE BASIC INSTALLED AND YOU TYPE THE
  338.          basica COMMAND YOU GO INTO BASIC WITHOUT DOING A DISK ACCESS.
  339.           NORMALLY COMMAND.COM WILL SEARCH THE DIRECTORY OF THE
  340.          CURRENT DRIVE FOR ANY COMMAND THAT IS NOT INTERNAL. BUT WHEN
  341.          IT IS RUNNING ON A JUNIOR IT WILL SCAN THE CARTRIDGE SPACE
  342.          LOOKING FOR BASIC BEFORE IT GOES TO THE DISK. THIS MIGHT BE
  343.          USED TO UPGRADE DOS WITH ALL SORTS OF NEW FUNCTIONS THAT ON
  344.          JUNIOR WOULD SEEM TO BE INTERNAL TO COMMAND.COM. THESE NEW
  345.          FUNCTIONS WOULD BE PROGRAMMED INTO A CARTRIDGE RATHER THAN
  346.          MODIFYING DOS.  THIS MIGHT MEAN THAT SOME DOS REVISIONS WOULD
  347.          COME IN CARTRIDGE FORM IN THE FUTURE. NOT A BAD FEATURE WHEN
  348.          YOU UNDERSTAND IT.
  349.  
  350.  
  351.           OTHER STRANGE THINGS ABOUT JUNIOR'S VIDEO SECTION WILL COME
  352.          LATER.  AFTER YOU HAVE BECOME THOROUGHLY CONFUSED BY THE
  353.          TECHNICAL REFERENCE MANUAL TUNE IN HERE AND WE WILL EXPLAIN
  354.          "PAGES" AND "PLANES".
  355.  
  356.                HOW ABOUT "WILL THE REAL "PAGE" PLEASE STAND UP"?
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365.  
  366.  
  367.  
  368.  
  369.  
  370.  
  371.  
  372.  
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.                         
  394.  
  395.  
  396.