Jump to content

Stephen

+AtariAge Subscriber
  • Posts

    12,716
  • Joined

  • Last visited

  • Days Won

    22

Blog Entries posted by Stephen

  1. Stephen
    After much trouble, I now have a few working CP/M disks. I will detail the process of getting images from the internet to a working CP/M floppy in the coming days. For now, I will show how I changed the god-awful colours of the stock Term-80 program.
     
    Here you see the before image. I am running MS BASIC-80 Ver 5.21 on top of CP/M 2.22. This is running on a 64kB Z-80 system (the controller of my Indus GT disk drive)

     
    Knowing that the Atari's color registers start at $02C0, I fired up the Term-80 program in Atari Win+ and inspected the word of memory starting at $02C0

     
    I then used my trusty 130XE, MyDOS 4.53, and APE 3.06 to transfer the Term-80 executable to my PC. I loaded it into Notepad++ and jumped to the hex editor. The first four bytes tell me that it is a binary file which loads at $6000.

     
    Here's the cheat-sheet I made, describing the three colour registers I need to change, and the offset into the code (taking the 6-byte header into account).

     
    Knowing the start address of the program, I disassemble RAM starting at $6000. Scrolling down a few pages, I reach offset $AE and see the LDA/STA pair that sets the cursor colour (PCOLR0). This means I need to change the byte at offset $B4 in the hex-editor.

     
    After the three bytes have been changed, the output is much easier on the eyes.

     
    Here is a video of the nasty colour scheme
    http://www.youtube.com/watch?v=ez_hH03VyiM
     
    Now the adjusted output
    http://www.youtube.com/watch?v=RfS_DQeP4fc
  2. Stephen
    Like most projects, I needed a mem clear routine. Standard Atari BASIC rev.C running a simple for-next loop takes a whopping 4.76 seconds to clear 768 bytes of RAM. This is unacceptable. Below is a 25-byte relocatable routine meant to be called via USR. It takes 2 parameters and is called via X=USR(1536,32768,3). 1536 is where I currently have it (page 6). Since I only need it upon initialization I will overwrite it. It would be just as easy to put it in a string, and call via X=USR(ADR(STRING$),32768,3).
     
    Parameters:
    1st is a 16-it number, used to hold the starting address of RAM to clear. Must be page aligned
    2nd parameter is a 16-bit number, used to hold the # of pages to clear. hi-byte discarded so 255 is max. Don't do it, you'll crash the box!
     
    This will clear the same 768 bytes in 7749 cycles, which is .004 seconds! Execution time grabbed via an AtariWin800Plus 4 trace file. Not a bad improvement. The only thing it requires is 25-bytes for code and 2 zero-page variables while executing.
     

    ;Original create date 01/06/10 - This is assembled to "MEMCLEAR.OBJ" ;This will be called from a USR function ;1st parameter is # of parms (1 byte) ;2nd parameter is STARTing page of mem to clear (2 bytes hi-lo) ;3rd parameter is # of pages to clear (2 bytes hi-lo) ;E.G. X=USR($600,2,3) ;STACK will contain ;02 - #paramaters ;02 - hi (address to clear - valid is 00 to FF) ;00 - lo (address to clear, will always want this to be 00) ;00 - hi (DISCARD) ;03 - lo (save in X as # pages to clear) ;BENCHMARK - according to a tracefile (A800Win+) clearing 3 pages of RAM ;takes 2326 instructions, 7749 cycles, .004 seconds ;Atari BASIC loop takes 4.76 seconds (acording to $13,$14) ;ASM version is 1,192 times faster! ;Equates MEMTOCLR equ $CE ;$CE and $CF will contain the address of RAM to clear org $0600 ;This code will be overwritten once used ;since calling from BASIC, clear stack and set up variables pla ;clear # parameters from stack pla sta MEMTOCLR+1 ;hi-byte pla sta MEMTOCLR ;lo-byte pla ;discard since we can't clear more than $FF pages pla tax ;# of pages to clear ;stack is clean, variables set, now do the work lda #0 ;so we can clear RAM ;# of pages to clear has been preloaded in X L2 ldy #0 ;will be our countdown timer L1 sta (MEMTOCLR),y ; dey bne L1 ;when we fall through to here we have cleared one page inc MEMTOCLR+1 ;prepare to clear the next page dex ;decrease page counter bne L2 ;if not zero, jump back and clear another page rts ;All done - return control to BASIC
     
    Attachment is a ZIP file (so it remained a binary). UnZIP and you have the object version. Read it into BASIC to call from USR or better yet, ream & import to a string.
     
    Stephen Anderson
  3. Stephen
    Starting to take shape now - here's hopefully the final video with static background. I am still experimenting to see how much data I can throw at the screen during VBI and still maintain 60FPS. I am going to have to scale the video RAM way down from where it is currently, as 2048 bytes is too much I initially planned for 1024, this should work.
     
    No details, just a quick preview of the working score system (2 variables hold the score, deferred VBI handles the rest).
     

  4. Stephen
    I know this has been discussed quite a bit previously. Just wanted to get some pictures. The output is from two different NTSC 130XEs via a separate Y/C (s-vid) cable. One of the machines is completely stock, the other has the full super-vid mod as well as removal of the RF modulator. The TV is a Dynex 22" LCD 720p.
     
    The first issue with modern sets is the incorrect de-interlacing of the A8 signal. Every other frame is dropped by a scanline. This makes sense due to the fact that the A8 is not sending an interlaced signal - every frame is exact and also an even # of lines. Another side effect is the display only gives a 30Hz screen update. There is no flicker in "page-flipping" modes, but the downside is straight lines are not.
     
    This is a screenshot of FlickerTerm. Note the staggered line which should be straight.

     
    The other thing to note is the terrible vertical banding.

     
    Here's where it gets interesting. When I bring up the help screen, the border changes to the same color as the main screen. The vertical banding disappears. Unfortunately, this does not happen in BASIC just by setting the screen & border to the same color. FlickerTerm must be doing something to the display list.

     
    Here is another shot of the banding when using the TV's s-video input.

     
    This is the same system running through my scan doubler into the VGA input. It suffers the same "stagger" effect in FlickerTerm but the banding is much much less prominent.

  5. Stephen
    Paddle read code is now working. On my real machine, there is a one pixel "jitter". I will add some simple code to fix this. Bounds checking is still needed.
     
    Both paddles are read and the objects repositioned in a quick 193 cycles. Video was recorded using Altirra. Both paddles are movable, but Altirra seems to only support one.
     

  6. Stephen
    Woofer cutout - that's an 11" square with 3" corner radii.

    There's the port, 14.5" X 2" X 16.75". Sides and bottom of box is used to form the port.

    Finally ready to make the woofer cutouts.

    It's starting to look like a box now.

    Close-up of opening, showing the port. Note all panels sit inside dados and are completely sealed.

    Another front shot.

    Holes are drilled for the eight #10-32 T-Nuts.

    The T-Nuts press in easily with this heavy duty 3" c-clamp.

    All pressed in. This woofer will be held firmly and can be removed without damaging the box.

     
    All that's left is some minor Bondo along the edges / joints and stretching the black carpet. The subs will be wired as a single 2ohm load (each sub has dual 2-ohm voice coils).
  7. Stephen
    OK, here are some work-in-progress shots of the subwoofer box. Some quick specs:

    2 cubic feet per side
    14.5"x2"x16.5" port
    MTX TS5512-22 (12" square 600Watts RMS, they will be getting 493 watts RMS each via an MTX TS8001 class D monoblock - I'll post a scan of the spec sheet showing the tested RMS output)
    Box is made from 3/4" hi-density particle board (about 75 pounds per 4X8 sheet).
    Non dadoed joints use multiple #20 biscuits. Combination of wood glue, PL-400, #8 2" screws, #20 biscuits and staples hold the beast together).

     
    Custom box, 2 cubic feet per side, with a 14"x2"x16.75X port.

    Back, bottom, and side. Dados partially cut.

    Big front baffle board. All gaps will be filled with bondo before stretching the carpet.

    Right side of box (box will get yellow glass insulation on all panels). Port not installed.

    Side panels and inner baffle, no dados for the ports yet.

    Side view.

    Dados in the side panels and inner baffle.

    Dados to hold and help seal the big rectangular ports. Side benefit will be box reinforcement.

    Side view.

    Slots for the three #20 biscuits that will hold the L-shaped rectangular port together.

    Inner shot of L-port.

    L-port clamped for a long drying cycle.

    All the pieces for the box, just begging to be assembled.

    Here's two shots of the big bastards.


    That's all for now. Next post will show how I got to fully assembled box.
  8. Stephen
    The time has finally arrived, I am building my dream Atari. It started as a very yellowed PAL 130XE[picture needed]. I while back, I purchased one of the EPG Jr. machines. That was kind enough to donate its case & keyboard[picture needed]. It is 100% unyellowed and almost completely dust free. I haven't even brushed it off yet. It does have some scuff marks from the straps that held it in the rack. Also, one of the alignment tabs is busted off the back of the case. This will not be an issue, because I have an ECI+CART to PBI adapter that will be used to hook up a Speed Drive . I will Retrobrite the nasty case & keyboard one of these days. I'll be adding the stiffer key cups to it (although later this post I'll explain why that won't really be necessary).
     
    Here I will detail my installation of candle's wonderful IOBoard, SimpleStereo, and VBXE2. Future upgrades will be 1MB SIMM and Internal SDX + 4-in-1 OS.
     
    Step 1 - Here is the mainboard before I touched anything. I do not know what the "mod or fix" is. It was there when I got the machine along with a 2-in-1 OS which I removed in preparation for the internal SDX mod.

     
    Step 2 - Always flux top and bottom before desoldering. I place the board in a vise, heat from the top (angle a fine tip iron against the IC pins touching close to the PCB but being careful not to overheat the board. This will be evident if the PCB turns white or if you gouge the tip in the board. Worse yet, you can lift a trace or rip out a barrel. Patience is the key here. (LOL at misspelled picture name)

     
    Step 3 - The following pictures will show how clean these boards must be before attempting to remove the ICs. What is not shown here is that even after seeing all that light through the pins, I still used a few inches of thin solder braid and carefully freed all 40 pins one at a time before putting an ounce of pressure on the chip. When done correctly, you can turn the board over and tap it, and the chip will fall out. Anything more than that on the majority of XE series PCBs and you will be running wire jumpers to fix the damage. We'll not go into details of why I know this. For these mods, I had to desolder the ANTIC and PoKey chips.
     
    PoKey:
    I removed PoKey first.
    Top of mainboard :

    Bottom of mainboard :

    Before inserting the machine pin socket, the board was cleaned off, and refluxed.

    Note how straight and clean all the pins are. This is very important as the Simple Stereo board uses precision machine pin sockets.

    With the nice socket in place, clean all traces of flux then replace PoKey and test the machine. I loaded Ice-T XE and logged into Darkforce BBS which was a good indication that all was well.

     
    ANTIC:
    Here the top 20 pins have been sucked. As clean as they look, I still refluxed and went over with solder braid.

    Same as above, showing the lower 20 pins.

    Bottom view - note that all pins are still touching the barrels. With a dry but CLEAN tip (absolutely no solder or scale), quickly and gently heat then push the pins to the center. This will free them completely without stressing either the pins or the barrels.

    No damage to the PCB or traces - always a nice feeling on these (relatively) fragile boards.
    Top of mainboard :

    Bottom of mainboard :

     
    Here lies the ANTIC. Carefully straighten the pins, remove all flux and when the socket is in, replace the IC and test the machine. Do not proceed until the machine works. You don't want to have to find and fix more than one problem at a time.

    I had a nasty scare after replacing ANTIC and testing the machine. It initially booted up fine but part way into the self test the screen corrupted. Then it wouldn't reboot. I somehow got the diagnostic cart to spit out a memory error and after that, it was dead. After coming here and begging for help, I had to get out the schematics and pin to pin test all 40 connections from ANTIC to their respective destinations (thanks to all who responded BTW). Well, every connection was good as tested from the top of ANTIC. Turns out I had not adequately removed the flux from the top and bottom of the mainboard. After a thorough scrubbing and good drying with compressed air it came back up, bit crashed when hitting reset. The Start key was not responding well either. Turns out the keyboard was acting up. No bother, it was the aforementioned nasty yellow one. After plugging in the minty white keyboard, all was well. I could finally proceed.
     
    Step 4 - Now it's time to mount the IO Board. This will require drilling out the rivets holding the SIO connector to the mainboard. I used a 5/32 drill bit and went SLOWLY! I ran the drill at a very low 200-300 RPMs and used a very nice sharp cobalt drill bit. It went through the soft aluminum rivets like butter. Take care to secure the PCB and don't let the drill "rip" through the board. Slow and steady means no damaged board.


    Once the rivets are out, screw the stand offs in place to secure the SIO connector and also provide the mounting posts for the IO board. [picture needed]
     
    Step 5 - Now it's time to drill the 2 round holes and cut a square hole above the SIO opening (back of the case, lower panel). I made the square hole by drilling a 3/8" hole and then using a square file. Patience is key if you want a decent fit. To get a good fit, you will want to make sure the PCB is properly placed in the lower half of the case WITH the lower shielding in place. Make sure all screw holes are lined up and the two tabs in front fit up through the mainboard. Now place the IO board over the standoffs. I used a very fine tip mechanical pencil to mark out the locations of the audio jack (1/4 inch hole) and the USB port (3/8" hole then several minutes with a square file. Once these two were done the board can go in place. I then marked the opening for the PS2 port. I currently have a 3/8" hole but I am fairly certain I will have to open that to 1/2" to allow the PS2 plugs to fully insert.
    Board is not lined up in this shot. It does fit properly - I promise.

    Nice and compact, this is mounted using the 15mm standoffs.

    I was pleased with the final results. Connectors are as follows (top row L-R is the new stuff): stereo audio, PS2 keyboard since this contains the Dark AKI (keyboard interface), USB (onboard SIO2PC interface). Bottom row is of course, the original fully intact SIO port. Grunge is the last bits of hot melt glue left from when the machine was bolted into the EPG Jr. enclosure. Alcohol usually makes that stuff peel right off.

     
    That's it so far! A note on getting everything to fit. I have the IO Board screwed in place and the lower shield attached to the mainboard. It will then angle down and everything just fits in place. The upper shield will not clear without modifications. It may not go back in since it appears the 1MB SIMM upgrades take a bit of space. Here is the motherboard with the ANTIC socketed, Simple Stereo board in place populated with 2 PoKeys, and IO board firmly mounted.

     
    Excuse any spelling / grammar mistakes. It's late and I really wanted to get this posted.
     
    *** EDIT 05/02/2010 Install Finished***

     
    Notice - the RF modulator has been removed.
    ALSO - wiring has not been glued down to PCB. Everything will be tied down once VBXE2 and 1MB RAM upgrade have been installed.

     
    Here is a look at the back of the case. I still need to open up the PS2 hole in the case and grind down the images around that hole.


     

    Point to Point - 1st draft pics will follow: There are 15 wires connected to the IO board There are 14 wires connected to the SS board Apologies for the lack of formatting - I just wanted to get this up quickly for now There are 6 "cables" that leave the IO Board. Some connectors are shared! SOURCE DESTINATION IO Board: 130XE J21 - dedicated 2-pin cable to dedicated 2-pin Pin 1 Middle pin of power switch Pin 2 Ground plane of RF connector J4 - dedicated 2-pin cable direct to mobo Pin 1 Mobo Data Out (Bottom pad of C304, topside of mobo PCB) Pin 2 Mobo Data In (Bottom pad of C302, topside of mobo PCB) J4 - dedicated 3-pin cable direct to mobo Pin 7 Mobo Command Pin #7 of SIO connector, bottomside of mobo Pin 8 Mobo GND Pin #6 of SIO connector, bottomside of mobo Pin 9 Mobo +5V Pin #10 of SIO connector, bottomside of mobo IO Board: SS Board J3 - dedicated 3-pin cable to dedicated 4-pin plug (at SS board J1 - bottom half is a separate connector - see below) Pin 1 J1:Pin 6 Pin 2 J1:Pin 5 Pin 3 J1:Pin 7 J22 - dedicated 2-pin cable to shared 4-pin plug (at SS Board J3 Top Row, pin 6 = open, pin 12 goes to mobo A7 - see below) Pin 1 J3:Pin 8 Pin 2 J3:Pin 10 J2 - 3-pin cable to 9-pin plug (at SS Board J3 Bottom Row - see below for other connections) Pin 1 J3:Pin 1 Pin 2 J3:Pin 9 Pin 3 J3:Pin 3 There are 3 "cables" that leave the SS Board. Some connectors are shared! SOURCE DESTINATION SS Board: 130XE J1 - dedicated 4-pin cable direct to mobo (4 places) Pin 1 Mobo Start (left leg of R134) Pin 2 Mobo Select (left leg of R135) Pin 3 Mobo Option (left leg of R136) Pin 4 Mobo Reset (top leg of R40) J3 (Top Row) - shared 4-pin cable (see above) direct to mobo Pin 12 Mobo A7 (Freddie pin 15) J3 (Bottom Row) - shared 9-pin plug (3 to IO board, 3 to mobo, 3 empty - SEE ABOVE) Pin 5 Mobo mono (top leg of R10) Pin 7 Mobo GTIA (bottom leg of C23) Pin 13 Mobo A4 (Freddie pin 12)
     
    Stephen Anderson
  9. Stephen
    Back seat - looks great but there is no "back seat" room like in the good old days

    It takes a big hole (1.250 inches) to install a 1/0 gauge plug!

    A before shot.

    The aforementioned 1/0 plug (prevents chafing which is a good thing!)

    Bad ass + battery terminal. 1/0 gauge is for the stereo feed, twin 4 gauges are for the factory starter / main harness feeds.

    Lots of copper here!

    Big fuse holder!

    Big fuse!

    Battery (don't worry - it was cleaned before I put the new stuff in place).

    This is where the main power feed will be routed.

    Main power feed in place, firewall bushing in place.

    Another shot of the firewall bushing. I won't describe how tight this is

    Nicely hidden under the pretty but non-functional back seat.

    Clean battery (the battery has since been replaced)

    Major panel removal required for the new Infinity 6X8 3-ways.

    Close up of the Infinity 6X8 (there are 4, each being hit with 125 watts RMS (real MTX watts, full bandwith with 0.07% distortion. None of these bullshit "import" watts.)

    Tiny holder above my center console. The only way to screw these in was to weld the nuts to the brackets.

    Front view, obviously without pots & knobs.

    Back view - big holes drilled for the controls to fit.

    Center console on the bench. Note the big holes (this is why the entire console was removed)!

    Test fitting on the bench.

    Now to the back of the car. Remote turn on (blue), 4 speaker-wire bundle, RCA cables, level controls, 1/0 guage power cable (left to right).

    Wires routed under carpet and on different sides of the e-brake (never put power & signal wires on a parallel run)!

    Missing radio & center console.

    Sirius module for my Kenwood head unit. Cool fact - uses the same 13-pin DIN as the ST's monitor cable.

    Short throw shifter. Nowhere near as kick ass as my custom built unit in my 87 Daytona Shelby Z

    Tiny narrow ass "trunk". Even my 94 Sundance had several more inches width.

    All back together. Yellow thing is my USB stick (MP3s for the head unit).

    Back to the front of the car now. Before shot of the factory dashboard.

    Custom Speedhut EL panel.

    This took half an hour.

    Sure looks good in place!

    Looks even better when lit up.

    Full night time action. Clock has not been set, and I have not yet found a way to change the LCD color. It's a clear light bulb behind the glass panel.

     
    Well, that's all I have so far. Next steps include installing both amps, both 1 Farad caps, and building the custom enclosures for subs and amps. Pics will of course follow.
     
    Stephen
  10. Stephen
    I usually don't post a video of something that is not working, but oh well - it's been a while, and I was finally able to put in some time. The ball (missle 3 to be precise) motion is done in the Immediate VBI. It's not working 100% just yet, but masking works, and the motion mostly works.
     
    http://www.youtube.com/watch?v=44tRcZQdNh4
     
    I might try swapping the "optimized" ball move code for the regular paddle move code, and see if it works any better. I am trying to save every cycle possible, but I guess I need it working before it works in the shortest time possible
  11. Stephen
    So I had my immediate mode VBI routine running. It is a very simple VBI, the first thing it does is synchronize my DLI code to the top of the screen (see DLI Blog). Then it reads a single joystick and moves the player horizontally. However, the VBI runs at 60Hz and my player position only needs updated at 30Hz. The solution is quite simple. The code is below, with some notes below that.
     

    ;12/29/09 - This is assembled to "VBI.OBJ" ;Assembled using MADS 1.8.8 build 2 (5 Jul 09) ;EQUATES SETVBV equ $E45C ;Immediate VBI STICK0 equ $D300 ;Joystick 0 hw reg HPOSP0 equ $D000 ;Hardware Player 0 pos XLOCP0 equ $00CC ;mem loc to hold HPOSP0 (cannot read it back) TIMR30 equ $00CD ;toggles between 0,1 to give a 30Hz interrupt org $0600 lda #$00 sta $200 ;Synchronize top DLI lda #$B2 ;with code at $B200 sta $201 ;The DLI will then walk itself down screen ;The joystick read routine must only run at 30Hz but the VBI runs at 60Hz. ;Declare a zero-page variable, set = 1 before starting the VBI! ;Pseudo-code below ;if (TIMR30 == 0) ; Readstick(); //this ends with a TIMR30--; ;else ; TIMR30 = 1; //Now jump to DLI exit code lda TIMR30 bne RdStk ;Read the joystick every other frame lda #1 sta TIMR30 ;Reset TIMR30 so we read it on the next frame jmp Exit ;Joystick read routine begins RdStk lda STICK0 and #4 ;is Bit 3 set beq Left lda STICK0 and #8 ;is Bit 4 set beq Right bne Done Left lda XLOCP0 ;get the value cmp #$50 ;minimum HPOS bcc Done dec XLOCP0 ;move it left lda XLOCP0 sta HPOSP0 ;make the move jmp Done Right lda XLOCP0 ;get the value cmp #$A2 ;maximum HPOS bcs Done inc XLOCP0 ;move it right lda XLOCP0 sta HPOSP0 ;make the move Done dec TIMR30 ;set to zero so we skip it on the next frame ;Joystick read routine ends Exit jmp $E45F ;hit vector for deferred VBI ;run this code to set the Immediate VBI vector ;AFTER the above code is loaded Init pla ;since calling from BASIC, clear stack ldy #$00 ;lo-byte ldx #$06 ;hi-byte lda #$06 ;Immediate VBI jsr SETVBV ;"inject" code into immediate VBI rts ;All done
     
    Several things to note:

    Certain memory locations will definitely change before code is finalized
    Currently the game framework is being coded in Turbo BASIC XL 1.5 with lots of assembly routines
    In order to setup and enable this immediate mode VBI, perform the following steps IN ORDER
    Load the assembled code at $0600
    ? USR($0647) will inject this code (see the "Init" section above )
    Since I am leaving the OS enabled, the VBI will begin (or crash) immediately
    [*]Code to read / respond to the trigger is not currently in place
    [*]It is a bad idea to leave the "Init" routine dangling at the end of the VBI code block. Any changes to the VBI code cause its address to change which means I have to change the location I pass to the USR routine. This is just one of the many things that will be fixed during the development process.


     
    Stephen Anderson
  12. Stephen
    First time I have ever taken a non-converting image, and fixed it, such that a suitable conversion is possible.

    Before I reduced the detail in "certain" areas, this is the best result. Note the terrible tell-tale "horizontal banding".


    Seeing that the image was struggling with two specific areas, I went in and removed most of the detail. Below will detail the before and after images.
    Reduce the image to indexed 8-bit colour, using an Atari palette file (in this case, I used the default palette from Atari 800 Win+). I chose to use no dithering at this stage I went in highly zoomed, and reduced problem areas down to basically 4 colours. This freed up additional colours for detail and completely eliminated any horizontal banding.

    Before:


    After:


    Here's the final conversion:

    Stephen_LaSexorcisto.xex


  13. Stephen
    Screenshot:

     
    Feature List:
    Place any 768 byte RGB palette in the Palette directory, and they are available upon program launch.
    Optional debug files during conversion (HUE & LUM files).
    Optional dithering (currently, Floyd-Steinberg (4 pixel error diffusion) and Burkes (7 pixel error diffusion)).
    Ability to select multiple files and batch convert. When doing this, the description which gets added to the BGP header is automatically entered (the filename of the original file is used).
    All images are now correctly scaled while maintaining the proper aspect ratio. Images are centered and when necessary, either letter-boxing or pillar-boxing is added.
    The colour applied to letter-boxing is now configurable. If an invalid hex value is entered (MUST be RRGGBB, 00 to FF), black is assumed.
    TODO:
    Finish error trapping for all possible errors
    Proper UI
    Consider additional dithering algorithms
    Implement CEIDE2000 colour matching

    Change Log:Change Log:1.0.5085.38189 (12.03.2013) BUGFIX: Further testing showed that the horizontal image size must be a multiple of 4.1.0.5084.39545 (12/02/2013) BUGFIX: When not using auto-letterboxing width is locked to even numbers ADD: When auto-letterboxing, the colour is user selectable. If an invalid number is entered, Black is used.1.0.5083.28693 (12/01/2013) ADD: Widescreen Playfield option (88 Pixels Wide, 80 Pixels Narrow) ADD: Auto Letterbox option. - When off, images are auto-sized with aspect ratio preserved. This results in a "short" side. The BGP viewer automatically centers the image. Shorter file sizes are generated using this method, therefore it is the default. - When on, images are hardcoded to either 88 or 80 * 239 pixels with appropriate letter/pillar-boxing done to center the image. Result8ing files are always 19kB (plus optional description which may be up to 64kB).1.0.5076.5212 (11/24/2013) BUGFIX: After images have been converted, list is cleared BUGFIX: Error in Floyd-Steinberg Dithering ADD: Burkes Dithering1.0.5075.35411 (11/23/2013 Initial Release) Test Version for AA.zip
  14. Stephen
    Taking a break from my main A8 project which shall remain unnamed (since I fear it may take years to finish). Trying for something a lot more simple to start, but with huge ambitions.
     
    My DLIST is broken - the LMS locations are not set correctly. I have a TBXL program which makes the DLIST for me which needs debugged. I do however have the many DLIs working.
     
    Since it's always great to have a stable screen and interrupts that don't crash the machine, I figure a screenshot is in order.

     
    Bedtime. I'll resume work this weekend.
     
    *** EDIT ***
    OK - I was able to debug the display list, and made a simple repeating pattern to show the layout. I have a 64*64 pixel grid to work with. However, only 64*32 are addressable because the lower half of the screen is simply a mirror image to save memory.
     
    Next on the TODO list is try using players to mask the wide borders (I am using narrow PF, GTIA 9).
     

  15. Stephen
    The left and right borders are now masked. I am using Player 0 and 1 both in quad-width for this.
     
    I have the leftmost & rightmost addressable pixel at full brightness, with player 0 asking the left border.

     
    Here I am using Player 0 to mask the rightmost border. It let me find the proper position.

     
    Now both borders are being masked using Players 0,1.

     
    Same as above just showing a different pattern.

     
    Next thing to do is go hunting for my paddle controller. No digital controls in this game
  16. Stephen
    OK, I got my first attempt at reading a paddle and vertically moving a Player/Missile object done in assembly. It runs in the VBI. As you will see in the video, if the paddle is moved too quickly, the old "bat" is not erased properly. I have a new move routine which will solve this coded on paper. I hope to test it tomorrow. I also need to implement bounds checking in order to keep the bats on the colored playfield.
     

     
    I am pleased with my progress so far.
     
    Stephen Anderson
  17. Stephen
    "Real life" responsibilities be damned, 5 months away from A8 coding is enough. Work resumes! The video needs annotations, but it is late.
     
    Basic explanation:

    GTIA mode 9 bitmap
    Narrow playfield
    DLI every 3 mode lines
    Players 0 and 1 in quad width, black mask the borders
    Players 2 and 3 in single width are the "bats"
    Missile 0 and 1 are not used
    Missile 2 is the net
    Missile 3 is the ball
    $800 bytes screen RAM
    64*64 independently addressable pixels
    Score will go from 0 to 9
    Score is blitted and ORed with background in VBI
    Paddles are read in VBI
    Ball animation is a simple loop just to show motion
    No game logic, collision detection or sound yet

     

     
    The video shows some of the tricks used. I move the player masks, turn off the DLIs, turn off GTIA mode. Nothing spectacular yet.
  18. Stephen
    I can't type on anything but a nice buckling spring Model M style keyboard. I have been using Focus 2001 keyboards since 95. I found this old one from 1997 and decided it needed cleaned up.
     
    There is some drastic yellowing - I am getting the stuff to try my first Retrobrite this week.

     
    Notice the age of this keyboard. AT lpug (will be changed to PS/2) and there is no Windows key!

     
    A good scrubbing has removed all of this dirt from the keys (not shown).

     
    Here you can see the drastic top side discoloration even after a good scrubbing.

     
    All of the clean key caps have been removed and each row placed in a separate bag.

     
    The feet are missing - I will have to make new ones

     
    Each ALPS switch has been scrubbed and blown dry with compressed air.

     
    A nice contact cleaner with residual lube will get sprayed into each switch before reassembly.

     
    Hopefully I can secure all the necessary chemicals this week. If this turns out nicely, I have a 130XE, 520ST, and 1040ST to do next.
     
    Stephen Anderson
  19. Stephen
    OK - I am getting better at making CP/M disks, so I hope to get my better camera setup this weekend, and post a nice tutorial.
     
    For now, we'll go WAY back in time to 1978. Here are some screenshots of MicroPro's WordMaster 1.07a.
     
    Here's a DIR of the WordMaster disk. The "PIP PRN:=*.ASM" commands copy files to the printer (a Panasonic KX-P2134 24-pin dot matrix, hooked up via an MPP 64kB print buffer / Parallel to SIO interface). CP/M has the convention of Destination, Source (not the now familiar Source, Destination). It is rather confusing.

     
    Help Screen 01

     
    Help Screen 02

     
    Help Screen 03

     
    Help Screen 04

     
    ---------------------------------------------------------------------------------------
    Here is the much more advanced WordStar 3.0 from 1981. In this video, I first use the Indus GT's CP/M specific program ICDS.COM. It allows copying between two drives, and is compatible with the ATARI DOS double-density (180K) disks. I am copying an assembly language file over to the Indus, because the native drive is much faster than the Atari drive running through the SIO port. Once the file is copied, I launch WordStar, open the file, and scroll through it.
     
    http://www.youtube.com/watch?v=Z21kW0uQOyE
     
    The terminal is quite slow. This 80 column version uses an Antic F screen (BASIC graphics mode 8 ). This means it is in bitmap mode. I am in the process of disassembling the file, but it will take me quite some time as it's my first, and there seems to be several sections of data inline with the code.
  20. Stephen
    This is a very early work in progress. I hope to have some more time to work on this towards the end of December. I may wait to work on it until after I receive my Turbo Freezer though. I cannot run CP/M from an emulator, but currently the only ROM based monitor I have in the Atari requires a reset to activate it, and that wipes out the term program. I can at least get some text on the screen and do a mem dump.
     
    Here is a memory map
    $1100-$2EFF ($1E00 bytes Screen RAM)
    $3610-$3708 ($F9 bytes DLIST)
    $6000-$6922 ($923 bytes code)
    Data / memory buffers
    $6174-$6233 ($C0 bytes)
    $6329-$6368 ($40 bytes)
    $66A8-$66D7 ($30 bytes)
    $6777-$67AA ($33 bytes)



    Here is the table of jumps and the # of times each is called, sorted by Jump Address
     
     
     
    Here is the Immediate VBI routine
     
     
     
    Here is the Display List
     
     
×
×
  • Create New...