Jump to content


+AtariAge Subscriber
  • Content Count

  • Joined

  • Last visited

  • Days Won


Posts posted by playsoft

  1. This is a conversion of Laser Hawk by Andrew Bradfield with graphics by Harvey, first published by Red Rat in 1986. You may recognise the design on the splash screen if you played through the last ATARI BLAST! demo.


    This is the first conversion I have done of an 8-bit game which needs more than 16K to run (so I had to do a full disassembly, no being lazy this time). Excluding the splash screen, Laser Hawk has 37K of code/data and requires 10K RAM for the screen buffer, player/missiles, character sets and variables.


    As such I have created a 64K ROM image which uses the same 32K bank switching scheme as M.U.L.E. This is supported by the Atarimax Ultimate SD cart and Altirra.


    I have mapped the controls:


    START = start

    PAUSE = pause/resume

    RESET = reset

    # = select level

    * = select number of players

    1 = toggle beginner mode (on the title screen, you get a "B")

    3 = toggle engine noise


    You can see the original Red Rat packaging here:




    And other re-releases here:






    It was played in the 8-bit High Score Club where there are links to Harvey's web pages with some discussion about the program and graphics design:





    • Like 4

  2. Looks like I was using $40 and $a4 as my threholds in my joystick read routines (at least for one of my conversions I ripped this from). Not sure why I didnt use A instead of stickval and x for the comparisons though.



    lda $E802

    cmp #114+50

    rol stickval

    cmp #114-50

    rol stickval

    lda $E803

    cmp #114+50

    rol stickval

    cmp #114-50

    rol stickval

    lda $E800

    cmp #114+50

    rol stickval

    cmp #114-50

    rol stickval

    lda $E801

    cmp #114+50

    rol stickval

    cmp #114-50

    rol stickval

    lda stickval

    eor #2+8+32+128

    sta SPORTA


    All of my conversions I kind of made a mini atari computer like os just adding features as they were needed. I used dis6502 to make a rough dissassembly, changed references to hardware locations, only a couple vector references needed altered because I was using my own mini os with all of the vectors where they are in the computers (except for IRQ, NMI, hardcoded in ROM). Patches were then inserted where needed. Sometimes calling subroutines to read, or sometimes having the vbi update shadow registers (like for console register, keyboard, joystick).


    Thank you, nice to hear you'd used almost identical thresholds so I'll continue using these. I did notice when porting Savage Pond that it takes the 5200 a little longer to get to your dli routine so there is a little less time available before you need to do the WSYNC.

  3. An A8 that supports the 5200 controllers, right?


    As well as the controllers the other main differences are that GTIA and POKEY are at different locations and there is no operating system. Most of the effort goes into getting the disassembly correct.

    • Like 1

  4. Recently I was having trouble moving down - with both of my joysticks - on games which were previously ok. I calibrated the 5200 and that did the trick.


    In my recent conversions I check for the pot values being less than $42 for left/up and greater than $A2 for right/down.


    In future conversions (and possibly ATARI BLAST! although that may end up with proper analogue control eventually) I am thinking of either:


    (1) Keeping to this method --- it's the simplest!


    (2) An automatic calibration based on the lowest and highest pot values read during the game.


    (3) An optional manual calibration which can be run at start up


    Regarding (3) I have put together a quick test program which is attached.


    The status line at the top shows the joystick values, averaged over 8 frames which is why you can see them ramp up and down quickly.


    To calibrate your joystick you should follow the on-screen instructions - push the joystick in the direction indicated and press the fire button to record the appropriate pot value. Once you have done this for all four directions and a centred stick, it will calculate the thresholds for digital joystick emulation. You are then able to move a square around to check that it works ok.


    By default I calculate the thresholds with 50% dead space - i.e. so that you need to move the joystick 50% in order to register a change in direction. By pressing * (after the calibration is complete) you can switch to 33% dead space - i.e. you don't need to move the joystick so far. You can switch back to 50% by pressing #. At any time you can restart the alignment process by pressing reset.


    I'd be interested in knowing what pot values other people are seeing. Below are the readings from my two controllers.


    left = 04 right = CC up = 02 down = B7 centre = 63 60

    left = 26 right = C5 up = 01 down = B6 centre = 7E 62


  5. I don't know whether it was this version or the VCS one as they play about the same, but back in the day I used to be unbeatable at this (well... against the computer, my brother and my uncle anyway).


    This was one of the first A8 games and while the graphics look a little crude you have to admire that it only uses half the cartridge space - it fits in 4K. Also that each basketballer is a single player graphic and coloured by tracking their positions on screen.

  6. Just got done playing this and I must commend you on such great work! Thank you very much again! Helps people like me in my situation!


    Thank you but I must say that it does not take much to do these 16K conversions (i.e. games which run on a 16K A8). They are still 99% the work of the original A8 author, my 1% is just making the 5200 look like it's an A8.


    Cool! You just have to remember to adjust the coarse scrolling forward by 3 bytes, but it looks like you may have already figured that out seeing as your graphics show up at the same Y position in both cases.


    Yes I'd added the offset and compared to what I was doing before I'm saving on average 2.5 cycles on those scan lines which is fantastic thank you.

  8. Another thing, don't forget you can use the high range of HSCROL values to reduce DMA. In other words, instead of using HSCROL 0-3, use 12-15. This prevents ANTIC from halting the 6502 for several cycles at the beginning of each scan line. Hit Shift-F8 in Altirra to see the DMA pattern shrink in comparison.


    Thank you so much, I did not know about this... and it's not often you get cycles for free!


    • Like 1

  9. The keypad and joystick reading code you see in phobos.s is pretty much what I do each time. For example, with the basketball conversion I had to read all 4 joysticks and then combine them into fake PORTA,B registers - but the actual reading was done in exactly the same way.


    Regarding the keypad, in the first couple of conversions I used an IRQ interrupt but I subsequently switched to key held checks in the vertical blank (I had to do this in ATARI BLAST! because I'm using a Pokey timer for the sprites). The other bits of operating system and hardware I do as required by the program. For example, Savage Pond was using the o/s count down timers.


    It is the controllers which are most likely not to be emulated correctly but if you end up doing a conversion before you have real h/w you would have no shortage of testers here. The first release of GTIABlast! (as it was then) on the 5200 was developed completely blind as I did not have any h/w at the time and the Ultimate SD is not supported by any of the emulators.

  10. In case this is of any interest, here is the build directory for this conversion. I use ca65 and have the bin sub-directory in my path.


    The .001-.006 source code files were generated from the A8 executable using the dis6502 interactive disassembler (downloaded from the atarimax website). For these 16K games I do not worry too much about dotting the i's and crossing the t's - I just try to make sure that I have identified the code and data sections correctly.


    With the code sections identified, most of the time it is enough to modify the h/w register equates (I pull in atari5200.inc) although this can miss some h/w locations if accesses have been done through zero page. I put hooks into the code to cater for the A8/5200 differences without disturbing the footprint of the code which is what lets me get away without doing a 100% disassemble as everything remains at its original location.


    • Like 2

  11. I've managed to get through to the frog level by concentrating on getting the dropped eggs. Should you miss one then you really need the next worm as that makes you invincible for a little while and you can pick up the egg. By the way if anyone else makes it this far you control the frog (or rather its tongue) with the * key.

  12. I was not familiar with Lady Bug but that looks like where the revolving doors may have come from, although Drelbs does something different with them. As one of my favourite games it is a shame more is not known about it. I think it's a very original game (despite the Lady Bug doors!) with a unique atmosphere and excellently programmed.

  13. I do not use xasm but the manual indicates it is possible using the opt directive:


    OPT - set assembler options

    Five options are available:

    • F - fill the space between memory areas with $FF

    • G - Atari 5200 mode for hardware register abbreviations

    • H - generate Atari executable headers

    • L - write to the listing

    • O - write to the object file

    You can turn any of these on or off. The default (if no OPT specified) is opt f-g-h+l+o+. Examples:

     opt l-     listing off opt l+o-   listing on, object file off opt f+g+h- useful for Atari 5200 cartridges - raw output, 5200 hw regs


  14. One of the very first A8 games. Instructions as per the original (below) except that it is the port 1 controller start to begin and reset to select the number of players.




    I only have 2 controllers but I am told 4 work ok.


    Interesting backwards shooting quirk under Altirra but it does this with the original A8 version too (which goes away if I set port 2 input to none).


    • Like 3

  15. I just added the "fixed" Oil's well to my 128 in 1 USB cart with no issue.


    I opened my .MCW file using the Atarimax software.

    I removed the game in slot 81 (was Oriley's Mine XL Conversion)

    I added the Oil's Well fixed rom. Sync'd the cart, Saved the .MCW file.


    Played Oil's Well and a few other on the cart to make sure everything is working.

    So far, seems fine.



    I've also tested both the fixed (thanks, Paul!) and unfixed binaries with no problems with my 128-in-1. I had the same results as Official Ninja... no issues.


    Peedenmark7, please check your PM's. I've sent you some instructions that might help you get started in reconstructing your multicart.


    Thank you both, I have added the fixed version back to my original post.

  16. For those having problems, is this any better?


    I do not have any issues running the original from my USD - but random characters may suggest it is not initialising it's variables and relying on RAM being cleared. Perhaps the USD or the particular version of firmware in mine clears out RAM when launching a cart where others don't.


    Anyway, in this version RAM is cleared during initialisation.




  17. looks like this file just wiped my 128-1 clean...


    I only have a USD to test with and have not had any issues. I am sorry if it has wiped your cart clean and I will remove the file in case it causes problems for anyone else.



  18. The fixed version works fine now. Very nice. One thing: There is a space in the "O" for Oil's Well with the number of lives left to the left of the space. Is that space for the extra lives that you can get at 1000 points, etc.? Now that you can get the extra points for the Cup, you can get the extra lives that you need. Is there a limit to the extra lives that you can get? In the ColecoVision version there is a maximum of four. With other versions you can many more than that. I'm up to level 5 so far and everything looks good.



    Sorry I don't know. With these simple conversions (A8 games which run in 16K) I do not have to understand what the code does. All I do is disassemble the program making sure I have identified all the code and data sections, change the h/w register accesses and patch in the changes which are necessary for the 5200. So this version is still 99.9% the same code as the original A8 version.

  19. Oil's Well is one of my favorites as well. I've played it on many systems and my favorite is ColecoVision.

    I quickly tried it out in MESS and a couple of things:

    1.You can't pick up the "cup" to get extra points.

    2.The "bomb" does nothing.

    There may be other things as well. Maybe it's MESS or maybe it's a WIP. Are you doing this from scratch or is it a conversion?

    Looks good so far.




    It's Mess. I played it on my 5200 with non of those problems.




    I did the conversion for Aking and I had missed the cup/bomb - I'd not played the game before and wasn't sure what they were supposed to do. The reason they didn't work was that the collision detection register was read through a zero page location and was missed when modifying the GTIA addresses. The attached version has this fixed - if there is anything else wrong please let me know.


    • Like 3
  • Create New...