Jump to content

DanBoris

Members
  • Content Count

    1,086
  • Joined

  • Last visited

Everything posted by DanBoris

  1. In my last post I showed how the Action! compiler produces some pretty optimized code for CARD math under certain circumstances. This time I will show the more general case which should be pretty familiar to anyone who has done 6502 programming. Here is the Action! program and it’s dis-assembly: CARD I PROC MAIN() I=2 I=I+2 RETURN 0E6C: .BYTE 00,00 0E6E: 4C 71 0E JMP $0E71 ;I=2 0E71: A0 00 LDY #$00 0E73: 8C 6D 0E STY $0E6D 0E76: A9 02 LDA #$02 0E78: 8D 6C 0E STA $0E6C ;I=I+2 0E7B: 18 CLC 0E7C: AD 6C 0E LDA $0E6C 0E7F: 69 02 ADC #$02 0E81: 8D 6C 0E STA $0E6C 0E84: AD 6D 0E LDA $0E6D 0E87: 69 00 ADC #$00 0E89: 8D 6D 0E STA $0E6D 0E8C: 60 RTS Most of what is here we have discussed before so I won’t go into great detail. As you can see since I is initialized to the value 2 the INY optimization can’t be used so two loads and stores are performed. It’s interesting to note that a different register is used for each byte. I am not sure why the compiler chooses to do this, although in the end it doesn’t affect program size or performance. The add part of the program is standard 6502 16-bit math, adding the lower byte, then adding the upper byte which also handles and carry from the lower byte.
  2. It's really great to see these scans. This was one of my favorite computer magazines back in the day and looking at these really brings back some memories. I was always very impressed with the quality of the type in programs from Softside so it's been cool to fire up some of these games again. Today I played the game Titan from the December 1981 issue. It's a pretty good game that simulates a mining colony on the moon Titan. I remember playing this one a lot. Dan
  3. I can’t believe it’s been over a year since my last blog post, time sure does fly! I thought it was about time to get back to some posts and continue my Action! language topic. Last time I talked about BYTE math, this time we will start looking at CARDinal math. In Action the CARD data type is a two byte unsigned value. Here is the first piece of Action! code: CARD I PROC MAIN() I=1 I=I+1 RETURN Here is the resulting disassembly: 0E6A: .BYTE #$00,#$00 0E6C: 4C 6F 0E JMP $0E6F 0E6F: A0 00 LDY #$00 0E71: 8C 6B 0E STY $0E6B 0E74: C8 INY 0E75: 8C 6A 0E STY $0E6A 0E78: EE 6A 0E INC $0E6A 0E7B: D0 03 BNE $0E80 0E7D: EE 6B 0E INC $0E6B We start at memory location $E6A where two bytes are set aside for variable I, and then as usual we have a JMP to that start of the code. The next four instructions assign the value 1 to I and you can see a nice little optimization here. First a 0 is put into the high byte of the variable. The low byte needs to have 1 in it and since the compiler knows that Y already contains 0 in can simply use the increment Y instruction to get a 1. This will save two bytes over using LDY #$01. The next three instructions handle the I=I+1. Just like in the BYTE math the compiler knows that +1 is just an increment so uses the INC instruction on the low byte of the variable instead of doing an ADC. The branch checks for an overflow and if there is one we then increment the high byte of the variable.
  4. Curt, any software (binary or source) for this prototype machine? If there is this might make a cool emulation project! Dan
  5. I recently got access to the contents of the disks from a software development system once used by the company Vid Kidz. Vid Kidz was a company formed in 1981 be former Williams Electronics employees Eugene Jarvis and Larry DeMar. They developed games such as Stargate, Robotron and Blaster for Williams. I have put up a web page containing a bunch of the more interesting documents I have found. http://atarihq.com/danb/VidKidz.shtml Dan
  6. Nice work! I loved Softside magazine. I was always impressed with the quality of Softside's type in programs. Some of them were as good if not better then a lot of commercial programs.
  7. I really love those old electro-mechanical pinballs, I have refurbished a few of them. Since it is electro-mechanical there is no microprocessor, so no test mode. As someone else suggested you can take off the glass and hit the targets and switched manually to test things out. If you are unsure about the lamps they can easily be tested by taking each one out and putting an ohm meter across the contacts. The meter should read close to zero ohms if the lamp is good. The rubber parts tend to wear out first, usually from dry rot. You can find an entire replacement rubber ring kit for that machine here for only $14.95: http://www.marcospecialties.com/storeitems...;williams=LUCKY ACE&PageNo=2 They also have re-build kits for the flippers if they are worn. If you are going to do any work on the machine I highly recommend checking out this site: http://www.pinrepair.com/em/index.htm Excellent information on how to maintain and repair EM pinball machines.
  8. US Amusements does the auctions in Cherry Hill and I think they had one a few months ago. There is an e-mail address on thier site for the NJ and PA auctions, you might want to try contacting them and see if they plan to do anymore. Dan
  9. Second question first. O2 sticks are only 4-way; there are only 5 inputs (4 directions and fire) to the system from each stick. As for the system going crazy when you push the stick in one direction, the only thing I can think of that would cause this is a problem with the chip that interfaces the sticks to the cpu. This would either be IC8 or IC4, not sure which one goes to which port. Both are 74LS365's.
  10. As you said, the only way would be to find an emulator "bug" something that wasn't emulated properly that the CPU can detect. Even if you found this on one emulator it's unlikely that it would be the same on all emulators. Dan
  11. I have actually done development work on MAME and like it a lot, but I have to agree that it should be kept separate from the scores done on a real machine. After seeing King of Kong and how touchy Twin Galaxies is about making sure the PCBs on the machines were not modified in some way, I would think MAME would be even more problematic. MAME strives for accuracy but not all games are emulated 100% perfectly so how do you decide which games are accurate enough to be compare to the real machine? You also have the problem that MAME is continuously being updated and bugs may come and go from version to version, so would people have to use the same versions of MAME to be able to compare their scores? What about verifying that the version of MAME they are using has not been modified? Since the source code is available it would not be hard to modify MAME to give someone an advantage in a specific game. Dan
  12. Like these? L001038 - IBID INC. 0 $.00 0 $.00 L001042 - BOB VIERA 0 $.00 0 $.00 L001045 - COMPUTER MANIA 0 $.00 0 $.00 L001047 - DAVID PAYNE 0 $.00 0 $.00 L001048 - LAWRENCE HALL OF SCIENCE 0 $.00 0 $.00 L001050 - ANDROMEDA SOFTWARE 0 $.00 0 $.00 L001051 - SORJANA PUBLICATIONS 0 $.00 0 $.00 L001052 - ULTIMATE SUPPORT SYSTEMS 0 $.00 0 $.00 L001056 - COMPUTER CURRICULUM CORP 0 $.00 0 $.00 L001058 - COMPUTER CURRICULUM CORP 0 $.00 0 $.00 L001059 - COMPUTER CURRICULUM CORP 0 $.00 0 $.00 L001060 - IMA 0 $.00 0 $.00 L001061 - COMPUTER & SOFTWARE NEWS 0 $.00 0 $.00 L001062 - AKRON BEACON JOURNAL 0 $.00 0 $.00 L001063 - COMPUTER CURRICULM 0 $.00 0 $.00 L001064 - M.I.S. WEEK 0 $.00 0 $.00 L001065 - DESKTOP PUBLISHING JOURNA 0 $.00 0 $.00 L001066 - MILATARI 0 $.00 0 $.00 L001067 - SOFTGOLD GMBH 0 $.00 0 $.00 L001068 - U.S. VIDEO GAME TEAM 0 $.00 0 $.00 L001075 - WOLFRAM RESEARCH 0 $.00 0 $.00 L001079 - BORLAND INTERNATIONAL 0 $.00 0 $.00 L001083 - DAVE SMALL & ASSOCIATES 0 $.00 0 $.00 L001088 - GRIFFITH OBSERVATORY 0 $.00 0 $.00 L001096 - PRODIGY SERVICES 0 $.00 0 $.00 L001109 - KENNETH HILL 0 $.00 0 $.00 L001111 - VIDEO CONNECTIONS 0 $.00 0 $.00 L001113 - N VIEW CORP. 0 $.00 0 $.00 L001115 - ELECTRONIC GAME PLAYER 0 $.00 0 $.00 L001121 - EXIDY, INC 0 $.00 0 $.00 L001123 - AMIDEI & CO. 0 $.00 0 $.00 L001128 - DRAUDT & ASSOCIATES 0 $.00 0 $.00 L001131 - MILWAUKEE JOURNAL 0 $.00 0 $.00 L001132 - LIZ METZGER 0 $.00 0 $.00 L001159 - D.M. PRODUCTS 0 $.00 0 $.00 L001168 - JOE COPSON 0 $.00 0 $.00 L001172 - MEDIA WEST 0 $.00 0 $.00 L001184 - U.S. GOLD 0 $.00 0 $.00 L001196 - I.T.D.C. 0 $.00 0 $.00 Interesting. I see Joe Copson of 5200 Star Raiders and Elevator Action fame was possible working on a 7800 game in 1987. Cool. Maybe somebody could find some prototypes by using this list. Allan Another interesting company on that list is WOLFRAM RESEARCH. They were founded in 1987 and went on to create Mathematica. Wonder if they were looking to get into the video game business at first. Dan
  13. Probably means Average Selling Price. If you divide the revenue number by the units number you get the ASP number. Dan
  14. You are right, I was misreading the logic cell that provides the address bits to the decoder. I am used to flip-flops where A is the same as the input and /A is the inverse, but in this case A is the inverse of the input and /A is the same as the input. Given that, ANDing the the addresses makes sense, and anding in O2 also makes sense since data on the bus is valid during O2 high. What I don't understand is why you would AND /W? /W would be low on a write cycle which doesn't work with the AND function. Not sure what I am missing there? Dan
  15. I took a closer look at the address decoding section since, as other have said, this is an area where we can clearly understand the function. I am pretty sure that the outputs of the address decoding section are all active high. So looking at VSYN (address 0), the inputs are A0-A5 , W (active low) and 02. The only logic function that gives a high output from those inputs is a NOR gate. If A0-A5, W and 02 are all low, the output will go high. If any of the addresses is high, or W is high indicating a read, the output would be low. This is also consistent with the outputs of the logic gates being open collector. If none of outputs are on, the resistor will pull up the line to high. If any of the outputs turns on, the pin gets pulled low thus pulling the output low. The question now is does this explanation hold up for all the other areas where the circles are used? I may have just re-stated what others have already said, but it's pretty early Sunday morning, so I am not sure Dan
  16. These circles at intersections represent logical ANDs/ORs, although I am not clear on which logic function is used in each place. So for example in the circuit you mention on page 4 all the signals going into each vertical line would either be ANDed or ORed together, the fed into the top horizontal row of circles (indicated by the arrow at the top of each line) where they would all be ANDed or ORed together. Dan
  17. I skimmed over the code and didn't see anything obvious. All the graphics data is clearly labeled so if there is an Easter egg it's well hidden in the source. Dan
  18. Is it the same as the prototype I have listed on my site? Tempest No, it's different. Mitch I looked into this a little further. The ROM I posted is an exact match to the PAL version. Dan
  19. In the source for Crystal Castles was an encoded binary file called CCP.OBJ.1. I have converted this into a binary that will run on an emulator, the resulting file is attached. The binary is quite different from the version you can download from the 2600 archives, but the only difference I notice in the running game is the colors. Dan ccp.bin
  20. Some of the dislike may come from the fact that you expect everything to improve from one generation machine to the next. If you look at the sound hardware build into the Atari consoles, the 2600 had the TIA, the 5200 improved on this with the Pokey chip, but the 7800 took a step backwards to the TIA again. Of course when you look at the 7800 games that had the Pokey on the cartridge then it is a step forward since you get both the TIA and the Pokey, but not many games used this.
  21. DanBoris

    Pokey RNG

    The random number generator in the Pokey is actually driven off the polynomial counters that are used to add noise to the sound. You can take a look a the source code for the MAME emulator, I am pretty sure the algorithm it uses is accurate. You can find the source here http://mamedev.org/source/src/emu/sound/index.html in the Pokey.c file. Dan
  22. Another thing you can look at is the source code for my 7800 Sprite demo. It shows you the basics of how to get a moving object on the screen. You can download it here along with all the tools needed to assemble the code: http://www.atarihq.com/danb/a7800.shtml
  23. I found some articles at MyAtari.net on this topic. You can find them here: Part 1 Part2 Part 3
  24. Dice is a very cool "emulator". I was experimenting with circuit level simulation of arcade games when I ran across Dice. I really didn't think circuit level simulation would be fast enough to produce a playable game, but Dice proved that it could be done. I actually added the Gotcha driver to Dice. I would like to try adding some more games but it's a very tedious process. Dan
  25. Thanks, this really helped. It actually never occurred to me that the pin numbers on J5 and J6 on the PCB corresponded to the pin numbers on the connector. Dan
×
×
  • Create New...