home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PROGRAMS / UTILS / HARDWARE / VIDEOFIX.ZIP / VIDEOFIX.DOC
Encoding:
Text File  |  1987-03-11  |  12.3 KB  |  294 lines

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