Search the Community
Showing results for tags 'sdk-1600'.
Found 3 results
OK, I've made a raft of improvements since last week's release. All this is now available in the 2018-01-08 release. NEW: Add _EXPMAC keyword, to force macros to expand in both the taken and not-taken branches of an IF. This is needed for IF-statements inside a RPT block, whose taken/not-taken behavior varies across loop iterations. NEW: Increase resolution of release_date to include hours, minutes, seconds, and timezone. NEW: Add build_date and version CFGVARs. build_date takes the same format as release_date. version is an arbitrary format string. Both tags can appear an arbitrary number of times. NEW: Add %z specifier to TODAY_xxx. Reports timezone as +HHMM in TODAY_STR_xxx. Reports timezone as minutes relative to UTC in TODAY_VAL_xxx. NEW: Add _ROTL16, _ROTL32, _ROTR16, _ROTR32 operators.Same precedence as SHL, SHR, SHRU. Internal: Increase IF-ELSE-ENDI stack depth from 32 to 256. Internal: Additional infrastructure for normalizing metadata between different object file types. BUGFIX: Add missing __FEATURE.TODAY for the TODAY_xxx feature. This was supposed to be in the last release, but a fatfingered edit fail deleted it. BUGFIX: Fix some nested RPT cases. Multiple RPTs inside a nested RPT now work. RPT guarded by an IF also now works. BUGFIX: Fix some metadata tag behavior when loading ROMs w/ tags. Misc: Start marking stuff 2018. Misc: Update documentation for new features.
All, I've made a minor but useful update to AS1600 in this release. jzIntv should be unchanged, other than to be freshly compiled. Download the update here: http://spatula-city.org/~im14u2c/intv/ Updates: The -m (aka --show-map) flag now works again. This will print a memory map summary for your program at the end of assembly. The new -e flag (aka. --err-if-overwritten) flag now enables ROM overwrite checks. (More below.) The new directives ERR_IF_OVERWRITTEN and FORCE_OVERWRITE now provide the ability to warn about overwriting already-assembled ROM, with the ability to override the warning. What is ROM overwrite? First, the tl;dr: The most common symptom is that your program has started crashing and you don't know why. Add the '-e' flag to your assemble script, and this will become an assemble time error than a run time error. Longer explanation: Consider the following simple example: . ORG $5000 DECLE 1, 2, 3, 4, 5, 6, 7, 8 ORG $5004 DECLE 8, 7, 6, 5, 4, 3, 2, 1 . This code assembles 8 words at $5000 - $5007, and then assembles 8 more words at $5004 - $500B. The second part overwrites the ROM assembled at $5004 - $500F. AS1600 currently does not warn about this. Usually, when this happens, it is an error, but occasionally it's a feature. For example, I'll often assemble a fixed pattern into memory, and then assemble my game over top of that, so I have a consistent fill value for the portions of ROM I'm not using yet. The latest release of AS1600 adds directives to control this behavior. I'll just paste the documentation from jzintv/doc/utilities/as1600.txt here: . ------------------------------------------------------------------------------ ERR_IF_OVERWRITTEN expr Mark code as "not intended to be overwritten" FORCE_OVERWRITE expr Force code to be overwritten anyway ------------------------------------------------------------------------------ By default, AS1600 lets you assemble new code over addresses you've already assembled code into. That allows for some interesting tricks; however, most often this is really an error. The ERR_IF_OVERWRITTEN directive controls a flag that indicates whether the code that follows may be safely overwritten. 0 means "safe to overwrite", while 1 means "throw an error if overwritten." >>> Note: ERR_IF_OVERWRITTEN defaults to 0. You can change the default at >> the command line by adding the flag -e or --err-if-overwritten For example, if I wanted to fill some ROM with a fixed pattern, and then overwrite it with final code, I could do something like this: ERR_IF_OVERWRITTEN 0 ; About to write some filler data ORG $6000 REPEAT 4096 / 8 DECLE -1, -1, -1, -1, -1, -1, -1, -1 ENDR ERR_IF_OVERWRITTEN 1 ; Now overwrite it with real code ORG $6000 ; The following generates no errors or warnings. fun: PROC MVII #ISR, R0 MVO R0, $100 SWAP R0 MVO R0, $101 ;... ENDP ; This code, however, will trigger an error, because it's overwriting ; the code we just assembled at 'fun': ORG $6000 DECLE 12, 34 ; ERROR - ROM overwrite error on $6000 - $6001 The FORCE_OVERWRITE directive gives you the ability to forcibly overwrite code that was previously assembled with ERR_IF_OVERWRITTEN == 1. Revisiting the previous example: ERR_IF_OVERWRITTEN 1 ; Now overwrite it with real code ORG $6000 fun: PROC MVII #ISR, R0 MVO R0, $100 SWAP R0 MVO R0, $101 ;... ENDP ; With FORCE_OVERWRITE, this code now assembles without errors. FORCE_OVERWRITE 1 ORG $6000 DECLE 12, 34 The FORCE_OVERWRITE directive is meant for use in specialized macros that may wish to "back-patch" code that otherwise should have ERR_IF_OVERWRITTEN turned on. Use it sparingly. There is no way to query the current state of ERR_IF_OVERWRITTEN or FORCE_OVERWRITE. If you need to track that for some reason, wrap these in macros. Truth table: ERR_IF_OVERWRITTEN FORCE_OVERWRITE Result on an overwrite off off No error off ON No error ON off Report an error ON ON No error Note that ERR_IF_OVERWRITTEN tags current code to detect _future_ attempts to overwrite, while FORCE_OVERWRITE affects the code you're assembling right now. For example, this still generates an error, because the first DECLE was assembled with ERR_IF_OVERWRITTEN == 1: ERR_IF_OVERWRITTEN 1 ORG $6000 DECLE 1234 ERR_IF_OVERWRITTEN 0 ORG $6000 DECLE 3456 Conversely, this example does _not_ generate an error: ERR_IF_OVERWRITTEN 0 ORG $6000 DECLE 1234 ERR_IF_OVERWRITTEN 1 ORG $6000 DECLE 3456
Happy holidays, y'all! I've put together a nice jzIntv / SDK-1600 update to round out the year with. Updates in this release: Lots of documentation updates for existing and new AS1600 features in ./doc/utilities/as1600.txt Improved documentation on expression list support Improved documentation on CFGVAR support, including tables describing the supported metadata variables and their meaning. NEW: TODAY_STR_xxx and TODAY_VAL_xxx functions that return the current date and time NEW: Expression-list slicing and indexing Updates to cart.mac NEW: Better documentation regarding static vs. dynamic-paged ROM segments NEW: Explicitly mark which segments are static vs. dynamic, and adapt ROMSEGSZ to select among static segments. NEW: Add CURROMSEG and CURROMPAG symbols to query the current ROM segment number and, for dynamic-paged segments, what Mattel page number it's using. Switch to DZ-Jay's ECS detection algorithm Updates to AS1600: NEW: Add a -v flag to report assembler version (SVN revision number) NEW: Add long-option spellings for flags NEW: Add --help (aka. -h or -?) usage information NEW: TODAY_STR_xxx / TODAY_VAL_xxx support (mentioned above) Bugfixes to expression-list handling Updates to jzIntv: NEW: Reports SVN revision number Randomize JLP memory and Intellicart memory when given --rand-mem Document flags which control border area in --help output Rename tutorvision_compat to tv_compat, as it was already tv_compat most places in the source. Minor cleanups suggested by various sanitizers and warnings from different compiler environments. (Trying to keep it clean for -Werror.) Also, the Windows build is now built with GCC 7.2.0 rather than GCC 6.3.0. Not sure that makes a huge difference. Go check it out: http://spatula-city.org/~im14u2c/intv/