Jump to content

Search the Community

Showing results for tags 'toolkit'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Atari Systems
    • Atari 2600
    • Atari 5200
    • Atari 7800
    • Atari Lynx
    • Atari Jaguar
    • Dedicated Systems
    • Atari 8-Bit Computers
    • Atari ST/TT/Falcon Computers
  • Gaming General
  • Marketplace
  • Community
  • Game Programming
  • Site
  • Classic Gaming News
  • The Club of Clubs's Discussion
  • I Hate Sauron's Topics
  • 1088 XEL/XLD Owners and Builders's Topics
  • Atari BBS Gurus's Community Chat
  • Atari BBS Gurus's BBS Callers
  • Atari BBS Gurus's BBS SysOps
  • Atari BBS Gurus's Resources
  • Atari Lynx Programmer Club's CC65
  • Atari Lynx Programmer Club's ASM
  • Atari Lynx Programmer Club's Lynx Programming
  • Atari Lynx Programmer Club's Music/Sound
  • Atari Lynx Programmer Club's Graphics
  • The Official AtariAge Shitpost Club's Shitty meme repository
  • The Official AtariAge Shitpost Club's Read this before you enter too deep
  • Arcade Gaming's Discussion
  • Tesla's Vehicles
  • Tesla's Solar
  • Tesla's PowerWall
  • Tesla's General
  • Harmony/Melody's CDFJ
  • Harmony/Melody's DPC+
  • Harmony/Melody's BUS
  • Harmony/Melody's General
  • ZeroPage Homebrew's Discussion
  • Furry Club's Chat/RP
  • PSPMinis.com's General PSP Minis Discussion and Questions
  • PSPMinis.com's Reviews
  • Atari Lynx 30th Birthday's 30th Birthday Programming Competition Games
  • 3D Printing Club's Chat
  • Drivers' Club's Members' Vehicles
  • Drivers' Club's Drives & Events
  • Drivers' Club's Wrenching
  • Drivers' Club's Found in the Wild
  • Drivers' Club's General Discussion
  • Dirtarians's General Discussion
  • Dirtarians's Members' Rigs
  • Dirtarians's Trail Runs & Reports
  • Dirtarians's Wrenching
  • The Green Herb's Discussions
  • Robin Gravel's new blog's My blog
  • Atari Video Club's Harmony Games
  • Atari Video Club's The Atari Gamer
  • Atari Video Club's Video Game Summit
  • Atari Video Club's Discsuuions
  • Star Wars - The Original Trilogy's Star Wars Talk
  • DMGD Club's Incoming!
  • DASM's General
  • AtariVox's Topics
  • Gran Turismo's Gran Turismo
  • Gran Turismo's Misc.
  • Gran Turismo's Announcements
  • The Food Club's Food
  • The Food Club's Drinks
  • The Food Club's Read me first!
  • The (Not So) Official Arcade Archives Club's Rules (READ FIRST)
  • The (Not So) Official Arcade Archives Club's Feedback
  • The (Not So) Official Arcade Archives Club's Rumor Mill
  • The (Not So) Official Arcade Archives Club's Coming Soon
  • The (Not So) Official Arcade Archives Club's General Talk
  • The (Not So) Official Arcade Archives Club's High Score Arena
  • Adelaide South Australia Atari Chat's General Chat & Welcome
  • Adelaide South Australia Atari Chat's Meets
  • Adelaide South Australia Atari Chat's Trades & Swaps
  • KC-ACE Reboot's KC-ACE Reboot Forum
  • The Official Lost Gaming Club's Lost Gaming
  • The Official Lost Gaming Club's Undumped Games
  • The Official Lost Gaming Club's Tip Of My Tounge
  • The Official Lost Gaming Club's Lost Gaming Vault
  • The Official Lost Gaming Club's Club Info
  • GIMP Users's Discussion

Blogs

There are no results to display.

There are no results to display.

Calendars

  • AtariAge Calendar
  • The Club of Clubs's Events
  • Atari BBS Gurus's Calendar
  • ZeroPage Homebrew's Schedule

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Website


Facebook


Twitter


Instagram


YouTube


eBay


GitHub


Custom Status


Location


Interests


Currently Playing


Playing Next

