Brass 3.0.0.0 Beta 13

One suite to code them all. An complete IDE and assembler for all your z80 projects!

Moderators: benryves, kv83

Post Reply
User avatar
benryves
Maxcoderz Staff
Posts: 3087
Joined: Thu 16 Dec, 2004 10:06 pm
Location: Croydon, England
Contact:

Brass 3.0.0.0 Beta 13

Post by benryves »

Brass 3 Website.

I've released a beta for Brass 3. I'm sure it is full of bugs and incomplete features, but it mostly works and can output working binaries.

I strongly recommend you use the Windows installer (it doesn't do anything evil, honest); failing that there's a zip archive of the files included in the installer.

Source code and information for developers wishing to extend the assembler will be forthcoming. :)

Once installed, you can test Brass with this crude demo. It relies on environment variables being set (Brass.Include) so you might need to kill all Explorer instances first (or just log out then in again). EDIT: Do not use this demo, there's a better one in Beta 2.

Image

Click "Build" on the toolbar (or right-click, "Build" in previous Windows versions).

If there are any messages, warnings, or errors the following dialog will appear:

Image

There are some more tools to write (graphical project editor) as well as compiler features (importing project templates and multiple build configurations) but I hope this is a good start. :)
Last edited by benryves on Thu 07 Feb, 2008 11:01 am, edited 12 times in total.
User avatar
Timendus
Calc King
Posts: 1729
Joined: Sun 23 Jan, 2005 12:37 am
Location: Netherlands
Contact:

Post by Timendus »

OMG, Ben is going crazy with this one :mrgreen:
Explorer integration, oh my :)

How's the Nautilus/Konquerer integration coming along? :evil:
http://clap.timendus.com/ - The Calculator Link Alternative Protocol
http://api.timendus.com/ - Make your life easier, leave the coding to the API
http://vera.timendus.com/ - The calc lover's OS
User avatar
benryves
Maxcoderz Staff
Posts: 3087
Joined: Thu 16 Dec, 2004 10:06 pm
Location: Croydon, England
Contact:

Post by benryves »

Timendus wrote:OMG, Ben is going crazy with this one :mrgreen:
Explorer integration, oh my :)
It's just registering a file association, but Vista displays these in a rather nicer fashion than older Windows ever did (ie, a nifty button with a dropdown arrow).
How's the Nautilus/Konquerer integration coming along? :evil:
Hm, you get a zip file. ;) I don't know if any of the graphical tools (the help viewer, the GUI builder) even work at all under Linux as they both use WinForms and IE.
User avatar
Timendus
Calc King
Posts: 1729
Joined: Sun 23 Jan, 2005 12:37 am
Location: Netherlands
Contact:

Post by Timendus »

It shouldn't be too much trouble to get something equally nifty working under Nautilus and Konquerer now I come to think of it... They both know file associations just as well, and I believe one of them also allows you to add arbitrary scripts to the context menu. All you'd need to do it remake the feedback window with GTK or something. But then again, how often do you want to compile something that way..?
http://clap.timendus.com/ - The Calculator Link Alternative Protocol
http://api.timendus.com/ - Make your life easier, leave the coding to the API
http://vera.timendus.com/ - The calc lover's OS
User avatar
benryves
Maxcoderz Staff
Posts: 3087
Joined: Thu 16 Dec, 2004 10:06 pm
Location: Croydon, England
Contact:

Post by benryves »

Probably. It's hassle enough creating a zip file, to be honest, and I don't really want to start trying to support installers for environments I am ignorant of. :)

I don't know what the best solution for Linux users would be; some sort of shell script that automates associations?

Anyhow; I've released beta 2 that makes a few improvements, including better build support. I'll try to add support for other shells as soon as possible, but currently 83 (no shell), 83 Ion, 83 Venus, 83+ (no shell), 83+ Ion and 83+ MirageOS are supported.
User avatar
driesguldolf
Extreme Poster
Posts: 395
Joined: Thu 17 May, 2007 4:49 pm
Location: $4080
Contact:

Post by driesguldolf »

Ben, this is amazing!!!
I'll see if I can find some bugs.

It would be cool if Brass manual/plugin docs are donwloadable
User avatar
benryves
Maxcoderz Staff
Posts: 3087
Joined: Thu 16 Dec, 2004 10:06 pm
Location: Croydon, England
Contact:

Post by benryves »

There is no manual at the moment, sorry, you'll pretty much have to look at the sample code (and plugin examples) or just ask me here. :(

