Reply 200 of 343, by vasyl
Minor update. Compatibility of PVGA1A should be significantly improved -- the old version did not have Paradise "VGA=" signature in memory. I was not sure if it was in 1A version. Apparently it was.
Minor update. Compatibility of PVGA1A should be significantly improved -- the old version did not have Paradise "VGA=" signature in memory. I was not sure if it was in 1A version. Apparently it was.
I've submitted a separate patch ("Dual-ported paged memory support") which is actually an important part (or foundation) of this patch. If that goes to CVS it will allow to remove a very bad coupling to CPU/memory core in this patch and make my life maintaining it an order of magnitude easier. I hope Qbix or somebody else will find some time to review and integrate it soon. If that happens, I will update this patch immediately.
EDIT: Also submitted very minor patch that reserves the first 256 bytes of VGA BIOS. It is rather independent change, easy to separate from the main patch. I've found that Paradise uses that area for chipset identification and it was not alone (Cirrus, Genoa, Ahead,...) The change is so simple that it might as well just be there.
I found setmode/crtc patch is now in the current cvs.
multiple svga chipset patch should be updated for it.
Thanks. I've updated my patch.
Updated the patch to match the current CVS. Removed an ugly hack that allowed VGA scrollers to work -- chain4 patch fixed those. I haven't enabled non-standard chain4 on Tseng chipset yet. There is a chance that I may be able to do some tests on real hardware so I can ensure that it is actually a right thing to do. I also need to know if non-standard chain4 did address wrap at 64K. Most likely it did, otherwise there are games that would break (example: Drive-In).
EDIT: Either the guy that wrote WHATVGA was crazy or Tseng chipsets did not limit memory to 64K in non-standard chain4 mode, in which case Tseng designers were crazy, and there were games that broke on ETx000 badly. Now I really need to do some tests on the real hardware.
At the last process of compilation, an error occured.
Please fix it. (seems that you made a mistake during disabling chain4 mode (I don't know exactly why, thou).)
-lSDL -mwindows -lpng -lz -lSDL_net -lopengl32 -lwinmm
ints/libints.a(int10.o)(.text+0x5f):int10.cpp: undefined reference to `INT10_EGA_RIL_F1(unsigned char&, unsigned char, unsigned short)'
collect2: ld returned 1 exit status
make[3]: *** [dosbox.exe] Error 1
make[3]: Leaving directory `/c/dosbox/src'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/c/dosbox/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/c/dosbox'
make: *** [all] Error 2
Try again with new version. Two files got stuck from the last update and caused source code regression. Kind of persistent glitch in my process, stepped on it three times already. I guess it's time to fix the process.
> Please fix it.
I'm sure you CAN say this more nicely. At last vasyl is so nice
to maintain this patch for some time now, which itself already
is very nice of him.
Thanks, vasyl.
wd, i'm sorry that my english expression is poor.
I just wanted to let him know this.
Don't worry. I am not native English speaker myself and I had my share of slips 😊
I've just updated the patch with new fixes for Tseng chipset implementation. I have real functioning hardware so I can test some of my assumptions. Well, ET4000 does have incompatible chain4; more, it allows access to more than 64K in chained mode 13h -- something that every book claims to be impossible. Playing with a few games I've got sufficient proof that ET3000 had compatible chain4 implementation, rather surprising turn of things. So, the patch works exactly like real hardware now.
I've also discovered that Drive-In actually detected ET4000 on real hardware. Apparently, it was checking for BIOS signature. Easy fix, also fixed New Age Warrior not seeing ET3000 properly -- another mystery solved.
I am very pleased with this change. It feels like a few last puzzle pieces clicked in place. Now I will see if I can improve performance in VGA/SVGA chain. Too much stuff is going there and my fixes did not make it any simpler.
Another day, another update. This time resolving conflicts with my patch that improves chain4 implementation (as promised). There a few other minor fixes.
I've updated my process so from now on patch generation should be easier. Let me know if there are any issues with the patch. The process is not fully tested yet.
Another update is up. No functionality changes, just bringing it in sync with CVS -- Tandy/PCjr changes caused some minor conflicts.
The newest version again will result in Error 2. =)
I'll try an older one.
Edit: The older one does not seem to be that compatible with the newest cvs, it gives out quite a lot of errors. 😉
What are you talking about? Is that "Error 2" in some particular game?
No I mean if I apply the patch to the source and then try to build DosBox it will quit, same as above.
-lSDL -mwindows -lpng -lz -lSDL_net -lopengl32 -lwinmm
ints/libints.a(int10.o)(.text+0x5f):int10.cpp: undefined reference to `INT10_EGA_RIL_F1(unsigned char&, unsigned char, unsigned short)'
collect2: ld returned 1 exit status
make[3]: *** [dosbox.exe] Error 1
make[3]: Leaving directory `/c/dosbox/src'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/c/dosbox/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/c/dosbox'
make: *** [all] Error 2
I see. There may be some quiet conflict with the latest CVS. I was going to check it lately but for the past two days I cannot get anything from anon CVS. I will try again later today. Thanks for the report.
EDIT: The patch works fine with current CVS. That symbol (INT10_EGA_RIL_F1) was removed a while ago, neither current CVS nor patch as of 12/26 refers to it. Try getting fresh copy of source code, although it may be tricky -- anonymous CVS is not particularly healthy lately.
And it's a good idea to issue a "make clean" after you have updated from CVS or applied a patch. This _should_ work automatically, but sometimes they don't.
I sortet out the error. In the current CVS, the page handler class looks like this.
class PageHandler {
public:
virtual Bitu readb(PhysPt addr);
virtual Bitu readw(PhysPt addr);
virtual Bitu readd(PhysPt addr);
virtual void writeb(PhysPt addr,Bitu val);
virtual void writew(PhysPt addr,Bitu val);
virtual void writed(PhysPt addr,Bitu val);
virtual bool readb_checked(PhysPt addr, Bitu * val);
virtual bool readw_checked(PhysPt addr, Bitu * val);
virtual bool readd_checked(PhysPt addr, Bitu * val);
virtual bool writeb_checked(PhysPt addr,Bitu val);
virtual bool writew_checked(PhysPt addr,Bitu val);
virtual bool writed_checked(PhysPt addr,Bitu val);
virtual HostPt GetHostPt(Bitu phys_page);
Bitu flags;
};
However, the diff file does think that the virtual HostPT should be right after the void stuff (and the the bools shouldn't be there at all).
So I changed the part of the file by hand, it now looks like this:
class PageHandler {
public:
virtual Bitu readb(PhysPt addr);
virtual Bitu readw(PhysPt addr);
virtual Bitu readd(PhysPt addr);
virtual bool readb_checked(PhysPt addr, Bitu * val);
virtual bool readw_checked(PhysPt addr, Bitu * val);
virtual bool readd_checked(PhysPt addr, Bitu * val);
virtual bool writeb_checked(PhysPt addr,Bitu val);
virtual bool writew_checked(PhysPt addr,Bitu val);
virtual bool writed_checked(PhysPt addr,Bitu val);
virtual void writeb(PhysPt addr,Bitu val);
virtual void writew(PhysPt addr,Bitu val);
virtual void writed(PhysPt addr,Bitu val);
virtual HostPt GetHostReadPt(Bitu phys_page);
virtual HostPt GetHostWritePt(Bitu phys_page);
Bitu flags;
};
It now compiles where an error would occur before, but much later, there is another error which I cannot figure out:
hardware/libhardware.a(vga.o)(.text+0xf7): In function `Z17VGA_DetermineModev':
c:/unixshell/dosbox/dosbox-cvs/src/hardware/vga.cpp:54: undefined reference to `VGA_DetermineMode_SVGA()'
hardware/libhardware.a(vga.o)(.text+0x41a): In function `Z8VGA_InitP7Section':
c:/unixshell/dosbox/dosbox-cvs/src/hardware/vga.cpp:165: undefined reference to `SVGA_Init(Section*)'
hardware/libhardware.a(vga.o)(.text+0x453):c:/unixshell/dosbox/dosbox-cvs/src/hardware/vga.cpp:175: undefined reference to `VGA_SetupSVGA()'
hardware/libhardware.a(vga_attr.o)(.text+0x29c): In function `Z13VGA_SetupAttrv':
c:/unixshell/dosbox/dosbox-cvs/src/hardware/vga_attr.cpp:193: undefined reference to `VGA_SetupAttr_SVGA()'
hardware/libhardware.a(vga_seq.o)(.text+0x2da): In function `Z12VGA_SetupSEQv':
c:/unixshell/dosbox/dosbox-cvs/src/hardware/vga_seq.cpp:191: undefined reference to `VGA_SetupSEQ_SVGA()'
hardware/libhardware.a(vga_gfx.o)(.text+0x24a): In function `Z12VGA_SetupGFXv':
c:/unixshell/dosbox/dosbox-cvs/src/hardware/vga_gfx.cpp:220: undefined reference to `VGA_SetupGFX_SVGA()'
hardware/libhardware.a(vga_misc.o)(.text+0x34b): In function `Z10write_p3c2jjj':
c:/unixshell/dosbox/dosbox-cvs/src/hardware/vga_misc.cpp:74: undefined reference to `VGA_SetupCRTC_SVGA(unsigned int)'
hardware/libhardware.a(vga_misc.o)(.text+0x35c):c:/unixshell/dosbox/dosbox-cvs/src/hardware/vga_misc.cpp:58: undefined reference to `VGA_SetupCRTC_SVGA(unsigned int)'
ints/libints.a(int10_modes.o)(.text+0x13ed): In function `Z18INT10_SetVideoModej':
c:/unixshell/dosbox/dosbox-cvs/src/ints/int10_modes.cpp:891: undefined reference to `FinishSetMode_SVGA(VGA_ModeExtraData*)'
ints/libints.a(int10_modes.o)(.text+0x1d0d): In function `Z15SetupVideoModesv':
c:/unixshell/dosbox/dosbox-cvs/src/ints/int10_modes.cpp:933: undefined reference to `SetupVideoModesSVGA()'
collect2: ld returned 1 exit status
make[3]: *** [dosbox.exe] Error 1
make[3]: Leaving directory `/c/unixshell/dosbox/dosbox-cvs/src'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/c/unixshell/dosbox/dosbox-cvs/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/c/unixshell/dosbox/dosbox-cvs'
make: *** [all] Error 2
What's that stuff? oO
best regards, cmw
I've updated the patch so paging.* should not give you any more troubles. The other set of errors looks like you don't have project files patched properly or your patch program does not understand that it needs to create a new file. Make sure that hardware/vga_svga.h and .cpp exist after patching. Also, make sure that makefile.am files get patched properly.
I can see that Harekiet just commited a major change to CVS. 😁 The current version of this patch is not compatible with that particular change for a good reason. Don't worry, I will update the patch in the next few days. The change actually includes some functionality previously available only in this patch. Some parts of the change are structurally similar to the patch changes. The next version of the patch will likely be much simpler and cleaner due to that. Stay tuned.
EDIT: Sort of progress report. Got about 60% of the first pass. It is quite ugly -- my patch is rather big and most of patched spots changed so I have to go through all that manually. On the positive side, already found a few small bugs 😉 I hope to get it up and running by the end of the week if nothing unexpected surfaces. There are some bad news as well: there will be regressions all over the place. I am seeing crashes and "imperfections" in WHATVGA with CVS code right now. I will try to fix those as I go through (likely, with small separate patches) but there is good round of testing ahead.