Mad Pascal Versions Save

Mad Pascal Compiler for 6502 (Atari XE/XL, C64, C4Plus, Neo6502)

v1.6.9

7 months ago
  • improved memory allocation for arrays [0..0], 'ABSOLUTE $0000' is enforced initially, 1 byte of memory is saved
  • added possibility to declare arrays without specifying their size, e.g.:

var tab: array of byte = [1,3,4,3,1]; var tb: array of char = 'abcdefghij';

  • new compiler directive {$bin2csv filename} allows you to initialize arrays e.g.:

var tb: array of byte = [ {$bin2csv filename} ];

  • new compiler directive {$optimization loopunroll}, {$optimization noloopunroll}, performs FOR loop unrolling with fixed parameters
  • new BLOWFISH module allowing to encrypt, decrypt character strings according to specified key
  • new example a8\AES-Rijndeal

v1.6.7-1.6.8

8 months ago
  • resignation of type expansion for expressions from SHR

  • new SAPR resource type, SAPRPLAY

  • for RMTPLAY, as the second parameter you can specify the address for variables on the zero page

  • SizeOfResource(variable, name)

  • unit SAPLZSS

  • unit SHANTI

  • unit SHA1

  • unit xSFX

  • unit SYSTEM: NtoBE, RorByte, RorWord, RorDWord, RolByte, RolWord, RolDWord, SarShortint, SarSmallint, SarLongint

  • possibility to instantiate an array of CHAR type by STRING (if string is shorter spaces will be inserted), e.g:

    tab: array [0..15] of char = '0123456789ABCDEF';

  • fixed passing function values through arrays

  • added support for VBLKI interrupts (immediate) via SetIntVec, GetIntVec (https://mads.atari8.info/doc/pl/przerwania/)

  • rewritten compiler code for mod separable modules

  • rewritten code for handling arrays with pointers to records 'tab: array [0..x] of record^'

  • added optimization 'Common head/tail Sequence coalescing'

1.6.6

1 year ago
  • improved implementation of EXIT
  • added ability to generate code for RAW (-target)
  • added support for INLINE modifier for procedures and functions
  • added ability to declare a variable on the null page by using REGISTER modifier
  • added support for TEXTFILE (TEXT) type
  • new unit INIFILES
  • unit SYSUTILS: CompareMem, TryStrToInt
  • unit SYSTEM: CompareByte, Pos, Delete
  • improved passing of parameters to objects (OBJECT) without participation of program stack :STACKORIGIN (in most cases)
  • added possibility to mark a variable as ephemeral [volatile] [volatile] vcount: byte absolute $d40b;
  • for OBJECT added methods CONSTRUCTOR, DESTRUCTOR
  • added support for macros {$define label (parameters) := expression}
  • added 'FOR element IN array' construction for arrays not exceeding 256 bytes
  • more free memory on the zero page, FXPTR, PSPTR pointers are now allocated depending on whether they are used
  • added support for FLOAT16 type
  • added support for procedural type
  • unit ZX2

1.6.5

3 years ago
  • rewritten handling of CASE OF
  • rewritten code optimization for arrays not exceeding 256 bytes
  • optimization for conditions '>', '<='
  • added memory allocation for STRING-type arrays (so far only the pointer was put away, it worked like 'array of ^string')
  • new platform added, Commodore C4 Plus
  • unit GRAPHICS: procedure Font(charset: pointer);
  • unit STRINGUTILS
  • unit MISC, RMT, CMC, MPT: DetectAntic
  • unit SYSTEM revised to include ATARI, C64, C4Plus platforms
  • unit ZX0
  • unit HCM2
  • added support of $resource (RCDATA, RCASM) for C64, C4Plus platforms, resources are sorted by ascending addresses
  • extended RCDATA resource with possibility to specify ofset for read file
  • added support for Pascal compliant syntax for ASM block, no { } brackets required
  • added new directive {$codealign proc = value}, {$codealign loop = value} allowing to align generated code

1.6.4

3 years ago
  • multiplying procedures u8x8, u16x16 replaced by code from CC65
  • adding the POKEY reset code at the beginning of the program launch
  • optimization of conditional IF expressions () and () and ... IF () or () or ...
  • CMP_SHORTINT, CMP_SMALLINT optimization
  • GRAPH, FASTGRAPH: SetActiveBuffer, SetDisplayBuffer, NewDisplayBuffer, SwitchDisplayBuffer, example demoeffects\lines2.pas, line3.pas, line4.pas
  • GRAPH: Ellipse procedure (X, Y, StAngle, EndAngle, xRadius,yRadius: Word);
  • MATH: Hypot
  • SYSTEM: Length(string_array[element])
  • SYSTEM: GetMem, FreeMem
  • SYSTEM: IntToStr(CARDINAL), Str(CARDINAL, STRING)
  • SYSUTILS: ByteToStr(BYTE): STRING
  • SYSUTILS: corrected FindFirst, StrToFloat
  • SYSTEM: corrected Val(string, real, code) ; Val(string, single, code)
  • new CIO unit: Opn, Cls, Get, Put, BGet, BPut, XIO
  • new SIODISK unit, separated from the SYSTEM
  • new S2 unit, integrated with handler installer VBXE-S2: (S_VBXE.SYS)
  • new DEFLATE unit, which performs DEFLATE decompression (procedure unDEF), example compression\undef.pas
  • new LZ4 unit, implementing LZ4 decompression (procedure unLZ4), example compression\unlz4.pas, unlz4_stream.pas
  • new APLIB unit, which performs apLib decompression (procedure unApl), example compression\unapl.pas, unapl_stream.pas
  • new CRC unit: function crc32(crc: cardinal; buf: Pbyte; len: word)
  • a new PASCAL procedure/function modifier, causing a new memory block to be assigned/released for variables each time a procedure/function is called, example 'math\evaluate.pas'.
  • added ability to disable ROM while maintaining system operation, {$DEFINE ROMOFF}
  • shorter names of the switch -zpage (-z), -stack (-s), -data (-d), -code (-c), -define (-d), -ipath (-i)
  • added possibility to generate code for C64 (-t c64)

v1.6.3

4 years ago