Both packages (Windows installer and zip package) come with a help viewer; if you prefer HTML you can export HTML files directly from it (that's how I created the online version).

If the sample project complains about missing files, close all Explorer instances then try again; if that still doesn't work log out then in again (or reboot). This only needs to be done the first time you install the software!

The sample code is just this assembly source:

Code: Select all

	; Clear the screen.
	bcall(_clrLcdFull)
	
	; Move cursor to (0,0).
	xor a
	ld (curCol),a
	ld (curRow),a
	
	; Display the message.
	ld hl,Message
	bcall(_putS)
	bcall(_newLine)
	
	; Poll the keyboard until we receive a key.
-
	bcall(_getCSC)
	or a
	jr z,-
	
	; Exit.
	ret

; Message to be displayed.
Message .byte "Brass 3 Demo", 0
The project file is just this (I would like to make a GUI editor for these):

Code: Select all

<?xml version="1.0" encoding="utf-8" ?>
<brassproject version="3">
	<template source="TI/Program.brassproj" />
	<input source="Demo.asm">	
		<label name="Program.Description" type="string" value="Demo Project" />
		<label name="Program.Name" type="string" value="DEMOPROJ" />
	</input>
</brassproject>
No header/include noise, no macro defines for ROM calls (bcall is a function plugin) and templates are stored in a simple, standardised location that hopefully makes upgrading them easier.

I know some will complain that this hides implementation details, but I'm not too fussed about that myself. :)

One thing I haven't mentioned (or really decided) is how to handle shell/OS differences. Here's a rough idea of what you can currently do:

Code: Select all

#if !defined(ionFastCopy)
	ionFastCopy:
	.if strlower(outputwriter()) == "ti8x"
		bcall(_grBufCpy)
	.else
		; ... do something else on the 83 ...
	.endif
	ret
#endif
(I obviously need to provide better functions to establish which plugins are in use rather than that strlower() hack). :)
User avatar
driesguldolf
Extreme Poster
Posts: 395
Joined: Thu 17 May, 2007 4:49 pm
Location: $4080
Contact:

Post by driesguldolf »

Ah, didn't saw the help.exe...

Ok, the demo doesn't want to work (maybe because you said "EDIT: Do not use this demo, there's a better one in Beta 2."?)
Brass 3 builder wrote:Invalid data before the the header.
.ionheader "Brass Demo"

Source: Demo.asm, line 3.
Ok, what are the .brassproj xml files for? Do I need one?

Neither am I seeing any explorer integration? I use Windows XP SP2
EDIT: ah, of course:
benryves wrote:Click "Build" on the toolbar (or right-click, "Build" in previous Windows versions).
Aaaw, these questions sound dumb...
User avatar
benryves
Maxcoderz Staff
Posts: 3087
Joined: Thu 16 Dec, 2004 10:06 pm
Location: Croydon, England
Contact:

Post by benryves »

driesguldolf wrote:
Brass 3 builder wrote:Invalid data before the the header.
.ionheader "Brass Demo"

Source: Demo.asm, line 3.
I changed the way the plugin worked slightly (it used to insert the AsmPrgm header for you, it doesn't anymore).
Ok, what are the .brassproj xml files for? Do I need one?
Brass works entirely with project files, you can't just run it with command-line arguments. A project file tells Brass which plugins to load and use, defines multiple build configurations or points at other project files to use as base templates. They can also create labels as well as insert headers and footers for you.

Take a look at "C:\Program Files\Brass\Templates\TI\Program.brassproj" for an example of a fairly complete one.
Neither am I seeing any explorer integration? I use Windows XP SP2
You can also get away with double-clicking the project file. :)

I'm sure there are loads of bugs, including sample code in the plugin documentation that no longer works due to a bugfix or changed feature made yonks ago! A buggy Brass in the wild is better than a buggy Brass that only exists on my hard disk drive, really. :)

A bjump function needs to be added, and I'll probably add ".bcall nz,_label" style directives to complement "bcallnz(_label)". Wider shell support is also needed, as is TI-82 stuff. Apps need supporting too... Lots of work for me to get busy on. :)
Liazon
Calc Guru
Posts: 962
Joined: Thu 27 Oct, 2005 8:28 pm

Post by Liazon »

o.o graphical is nice.

will this work on Vista?
Image Image Image
User avatar
driesguldolf
Extreme Poster
Posts: 395
Joined: Thu 17 May, 2007 4:49 pm
Location: $4080
Contact:

Post by driesguldolf »

Liazon wrote:o.o graphical is nice.

will this work on Vista?
Yes, as the screenshots are made in Vista ;)
User avatar
benryves
Maxcoderz Staff
Posts: 3087
Joined: Thu 16 Dec, 2004 10:06 pm
Location: Croydon, England
Contact:

Post by benryves »