Found 1 result

  1. In the 80's I wrote many tools to manage binary files, in order analyze them (see the XEX file structure), join them (insert a splash screen), remove portions from them (remove a slash screen), split them, reallocate them (load in another address), squeeze them (extracts runs of zeros to reduce file size), refill (removes headings and puts heart bytes, usefull for Mac65 assembies), change the loading sequence of the chunks, remove headers and get just a block of data (or picture to edit), etc. Those mini tools were all written in Atari BASIC and a set of USR routines to perform "fast I/O" (the same as BGET and BPUT from TBXL). During the recent years, I've been writing some simple scripts to perform some of those things directly from my PC, just to manage XEX file quickly in the same way I did before, but without having to setup an ATR and loading my tools in an emulator. Some days ago, I decided to merge all those tools in a single one, and XEX Filter toolkit was born. "xex-filter.pl" is a small script written in perl language, and runs on any machine with the perl interpreter installed (no special modules are required). It might be a linux box (perl is native there), Windows (with Strawberry Perl or ActivePerl) or Mac. It don't have a GUI, it just works in the command line, and there are many options to combine and apply one or more actions to a file or set of them and get a new one. Running it without parameters shows the following help: xex-filter version 1.5 (2020-01-11) Copyright (c) 2020 by Victor Parada <https://www.vitoco.cl/atari/> Usage: xex-filter.pl [-option ...] [--] FILE1.XEX [FILE2.XEX ...] Options: -c c1,c2-c3,... Chunks list to select in process -s a1,a2-a3,... List of addresses where to split chunks -e a1,a2-a3,... List of memory addresses for data extraction -a a1,a2-a3,... New address list to assign to output chunks -z max Max number of bytes to fill between chunks -r Removes zeros if there are more than 4 in a row -d Writes data without address pointers or header -b Reads input as a single chunk of data at address $0000 -f Fix corrupt files by filling or discarding data -m Makes a memory map with the selected chunks -o NEW.XEX Output file (mandatory for -c -s -e -a -z -r -d and -m) Addresses between 0 and 65535 or in $hhhh format. Use "-" for a range. The most simple usage is just giving it a path to an XEX file, and it will display the file structure. For example, running without parameters over Alley Cat (downloaded from Atarimania) it gives the following report: C:\Atari\XEX-Filter>xex-filter.pl "Alley Cat.xex" Analyzing "Alley Cat.xex"... -: 65535 [$FFFF] (binhead) 1: 708-712 [$02C4-$02C8] (5) PROG/DATA -: 65535 [$FFFF] (binhead) 2: 48724-48920 [$BE54-$BF18] (197) PROG/DATA 3: 48925-48930 [$BF1D-$BF22] (6) PROG/DATA 4: 48938-48967 [$BF2A-$BF47] (30) PROG/DATA 5: 48974-49151 [$BF4E-$BFFF] (178) PROG/DATA 6: 560-561 [$0230-$0231] (2) -> 48724 [$BE54] 7: 708-712 [$02C4-$02C8] (5) PROG/DATA 8: 1024-1097 [$0400-$0449] (74) PROG/DATA 9: 736-737 [$02E0-$02E1] (2) -> 1024 [$0400] 10: 7936-9048 [$1F00-$2358] (1113) PROG/DATA 11: 9053-9056 [$235D-$2360] (4) PROG/DATA 12: 9061-9064 [$2365-$2368] (4) PROG/DATA 13: 9069-9159 [$236D-$23C7] (91) PROG/DATA ... (deleted) 46: 22122-22534 [$566A-$5806] (413) PROG/DATA 47: 22539-24320 [$580B-$5F00] (1782) PROG/DATA 48: 24320-24408 [$5F00-$5F58] (89) PROG/DATA 49: 24416-24471 [$5F60-$5F97] (56) PROG/DATA ... (deleted) 151: 40319-40320 [$9D7F-$9D80] (2) -> 1 [$0001] 152: 40327-40328 [$9D87-$9D88] (2) -> 60 [$003C] 153: 40337-40349 [$9D91-$9D9D] (13) PROG/DATA 154: 40512-40513 [$9E40-$9E41] (2) -> 255 [$00FF] 155: 40526-40530 [$9E4E-$9E52] (5) PROG/DATA Clearly it was squeezed (zeros were removed), so we can restore them adding up to 128 zero bytes between chunks: C:\Atari\XEX-Filter>xex-filter.pl -o ALLEYCAT.XEX -z 128 "Alley Cat.xex" Analyzing "Alley Cat.xex"... ... (same info than before removed) Writing "ALLEYCAT.XEX"... -: 65535 [$FFFF] (binhead) 1: 708-712 [$02C4-$02C8] (5) 2: 48724-49151 [$BE54-$BFFF] (428) 3: 560-561 [$0230-$0231] (2) 4: 708-712 [$02C4-$02C8] (5) 5: 1024-1097 [$0400-$0449] (74) 6: 736-737 [$02E0-$02E1] (2) 7: 7936-24320 [$1F00-$5F00] (16385) 8: 24320-40349 [$5F00-$9D9D] (16030) 9: 40512-40530 [$9E40-$9E52] (19) 32988 bytes written Adding more than 128 bytes would also fill OS data between the splash display list pointers at address 560 and the color registers at 708-712, but some more zeros were required to fill the gap between address 40349 ($9D9D) and 40512 ($9E40), that can be also added with this tool if the splash screen is removed before and added again after the fill, with thi commands (output info omitted): C:\Atari\XEX-Filter>xex-filter.pl -o ALLEYCAT-splash.XEX -c 1-6 ALLEYCAT.XEX ... C:\Atari\XEX-Filter>xex-filter.pl -o ALLEYCAT-game.XEX -c 7-9 ALLEYCAT.XEX ... C:\Atari\XEX-Filter>xex-filter.pl -o ALLEYCAT-game-filled.XEX -z 1000 ALLEYCAT-game.XEX ... C:\Atari\XEX-Filter>xex-filter.pl -o ALLEYCAT-new.XEX ALLEYCAT-splash.XEX ALLEYCAT-game-filled.XEX ... What it is strange is that there are 2 chunks that overlaps at memory address 24320 ($5F00), and it could also be analyzed with this tool by splitting the file at that byte and running it to display the resulting XEX structure: C:\Atari\XEX-Filter>xex-filter.pl -o ALLEYCAT-split.XEX -s $5F00-$5F00 ALLEYCAT-new.XEX ... C:\Atari\XEX-Filter>xex-filter.pl ALLEYCAT-split.XEX Analyzing "ALLEYCAT-split.XEX"... -: 65535 [$FFFF] (binhead) 1: 708-712 [$02C4-$02C8] (5) PROG/DATA 2: 48724-49151 [$BE54-$BFFF] (428) PROG/DATA 3: 560-561 [$0230-$0231] (2) -> 48724 [$BE54] 4: 708-712 [$02C4-$02C8] (5) PROG/DATA 5: 1024-1097 [$0400-$0449] (74) PROG/DATA 6: 736-737 [$02E0-$02E1] (2) -> 1024 [$0400] 7: 7936-24319 [$1F00-$5EFF] (16384) PROG/DATA 8: 24320-24320 [$5F00-$5F00] (1) $00 "00000000" 9: 24320-24320 [$5F00-$5F00] (1) $10 "00010000" 10: 24321-40530 [$5F01-$9E52] (16210) PROG/DATA Hum!!! Looking at chunks number 8 and 9, we can see two different values for the same memory location. A bug from the packager? As it normally loads sequentially, we can remove the first one at chunk 8 and merge chuncks 7, 9 and 10, and also move the startup routine and RUNAD pointer to the end of the file, all this steps in one command: C:\Atari\XEX-Filter>xex-filter.pl -o ALLEYCAT-final.XEX -z 0 -c 1-4,7,9-10,5-6 ALLEYCAT-split.XEX Analyzing "ALLEYCAT-split.XEX"... -: 65535 [$FFFF] (binhead) 1: 708-712 [$02C4-$02C8] (5) PROG/DATA 2: 48724-49151 [$BE54-$BFFF] (428) PROG/DATA 3: 560-561 [$0230-$0231] (2) -> 48724 [$BE54] 4: 708-712 [$02C4-$02C8] (5) PROG/DATA 5: 1024-1097 [$0400-$0449] (74) PROG/DATA 6: 736-737 [$02E0-$02E1] (2) -> 1024 [$0400] 7: 7936-24319 [$1F00-$5EFF] (16384) PROG/DATA 8: 24320-24320 [$5F00-$5F00] (1) $00 "00000000" 9: 24320-24320 [$5F00-$5F00] (1) $10 "00010000" 10: 24321-40530 [$5F01-$9E52] (16210) PROG/DATA Writing "ALLEYCAT-final.XEX"... -: 65535 [$FFFF] (binhead) 1: 708-712 [$02C4-$02C8] (5) 2: 48724-49151 [$BE54-$BFFF] (428) 3: 560-561 [$0230-$0231] (2) 4: 708-712 [$02C4-$02C8] (5) 5: 7936-40530 [$1F00-$9E52] (32595) 6: 1024-1097 [$0400-$0449] (74) 7: 736-737 [$02E0-$02E1] (2) 33141 bytes written There are many more tricks that could be done with this tool, and I've attached it here to share it with the community. Depending on the machine where this script will run, it might be needed to change the first line to any of the following lines: #!/usr/bin/perl #!/bin/perl #!/usr/local/bin/perl #!/usr/sbin/perl Bug reports, feature suggestions and any kind of comments are welcome! Have fun! ++vitoco xex-filter.pl
×
×
  • Create New...