Downloads

Operating systemOfficial version 0.05 (01.11.2018)Version 0.06 "ASE" preview v2 (13th of November 2018). Download this! Do it!Comments
Windows 64 bitDownloadDownloadExtract and click on trse.exe. Configuration file will not be overwritten.
OS X DownloadDownloadExtract and copy the trse app into Applications. Tutorials can go anywhere.
Linux 64 bitDownloadDownloadExtract and run trse.sh
SourceGithub linkGithub linkBuild latest version from scratch using Qt. Readme.md for instructions.

A note on linux: In order to use the dasm compiler, which is only 32-bit, you need to add support for 32-bit architecture on your system (or just use the built-in assembler). In order to make vice work, copy and paste these instructions to a terminal.

A note on compiling the tutorial burger game: You need to have exomizer turned on in order for the game to compile.

Version 0.06 (Target: Dec 15th 2018 xmas edition)

Changelog

Color syntax: Planned, Implemented, Cancelled/postponed

  • Compiler
    • CopyRect( address, block width, block height,  dest_hi addr, dest_x, dest_y, copyColors) : Copy raw charset data to a rectangular block of width/height at dst_x/dst_y including color data.
    • RasLib+alternate include directories + settings
    • Vic20 & C64/128: “Fake sprite” handling. Copying 2×2 subset charset to 3×3 block of data etc.
    • Stable raster wedge system. Get stable rasters just the way you use regular rasters at almost no extra cost! Compensates for bad scanlines etc.
    • Simply write Nop( 3 ); to get 3 of those delicious nop’s in a row
    • Added OrgAsm assembly opcodes: txs, tsx, nop
    • Technical stuff: I’ve separated the abstract syntax tree from the compiler. These have up to now been tightly linked, but I wanted a hard separation from the AST and the type of processor that is compiled for. This is due to the fact that I might add support for other processors in the future.
    • It is now possible to change the default address for built-in initialization methods (random, irqs, maths etc) through a define : @define BuiltinMethodsLocation $3000. Useful on the VIC-20.
  • VIC-20
    • Added support for mod2vic (modfile conversion and  playing of music files) with tutorial.
    • Native VIA IRQ timer methods (for playing music continuously, updating demo framework etc).
  • IDE
    • Image editor
      • Added support for importing C64 built-in character ROM (by just clicking a button)
      • Completely new Animation image type : Draw screens of petscii / whateve charset images, save as compressed movie and run in example program! Here running on the VIC-20
      • Bugfix: Charset didn’t show all 255 chars, stopped at $ef. Fixed.
      • ASCII/Petscii Animation : import .c image files
  • Tutorials
    • Absolute beginners guide to C64 programming with TRSE
    • Sprite multiplexer
    • Tutorial 27 (C64): Stable wedge rasters
    • Tutorial 5 (VIC-20): Animation example
    • Tutorial 6 (VIC-20): VIA interrupt raster example
    • Tutorial 7 (VIC-20): Smooth text scroller (software scrolling)