Aye, I use Vista. I should probably install an older copy of Windows in a VM for testing purposes, really. A few days ago Timendus tried a cruder beta on Linux and said it worked there too, hopefully I haven't broken anything since. :)
3.0.0.0 Beta 3 wrote:New Texas Instruments functions and directives for ROM calls and error handlers.

The Help Viewer's code to convert newlines to HTML paragraphs has been fixed, and it shows the DisplayName for plugins rather than the default name (which appears to be randomly selected).

Projects no longer raise warnings if no string encoder is set.

I've added a Sega Master System / Game Gear 32KB ROM template and sample program. The SDSC tag directive has been fixed to work with strings passed in labels.

The .echochar directive has been removed.

The project file format and GUI builder have been extended to support display name attributes on build configurations (you get "Sega Master System" instead of "SMS" and "TI-83 Plus, MirageOS" instead of "TI8X.MirageOS").
User avatar
benryves
Maxcoderz Staff
Posts: 3087
Joined: Thu 16 Dec, 2004 10:06 pm
Location: Croydon, England
Contact:

Post by benryves »

3.0.0.0 Beta 4 wrote:Major bug fixed where directives calling an internal method to leave temporary modules wouldn't actually leave the module, resulting in bizarre label name resolution bugs.

Internal functionality to easily retrieve tokens between parentheses added, resulting in easier and more reliable plugin development - and fixing bugs in .define in the process.

#macro/#endmacro added to complement #function/#endfunction. Performs exactly the same job, except that arguments are passed as macro replacements by default rather than by value.

Ability to break code into sections that can be linked together in a particular order via the .section/.endsection and .incsection directives (see the bug note in Known Issues).

Added basic DoorsCS 6 support with a header writer and template.

Improved flexibility in the Help Viewer, including support for "documentation-only" plugins (and hiding plugins that aren't end-user accessible).
User avatar
driesguldolf
Extreme Poster
Posts: 395
Joined: Thu 17 May, 2007 4:49 pm
Location: $4080
Contact:

Post by driesguldolf »

W00t, finally have some time to test :D

Is it normal that the same error is shown twice?
It doubles every error I've thrown at it
Brass 3 Builder wrote: Invalid directive '.rst'.
.rst 28h

Source: Demo.asm, line 12.

Invalid directive '.rst'.
.rst 28h

Source: Demo.asm, line 12
Now that is cryptic

Code: Select all

	ld exit, duke
Brass 3 Builder wrote:Value does not fall within the expected range.
Source: Demo.asm, line 20.
Also, brass builder gives a lot of whitespace, and if you have a lot of errors things get very large (9 errors, all but the .include were doubled):
Image
If you could remove the 'red arrowed' enters or just all of them (I'm sure you'll find a nice layout) I'd be very happy ;)

Also, I cannot use Ctrl-c to copy the error messages... Though I was able to drag&drop them, neither can you right-click or Ctrl-a.

Idea: would it be possible to leave out the brackets in functions/macros? like:

Code: Select all

   load de, hl
; instead of
   load(de, hl)
User avatar
benryves
Maxcoderz Staff
Posts: 3087
Joined: Thu 16 Dec, 2004 10:06 pm
Location: Croydon, England
Contact:

Post by benryves »

driesguldolf wrote:Is it normal that the same error is shown twice?
It doesn't stop if it hits any errors, and it runs through your code twice (two passes) and so yes, errors are shown twice.

I'll stop it doing that. :)
Now that is cryptic

Code: Select all

	ld exit, duke
Brass 3 Builder wrote:Value does not fall within the expected range.
Source: Demo.asm, line 20.
You're only allowed to use the Z80 plugin if you're a qualified .NET programmer who would have easily spotted a mile off that that's the default message for an ArgumentException. ;)

I kid, of course, and will update it to display something rather more meaningful.
Also, brass builder gives a lot of whitespace, and if you have a lot of errors things get very large (9 errors, all but the .include were doubled)

...

Also, I cannot use Ctrl-c to copy the error messages... Though I was able to drag&drop them, neither can you right-click or Ctrl-a.
I'll attack the stylesheet (that's a web page displayed in IE) and restore the shortcut keys.
Idea: would it be possible to leave out the brackets in functions/macros? like:

Code: Select all

   load de, hl
; instead of
   load(de, hl)
I'd thought about this, but also thought about some potential problems.

Code: Select all

#function something(x)
   ; ...
#endfunction

something = 1

.echoln something +1 ; Is that something(+1) or the label something+1?
I agree that it would be a nice feature, though, for example:

Code: Select all

#macro b_call(label)
    rst $28
    eval(".dw _" + strtoken(label))
#endmacro

b_call puts ; Like in the official ti83plus.inc
Hmm. One to ponder. :)
Post Reply