Jump to content


  • Content Count

  • Joined

  • Last visited

  • Days Won


Blog Entries posted by Xuel

  1. Xuel
    Ilmenit's RastaConverter is an image conversion tool for Atari 8-bit computers. I wrote RastaMovie to stitch RastaConverter images together to make movies. The movie frames have to be switched very quickly to achieve a frame rate of 25-30 frames per second. This rules out SIO or IDE interfaces as you need around 500 KB/s throughput. You have to have the frames in memory. But the largest memory expansion commonly available is only 1088K. That's only enough for around 64 frames and they have to be cut down to 16K a piece from their normal size of around 22K so they don't fill the screen.
    Thus, the genesis of the Atari Beaglebone Expansion or ABX. Integrating the Atari with a Beaglebone as a PBI device, I was able to effectively expand available memory to 140MB on a stock Atari 600XL. This is enough to play around 3.5 minutes of video at 30 FPS.
    But, what's a movie without sound? So, I modified RastaConverter to reserve room on each scan line of the raster program to write a digital sample to POKEY and then to restore the register that had to be modified in order to do that. Then I positioned additional writes to POKEY in the intra-frame kernel so that the audio plays uninterrupted.
    You can see the result in this YouTube video:
    RastaMovie can also output versions of the movies that can be played on Atari800 and Altirra. It takes advantage of the fact that segment loads are instantaneous to simulate large amounts of RAM. These executables won't work on real hardware however. Check out birds.zip, epic.zip and im.zip in the downloads area of RastaMovie's github home page.
  2. Xuel
    X:8 is a new side-scrolling shoot-em-up-style game for the Atari 8-bit computer made for the ABBUC Software Contest 2013. The game will only be available to ABBUC members during a voting period. Later it will be released to the general public.
    - Graphics / Production: José Pereira
    - Code / Music: Xuel
    - Sprites: TMR / STE'86

    The graphics are converted and inspired by several other 8-bit era games including Armalyte for the ZX Spectrum, Gradius for Nintendo Game Boy, and Nemesis for Game Boy. The music is a cover of the level one theme song of Ruff 'n' Tumble for Amiga.
    64K RAM
    Start - Start or restart at level 1 or finalize high score entry
    Select - Toggle music
    Option - Toggle sound effects
    Joystick - Move or enter high score
    Trigger - Shoot
    Game Play
    Your mission is to fight your way past waves of enemy ships, ground weapons and obstacles to defeat the forces of the X:8 empire. Along the way you can collect eight different powerups dropped by enemy ships to enhance your fighting ability against enemy ships of varying strengths. Eight levels await you.


    Double shot - Improves primary weapons from a damage of 1 to 2.
    Spread Shot - Slow weapon with damage of 2. Angle shots are ineffective in this version of the game.
    Fire Ball - Slow weapon with damage of 3.
    Piercing Shot - Fast weapon with damage of 3.
    Ray Gun - Fast weapon with damage of 4.
    Invulnerability - Places shield around your ship that prevents all damage for a short period of time.
    Bomb - Instantly destroys all enemy ships on the screen.
    Extra Life - Increases your lives by one up to a maximum of eight.
    Technical Details
    X:8 uses a combination of high-res and medium-res graphics modes. The middle part of the playfield is ANTIC mode 2 (Graphics 0). The borders and status bar are ANTIC mode 4 (Graphics 12). Player/Missile graphics are used to for the player's ship and various enemy weapons and obstacles. José conceived of the screen layout and described it on the Format War forums in May of 2013. Xuel got involved after posting an initial mock-up of a rendering engine for José's idea in that thread.
    The engine runs at full frame rate (50FPS on PAL, 60FPS on NTSC). To achieve fast drawing speeds, many shortcuts and approximations are made. The enemies can only be positioned on a 4x2 grid. This means that only 8 different shifted versions of the enemy ships are needed. These occupy 72 characters of the ANTIC mode 2 character set that is active in the center of the screen. The rest of the characters are used for debris, powerups, stars, and enemy projectiles with various shifts pre-applied. Drawing consists only of changing the screen ram. No changes are made to the character set except between enemy waves when a new enemy template is pre-shifted into the character set. This happens in the background without disturbing the smoothness of the scrolling, hero movement or other enemy objects. A downside to this approach is that you will occasionally see blank areas when one object is drawn on top of another, but hopefully it doesn't detract too much from the game play.
    - ABBUC
    - STE'86 for permission to use Armalyte sprites
    - TMR for hero ship sprites
    - phaeron for Altirra and VirtualDub
    - fox for xasm
    - fox for inflate
    - jaskier for TMC2
    - AtariAge Forums
    - Format War
    - AtariOnline.pl
    - Tiled Qt
    - ImageMagick
    - BitBucket
    - Armalyte ZX Spectrum
    - Gradius Game Boy
    - Nemesis Game Boy
    - Ruff'N'Tumble Amiga
    505, +Adam+, atari8warez, candle, CharlieChaplin, CreatureXL,
    Cosine, drac030, emkay, Exin, Faicuai, flashjazzcat, foft, fox,
    Heaven/TQA, Hiassoft, ilmenit, Irgendwer, ivop, JAC!, Johny,
    Kaz, MaPa, Matosimi, Mclaneinc, miker, MrFish, Oswald, PG,
    phaeron, popmilo, Rybags, sack-c0s, SimPiko, skr, snicklin,
    STE'86, Stephen, stRing, Synthpopalooza, tebe, Tezz,
    therealbountybob, TMR, w1k, xeen, xxl
    Future Plans
    We planned many more features but ran out of time.
    - Enemy waves that come from the borders
    - Enemy ships that shoot projectiles
    - More enemy movement patterns
    - Destructible border weapons
    - Better ship weapons
    - Large end bosses
    Stay tuned for another release with these features and more after the contest period.
  3. Xuel
    A stripped down re-implementation of Caverns of Mars in 10 lines of Turbo Basic:
    Cavern10.atr (PAL)
    Cavern10-NTSC.atr (NTSC, no sound or animation)
    Source at github.
    Unfortunately I wasn't able to include weapons or much game play, so it's way too minimalist to be a real contender. Consider it a demo of lz4 compression in Turbo Basic.
  4. Xuel
    Here are my high scores for some of the games from the NOMAM Turbo Basic Ten-Liners contest.
    Jump!!! - 742
    Jump!!! (NTSC) - 891
    Dodge Racer - 432
    Abyss 1.1 - $350776
    Abyss 1.1 - $599413 (Concentrated more on missions)
    Abyss 1.2 - $316037
    roguelike - 21 gold
    Grue Killer - 300
    Flappy - 8
    I used the following breakpoint in Altirra to save the screen before the bird disappears
    bx "write=$bc51 and value>=$10 and value<$80"
    Type "gf" a couple times until score is visible. You can change $10 to $1X to only stop if you get X or more points.
    ABDUCT10 - 30
    2047 - 2047 I love that it actually says 2047 instead of 2048 when you join two 1024 tiles.
  5. Xuel
    An entry into the NOMAM 2014 BASIC Ten-Liners Contest
    Screenshots and Video


    Avoid falling off the bottom of the screen or getting crushed at the top. Move left and right with the joystick. Press trigger to start.
    Smooth scrolling at 44 FPS
    In-game music
    Physics simulation
    Hiscore and splash screen
    All in Nine lines of Turbo Basic
    Unfortunately it runs much slower on an NTSC machine.
    Note that special ATASCII characters are not shown.
    Line 0

    0 PL=ADR("U U *U*U* ***** * U U U U y`Q< y`[email protected]([email protected]<-#([email protected][H5-([email protected]"):GOSUB 8:POKE 752,1
    PL - Level and music data. Call screen initialization routine. Turn off cursor.
    Line 1

    1 ? "SCORE:",S;:IF S>H:H=S:? " GREAT!";:ENDIF :? "HISCORE:",H:? "":? " ";:WHILE STRIG(0):WEND
    Score and splash screen.
    Line 2

    2 SP=$E2A0:PM=$A200:HP=$D000:SC=$BE70:S2=SC+10:CC=200:SB=SC+190:VS=$D405:POKE $D01D,2:C=1.4:Y=20:A=0.2:G=0.2:GOSUB 8
    Tell GTIA to fetch player data from ANTIC via GRACTL, $D01D. Call screen initialization routine.
    SP - Pointer to circle in character set ROM.
    PM - Pointer to Player/Missle data. Not properly allocated.
    HP - HPOSP0 Player 0 X position register
    SC - Start of screen data. Blindly assume OS always puts it here.
    S2 - Pointer to second line of screen
    CC - Size of screen in bytes
    SB - Bottom of screen where new lines will be drawn
    VS - VSCROL fine vertical scrolling register
    C - Unused
    Y - Y position
    A - horizontal acceleration
    G - gravity
    Line 3

    3 POKE 559,$2E:CO=$D004:HC=$D01E:X=100:N=%0:M=%0:S=%0:SOUND 0,0,10,10:P=$D200:POKE 752,1:T=PL+52:R=$FE46:E=R+$FF
    Set DMACTL. Initialize velocity. Set score to 0. Prepare sound channel. Turn off cursor.
    CO - P0PF collision register.
    HC - HITCLR collision clear.
    P - AUDF1 POKEY channel 1 period register.
    T - Pointer to music period data.
    R - Pointer to ROM lookup tables used as level data.
    E - End of level data.
    Line 4

    4 POKE 77,0:DO :J=STICK(%0):IF J<8:IF M<%1 THEN M=M+A:ELSE :IF J<13 AND M>-%1 THEN M=M-A:ENDIF
    Start game loop. Check joystick. Set X velocity accordingly.
    Line 5

    Check collision. Set Y velocity accordingly. Add velocity to position. Plot ball.
    Line 6

    6 IF Y>130 OR Y<9 OR X>250 OR X<5:SOUND:GOTO 1:ENDIF :F=F+%1:PAUSE %0:IF F>7:POKE VS,%0:MOVE S2,SC,CC:IF (S&7)=%0
    Check for death. Wait for VSYNC with PAUSE 0. Fine scrolling. Coarse scrolling.
    Line 7

    7 MOVE PL+PEEK(R)&31,SB,10:R=R+8:IF R>E:R=R-$FF:ENDIF :ENDIF :F=%0:MOVE T+(S&31),P,%1:S=S+%1:ENDIF :POKE VS,F:LOOP
    Draw new platforms. Use OS ROM tables as level data. Play music. Add points to score. Set VSCROL. Loop.
    Line 8

    8 GRAPHICS 3:D=$BE54:POKE D-3,$68:POKE D,$28:MOVE D,D+1,17:POKE 623,1:POKE 704,$38:POKE $D407,PM/256:MOVE SC,PM,128:RETURN
    Screen configuration routine. Modifies OS display list in-place to include VSCROL attributes. Incidentally sets GPRIOR, COLPM0, PMBASE and clears PMG bitmap.
    This game was inspired by two great games, Man Goes Down and Downfall.
  6. Xuel
    Last year, I wanted to make an A/V cable for my PAL 800XL that would support S-Video, Composite and Audio. After doing some research I found out that the DIN connector on the back of the 800XL is the same as the one commonly used for MIDI. So I bought a 5 ft MIDI cable from Best Buy and an S-Video plug from Radio Shack. I cut an RCA cable in half. I then proceeded to splice all of these components together to form the Frankenstein A/V cable pictured here:

    I wrote the following text document to help me remember how to hook things up:

    Male MIDI cable from Female Atari DIN connector's view: ------------------------------------------------------ black - pin 3 (Audio Output) shielding - pin 2 (Ground) red - pin 1 (Composite Luminance) yellow - pin 5 (Composite Chrominance) white - pin 4 (Composite Video) S-Video Atari DIN [1] ---------------------------- pin 1 pin 2 Gnd pin 2 pin 2 Gnd pin 3 pin 1 Chroma (right top) pin 4 pin 5 Luma (left top) [1] http://www.wolfpup.net/atarimods/svideo.html
    Here is an image taken from a capture card for the S-Video output:

    Here's one for the Composite output:

    There are similar cables on Ebay sometimes. This one only has composite.
  7. Xuel
    Ransack! is a new game for the ABBUC Software Contest 2014.
    Ransack! was originally written by Peter Scott for the BBC Micro in 1987.
    This version was ported and enhanced for the Atari 8-bit by Jose Pereira and Lyren "Xuel" Brown.

    Game Play Video

    64K RAM
    Space - Start / Bomb
    Trigger - Start / Fire
    Joystick - Left / Right
    Escape - Leave current game
    S - Turn on sound (hiscore screen)
    Q - Turn off sound (hiscore screen)
    Keyboard - Hiscore Entry
    Maintain possession of the best weapons
    Use bombs at opportune moments

    Atari Version Enhancements
    More colors
    Graphics tweaks
    Optimized for 50 FPS

    Peter Scott, original author of Ransack
    xxl for BBC Micro tips
    phaeron for Altirra and VirtualDub
    fox for xasm
    fox for inflate
    Tebe/Madteam for Graph2Fnt
    AtariAge Forums
    Format War
  • Create New...