Version 0.05 Beta (01. 11. 2018, snapshots builds here)

 

  • Now supports rudimentary Vic-20!
    • Vic 20 emulator location
    • Vic 20 first tutorials
    • Vic 20 still lacks lots of the built-in methods that are available for the C64 (sprites, clearscreen, raster interrupt methods etc)
    • Vic 20 tutorials
    • Vic 20 bitmap images + tutorial
  • Rudimentary C128 support
    • A couple of 40-line tutorials with the goold ol’ VIC
    • Some damned 80-column methods for printing text and colour (see above images), including a simple 80-column example
  • OrgAsm:  the new internal assembler. Our very own original assembler, naturally called “OrgAsm“, can be used instead of DASM. All tutorials, current productions etc have been tested and works, but there might still be some bugs out there… so don’t delete your dasm quite yet
  • Exomizer works on C128 and the VIC-20.
  • Compiler
    • ScreenOff / ScreenOn sometimes crashes rasters. Always set bit 7 to 0 now.
    • Sqrt (16 bit) works like a charm!
    • atan2 method
    • log_2 table
    • Optimize (remove) unused variables and procedures (with a warning)
    • Move all zeropage stuff to project settings (instead of global)
    • @Startblock / endblock preprocessor for code as well (and shows in memory analyzer)
    • Both joystick ports support: Joystick(1) and Joystick(2) (instead of only joystick())
    • Internal built-in methods system has been completely rewritten, and uses a tidy list of methods/compatibility/parameter types instead of hard-coded stuff.
    • All tutorials have been updated to use these automated compiler requirements (all parameters are automatically type checked, you cannot write $4000 when you meant ^$4000 anymore, so the compiler is more strict)
    • Preprocessor defines are now more robust, and can contain similar names (like myVar, myVariable, myVar2)
    • Koala image file import/export
    • New help system: All help doc is generated through the new compiler system. Still gotta write individual help for each procedure though. Progress about 10%.
    • Preprocessor “@ignoremethod <methodname>” implemented. Just plainly overrides and ignores including assembly file methods. Useful for Vic20 like not including stuff that you actually don’t need: say you never used 16 bit division, then typing @ignoremethod “init16x8div” will save you a couple of bytes.
    • Include assembly files now compiled as resource, no more “remember to copy this file into this folder” etc
    • Added new post-optimizer that bumps post-optimization to about 2%.
    • Detailed post-optimization settings under “project settings”
    • Temporary variables used in compiler operations are now first chosen from a pool of pre-defined zero pages. If these are empty, regular temporary variables are used. Pool of temp zeropages can be defined in the project settings, default 4 are provided.
    • Optimizer: Parser automatically removes procedures that are never called/used.
  • IDE
    • Completely rewritten the sprite editor
    • Fixed charset selection bug. ugly one. Selecting regular charsets should work just fine now.
    • Fixed crash on trying to build on “recent projects” tab
    • TRSE settings file moved from application folder to user home folder ~/.TRSE/ on linux/os x
    • Rewritten entire document image handler – no more threads – faster response time & fewer crashes
    • VIC-20 bitmap image support (with user-defined width/height)
    • Find File Dialog (ctrl+s) for rapid opening stuff! Nice
    • Exomizer hide footprint (blinking @) in settings
    • “System” settings in project settings (C64, C128, VIC20, NES)
    • Zeropage settings for screenmemory and decrunch, also new internal 4 zeropages for math functions etc (for speed)
    • “# Cycles” text color customization
    • CTRL+T for user-specific command
    • Project settings (as opposed to global settings)
    • Image koala import/export
    • Lots of new optimization settings in the project settings dialog
    • Sprite/charset WSAD stop at x=0 or y=0 (or minmax)
    • Memory analyzer scales with window resize
    • Fix 1×1 editing blocks bug in multicolor mode (not done)
    • Memory analyzer analyzes .prg for zeropage use and checks whether any SID music overlaps with code blocks (in case of zeropage crashing)
    • All changed documents (Images, Ras) will ask for confirmation when closing (save: yes, no, cancel close)
    • Image overhaul: New tab Export/Import, automatically remove tabs that are not used in this context (like “Data” and “Levels” tab on anything but the level editor), text and buttons are tailored to the current image type (so no “flip horizontal”, “2×2 char” on level editor or multicolor image editor, but is on on sprite and charset images)
    • New dank code editor syntax highlighter theme “October
  • Tutorials
    • Reorganizing tutorial folders based on system
    • Some C128 tutorials (8, to be exact). Includes two 80-column examples.
    • DemoMaker: Full tutorial project on how to create a demo with centralized automated scene picker etc
    • DemoMaker online tutorials
    • Vic-20 tutorials
    • C64 tutorial 24: Screen Clearer (demo effect)
    • C64 tutorial 25: 16 x 16 sprite scroller
    • C64 tutorial: 8×2 sprite logo

 

Older versions:

