forked from pce-devel/huc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
whats.new
470 lines (426 loc) · 22.4 KB
/
whats.new
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
All HuC project tools ...
-------------------------
- Add new "hulz" tool to compress/decompress Hudson's common LZSS data formats.
- Change "sym2inc" tool to include bank information in the output equates.
PCEAS changes ...
-----------------
- Add support for generating HuCARD ROMs up to 8MByte using the StreetFighterII
mapper. Use "-sf2" on the command line to select this.
- Add the "overlay(label_name)" operator to get the StreetFighterII mapper addr
register to write to select the correct set of 64 banks to map into $40..$7F.
For example, "stz $FFF0 + overlay( my_data )" if HuCARD bank $00 is in MPR7.
- Allow .EQU and .RSSET values to use "$x:xx:xxxx" to specify the overlay, bank
and addr.
- Allow C-style "&&" and "||" in expressions.
- Change .BANK to give an error if undefined symbols are used.
- Allow .BANK/.PAGE/.ORG within a .PROC if not in a .CODE section.
New in version 4.00:
--------------------
2022-11-09:
-----------
All HuC project tools ...
-------------------------
- Bump all HuC programs up to verion number 4.00.xx after the changes.
The version number now comes from tags in the GIT repository, rather
than being defined in each individual program.
HuC changes ...
---------------
- Change the "include/pce" directory name to "include/huc" in order to
differentiate it from the old MagicKit library name, because the HuC
libraries are not compatible with pure assembly-language development.
- Change "-v" argument to behave like HuC v3.21, which means that HuC always
asks PCEAS to generate a list file by default, and "-v" will output extra
information.
- Change "-t" argument to warn that outputting C source to the listing file
will disable some code opimizations which can then cause huge C functions
to break because they exceed 8KBytes in length.
- Add "-O" to the PCEAS command line to enable procedure-packing.
- Change startup.asm to boot CD programs at $4000 (instead of $4070), and
add a "HuC" string into the programs so that overlays can be identified.
- Remove HuC's 2nd (and never used) library font in order to save space.
- Change ac_cd_xfer() to use ISOlink's file# instead of sector numbers.
- Add lib_exclude.asm to allow a HuC project to customize library settings.
- Add Dave Shadoff's old example project that shows how to use CD overlays.
- Fix startup.asm when running an SCD program on System Card 2 (or lower).
- Fix satb_update() bug.
ISOlink changes ...
-------------------
- Add "-sgx" CLI parameter to put a SuperGRAFX string into CD-ROM projects.
- Slight changes to the CLI format to allow HuC users to name CD projects.
- Change sector location and format of the directory information.
- Change HuC location for patching directory info into HuC projects.
- Change default startup location for HuC projects.
- Add support for creating bootable PC-FX CD-ROMs.
PCEAS changes ...
-----------------
- Add a list of procedure sizes to the listing file if list_level >= 2.
- Fix PCEAS crash when it processes a .DS with a negative value.
- Improve the error messages and information dumps when there isn't enough
ROM space for all of the user's HuC or ASM procedures.
- Allow KickC to run multiple passes to resolve forward-referenced symbols.
- Fix some data directives not expanding the ROM size during early passes.
- Enable JMP from one procedure to another to allow tail-call optimization.
- Enable expression evaluation to be used in CALL pseudo-op.
- Change default procedure packing to match PCEAS v3.21, use "-O" for enable
the newer optimized procedure packing.
- Fix procedure relocation from breaking some code declared after procedures.
- Support more C escape-code sequences in strings and char constants.
- Add "-sgx" CLI parameter to put a SuperGRAFX string into CD-ROM projects.
- Fix 6502 undocumented "lax abs,y" instruction.
- Allow .EQU and .RSSET values to use "$xx:xxxx" to specify bank and addr.
- Fix zero-byte procedure relocation when at the end of a bank.
- Fix operator precedence of unary "<" and ">".
- Add "linear(label_name)" operator to get the label's 32-bit address-offset
from the start of the ROM/SCD/CD memory.
New in version 3.99:
--------------------
2021-12-31:
-----------
PCEAS changes ...
-----------------
- Bump version number to 3.25 (see ./doc/pce/usage-3.25.txt)
- Add "!" multi-labels, which are a form of "nameless" labels.
- Add label-scopes, which add a base-name to every label inside the scope.
- Add ".align", ".const", ".cpu", ".dword", ".encoding", ".ends", ".fill",
".label", ".segment", ".set", ".struct", ".text", ".var", "*="
- Allow section changes in ".proc" and ".struct", but restore original
section at ".endp" and ".ends".
- Add "{}" in ".kickc" mode, which acts as both a ".proc" and a ".struct",
and also changes the handling of JSR and RTS instructions.
- Fix broken ".opt" processing, enabling "l,m,o" options.
NB: ".opt l+" is the same as ".list"
NB: ".opt m+" is the same as ".mlist"
NB: ".opt o+" is OPT_OPTIMIZE, which does nothing.
- Add ".opt a+" to automatically use ZP addressing when labels are known.
- Add ".opt b+" to convert out-of-range branches to long-branches.
- Add ".opt c+" to allow C-style comments in source.
- Add ".opt i+" to use "()" for traditional 6502 indirect-addressing.
- Add ".opt w+" for optional warnings, i.e. when a long-branch is generated.
- Add "-kc" flag for assembling KickC-generated code.
NB: Sets ".opt c+"
- Add ".pceas" and ".kickc" to set current compatibility-mode.
NB: ".pceas" mode also sets ".opt a-,b-,i-" (default)
NB: ".kickc" mode also sets ".opt a+,b+,i+"
- Add '>' to force absolute addressing mode and match existing '<'.
- Add ".a" and ".z" instruction suffixes to force addressing mode.
- The 'A' operand in ASL/DEC/INC/LSR/ROL/ROR is now optional.
- Allow ".db/.dw/.dd" in ZP and BSS sections, but only if data is zero.
2021-11-16:
-----------
HuC changes ...
---------------
- Allow the initial SCD overlay program to be larger than 192KB.
PCEAS changes ...
-----------------
- Local labels can now start with a '@'.
- Add the ability to read graphic files in ".BMP" format.
- Add ".dd" for generating 32-bit data values.
- Only include each ".include" file once per pass, no matter how many times
that same file is included from different source files.
- Allow procedure relocation to use unused memory at the top of existing banks
and not just allocate new banks, in order to reduce overall ROM size.
- Keep _bank_base (the ASM symbol for the starting bank) the same during
both assembly passes, which makes "bank(my_symbol)" work reliably.
- Add the ability to use "bank(*)" and "page(*)" in expressions.
- Allow C-style "==" as an alternative to "=" as a comparison operator.
- The bank/page/offset of the procedure trampolines can now be set during
assembly, although changing the MPR that the procedures run in can still
only be set on the command-line (i.e. with "-newproc").
- Allow an optional expression after ".else" and ".endif" which, when present,
is checked to make sure that it matches the previous ".if".
- Allow more data, and/or a comment, to appear after a string on a ".db" line.
- Add "-newproc" to run ".proc" code in MPR6 instead of MPR5.
- Add "-strip" to remove ".proc" code that is defined by not referenced.
- Add "-ipl" option to pre-fill PCEAS memory with the 4KB of a CD-ROM IPL.
- Add "-trim" option to strip off the unused head and tail of a ROM.
ISOlink changes ...
-------------------
- Add a directory of the CD-ROM contents into the ".ISO" file's IPL sectors.
- Add the ability to use a customized IPL file on the ".ISO", or to specify
new IPL boot parameters that replace HuC's normal boot parameters.
- Add the "-asm" option to stop ISOlink from patching ".OVL" files on the CD
with HuC-specific data.
New tools ...
-------------
- Add "sym2inc" tool so that symbol files can be parsed to make include files.
- Add "wav2vox" tool for ADPCM compressing audio files to use on a PCE CD-ROM.
2020-04-14:
-----------
- Added support for "macro" append option for pragma fastcalls. The output
of the corresponding macro name is used in place of "call". It equates
to in-lining the asm code. Note: arguments are not passed to the macro.
2018-07-07:
-----------
- Fix potential buffer overrun in optimize.c that GCC7 complains about.
- Increase switch label stack size from 100 to 256.
- Allow a zero rows and/or columns size in .incchr, .inctile, etc to
autosize from the image itself.
- When using .inctile, tile #256 now wraps around onto tile #0 (with a
warning message), so that ProMotion tilemaps can use all 256 tiles.
- Add .incchrpal, .incsprpal, and .inctilepal commands to PCEAS so that
the user can create palette lookup tables for HuC maps directly from
the character, sprite and tile graphics.
- Add #incchrpal, #incsprpal, and #inctilepal commands to HuC so that
the user can create palette lookup tables for HuC maps directly from
the character, sprite and tile graphics.
- Add new example project that shows using ProMotion to create HuC maps.
- Update PCEAS documentation with latest features.
2017-02-21:
-----------
- Imported Uli's v3.98 version of HuC (https://github.com/uli/huc)
See README for all the changes that Uli made
- Applied changes from Artemio Urbina's fork of HuC
- Applied changes from Markus Buretorp's fork of HuC
- Fixed compilation on Windows with mingw-w64
- Fixed a few bugs related to Uli's improvements
- Changed System Card parameter equates to have a "__" prefix
- Changed startup.asm to allow a sound driver to use macros to integrate
- Removed Uli's support for interrupt handlers in HuC (they're too slow)
- New str/mem package to replace the old code
Note 1 : Strings are 255 bytes maximum (+ trailing null)
Note 2 : When a ptr is returned, it points to the end of the str/mem
This breaks ANSI/ISO compatibility, but is more useful
Note 3 : strncpy handing of the 'length' is the same as strncat
This breaks ANSI/ISO compatibility, but reduces code size
- Bumping version number for all the current changes
- Stop HuC adding an extra ".dw" to usage of .incchr/.incspr/.incpal/etc
- Add extra parameter to set_tile_data() to set the tile type (8 or 16)
set_tile_data(char *tile, int nb_tile, char *ptable, char type);
- Rewrite load_vram to use 32-byte TIA instructions (3x speed improvement)
- Fix writing of instructions/data that cross a bank boundary.
- Add "-pad" to PCEAS to pad out HuCard ROM images to next power-of-2 size.
- Change HuC to use "-raw" and "-pad" options to avoid 384KB HuCard problem.
- Add warning whenever a 384KB HuCard image is created to highlight problem.
- Allow unary <,>,^ in PCEAS as synonyms for low(),high(),bank().
New in version 3.21:
--------------------
- Added support for adpcm
- Fixed bug in pseudo.c when opening bad filename in '#incchr'
- Added support for non-256-wide maps, the multiply was wrong (map_get_tile/map_put_tile).
- Fixed bug for a 3-parm set_map_data, the mapheight was always greater than 256
- Fixed bug to support bank boundary crossing map data (in map_calc_tile_addr)
- Fixed bug to support bat wrapping in load_map function
- Fixed bug in dumplits (in main.c), const bytes were and'ed by 127
New in version 3.20:
--------------------
- New tile functions from David Michel !
These functions allow for more flexible use of palettes, and will allow use
of 8x8 tile or 16x16 tiles with the same functions. (see below)
- Ensured at least 2 seconds of trailing zeroes on CDROM tracks
- Fixed bug with FONT_BANK continuing to be addressed in bank $81
(instead of $69) for SCD's
- Sped up BLiT to VRAM in functions satb_transfer() and load_palette()
by using a RAM-resident TIA function to BLit 32 bytes at a time.
- Cleaned up set_xres() code a bit
- Added new functionality to use custom CDROM program instead of default
"Super System Card needed" error message when running SCD programs on
plain old CDROM hardware
- Added directives:
- #incchr_ex(my_chr, "file1.pcx", x, y, cols, rows, pal_idx1, \
"file2.pcx", x, y, cols, rows, pal_idx2, \
"filex.pcx", x, y, cols, rows, pal_idxx );
- #inctile_ex(my_chr, "file1.pcx", x, y, cols, rows, pal_idx1, (... etc... ) );
- Note: the #incchr_ex() and #inctile_ex() directive only work with set_tile_data()
but raw data of 'my_chr' can be accessed as 'my_chr__data__'
- Note 2: both of these #incxxx() directives now prepend a 'data type' integer
immediately before the label. This means that multiple #incxxx() data elements
can no longer be addressed as a single contiguous data element.
- Added functions:
- cd_status(int) - $00 input -> 'busy check', else 'ready check'
busy check: $00 return -> not busy, else busy
ready check: $00 return -> ready, else sub error code
- set_tile_data(my_chr); (see #incchr_ex(); and #inctile_ex();)
- map_put_tile() will manipulate the map data (if in RAM)
- srand(int rand) to set random number seed
('C' function should have existed before, but only
asm was accessible)
- srand32(int rand1, int rand2) to set a full 32-bit random number seed
- Renamed functions:
- 'get_tile()' is now called 'map_get_tile()' to match 'map_put_tile()'
New in version 3.12 beta: (not formal release)
-------------------------
- Substantial updates to Makefiles for building DOS versions and improved
dependencies
- Possibly improved speed of satb_update() by resetting the automatic counter
for maximum sprites *_on each transfer_*
- Tinkered with optimization quite a bit:
- comparison operators are substantially faster now (about twice as fast)
- increment/decrement operators are also improved (both pre- and post-)
- increased speed of logical-AND, logical-OR, and subtraction functions in most
situations, and addition functions in some (was already optimized in most
situations)
- significantly increased speed of array-accesses (3 to 4 times faster !)
- generated code is smaller, but you may or may not save any ROM banks
- Fixed bug in abs() function - which was masked on MagicEngine by a bug in its
CPU core !
- Fixed bug regarding length of compile filenames (too short)
- Fixed screen-positioning between CDROM and HuCard. They match now.
- Roughed-in PSG player for HuCard including data
- Added/started new tool, 'pcxtool' for manipulating PCX palettes
- Roughed-in area for new tool, MOD2MML
- New functions:
- clock_hh() - gets time (hours part) since startup (0-255)
- clock_mm() - gets time (minutes part) since startup (0-59)
- clock_ss() - gets time (seconds part) since startup (0-59)
- clock_tt() - gets time (ticks part) since startup (0-59)
- clock_reset() - resets clock to 00:00:00.00
New in version 3.11:
--------------------
- NEW horizontal resolution - up to 512 pixels per line, useable in set_xres()
(Thanks to Charles MacDonald)
- Added support for color-correction flag which makes images look better
Defaulted to use this flag (again, thanks to Charles MacDonald)
- changed set_xres() function to allow 1 or 2 parameter versions:
- set_xres(x_resolution)
- set_xres(x_resolution, color_correct_flag) (XRES_SHARP or XRES_SOFT)
- fixed horizontal alignment for set_xres() and HSR/HDR macros, especially for
5.37 MHz dot-clock versions - Thanks to Frank Caputo for highlighting the issue
- fixed put_number(3-parameter) bank switching bug
- added new graphics function:
- gfx_line(int x1, int y1, int x1, int y2, char color)
New in version 3.10:
--------------------
- fixed __fgetb MACRO so that far-pointer subscripting will work - well actually,
this fix snuck in during the final moments of the HuC v3.04 release
- fix "vram[n] = val" assignment operation
- Added overlay support by doing the following:
- add '-overlay' as command line switch to MagicKit which does
everything as before except add the boot sector and the trailing
empty space; uses file suffix '.ovl' for code overlays
- add '-overlay' as command line switch to huc which passes it to
MagicKit and adds an implicit '#include "globals.h"' for
standardization of BSS segment across modules (ie. linking)
- create new utility 'isolink' to make the iso image from the ipl.bin and all
the stated modules. An array of module info is encoded into the library
segment of all overlays for use by all overlays.
- second entry point for overlays which only maps needed segments (doesn't
initialize hardware or erase memory)
- Added functions to read the CD:
- cd_execoverlay(int ovl_idx)
- cd_loadvram(int ovl_idx, int sector_offset, int vram_addr, int bytes)
- cd_loaddata(int ovl_idx, int sector_offset, farptr seg:addr, int bytes)
- Backed out changes which deleted writevram/readvram; the 'C' syntax 'vram[n] = val'
and 'val = vram[n]' were broken by this.
- Backed out creation of vm_rawread() and vm_rawwrite() functions (use vram[] access
method as stated above)
- Added one more cd function:
- cd_trkinfo(char track, char * min, char * sec, char * frame)
New in version 3.04:
--------------------
- Fixed the darn 'i' and 'z' characters in the font. They looked so weird
they were bothering me
- Allowed an override to the VRAM address where the font is loaded at bootup
Just place '#asmdef FONT_VADDR $1000' to load it at $1000 in VRAM instead
(default location is at $0800)
- Fixed the ROM size totals on 'Segment List' output from assembler to also
include empty segments
- Fixed several bugs from v3.03:
- bm_rawwrite.2 (name)
- fixed length of name comparison in bm_*() functions
- CD/SCD would not compile (LIB1_BANK was too full)
- subtle change in strncpy/strncat - behaviour now matches gcc/linux
- Moved several functions to LIB2_BANK from LIB1_BANK including
- most of the BRAM library
- farmemget() from huc_misc.asm
- Changed a few more functions to pragma fastcall
- Modified the random number generator slightly
- Added 'get random number' during VSYNC interrupt; hopefully it will be
a bit more random now
- Obsoleted the CDROM-card grp_*() functions - I couldn't get them to work
- Removed library functions which were not visible to 'C', and not
referenced anywhere. Replaced with functions visible to 'C'.
- writevram
- readvram
- Added new memory-access functions:
- peekw(int) - returns 16-bit peek value
- pokew(char *, int) - places 16-bit integer value into memory
- vm_rawread(int) - returns 16-bit value from VRAM at address
- vm_rawwrite(int, int) - places 16-bit value into VRAM at address
- Added pixel-graphics functions (thanks to Frank Caputo for model code):
- gfx_setbgpal(char) - set major palette # for use in gfx_init
- gfx_init(int) - initialize BGMAP to point to sequential tiles at given
address in VRAM
- gfx_clear(int) - initialize tiles at given address in VRAM to all zeroes
up to size of the virtual screen
- gfx_plot(int x, int y, char color) - set a pixel to color, at position (x,y)
- gfx_point(int x, int y) - determine color of pixel at position (x,y)
- various minor changes to macros, etc.
- Added a couple more "pragma fastcall" definitions
>> you may find that you need a temporary variable in some cases if you
>> used a function call as a parameter to a fastcall function, such as:
>> "poke(loc, peek(loc)+1);"
New in version 3.03:
--------------------
- Added some better output to segment listing
- Fixes and documentation improvements to some existing bm_* (backup memory)
functions, especially pertaining to "what is a BRAM name" and the return value
from bm_exist()
- Several new BRAM functions
- bm_size(void) - total size of BRAM, as formatted
- bm_sizeof(char *) - return size of user data from named BRAM file
- bm_getptr(int, char *) - get name of file at ptr, and return ptr to next
(see documentation)
- bm_delete(char *) - removed named file from BRAM
- bm_rawread(char *) - read byte in BRAM at ptr (or offset)
- bm_rawwrite(char *, char) - write byte to BRAM at ptr (or offset)
- added several standard C copy/compare functions:
- strcpy()
- strncpy()
- strcmp()
- strncmp()
- strcat()
- strncat()
- memcpy()
- memcmp()
New in version 3.02:
--------------------
- Removed two excess unused banks in output file
- Merged font bank with new bank for library routines
- Move some functions into second library bank
- For SCD's, check machine at bootup; show error message on lesser machines
- Changed Segment-Usage output significantly
- Improved default font
- Added new font data (italic print) - but not tested
- Roughed-in Arcade Card ports in equ.inc
- Fixed cd_fade() function to call CD_FADE properly
- fixed cd_playtrk() to convert values to BCD before calling BIOS
- new CDROM/Arcade Card functions:
- ac_exists(void) - returns 0 if no AC, 1 if AC exists
- ad_reset(void) - reset ADPCM device
- cd_unpause(void) - to continue playing audio after pause
- cd_playmsf(start m, s, f, end m, s, f, mode) - minute/second/frame
version of cd_playtrk()
- cd_numtrk(void) - returns number of tracks on disc
- cd_trktype(int track) - returns media type of given track (audio/data)
- GRAPHICS functions - but I can't get them to do as expected
- grp_init(void) - initialize graphics BIOS
- grp_cls(void) - clear screen from graphics BIOS
- grp_set(x,y,color) - set a pixel
- grp_point(x,y) - find a pixel's color
- grp_line(x1, y1, x2, y2, color) - draw a line
- grp_box(x1, y1, x2, y2, color, fill) - draw a box, filled or not
- grp_flood(x, y, color) - flood area with (color) pixels
- grp_paint(x, y, ?, color) - ???
New in version 3.01:
--------------------
- Fixed joytrg() problem on CD version
- 2 new joystick functions: joyold() and joybuf()
- Fixed minor initialization bug in mouse driver
- replaced literals with argument MACRO constants in library.inc
- added RAM-based IRQ handlers so CDROM calls won't get killed by
interrupts
- new CDROM library functions:
- cd_reset(void) - resets CD player & stops motor
- cd_pause(void) - pauses while playing music
- cd_playtrk(int start_trk,int end_trk,int mode)
- play music either mute, normal, or repeat
- Note: end_trk is the first track that you
DON'T want to play
- ex_getver(void) - get CDROM version
- cd_fade(int mode) - (ADPCM/PCM only; not for CD music)
New in version 3.0:
-------------------
- Added support to boot from CDROM
- upgraded number system to match between HuC and MagicKit
- fixed some bugs in compiler, assembler, and libraries
- eliminated several useless command-line options