Aha, that's the way to do it. Thanks! A little more complicated than in C. PHP has an include_once statement that is really handy and easy to use.
Such double compilation guarding can be done this way: myfile_h :?= false ; define to false if variable doesn't exists yet .if !myfile_h ; was not compiled yet? myfile_h := true ; remember that it is now myconst = 3 .endif This ensures one inclusion per namespace. I guess it is needed to prevent duplicate symbols in a single global namespace, so it should fit.
Include only once
Only if longer
Only at the end
Location moves
Only at the end
the original use case is to make a header() macro for a Forth. each word is defined by a code block with start_xxx and end_xxx labels. i want a macro like header(xxx) that will generate .word start_xxx, end_xxx as well as .byte len("xxx") and .text "xxx". of course i could pass both string and label args but with above i was able to make it work with just a bare xxx arg.
This is because $ is an empty bit string. Similarly like "" is an empty character string or x'' an empty byte string. The numeric value of all three are zero in expressions which need numeric values. While it works as designed I see how an empty (bit) string is unexpected as an instruction argument. Or even elsewhere, as it's basically "nothing". Will think about it.
In r3122 the possibility to convert a string to a symbol was added. This is accessible through type conversion (as expected) however there was no built-in name "symbol" for the symbol type before r3137. If using a version somewhere in between the following will define it: symbol = type(.dummy) With the latest trunk this definition is no longer necessary as it has the "symbol" built-in. Given a string of characters which are allowed in symbols the following holds: symbol("foo") == .foo str(.foo) ==...
Add symbol as type name
progress! some code browsing and experiments with type and repr helped me started to understand the 64tass type system. if I have code like: foo: nop then foo has code type, and repr(foo) uses its address, but the dot operator (mentioned once in passing in the doc) makes .code a symbol, and str(.foo) gives the literal "foo". I still can't figure out how to go the other way, from the literal to the symbol, but this is enough for what I need. I thought maybe ."foo" or an explicit symbol("foo") but...
Convert string literal to symbol and/or symbol name to string?
64tass will assemble `lda #$` as `lda #$00`
Cleanup
Fix warning
Missing reference
Improve message
Location only instead of address
Struct offset vs code
Avoid duplicate message
Same for alignpageind
Do alignment anyway
Use member for .from
not sure if a bug or a feature request...
This is a great solution and is solves my problem . Thank you!
Hello! In expressions the value of a label is the program counter address at the place where it got defined. The bank operator just returns bits of 16-23 no matter what's thrown at it and because the address space is small it will be always zero. The image file format may be larger than the address space of the CPU that's why * can be assigned to $10000. In this case the program counter will be the last 16 bits but the image offset is not truncated. I think what you're after is the offset of a label...
Bank Operator returns 0 for 6502 processor
Report other errors first
Looks good - thanks! --Tom
Surprising direct page address overflow warning
That struct offset (S.a) was incorrectly treated as a zero page location. The offset applied ($3a0) would move it off the zero page but the current CPU can't do that so it got wrapped. Correctly the struct offset is just an offset and then the sum of two offsets is not a memory location and so no warning. Fixed it in r3125. Please check.
Struct member is not a zp address (#71)
conflicting types for 'memalign'
I've renamed it in r3124. Thanks!
Rename memalign (#72)
conflicting types for 'memalign'
Surprising direct page address overflow warning
Might fail
Add conversion
Use ** for pow()
I've added an .elif alias to cover this sort of typo in 1.59.
64tass 1.59.3120
1.59.3120
Update makefiles
Add examples
Simplify
Not on integer division
Update list
Wrong type
Update dependencies
Improve command line file errors
Use symbols
Simplify
Don't skip of course...
Was not up-to-date
Add --output-exec command line option
Silly mistake
Move it back
Update dependencies
Expression for labels-root
Better do it separately
Makes better sense for bits only
Add warning for @b, @w, @l future compatibility
Reorder
Set size as well
Add PGX and PGZ output formats
Check for empty name
Same here
Needs more escaping...
Doesn't duplicate that way...
Update syntax
Add link
Typo
Cleanup
Typo
Redundant
White space
Cleanup
Careful with duplicates
Update syntax files
Add .elif alias (same as .elsif)
Cleanup
Cleanup
Use decimal
Missing close
Simplify
Optimize
Alternate for should be from bits
Must be smaller for that
Redundant
Proper message
Revert
This is more correct
Fixed 8 bit
Simplify
Simplify
Handle carefully