Announcement

Collapse

Forum Rules and Etiquette

Our mission ...

This forum is part of our mission to promote the preservation of vintage computers through education and outreach. (In real life we also run events and have a museum.) We encourage you to join us, participate, share your knowledge, and enjoy.

This forum has been around in this format for over 15 years. These rules and guidelines help us maintain a healthy and active community, and we moderate the forum to keep things on track. Please familiarize yourself with these rules and guidelines.


Rule 1: Remain civil and respectful

There are several hundred people who actively participate here. People come from all different backgrounds and will have different ways of seeing things. You will not agree with everything you read here. Back-and-forth discussions are fine but do not cross the line into rude or disrespectful behavior.

Conduct yourself as you would at any other place where people come together in person to discuss their hobby. If you wouldn't say something to somebody in person, then you probably should not be writing it here.

This should be obvious but, just in case: profanity, threats, slurs against any group (sexual, racial, gender, etc.) will not be tolerated.


Rule 2: Stay close to the original topic being discussed
  • If you are starting a new thread choose a reasonable sub-forum to start your thread. (If you choose incorrectly don't worry, we can fix that.)
  • If you are responding to a thread, stay on topic - the original poster was trying to achieve something. You can always start a new thread instead of potentially "hijacking" an existing thread.



Rule 3: Contribute something meaningful

To put things in engineering terms, we value a high signal to noise ratio. Coming here should not be a waste of time.
  • This is not a chat room. If you are taking less than 30 seconds to make a post then you are probably doing something wrong. A post should be on topic, clear, and contribute something meaningful to the discussion. If people read your posts and feel that their time as been wasted, they will stop reading your posts. Worse yet, they will stop visiting and we'll lose their experience and contributions.
  • Do not bump threads.
  • Do not "necro-post" unless you are following up to a specific person on a specific thread. And even then, that person may have moved on. Just start a new thread for your related topic.
  • Use the Private Message system for posts that are targeted at a specific person.


Rule 4: "PM Sent!" messages (or, how to use the Private Message system)

This forum has a private message feature that we want people to use for messages that are not of general interest to other members.

In short, if you are going to reply to a thread and that reply is targeted to a specific individual and not of interest to anybody else (either now or in the future) then send a private message instead.

Here are some obvious examples of when you should not reply to a thread and use the PM system instead:
  • "PM Sent!": Do not tell the rest of us that you sent a PM ... the forum software will tell the other person that they have a PM waiting.
  • "How much is shipping to ....": This is a very specific and directed question that is not of interest to anybody else.


Why do we have this policy? Sending a "PM Sent!" type message basically wastes everybody else's time by making them having to scroll past a post in a thread that looks to be updated, when the update is not meaningful. And the person you are sending the PM to will be notified by the forum software that they have a message waiting for them. Look up at the top near the right edge where it says 'Notifications' ... if you have a PM waiting, it will tell you there.

Rule 5: Copyright and other legal issues

We are here to discuss vintage computing, so discussing software, books, and other intellectual property that is on-topic is fine. We don't want people using these forums to discuss or enable copyright violations or other things that are against the law; whether you agree with the law or not is irrelevant. Do not use our resources for something that is legally or morally questionable.

Our discussions here generally fall under "fair use." Telling people how to pirate a software title is an example of something that is not allowable here.


Reporting problematic posts

If you see spam, a wildly off-topic post, or something abusive or illegal please report the thread by clicking on the "Report Post" icon. (It looks like an exclamation point in a triangle and it is available under every post.) This send a notification to all of the moderators, so somebody will see it and deal with it.

If you are unsure you may consider sending a private message to a moderator instead.


New user moderation

New users are directly moderated so that we can weed spammers out early. This means that for your first 10 posts you will have some delay before they are seen. We understand this can be disruptive to the flow of conversation and we try to keep up with our new user moderation duties to avoid undue inconvenience. Please do not make duplicate posts, extra posts to bump your post count, or ask the moderators to expedite this process; 10 moderated posts will go by quickly.

New users also have a smaller personal message inbox limit and are rate limited when sending PMs to other users.


Other suggestions
  • Use Google, books, or other definitive sources. There is a lot of information out there.
  • Don't make people guess at what you are trying to say; we are not mind readers. Be clear and concise.
  • Spelling and grammar are not rated, but they do make a post easier to read.
See more
See less

Wolf3D hacked for 8086/8088 CPUs

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    #16
    Originally posted by Andretti View Post
    What about CGA or EGA support? I'm waiting for a Video-7 VEGA I bought off EBang but its maximum is 752x410 enhanced EGA.
    that would actually take some pretty extreme modification, would be interesting though. CGA Wolf3D.

    *shudders*
    sigpic

    Comment


      #17
      Originally posted by Fallo View Post
      The V20 has the 286's real mode instructions: PUSHA, POPA, shift and rotate instructions with values greater than 1, INS, OUTS, INSB, OUTSB, INSW, OUTSW, ENTER, BOUND, and LEAVE.
      if that's the case then it sounds like the only thing that would have been required for him to make it work is bypass the 286 detection code. comment out one line and modify another.
      sigpic

      Comment


        #18
        Originally posted by Mike Chambers View Post
        also, for kicks i think i'm gonna haxx0r up a cheat menu for the game.
        LOL.. now I have to install a VGA card...

        "Wolf.exe -goobers" should give you the cheats.

        I'd have to try and see what happened to my skills. At one time, I was able to play the first three levels blindfolded.
        “Thus, we see that one of the obvious origins of human disagreement lies in the use of noises for words.”

        Comment


          #19
          Originally posted by Jorg View Post
          LOL.. now I have to install a VGA card...

          "Wolf.exe -goobers" should give you the cheats.

          I'd have to try and see what happened to my skills. At one time, I was able to play the first three levels blindfolded.
          lol yeah goober is always there. i decided to add a cheat menu anyway. i've spent the last hour adding it. you can get to it right from the main menu.



          :evilsmile:

          i'll probably post a second EXE tonight or tomorrow that includes the 8086 hack as well as this cheat menu. i'm actually starting to pick up C at this point after all this hackin'.
          sigpic

          Comment


            #20
            Nice work

            Originally posted by Mike Chambers View Post
            it also had the occasional pusha/popa that i had to remove and replace with lists of single push/pop instructions. there were also a bunch of SHL/SHR instructions that specified more than 1 place shift at a time. i had to split them all into multiple SHL/SHR _,1 instructions. i might be forgetting something.
            That's why I choose to make the port to the v20/v30's.. they handle SHL with multiple shifts a time.. Those bunch of shr xx,1 ... would overkill a 8088...

            Comment


              #21
              Originally posted by Mike Chambers View Post
              that would actually take some pretty extreme modification, would be interesting though. CGA Wolf3D.

              *shudders*
              It couldn't be that bad-looking if you add composite support. . .

              On a different subject, when using shift instructions on the 8086, you do:

              MOV CL,4
              SHL BX,CL (only works with CL)

              and not:

              SHL BX,1
              SHL BX,1
              SHL BX,1
              SHL BX,1

              Comment


                #22
                Originally posted by Fallo View Post
                It couldn't be that bad-looking if you add composite support. . .

                On a different subject, when using shift instructions on the 8086, you do:

                MOV CL,4
                SHL BX,CL (only works with CL)

                and not:

                SHL BX,1
                SHL BX,1
                SHL BX,1
                SHL BX,1
                actually, that's exactly what i did the first time around but it didn't work. the problem ended up being related to something else, and i forgot to change it back to CL. thanks for reminding me! that should help noticeably i think. i'll try it again.

                iirc, i need to PUSH cx first and POP cx when done though. i wonder how many clock ticks that adds.
                sigpic

                Comment


                  #23
                  also, i just added a couple more options to my cheat menu.





                  tomorrow i'll do the SHL/SHR _,CL optimization and upload the new EXE w/ the menu. all my cheats are tested and working.
                  sigpic

                  Comment


                    #24
                    alright go back to the first post and re-download. i've uploaded the last update i will probably do. i did the SHL/R _,CL optimization (haven't noticed a speed increase though) and the cheat menu is in there.
                    sigpic

                    Comment


                      #25
                      Originally posted by JoJo_ReloadeD View Post
                      Nice work



                      That's why I choose to make the port to the v20/v30's.. they handle SHL with multiple shifts a time.. Those bunch of shr xx,1 ... would overkill a 8088...
                      Do you actually have that V20 port somewhere?
                      Because I just remember that my XT has a V20 installed.
                      (and a 8087)
                      “Thus, we see that one of the obvious origins of human disagreement lies in the use of noises for words.”

                      Comment


                        #26
                        Originally posted by Jorg View Post
                        Do you actually have that V20 port somewhere?
                        Because I just remember that my XT has a V20 installed.
                        (and a 8087)
                        here it is:
                        http://vieju.net/pub/Retro/xt/wolf3d/8087v20.zip

                        Comment


                          #27
                          Yeah, that'd be the problem with a PUSH / SHIFT / POP thing is the cycle counts probably blow away any "optimization" you may have earned originally. Another idea is to try a less apparent operation to make up for a shift, if the shift is greater than four bits. Now, I've been doing 6502 asm as late, and haven't ever really done 8086 assembler (though I mean to get into that sooner than later!), but I'm thinking if you needed to do something like a logical shift right six bits, you could use a rotate left instruction accompanied by an AND instead...

                          Starting Value: 11011100
                          Target: Shifted right six bits = 00000011

                          11011100 -> ROL -> 10111001 -> ROL -> 01110011
                          01110011 -> AND #3 -> 00000011

                          So two ROLs and an AND, instead of 6 SHRs (as apparently is the 8086 inst.) This should also work in reverse for a large left shift.

                          That's just an example, I don't know what kind of shifts you're dealing with. But if the amount is greater than 4, and it's a LOGICAL not arithmetic shift, this type of trick will prove valuable. Saving, Loading, Restoring a register probably isn't going to net that much performance.

                          Also, you mentioned a 768 byte copy. Is that done every frame or just in a while? Because if it's every frame, you MAY get a little bit of performance boost by unrolling that loop. (E.g. write 8 bytes 96 times instead of 1 byte 768 times.)


                          Finally, porting to EGA or CGA -- shouldn't be IMPOSSIBLE, though I don't know if the "snow" problems of a CGA might cause trouble. The big deal is you'll pretty much have to rewrite the rendering code to deal with the different byte packing in 16 (2 pixels per byte) or 4 (4 pixels per byte) colors. That would be some pretty serious reprogramming. But, if you're dedicated enough...
                          Anyone got an Intel Inboard 386/PC memory module? Still looking for that Kingston 486/Now too.

                          Comment


                            #28
                            Originally posted by southbird View Post
                            Yeah, that'd be the problem with a PUSH / SHIFT / POP thing is the cycle counts probably blow away any "optimization" you may have earned originally. Another idea is to try a less apparent operation to make up for a shift, if the shift is greater than four bits. Now, I've been doing 6502 asm as late, and haven't ever really done 8086 assembler (though I mean to get into that sooner than later!), but I'm thinking if you needed to do something like a logical shift right six bits, you could use a rotate left instruction accompanied by an AND instead...

                            Starting Value: 11011100
                            Target: Shifted right six bits = 00000011

                            11011100 -> ROL -> 10111001 -> ROL -> 01110011
                            01110011 -> AND #3 -> 00000011

                            So two ROLs and an AND, instead of 6 SHRs (as apparently is the 8086 inst.) This should also work in reverse for a large left shift.

                            That's just an example, I don't know what kind of shifts you're dealing with. But if the amount is greater than 4, and it's a LOGICAL not arithmetic shift, this type of trick will prove valuable. Saving, Loading, Restoring a register probably isn't going to net that much performance.

                            Also, you mentioned a 768 byte copy. Is that done every frame or just in a while? Because if it's every frame, you MAY get a little bit of performance boost by unrolling that loop. (E.g. write 8 bytes 96 times instead of 1 byte 768 times.)


                            Finally, porting to EGA or CGA -- shouldn't be IMPOSSIBLE, though I don't know if the "snow" problems of a CGA might cause trouble. The big deal is you'll pretty much have to rewrite the rendering code to deal with the different byte packing in 16 (2 pixels per byte) or 4 (4 pixels per byte) colors. That would be some pretty serious reprogramming. But, if you're dedicated enough...
                            that's a good point about the shifts, but i haven't seen one that does more than 4 or 5 at a time. most of them are 2 or 3 at a time, and those i didn't even bother replacing because of the PUSH / POP you have to add onto it.

                            and yeah that's why i didn't want to mess with EGA / CGA. the byte packing. it would be pretty interesting to see though. then i could try it on my supersport 8088 laptop which has a CGA built-in. i'd like to see that because the 8088 in it can be run at a turbo mode of 7.16 MHz instead of 4.77. the byte packing would eat up some CPU though.

                            the palette code is only used when fading in/out and the menu's red fades.
                            Last edited by Mike Chambers; September 16, 2009, 11:40 AM.
                            sigpic

                            Comment


                              #29
                              Originally posted by Mike Chambers View Post
                              and yeah that's why i didn't want to mess with EGA / CGA. the byte packing. it would be pretty interesting to see though. then i could try it on my supersport 8088 laptop which has a CGA built-in. i'd like to see that because the 8088 in it can be run at a turbo mode of 7.16 MHz instead of 4.77. the byte packing would eat up some CPU though.
                              Well, it wouldn't necessarily "eat up" any CPU if you rewrite the renderer from scratch for the new target. That's unfortunately about the only "sane" way to do it. I do have a description of a raycast renderer like it uses in a textbook somewhere... don't know how clear it is in the source... but the best performance would likely come from a new renderer.

                              the palette code is only used when fading in/out and the menu's red fades.
                              I figured as much. It would only be every cycle if it were doing palette animations or something.
                              Anyone got an Intel Inboard 386/PC memory module? Still looking for that Kingston 486/Now too.

                              Comment


                                #30
                                Originally posted by southbird View Post
                                Well, it wouldn't necessarily "eat up" any CPU if you rewrite the renderer from scratch for the new target. That's unfortunately about the only "sane" way to do it. I do have a description of a raycast renderer like it uses in a textbook somewhere... don't know how clear it is in the source... but the best performance would likely come from a new renderer.



                                I figured as much. It would only be every cycle if it were doing palette animations or something.
                                oh i'm pretty familiar with raycaster coding, i wrote this recently in freebasic from scratch:

                                http://www.youtube.com/watch?v=CaUzyNQgUgc

                                a couple minor graphical glitches, still working on it.

                                i'm just not good enough with ASM to write one that'll perform well on an 8088. or write one in ASM at all. :P
                                sigpic

                                Comment

                                Working...
                                X