Version 0.04.2 Beta (02.10.18)

  • IDE
    • Rotate image / sprite / charsets. Very simple, goes all trashy if you apply the rotation several times, definitely a non-commutative transformation. Just like Deluxe Paint 2!
    • Charsets can export colors, and level editors support charset-based color selection (halving the size of the levels)
    • Bugfixes in image editor, rewritten the whole grid-thingy
    • Fixed huuuge thread-related bug that sometimes crashes image tabs, especially on linux. Damn threading and the Qt UI library. Actually, it’s probably just me that is a bad baaad coder.
    • Press “C” to set default clear character $20 in the level editor
    • Toggle multicolor/hires charset/sprites in editor
    • Memory analyzer font size can be specified under settings/general
    • Level editor can load both .bin and now .flf files (character sets)
    • Level editor character set now remembered for individual levels in project
    • Data header text displayed for each individual level in project
    • Resize level data does not shift data but keeps block in place.
    • Level editor custom data header text editor
    • Compiler now gives a severe warning if you use memcpy, clearscreen, copy functions etc trying to write to a memory position that is within the code block.
    • Support for changing IDE colors of cycles&background, linenumber & background and current line.
    • Added support for two main window color themes in the settings dialog: dark and light
    • Updated documentation (F1). Should be done more properly, but no time until next release!
    • There’s a button in the image editor that opens a dialog window with shortcut help text (keyboard commands etc, how to zoom/pan images)
    • Fixed yet another kind of bug that crashes the application when image windows are closed
  • Documents
    • New kind of TRSE document: Paw files. Paw files (PAcked whaaat) are simple resource files for automated packing of data. Say that you have a project with 10 binary files (images, level data etc), so you need to compress the data in order to be able to include everything. So every time you change some of these level/image files while developing, you will have to manually calculate where to insert them in your code based on their file size. No more ! With Paw files packed resource manager, all you need to do is create a list of project data that you want to pack at a certain memory posision, specify their decrunching address and just compile.
    • In the example above, 2 images (data+colour) are packed and automatically included at memory position $D000, ready to be uncrunched at their desired address! Include file with memory positions is automatically generated.
    • Example of automatically packed data (levels, images, colour data etc at $D000 and $9900)
  • Compiler
    • Added new memory copy function blockmemcpy(from, to, # blocks) where #blocks implies the number of 256- byte blocks. So in order to copy a $800 byte charset you can type blockmemcpy($8800, $4800, 8); Note: these values must be pure numbers, pointers don’t work. Also, the # blocks number must be pure numeric (patch 0.04.01)
    • New built-in methods: ScreenOff() and ScreenOn(), turning off/on screen while decrunching etc
    • Fixed spriteloc to support constant x values
    • New preprocessor for variables (and perhaps code as well), @startblock $F000 and @endblock to manually locate code/data within block at a memory position
    • Previously, there were jumps before and after procedure declarations. Basically, too many jumps between chains when initializing. Removed all procedure jumps, only 1 in the start of the program that goes to the main code block. about 1% code reduction,
    • New method: SetCharacterLocation( [memory address]); for ease-of use (basically changes $D018). If you have included a character set at $2000, then simply type SetCharacterLocation($2000);
    • Since the introduction of the paw packed system, there is also support for decrunching resources not based only on name – but also on index. Say you have paw-packed and included 10 images, and in the paw settings specified the address variable to be “myPackedAddresses”. You can now use decrunchfromindex(myPackedAddress,i) where i is the index of the resource you wish to unpack! Handy for multiple-image storage etc.
    • Fixed integer constants. You can now say x:=2+5 where x is an integer.
    • Damn found a huuge integer bug where myInt := 256 – i; where i=1 turned out to be 767.. hopefully fixed
    • Integer temp var optimizations + fewer instructions. But in a future version, I seriously need to rewrite and optimize integer operations. Seriously.
    • printdecimal(number, # of decimals). Prints either an integer / byte at the current screen coordinates (used by moveto). Example: printdecimal( a, 3) where a is an integer will display 4 digits. printdecimal(i, 2) where is a byte displays 3 decimals.
  • Tutorials
    • Working on a new game, but source will not be published before the game is completed. Level selections, scrolling levels, main map, conversations, loot etc.
    • Whole new tutorial project: Introduction to TRSE game development! Source code and resources are included in the TRSE framework.
    • Small tutorial game tutorial
    • Paw packer decrunch tutorial 22

Version 0.03 (30.08.2018)

  • OSX version
  • Linux version
  • Tutorials:
    • Finished RB1 game
    • Exomizer decrunch tutorial
    • Horizontal starfield tutorial
    • Timed fading text writer tutorial
  • Compiler / syntax
    • deczp (as opposed to inczp, to decrease zero page pointers)
    • decrunch supports name only, user doesn’t have to calculate decrunch address anymore! compressed_image: incbin("logo_compressed.bin", $8000); decrunch(compressed_image); 
    • incbin & any memory position can now be arbitrary, will be automatically sorted
    • define arrays at certain memory positions : my_arr: array[64] of byte = (1,2,3,4 ...) at $7800;
    • ClearScreen speed improvement
    • Bugfix: incbin/at using “$8000” or $8000 are now identical (pure strings are not required)
    • Bugfix: inc / dec didn’t work for arrays (my bad!)
    • New post optimizer: if there is a lda v; tax (without a sta/tay afterwards), change to ldx v
  • IDE
    • Better export parameters for images
    • level editors / etc loading flf charsets
    • post-optimizer toggle actually enables/disable post-optimizing
    • Small bugfix copy/paste image data tool

Version 0.02 Alpha (22.08.2018)

In this version, the self-auto-updater which really didn’t work has been removed. In order to use this new version, please extract to a new folder and then copy your personalized settings file “fluff.ini” from the old directory to the new.

This version should contain some missing dll’s that is typically installed with VC redist, so the program won’t crash on non-developer environments.

  • IDE
    • First version of movie creator (doesn’t work, don’t use, paths and values are hardcoded, just forgot to remove before build). Will be included properly later.
    • Simplex nose creation and usage (not really included, but supported, proper documentation and user API will follow in a later version)
    • MultiColorImages now contain additional export parameters such as start & end of char export
    • Multicolor images and charsets various improvements and bugfixes
    • Smaller bugfixes
  • Compiler / Syntax
    • Fixed error in multicolormode / scroll
    • FLD now takes a parameter and supports both bitmap and text modes
    • Most important in this update: Exomizer decrunch. Basically just write decrunch($pos + $end); and automatically decrunch your random data. An example:
      • Say you have some character data that you would like to place at $6000. In win/linux prompt, with exomizer type “exomizer mem -lnone myFile.bin@0x6000 -o myFile_crunched.bin”
      • Assume crunched data is in total $56 bytes and is included at $8000. Then just type : decrunch($8056), and your data will be extracted to $6000!

Version 0.010 Alpha (11.06.2018)

  • IDE
    • Bufix colors level editor
    • Memory Map & analyzer
  • Compiler/syntax:
    • @userdata “from address” “to address” “name” to specify user-specific data for memory map purposes

Version 0.009 Alpha (13.05.2018)

  • Compiler/syntax:
    • Fixed a nasty error where lookup array in conditionals didn’t work (if a=arr[i] then…)
    • Fixed a nasty bug where all-uppercase variables (especially pointers) didn’t work…
    • Fixed a crashing bug when trying to declare variables after procedure declarations
  • IDE
    • Charsets and sprites have flip horizontal/vertical
    • Display current char ID in hex & dec together with position
    • First version of “Image effects”, rendering all sorts of lines or circles (for use in tunnel effects)
    • Export binary now has a custom parameters dialog box (currently  only for charsets, specify which chars to export etc)
  • Tutorials:
    • Work on TakoNeko game (TakoNeko currently removed from tutorials)
    • Tutorial 18+19 tunnel effects etc added, but not included in the current version

Version 0.008 Alpha (04.05.2018)

  • Compiler/syntax:
    • Removed incscreenx, use inczp instead (faster)
    • Added wait(val) for exact cycle waiting etc
    • Added new type: cstring which converts text to built-in C64 screen codes (similar to .text or SCRU/SCLR)
    • Minor fixes (random crashes when forgetting certain keywords etc..)
  • Tutorials
    • Added tutorial 17, 2×2 font scroller + additional font
    • Added first version of tutorial game #2: TakoNeko. Currently just a side scrolling level, but hey!
  • IDE
    • Fixed a serious error in the level designer that sometimes added an extra byte to levels and destroyed the entire file. Puh!
    • Huuge overhaul of image / char editing, should be much more streamlined now

Version 0.007 pre-alpha (23.04.2018)

  • Compiler/syntax updates:
    • Proper pointer integration, removed default zeropage1-7, you now have to declare as pointers (var myPointer:pointer;)
    • Pointers as procedure parameters (yay!, procedure RenderStuff(data:pointer);)
    • Conditionals can take optional paranthesis (if a=b .. if (a=b) ). Logical ops have parameters required.
    • Bugfix in IRQ handling
    • nmirq to enable/disable/hook NMI irq (disable break)
    • keypressed(KEY_XX)=1 to test whether key is pressed (NOT using kernal…)
    • copyfullscreen optimized
    • Improved string definitions (multilines etc, text: string = (“THIS”, 10, ” STRING “, 20))
    • ReturnInterrupt (rti) and Return (rts) builtin functions for smoothness
  • Editor updates:
    • Zeropage pointer settings
    • Errors in include files will automatically open the file and move the cursor to the line number with error
    • Pressing “F2” on a procedure call will  move the text cursor to the procedure definition
      • will also implement this for variables (when time)
      • Does not work for multiple include files (yet)
  • Tutorials
    • Mega IRQ fullscreen scroller (16 rows) (tutorial 16)
    • Updates on Rogue Burger One

 

 

Version 0.006 pre-alpha (19.04.2018)

  • Compiler/syntax updates:
    • Fixed minor bugs
    • Better integer support (again..)
    • Added FLD builtin method (Flexible Line Distance)
    • Added Jammer (for debugging purposes)
  • Editor updates:
    • No more crash if file doesn’t exist (changed dir, moved, etc)
    • Fullscreen Char image files
    • Minor optimizations
    • Enhanced integer constant binop in built-in methods etc
  • Tutorials
    • Working on full cracktro intro (Hokuto Force), not yet included

Version 0.005 pre-alpha (15.04.2018):

  • Compiler/syntax updates
    • Fixed bugs in scrollx/scrolly
    • SetMemoryConfig fix
    • 16×16 integer division (yay)
    • better integer handling
    • Deleted some old functions
    • Build automatically saves file
    • Lesser optimizations
  • Tutorial
    • Polygon filler first unoptimized version (tutorial 15) + rotations

Version 0.004 pre-pre-alpha: (12.04.2018)

  • Compiler/syntax updates:
    • disableinterrupts changed to disableciainterrupts
    • setmemoryconfig(io=[0:1], kernal=[0:1], basic=[0:1]); sets $01
    • for loop step : for i:=0 to 20 step 5 do begin …
    • Also added support for unary negative op: -1 = 255, -100 = 156 etc
    • for loop bugfix + speed + removed jump
    • Overhaul of Raster IRQ system
      • EnableRasterIRQ
      • StartIRQ
      • RasterIRQ
      • CloseIRQ
      • EnableIRQ (cli)
      • PreventIRQ (sei)
      • EnableRasterIRQ
  • Editor
    • Exomize support
    • Build variables (currently on the right-hand part of compiler output), enable exomizer/optimizer etc
    • Help Dialogue + started writing help text (F1 on any word)
  • Tutorial
    • Simple stable raster (tutorial 13)
    • Fire demo effect (tutorial 14, simple, to show optimizing)

Version 0.003 pre-pre-alpha (08.04)

  • Compiler / syntax updates and changes:
    • Important optimizer: a:=b+c now takes 12 cycles instead of 25. wtf. why wasn’t this fixed earlier? (explicitly checking if there are only two variables/numbers and a binary operation of +/-). Reduced code size by 4%, substantial speed increase.
    • Added onpage/offpage keywords to force condition+loops to use fast or slow branching +-127 page jumps
  • New built-in methods:
    • Inc(var), Dec($D800). Same as var:=var+1, but still easier to write.
  • Editor changes
    • Less aggressive code completion (popup goes away when pressing ctrl, backspace etc)
    • Reloads .asm files when tab selected
    • Kills all vice instances on build

Version 0.002 pre-pre-alpha 07.04.18:

  • Compiler / syntax updates and changes:
    • Integer bugfixing
    • String bugfixes
    • Removal of hash # before integer literals
    • Compulsory pointer ^ to addresses poke(^$D800, …) etc
    • Initializers (string, bytes) var a:byte=5; b:string=”weee”;
    • 8-bit division that is *not* power of two (power of two already implemented)
    • Lesser optimizations
  • New built-in methods:
    • CopyCharsetFromRom(address)
    • ClearBitmap(address, count)  – count is 256 bytes*count
    • Hideborderx() – removes x border
  • New RasLib methods:
    • Line(x1,y1,x2,y2) bitmap mode
  • New tutorials:
    • Tutorial 11 Line Drawing
    • Tutorial 12 DYCP Scroller
  • New bootstrapper
    • Let’s hope this fixes the auto update.

 

Version 0.001 pre-pre-alpha :