(C) Ivan Roshchin, 9. 04. 1997.
╔════════════════════════════╗
║ ║░
║ HELP_Z80 (beta-version) ║░
║ ║░
║ User's Guide ║░
║ ║░
╚════════════════════════════╝░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
┌──────────┐
│ Introduction │
└──────────┘
HELP_Z80 is a free (freeware), unparalleled utility that serves as an electronic reference guide for the commands of the Z80 microprocessor. It allows users to find the mnemonic (and its meaning), encoding, flag effects, and execution time for each processor command, as well as other useful information. HELP contains descriptions of 1136 commands, including undocumented ones, occupies about nine kilobytes in memory, and can run on ZX SPECTRUM 48... 512K. The beta version of the program differs from the full version only in that the corresponding machine codes for Z80 commands are not provided.
┌───────────────────┐
│ Loading and Running │
└───────────────────┘
In the simplest case, to start HELP, just enter the TR-DOS command:
RUN "HELP_Z80"
This command launches the Basic loader, which performs the following actions:
- if started from the 128K mode, the computer switches to 48K mode with open pages;
- the file "help_z80" is loaded into the seventh memory page;
- control is transferred to address 56064 = #DB00.
HELP can also be loaded into any other memory page, but for that, you will either have to rewrite the loader or perform the corresponding actions manually. Here are a few examples:
a) BASIC. Loading into the 1st page:
RANDOMIZE USR 0
CLEAR 24999
OUT 32765, 17
RANDOMIZE USR 15616
LOAD "help_z80" CODE
RANDOMIZE USR 56064
Re-running:
OUT 32765, 17: RANDOMIZE USR 56064
b) STS. Loading into the 1st page:
[B] #11
[L] help_z80, #DB00, #2500
[J] #DB00
When using STS version 5.0 and above, you can run HELP with the command [C] #DB00. In this case, after exiting HELP, control will return to STS.
c) Running HELP already loaded in the 1st page from an assembler program:
LD BC, #7FFD
LD A, #11
OUT (C), A
CALL #DB00
┌──────────────────┐
│ Working with HELP │
└──────────────────┘
After a brief message with the program name and author information appears, press any key, and you will see the main program screen:
┌───────────────────────────────────────┐
│ │
│ Z80 Processor Command System │
│ │
│ Legend │
│ │
│ - flag unchanged; │
│ flag set according to the result of │
│ the operation; │
│ 1 flag set; │
│ 0 flag cleared; │
│ ? flag undefined; │
│ P overflow/parity flag operates as a │
│ parity flag; │
│ V overflow/parity flag operates as an │
│ overflow flag; │
│ │
│ For some commands, two values are │
│ indicated in the t column: │
│ │
│ - for conditional commands JR,CALL,RET │
│ the second value is the clock cycles │
│ during CONDITION EXECUTION. │
│ │
│ - for "cyclic" commands (DJNZ, LDIR,..)│
└───────────────────────────────────────┘
You can view the information as regular text using the control keys:
[CS+6], [CS+7] (CURSOR) - move down and up a line;
[CS+3] - PageUp;
[CS+4] - PageDown;
[CS+1] (EDIT) - switch screens (as in STS). Works only if HELP uses the second screen. This function is convenient to use if HELP is loaded instead of STS and called from assembler. You can "simultaneously" see the source text of the program and information about Z80 commands.
[Q] - exit HELP (to assembler or to the calling program). Upon exit, the state of the processor is restored to the moment HELP was launched (see "System Information"). To exit to assembler, HELP sets page 4 of memory and executes the command JP #C000. This corrupts the values of registers A, B, C, as well as five bytes of memory from address #57E0 (however, this is not particularly significant). In some cases, to avoid issues, instead of exiting to assembler, it will return to the calling program. Exiting to assembler is not possible if:
- the assembler is not loaded (0 is at address #C000);
- HELP is running in 48K mode;
- HELP is in page 4;
- the stack is located above 25000.
Pressing the key combination [CS+SS] (EXT. MODE) activates Command mode, in which the following keys are active:
[CS+7] (up arrow) - go to the beginning of the text;
[CS+6] (down arrow) - go to the end of the text;
[Q] - an alternative way to exit HELP;
[S] - search for information about a specific processor command. You need to enter the mnemonic of the command in the same format as it is presented in the HELP text (you can specify only a few initial characters). If the command is found, information about it will appear in the top line of the screen; otherwise, HELP will signal with a color change of the border. The search always starts from the line of HELP that is at the top of the screen and continues cyclically. It can be interrupted at any time by pressing the BREAK key.
Example: searching for information about the command LD L, N
┌───────────────────────────────────────┐
│▒▒▒Command: Search LD L,N ▒▒▒▒▒▒▒▒▒▒▒▒▒│
│ Z80 Processor Command System │
│ │
│ Legend │
│ │
│ - flag unchanged; │
...................................
└───────────────────────────────────────┘
After completing the search:
┌───────────────────────────────────────┐
││LD L,N │2E N │- - - -│7 ││
│├───────────┼───────────┼──────────┼──┤│
││LD HX,N │DD 26 N │- - - -│11││
││LD LX,N │DD 2E N │- - - -│11││
││LD HY,N │FD 26 N │- - - -│11││
││LD LY,N │FD 2E N │- - - -│11││
...................................
└───────────────────────────────────────┘
With this same function, you can find out the meaning of a specific assembler mnemonic. To do this, you need to go to the beginning of the text and specify the desired mnemonic as the search string.
Example: searching for information about the mnemonic LD
┌───────────────────────────────────────┐
│▒▒▒Command: Search LD ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│
│ Z80 Processor Command System │
│ │
│ Legend │
│ │
│ - flag unchanged; │
..................................
└───────────────────────────────────────┘
After completing the search:
┌───────────────────────────────────────┐
│ LD - LoaD │
│┌───────────┬────────┬─────────────┬──┐│
││ │ │ Flags │t ││
││Mnemonic │ Code ├─────────────┤ ││
││ │ │C Z P/V S N H│ │
│├───────────┼────────┼─────────────┼──┤│
││LD A,N │3E N │- - - - - -│7 ││
...................................
└───────────────────────────────────────┘
[M] - all reference information is recorded in the memory area starting from address #6000=24576 in a regular text format. This function can be useful if you want to save the contents of HELP to a text file, for example, for subsequent printing. Since the text is very large (1670 lines, over 66K), it will be divided into three parts, and each time the function is called, the next part will be formed in memory. A message of the form will be displayed on the screen:
Command:
Making part 1, 24576, 23936
The first number indicates the start address of the text, and the second its length. To write the text to disk, you can use the TR-DOS or STS tools.
┌────────────────┐
│ HELP_Z80 + ASM │
└────────────────┘
You can load HELP into any assembler instead of the STS debugger. For example, in the assembler "ZX ASM 3.0", which I use, there is an option "Load sts". When selecting this option, you need to specify the name of the file that will be loaded as the debugger. You can specify the name "help_z80", work with HELP, and then, if needed, load STS and work with it. In other assemblers (TASM, MASM, ALASM), such a useful option is not available, so in this case, you will have to either rename the file "help_z80", say, to "sts5.1a", or load HELP manually. What can you do, there is still no assembler that fully supports all the capabilities of HELP, but let's hope this is a temporary phenomenon.
┌──────────────────────┐
│ HELP_Z80 + ASM + STS │
└──────────────────────┘
If there is free space in memory, you can simultaneously place the assembler, debugger, and HELP in it. In this case, you can call HELP from Basic or STS as indicated in the "Loading and Running" section. You can also write a User function for STS and call HELP with its help (see example). For users of the assembler ZX ASM 3.0, I can recommend placing HELP in the 3rd memory bank, while you will still have the option to use STS. Keep in mind that part of this bank, limited by the Pool size, is used for loading from disk during compilation. To prevent HELP from being overwritten, you need to set Pool size=7168 bytes. If double nesting of texts is used, this value will have to be reduced further (to 3584 bytes).
Example of a User function to call HELP when STS is in page 7, HELP is in page 3, and the resident is located at address #5B90:
LD HL,HLP_RES
LD DE,#5B90; address of STS resident
LD BC,14 ; its length
LDIR ; set new
; resident
LD BC,#7FFD
LD HL,#1B1F ; memory banks
LD (#5B9B),SP; saved SP
JP #5B90 ; call resident
HLP_RES OUT (C),H ; set bank
; of HELP
LD SP,#0000 ; new SP value
; (to remember return address)
CALL #DB00 ; called HELP
OUT (C),L ; set bank STS
LD SP,#0000 ; restored old
; SP value
RET ; and returned to STS.
A shorter version of this function for STS 5.1:
#FE2A: LD HL,#FE33 ; Set address.
CALL #E354 ; This subroutine
; will set the resident,
JP #E33D ; and this one will launch it.
;This fragment will work at addresses #5B90-#5BA4:
#FE33: LD HL,#1B1F ; these are memory bank
; numbers
LD (#5BA2),SP; saved SP
OUT (C),H ; set bank
; of HELP
LD SP,#0000 ; new SP value
; (to remember return address)
CALL #DB00 ; called HELP
OUT (C),L ; set bank STS
LD SP,#0000 ; restored old SP value
RET ; and returned to STS.
┌──────────────────────┐
│ System Information │
└──────────────────────┘
The information presented in this section will be useful both for the ordinary user and for those who want to write (or modify) an assembler or debugger to fully utilize the capabilities of HELP.
┌──────────────────────┐
│ Memory Distribution │
└──────────────────────┘
As you may have noticed, in terms of memory distribution, HELP is very similar to the well-known STS debugger. This is done specifically to ensure convenient use of HELP together with the assembler. HELP can reside in any RAM page starting from address #DB00=56064 and occupies #24FE bytes up to address #FFFD (the last two bytes are unused). Memory expansion up to 512K is supported via port #7FFD. The identification of its own location and the used screen occurs at every launch of HELP, so it can be freely moved from one memory page to another. It is possible to have multiple copies of HELP in memory. If HELP is loaded into page 7 or when launched, it detects that STS is in page 7, the second screen will be used for output; otherwise, the standard one. You may wonder: how does HELP know if STS is in page 7 or not? The fact is that any version of STS contains the character string "SZ5", which HELP looks for.
┌────────────────────┐
│ Features of Operation │
└────────────────────┘
When HELP is launched at address #DB00, the following occurs:
- SP is saved, after which the stack is reinitialized;
- the values of all processor registers are saved;
- the interrupt mode (enabled/disabled) is checked, after which they are disabled;
- it is checked which ROM is connected, and the 48K ROM is connected.
Upon exiting HELP, everything returns to its place:
- the standard screen is enabled (if HELP was launched in full-screen mode);
- the ROM that was connected at the time of launch is connected;
- the values of the registers, including SP, and the interrupt mode are restored.
The identification of the connected ROM occurs similarly to one of the TR-DOS procedures by analyzing the content of the memory cell at address 949. If it contains the number 243, it is considered that the 48K ROM is connected; otherwise, the 128K.
HELP does not corrupt the value of any memory cell, except for itself and the screen area. Thus, it is fully autonomous.
The value of register R after HELP finishes (i.e., after executing the RET command) will be 1 more than it was immediately after its launch (i.e., after executing the CALL #DB00 command). Thus, after executing either of the two commands below, the content of R will be the same (at address #0052, as is known, is simply RET):
1. CALL #DB00 2. CALL #0052
This is done so that after launching HELP from STS using the command [C], the contents of the registers of the debugged program do not change. However, in such a launch, two bytes from the stack of the debugged program are altered (in which STS remembers the return address).
┌────────────────────────────┐
│ Additional Features │
└────────────────────────────┘
The capabilities of HELP are not limited to simply viewing reference information. Imagine, for example, the following situation: you are typing a program in assembler and studying it with the debugger. The cursor is set on some command. You press a certain key combination, and a window with reference information about this command appears on the screen. For IBM PC users, this is a familiar style of work, but I have not seen anything like this on Speccy. Of course, to use this feature, significant changes need to be made to the assembler and/or debugger. Here are all the necessary details about the entry point used for this purpose at address #DB02:
When calling the procedure at address #DB02, a window with information about the required command will be built on the screen, after which control will be returned to the calling program. The content of the screen under the window is not saved, and attributes are also not set, so the calling program must take care of this. After calling this procedure, unlike the entry point #DB00, the registers AF, B, DE will change their values. It is possible that HELP could not find the required information, for example, due to an incorrect command mnemonic string. In this case, the message "Not found" will be displayed.
Parameters:
IX - points to the string with the command text for which help is needed. The string ends with a zero byte and must be located in memory below #C000.
A - indicates which screen the information will be output to. 0 corresponds to the standard screen, 1 to the second screen.
The command text must be specified with the given operand values. The mnemonic must be separated from them by a single space, for example, like this:
LD HL,( 12345)
ADD A, #87
IM 0
SET 4, A,( IX+31)
Example: display a window with reference information about the command EX AF, AF' on the main screen:
LD IX, TEXT
XOR A
CALL #DB02
...
TEXT DB "EX AF, AF'", 0
┌─────────────────────┐
│ Entry Point for STS │
└─────────────────────┘
This entry point, located at address #DB04, is intended for displaying help information about the assembler command under the cursor in the STS debugger. In principle, it performs the same actions as #DB02, but is specifically designed to minimize changes made in STS and allow easy adaptation of any version of this debugger. The user needs to point to the required command using the cursor, press ENTER twice (or press ENTER and BREAK) to enter edit mode and exit it, and then use the key combination [SS+U] to call the user function (which, in turn, will call #DB04). The called function displays a window with information about the command in the center of the screen, sets attributes (the window color is the same as the listing color), waits for any key press, and returns to STS. After its execution, the values of registers AF, B, DE will be changed.
┌────────────────────────────────────────┐
│ #0000 F3 AF 11 FF FF C3 CB 11 s/▒ccCK▒│
│PC #0000 #0000 F3 DI │
│SP #5FE8 #0001 AF XOR A │
│IX #8685 #0002 11FFFF LD DE,#FFFF │
│IY #5C3A #0005 C3CB11 ▒JP #11CB▒▒▒▒▒▒▒▒│
│HL #C07A #0008 2A5D5C LD HL,(#5C5D) │
│DE #5B45 #000B 225F5C LD (#5C5F),HL │
│BC #7FFD #000E 1843 JR #0053 │
│AF #172C #0010 C3F215 JP #15F2 │
│IR #3F16 #001┌──────────────┐38 │
│ INT #001│JP NN │░8 │
│ 5 3P #001│ │░8 │
│ #001│CZP/VSNH t=10 │░8 │
│ #001│-- - --- │░8 │
│ #001└──────────────┘░(#5C5D) │
│ #001B░░░░░░░░░░░░░░░░HL) │
│ #001C CD7D00 CALL #007D │
│ #001F D0 RET NC │
│ #0020 CD7400 CALL #0074 │
│ #0023 18F7 JR #001C │
│ #0025 FF RST #38 │
│ #0026 FF RST #38 │
│ #0027 FF RST #38 │
│ │
└────────────────────────────────Bank #18┘
Parameters:
IX - points to the address of the buffer for editing the string in STS. We will further refer to this address as BEGIN_S. In STS version 5.1, it is equal to #FF80.
A - indicates which screen the information will be output to. 0 corresponds to the standard screen, 1 to the second screen.
L - the memory bank number where STS is located, i.e., the number that needs to be written to port #7FFD to set this bank.
Example of a User function to call HELP when STS is in page 7, HELP is in page 3, and the resident is located at address #5B90:
LD IX,BEGIN_S; address of buffer
LD A,1 ; screen number
LD HL,HLP_RES
LD DE,#5B90 ; address of STS resident
LD BC,14 ; its length
LDIR ; set new resident
LD BC,#7FFD
LD HL,#1B1F ; memory banks
LD (#5B9B),SP; saved SP
JP #5B90 ; call resident
HLP_RES OUT (C),H ; set bank of HELP
LD SP,#0000 ; new SP value
; (to remember return address)
CALL #DB04 ; called HELP
OUT (C),L ; set bank STS
LD SP,#0000 ; restored old
; SP value
RET ; and returned to STS.
Note: if you replace address #DB04 with #DB00, this same User function will call HELP in full-screen mode.
┌────────────┐
│ Literature │
└────────────┘
1. A. Larchenko, N. Rodionov "ZX Spectrum and TR-DOS for Users and Programmers".
2. INFORKOM "Programming in Machine Codes and Assembly Language".
3. A. Evdokimov, A. Kapultsevich, I. Kapultsevich "How to Write a Game in Assembler for ZX Spectrum".
4. S. P. Shutov, M. M. Mukhametshin "Microprocessor Z-80. Reference Guide".
5. P. Yu. Fedin "Complete Description and Full Disassembler of TR-DOS 5.04T (5.03)".
6. VA PRINT "Assembler Z80".
7. Steve Kremer "Operating System SPECTRUM".
8. "ZX-REVЮ", "SPECTROFON", "ZX-FORMAT", "ON-LINE" etc.
Contents of the publication: Adventurer #08
- От автора - Shaitan
Technical details of a new program interface for ZX Spectrum. Discusses improvements and features like scrolling and color change. Provides keyboard and button navigation instructions.
- От автора
Introduction by the author and editorial team details.
- Presentation
The article presents a software installer for creating autorun disks and introduces a new adventure game created with QUILL by Dr. Laser.
- Presentation of TRICK Software
The article presents TRICK, a new software for program protection developed by Eternity Industry, and discusses its beta and commercial versions. The author, Alexander Kalinin (aka Paracels/EI), addresses previous shortcomings in the software and emphasizes its improved interface. It includes purchase details for the software and invites readers to request it.
- Presentation
The article provides a detailed user manual for HELP_Z80, a free utility for ZX Spectrum that serves as an electronic guide for Z80 microprocessor commands. It outlines how to load and use the software, including command explanations, search functions, and integration with assemblers. Additionally, it includes memory distribution, operational features, and references for further reading.
- Interface
The article discusses reader feedback on the magazine's interface, addressing concerns about pricing and software trends in the ZX Spectrum community. It features a letter from a reader expressing thoughts on game pricing and the declining number of users on the platform. Additionally, there are discussions on software developments and user engagement.
- Interface
The article shares the author's experiences after purchasing an Amiga, comparing it with a PC, and discussing its usability for games, graphics, and music, while noting some software limitations.
- Interface
The article discusses user support issues faced by hardware manufacturers SCORPION and NEMO for ZX Spectrum devices. It critiques SCORPION for poor customer service despite being a market leader, while praising NEMO for responsive support. The author expresses concerns about the overall market direction for ZX Spectrum hardware.
- Interface
Article discusses the future of the Spectrum platform, addressing user demographics, software production challenges, and hardware evolution possibilities.
- Interface
Article discusses the frustrations of a Speccy user regarding hardware issues, the challenges of modern computing, and the dedication to maintaining the Speccy platform.
- Interface
Статья рассматривает жизнь и судьбы пользователей ZX Spectrum, включая личные воспоминания автора о друзьях и их взаимодействии с компьютерами.
- System
The article reviews various software for ZX Spectrum, including text editors, audio players, and graphic utilities. It provides independent opinions on their features and usability, highlighting both strengths and weaknesses. The piece emphasizes the evolution and improvement of software tools available for this classic platform.
- Overview of Games
Overview of notable games for ZX Spectrum, highlighting their graphics, sound, and gameplay mechanics. Each entry includes a brief summary and rating. Recommended for fans of retro gaming.
- Review of Demos
The article reviews demo versions of various games, highlighting their potential and unique features. It emphasizes the scarcity of such releases in the market and evaluates the quality and gameplay mechanics of selected titles. The author shares insights into the progress and expectations for future full versions of these games.
- Guests
The article discusses the formation and activities of the Eternity Industry group, its members, projects, and future plans for releases and competitions.
- Гости - Dr. John
An interview with Felix from Virtual Brothers discusses his transition from ZX Spectrum to PC, development of the game 'Winnie the Pooh', and future plans.
- Guests
Interview with the musicians Mарат and Демон from the band 'Disgust', discussing their musical evolution, influences, and perspectives on life and creativity.
- Promotion
The article provides a detailed manual for the game 'ENCYCLOPEDIA of WAR', explaining army selection, unit types, and battle mechanics.
- Promotion
The article provides a walkthrough for the game, detailing necessary items and strategies for progressing through various challenges, including dealing with dinosaurs and navigating villages.
- Promotion
Статья представляет собой обзор arcade adventure игры 'ELOPEMENT' от Omega HG, выделяя ее особенности и советы по прохождению.
- Promotion
Статья описывает текстовую адвентюру 'Остров тьмы' на QUILL, предлагая советы для игроков. Упоминаются механики и персонажи, включая загадки и взаимодействия. В конце представлена карта острова.
- Promotion of 'Knightmare'
The article describes the game 'Knightmare', detailing its commands, gameplay mechanics, and initial quests. Players control a knight who must interact with characters and solve puzzles to progress. It serves as a manual for navigating the game's environment and objectives.
- Experience Exchange
The article critiques the adventure game 'Island of Darkness' by Paul Moskow, highlighting its illogical design, lack of detailed item descriptions, and absence of helpful hints for players.
- Experience Exchange
The article provides a detailed manual for enhancing the ZX ASM 3.0 assembler, introducing debugging features and functionalities for better program execution control on ZX Spectrum.
- Experience Exchange
The article describes a phenomenon observed with the ZX Spectrum video controller, where switching between two screens can create unexpected visual artifacts. It outlines a specific program that demonstrates this effect through rapid screen toggling. The author discusses the implications and potential applications of this behavior.
- Обмен опытом - Иван Рощин
The article is a programming guide on porting the 'iris.ss' screen saver effect from Dos Navigator to ZX Spectrum, including source code and modification tips.
- Обмен опытом - Иван Рощин
Description of the OPEN_W procedure to create window borders. Includes details on customization of symbols and dimensions. Utilizes PRSYM for symbol printing.
- Обмен опытом - Maximum
Introduction to long integer operations for game development on ZX Spectrum, including addition, subtraction, and conversion to ASCII.
- Experience Exchange
The article discusses the customization of the ART STUDIO graphic editor by creating additional modules that enhance its functionality, including features like music playback and cursor coordinates display.
- Experience Exchange
The article describes a program developed to improve the visual quality of a pixel-by-pixel moving attribute message on ZX Spectrum. It provides details on the implementation, including the use of data arrays for motion trajectory and image rendering. The program includes comments for easier understanding and can be modified for different effects.
- Оттяг
The article features humorous sketches and commentary on various aspects of life and technology, including anecdotes about a fictional character's experience with a Pentium processor.
- Pharmacist Test
The article presents humorous tests designed to identify whether someone is a real pharmacist or a fraud, featuring situational questions and scoring to gauge knowledge of pharmacy.
- Oddities and Self-Reflection in 'Оттяг'
The article 'Оттяг' presents a humorous and critical self-reflection of the author, exploring various life experiences and quirks that highlight his unusual personality traits.
- Humorous Quiz: Assess Your Sense of Humor
The article presents a humorous quiz to assess one's sense of humor and sexual attitudes through various situational questions, revealing absurd and comedic perspectives.
- Student Types Quiz
The article presents a humorous quiz to determine what kind of student you are, ranging from a party animal to a diligent scholar. It features a series of questions regarding typical student activities and responses. The results categorize students based on their score, from carefree to nerdy.
- How to Properly Torture Windows 95 - Maximum
Статья описывает иронический подход к установке и эксплуатации операционной системы Windows 95, включая способы ее 'мучения' и троллинга. В тексте используются гиперболизированные примеры взаимодействия с ОС для создания комичного эффекта. Это развлекательный материал с элементами юмора.
- Ottyag
The article is a humorous narrative featuring Winnie the Pooh and his friends returning to the Hundred Acre Wood, where their carefree life turns chaotic. It describes their antics, including drinking and misadventures, as they reunite and encounter various challenges. The story showcases the characters' personalities and interactions in a comedic light.
- Novella
The article describes a humorous novella featuring Corporal Johnlan recounting his first military mission and his interactions with a young grandchild over beers.
- Novella
Novella recounts an adventurous escape from a Glot base using a vintage spacecraft, highlighting the protagonist's encounters and clever maneuvers.
- Novella
The article describes a whimsical story about two hedgehogs, Pukhly and Zaraza, who, after a strange event, develop wings and must navigate their new reality. The story blends fantasy and humor as the characters face unexpected changes and challenges. This is a novella showcasing imaginative storytelling.
- News
The article discusses recent updates from Rybninsk related to the FunTop party, detailing contributions from various individuals and teams for the 'Adventurer' magazine and demo competitions.
- News
Статья сообщает о событиях в сообществе Спектрумистов Ярославля, включая информацию о разработчиках программного обеспечения и их текущих проектах.
- Advertisement
The article is a collection of advertisements and announcements related to ZX Spectrum, inviting collaboration from programmers, artists, and musicians, and detailing how to acquire the journal and software.