+ CODES +----------------- - - - - - - -
TEXT ARITHMETICS. W=Z.
----------------------------
(C) DENIS TOKARCHUK
BY RIGHT, PROBABLY BELONG TO THE PRIMARY PLACE OF CODING
ASCII (8BB) IN THE WORLD OF TEXTS. YES, IT PROVIDES HUGE
OPPORTUNITY IN TEXT WRITING. THIS SYSTEM OF SIGNS
ELEGANT, COMFORTABLE, BEAUTIFUL. AND THIS IS NOT A WORD OF SUBSCRIPTION, BUT ONLY
STATEMENT OF FACT. I THINK THIS CODING WOULD NOT TAKE FIRST
PLACES IF SHE WERE WORRY AND UNCOMFORTABLE. HOWEVER, SHE ALSO HAS
THEIR INCOMPATIBILITY PROBLEMS, PROBABLY RESULTING FROM POLITICS
SOME BIG COMPUTER COMPANIES. OKAY, I'M DISTRACTED.
BUT NEVERTHESOUS WHATEVER ASCII IS UNIVERSAL, BUT
IT EATS IMMENSELY VALUABLE MEMORY. YES, OF COURSE, THE LETTERS DON'T DO THIS
NOTICE - THEY HAVE RUBBER SCREWS, AND 1.HH MEGABYTE DISKS, AND
RAM - TENS, OR EVEN HUNDREDS OF MEGABYTES. DIFFERENTLY YOURSELF
FEEL THE SPECTRUM, IN WHICH 128 KILOBYTES IS ACCEPTED AS THE STANDARD AND
DISCS BY BZB KILO. HOWEVER THEY THOUGHT TO REDUCED THE SIZES
TEXTS ARE SPECTRUM PUBLISHERS, BUT REALLY EFFECTIVE
COMPRESSINGNO ALGORITHMS AND CODINGS WERE DEVELOPED. I HAVE
BECAUSE THERE ARE NOT THOSE COMPRESSORS THAT SIMPLY COMPRESS IN FRONT
'USE' TEXT IN MEMORY; NAMELY ALGORITHMS CAPABLE
SAVE VALUABLE KILOBYTES WITHOUT COMPRESSION.
AS YOU PROBABLY NOTICED - ALL LETTERS ARE IN OUR NEWSPAPER
CAPITAL. AND THIS IS NOT AN EDITOR'S JOB, BUT A NECESSITY,
CAUSED BY MEMORY SAVINGS. IN ACTIVITY, HERE IS THE TEXT AND
PRESENTED IN ENCODING DEVELOPED SPECIALLY FOR ZX-TIME.
THE ENCODING IS CALLED 'ZXT B-BIT SYMBOLIC CODES V.1' (ZXTБВСС1).
AS IS SEEN FROM THE TITLE, THIS CODING HAS THE MAXIMUM
LETTER SIZE IS SIX BITS. AND FROM HERE IT BECOMES CLEAR
NEXT - THREE BYTES CAN FIT H LETTERS. IT COMES OUT
THAT THE SAVINGS ARE 2S% COMPARED WITH ASCII REGARDLESS
FROM THE SIZE AND CONTENT OF THE TEXT. NATURALLY, I HAD TO DO SOMETHING
DONATE. ALTHOUGH 'SOMETHING' IS A WEAK SAY... THIS AND THE ABSENCE
SMALL LETTERS AND TEXT GRAPHICS, AND CHARACTER REDUCTION
SET. SO YOU CAN DECIDE FOR YOURSELF WHETHER TO SACRIFICE
WITH THESE BENEFITS FOR THE SAKE OF MEMORY SAVINGS...
IT IS ALSO NECESSARY TO DRAW A SPECIAL FONT FOR THIS CODING.
THE SIX-BIT FORMAT IS PERCEIVED LESS PAINFULLY WHEN
USING A FONT WIDTH H POINTS (CHARACTER IN LINE), AS
IT'S MADE BYUS. ON OTHER FONTS THE SCARY IS VERY VISIBLE
CHARACTER SET. :(
BUT I REPEAT - BY LOSSING THESE BENEFIT OF CIVILIZATION WE GAIN ON
THERE ARE SO MUCH VALUABLE KILOBYTES FOR US. FOR EXAMPLE: IN ZX-TIME UNDER TEXT
S MEMORY PAGES ARE ALLOCATED (S1БК=8ОК). THAT IS TO THE NEWSPAPER
MAXIMUM CAN FIT: (8192О BYTE 8 BIT)/B BIT=1О922Б
CHARGES. SO, IN 8OK WE PUT MORE THAN 1OBK. WOULD WE HAVE A TEXT
IN REGULAR ASCII, WE WOULD BE BROUGHT, THINKING - WHAT ABOUT THESE 2B
LOAD A KILOBYTE... ALTHOUGH PERHAPS 1OB KILOBYTE MAY NOT
ENOUGH... BUT THAT'S ANOTHER STORY.
FROM THE THEORY I MOVE TO... THE NEXT THEORY :). NOW I WILL TELL YOU
HOW DID I MANAGE TO PUSH IT INTO SIX BITS (BZ SIGN)
CAPITAL LETTERS OF THE RUSSIAN AND ENGLISH ALPHABET, NUMBERS, SIGNS AND
ONE SINGLE CONTROL CODE (LINE FEED). THIS WAS
PRETTY PAINFUL, AS ELIMINATING ANOTHER SIGN
IT WAS PAINFUL AND THE WHOLE UNDERTAKING WAS IN DOUBT - “AND ON
WHAT IS ALL THIS NEEDED!?!'. HOWEVER, HOW LONG I HAVE THROWN ALL THIS
WORK FOR A LONG BOX, STILL FINISHED THE WORK TO THE END.
AS IS KNOWN, IN THE RUSSIAN ALPHABET THE LETTERS 33, IN THE ENGLISH
(LATIN) THE ALPHABET IS 2B, THE NUMBERS SHOULD BE 1O, AND THE SIGNS SHOULD BE AS
MINIMUM 17 PLUS SPACE AND 'EPTEG'. ЗЗ+2Б+1О+17+1+1=88 CHARACTERS. BUT
YOU CAN SAVE IFSOME RUSSIAN LETTERS 'REPLACE'
IN ENGLISH, SIMILAR NUMBERS SHOULD ALSO BE PROVIDED IN
ORDER OF ANY ALPHABET (FOR EXAMPLE, THE SYMBOL 'O' - OH U
US AND ZERO, AND THE ENGLISH LETTER O, AND THE RUSSIAN LETTER O). SO AND
SAVE ON LETTERS.
NOW THE TABLE WILL SHOW YOU THE LIST OF CODES:
+------------+------------+------------+------------+
- SIGN ' CODE + SIGN ' CODE + SIGN ' CODE + SIGN ' CODE +
+------------+------------+------------+------------+ - A ' #OO + Q ' #1O + 8 ' #2O + / ' #ZO +
- B ' #O1 + G ' #11 + 9 ' #21 + = ' #З1 +
- S ' #O2 + S ' #12 + F ' #22 + ! ' #З2 +
- D ' #OZ + T ' #1Z + J ' #2Z + . ' #ЗЗ +
- E ' #OC + I ' #1CH + L ' #2CH + , ' #ZCH +
- F ' #OS + V ' #1S + F ' #2S + ; ' #ЗS +
- G ' #OB + Sh ' #1B + C ' #2B + : ' #ZB +
- N ' #O7 + X ' #17 + Ш ' #27 + ' ' #З7 +
- I ' #O8 + U ' #18 + b ' #28 + $ ' #З8 +
- J ' #О9 + Z ' #19 + Ш ' #29 + % ' #З9 +
- K ' #OA + 1 ' #1A + E ' #2A + ( ' #ZA +
- L ' #OB + 2 ' #1B +Yu ' #2В + ) ' #ЗВ +
- M ' #OS + Z ' #1C + I ' #2C + ? ' #ZS +
- P ' #OD + H ' #1D + + ' #2D + # ' #ZD +
- O ' #OE + B ' #1E + - ' #2E +SPACE' #ZE +
-
P ' #OF + 7 ' #1F + * ' #2F + EPTEG' #ЗF +
+------------+------------+------------+------------+WELL, NOW IT’S EASY TO GUESS WHAT IS REPLACING WHO, WHERE...
NOW LET'S TALK ABOUT HOW TO TRANSLATE THE TEXT INTO THE ZXTBВС1 FORMAT.
LET'S LOOK AT THE BINARY VIEW OF THE 'MASK' SIX-BIT SYMBOL
FORMAT:
%OO111111
BUT HERE IT IS REPRESENTED IN A WHOLE BYTE, WHERE THE FIRST TWO BITS ARE
NOT USED. IN ACTIVITY, THERE WOULD BE NO POINT TO BREW THE WHOLE
IT WOULD BE IF IT WAS NOT FOR THESE TWO BITS. AS NOTED ABOVE, IN THREE BYTES
THERE ARE FOUR SIGNS, AND THIS MEANS THAT WE WILL BE WISE AND
WHATEVER IT COSTS US, PUT SIX-BIT CHARACTERS IN
A BEAUTIFUL CONTINUOUS CHAIN OF BITS. THAT IS, WE WILL BE RUTHLESS
BREAK UP SIX-BIT SYMBOLS AND SPLIT THE SAVED PIECES
FOR THE REMAINING TWO BITS OF EACH BYTE. LIKE THIS:B BIT B BIT B BITB BIT ------------------- ------- ------ O11OO1 O1 O111 1O11 1O O1OO11 --------- --------- --------- 1 BYTE 1 BYTE 1 BYTEIT SAYS 'ZX-T' (FOUR CHARACTERS). YOU CAN COUNT - BYTES
THIS TOOK ONLY THREE.. SO WE SMOOTHLY MOVE TO
PRACTICE...
HOW TO BREAK A SYMBOL AND PLACE ALONG THE REMAINING TWO BITS
EACH BYTE IS PIECES OF INFORMATION CHARACTERS, AND DOING ALL THIS
BYTE-BYTE, CHARACTER-BY-CHARACTER? (EXPERIENCED PROGRAMMERS CAN
DO NOT READ ANY FURTHER, BUT LEAVE FOOD FOR YOUR SOPHISTIC MINDS FOR
OWN PERFORMANCE OF THE IDEA INTO ASSEMBLY TEXT).
AS MANY HAVE PROBABLY GUESSED, THIS IS ACHIEVED BY SHIFTING
PLUS A PAIR OF LOGICAL COMMANDS (ADF AND OG). BUT TO START YOU NEED IT YOURSELF
CONVERT THE SYMBOL CODE INTO ITS EQUIVALENT FROM THE TABLE,
WHICH IS GIVEN ABOVE. AND THEN YOU NEED TO COMBINE
SIX-BIT BYTES IN A CONTINUOUS CHAIN, LIKE OURS
THE BYTES ARE NOT EIGHT BITS, BUT SIX BITS.
AT FIRST LOOK IT IS EXTREMELY DIFFICULT TO DO THIS, BUT WHEN THE TASK IS DONE
WHEN YOU PLACE ON 'SHELVES', EVERYTHING BECOMESVERY SIMPLE.
(BY THE WAY, ANY TASK ASSIGNED TO THE PROGRAMMER IS
IT IS BREAKED INTO SMALL SIMPLE TASKS... - BUT THIS IS SO
WORD). SUPPOSE, OUR TEXT IS LOCATED AT TXT ADDRESS...HERE IS THE CONVERTER ALGORITHM (EXPANDED): ... ! +----------------------------+ ' TAKE BYTE (CHARACTER) FROM TXT ' +----------------------------+ ! +---------------------------------+ ' TRANSLATE IT INTO CODE USING THE PLATE ' +---------------------------------+ !+---------------------------------------------------+
' SHIFT THE RECEIVED CODE TWICE TO THE LEFT (GLSA+GLSA) '
+----------------------------------------------------+
!
+----------------------------+
' WRITE THE RECEIVED IN TXT '+----------------------------+
!
+---------------------+
' TAKE BYTE FROM TXT+1 '
+---------------------+
!
+---------------------------------+
' TRANSLATE IT INTO CODE USING THE PLATE '
+---------------------------------+
!
+--------------------------------------------+
' SHIFT THE RECEIVED CODE FOUR TIMES TO THE RIGHT '
' (GGSA+GGSA+GGSA+GGSA) '
+--------------------------------------------+
!
+--------------------------------------------------+
' WRITE THE RECEIVED INTO THE INTERMEDIATE BUFFER (OR '
'REGISTER)'
+--------------------------------------------------+
!
+----------------------------------------------------------------+' WE MAKE ADF %OOOOOOOO11 TO 'SIFT OUT' THE UNNECESSARY '
+--------------------------------------------------+
!
+---------------------------------------------------+
' THEN WE MAKE A COMBINATION (ON OG) WITH THE CODE FROM TXT '
+---------------------------------------------------+
!
+----------------------------+
' WRITE THE RECEIVED IN TXT '
+----------------------------+
!
+----------------------------------------------+
' REMOVING THE CODE FROM THE PRODUCT BUFFER (OR FROM THE REGISTER) '
+----------------------------------------------+
!
+-------------------------------------------------+
' WE MAKE ADF %1111OOOOO TO 'SET OUT THE UNNECESSARY' '
+-------------------------------------------------+
!
+---------------------------------+
' WRITE THE RECEIVED IN TXT+1 '+---------------------------------+
!
+---------------------+
' TAKE BYTE FROM TXT+2 '
+---------------------+
!
+---------------------------------+
' TRANSLATE IT INTO CODE USING THE PLATE '
+---------------------------------+
!
+----------------------------------------+
' SHIFT THE RECEIVED CODE TWICE TO THE RIGHT '
' (GGSA+GGSA) '
+----------------------------------------+
!
+--------------------------------------------------+
' WRITE THE RECEIVED INTO THE INTERMEDIATE BUFFER (OR '
'REGISTER)'
+--------------------------------------------------+
!
+--------------------------------------------------+
' WE DO ADF%OOOO1111 FOR 'SITTING OUT THE UNNECESSARY' '
+--------------------------------------------------+
!
+-------------------------------------------------------+
' THEN WE MAKE A COMBINATION (BY OG) WITH THE CODE FROM TXT+1 '
+-------------------------------------------------------+
!
+---------------------------------+
' WRITE THE RECEIVED IN TXT+1 '
+---------------------------------+
!
+-----------------------------+
' REMOVING THE CODE FROM THE PRODUCTION BUFFER (OR REGISTER) '
+-----------------------------+
!
+-------------------------------------------------+
' WE MAKE ADF %11OOOOOOOO TO 'SET OUT THE UNNECESSARY' '
+-------------------------------------------------+
!
+---------------------------------+
' WRITE THE RECEIVED IN TXT+2 '+---------------------------------+
!
+---------------------+
' TAKE BYTE FROM TXT+Z '
+---------------------+
!
+---------------------------------+
' TRANSLATE IT INTO CODE USING THE PLATE '
+---------------------------------+
!
+-------------------------------------------------+
' COMBINE (BY OG) OBTAINED WITH THE CODE FROM TXT+2 '
+-------------------------------------------------+
!
+---------------------------------+
' WRITE THE RECEIVED IN TXT+2 '
+---------------------------------+
!
...HERE, IN ACTIVITY, WE HAVE SETTED IT 'ON THE SHELVES'. I HOPE NOW
YOU WILL HAVE EVERYTHINGIT'S CLEAR. AND FOR EVEN GREATER VISUALIZATION, I ATTACH
THIS NEWSPAPER ISSUED SOURCE CONVERTER IN ALASM. THERE TOO
THERE ARE COMMENTS.
AND I WILL NOT EXPLAIN THE OUTPUT (SO TO SAY, 'UNCONVERTER')
I WILL. IT'S SIMILAR TO A CONVERTER - ONLY NOW YOU HAVE TO DO EVERYTHING
OPPOSITE: 'RESTORE' SIGNS. BUT IF YOU CAN'T
TO MAKE A CONCLUSION, THEN WRITE A LETTER TO THE EDITORIAL ADDRESS - AND I
I WILL POST AN OUTLINE IN THE FOLLOWING ISSUE OF THE NEWSPAPER AND, IF YOU WANT,
JUST LIKE TODAY, I WILL 'UNDERSTAND' THE PRINCIPLE OF ITS WORK. ALTHOUGH NOT
I IMAGINE WHAT DIFFICULTIES COULD ARISE..
Share your thoughts about the article