Previous Page Single Page Next Page  

* FIG FORTH FOR SERIES-16 MACHINES PAGE 9

0334 ****************************************************************** 0335 * 0336 * MACROS 0337 * 0338 ****************************************************************** 0339 * 0340 * THE DAP ASSEMBLER IS VERY POOR AT DEALING WITH STRINGS, AND THE 0341 * MACRO PREPROCESSOR CAN ONLY HANDLE VERY SIMPLE CASES. SO THE 0342 * 'HEAD' MACRO COULD NOT BE EFFICIENTLY DEALT WITH USING THESE 0343 * TOOLS. FOR THIS REASON A SEPARATE DEDICATED MACRO PREPROCESSOR 0344 * WAS WRITTEN TO EXPAND THE 'HEAD' MACRO. THIS IS AVAILABLE 0345 * AS 'HEADMAC.C' AND NEEDS A MORE MODERN MACHINE THAN A 0346 * SERIES-16 - SO IT'S A BIT OF A CHEAT... 0347 * 0348 * 'HEAD' TAKES THREE OR FOUR ARGUMENTS: 0349 * 0350 * (1) A FLAG - NORMALLY 'FNUL', OR 'FIMD' WHICH INDICATES AN 0351 * IMMEDIATE OPERATION. 0352 * (2) THE NAME OF THE WORD, WHICH IS CONVERTED TO A STRING 0353 * (3) A LABEL USED FOR THE CODE FIELD 0354 * (4) OPTIONALLY A LABEL FOR THE 'DO' ROUTINE. IF NOT PASSED 0355 * THEN A PRIMITIVE IS BEING DEALT WITH AND NO CODE FIELD 0356 * IS PRODUCED - THE FOLLOWING ASSEMBLER STARTS AT CFA. 0357 * 0358 * THE HEAD MACRO PRODUCES A FORTH HEADER COMPRISING: 0359 * (1) THE NAME FIELD. ON SERIES-16 MACHINES ASCII CHARACTERS 0360 * USUALLY HAVE THE TOP BIT SET, SO USAGE IS REVERSED FROM 0361 * MOST FIG FORTHS - MOST CHARACTERS HAVE THE TOP BIT SET 0362 * WHILE THE LENGTH BYTE, AND THE LAST BYTE HAVE IT CLEAR. 0363 * THE IMMEDIATE FLAG IS PLACED IN THE 2^64 BIT OF THE LENGTH 0364 * BYTE. THE LOWER 6 BITS HOLD THE LENGTH, SINCE THE MAXIMUM 0365 * NAME LENGTH IS 31 CHARACTERS, THE 2^32 BIT IS NEVER SET 0366 * AND IS USED, IN THE TRADITIONAL WAY, AS THE SMUDGE BIT. 0367 * STRINGS ARE PACKED WITH THE EARLIER CHARACTER IN THE 0368 * MORE SIGNIFICANT BYTE, THE LENGTH BYTE BEING IN THE UPPER 0369 * BYTE OF THE FIRST WORD. 0370 * FOR STRINGS OF ODD LENGTH THAT, BECAUSE OF THE LENGTH 0371 * BYTE, FILL A 16-BIT WORD, THE TOP BIT OF THE LAST 0372 * CHARACTER IS CLEARED. 0373 * FOR STRINGS OF EVEN LENGTH THE TOP BIT OF THE LAST ACTUAL 0374 * CHARACTER (IN THE UPPER BYTE OF THE LAST WORD) IS SET IN 0375 * THE NORMAL WAY, THE LOWER BYTE IS ALL-ZEROS, AND SO THE 0376 * LAST WORD CAN BE LOCATED FOR BOTH ODD AND EVEN LENGTH 0377 * NAMES BY CHECKING THE TOP BIT OF THE LOWER BYTE. 0378 * SIMILARLY THE FIRST WORD CAN BE IDENTIFIED BY THE MOST 0379 * SIGNIFICANT BIT OF THE WORD BEING CLEARED. 0380 * (2) THE LINK WORD, POINTING AT THE NFA OF THE PREVIOUS 0381 * DICTIONARY ENTRY. 0382 * (3) WHERE THE OPTIONAL FOURTH ARGUMENT TO THE MACRO IS USED, 0383 * A 'JST' TO THE SUPPLIED LABEL.
  Previous Page Single Page Next Page