ASM80.com News

A log of new features

View on GitHub
5 January 2019

Version 2.5.0 - partial includes

Now you can include not only the whole file, but only a part of file. This is achieved by the concept of “named block”.

Let’s have a file “library.a80”:

.block serout
; a routine for serial output
@putchar:
...
.endblock

.block serin
;a routine for serial input
@getchar
...
.endblock

In your file, e.g. “main.a80”, you can include the whole file with .include library.a80. Now you can include only the needed parts using a special naming convention file:block.

.include library.a80:serout
call putchar:
...

It includes only the block “serout” (with a global label putchar, in our case). Other blocks will be omitted.

Include local block

You can reference the actual included file by the placeholder this. Let’s add a “serial init” to our library:

...
.block serinit
;serial port init
@uart_init:
...
.endblock

Now you can add the “dependency” with a little bit modification of our library:

.block serout
; a routine for serial output
.include this:serinit
@putchar:
...
.endblock

.block serin
;a routine for serial input
.include this:serinit
@getchar:
...
.endblock

.block serinit
;serial port init
@uart_init:
...
.endblock

Don’t worry, the init code will be included only once! If you need include the block twice or more, you can overrule the check with the dual colon: .include file::block.