Savia 84

A brief description of the basic software, known as the monitor, was published together with construction instructions in the book Radioamatérské konstrukce 4 (Amateur Radio Constructions 4), published in 1990 by SNTL. First, a brief summary.

Readiness to receive the following commands is indicated by display of the inscription SAVIA 84.

Changing Memory Contents

After pressing the Ad (M) button, the message M0000 A1 will appear. Use the hexadecimal number buttons to enter the starting address. Confirm with the dA (=) button. The current contents of the selected memory cell will appear in the last two digits of the display. You can change the memory contents in the same way. Press dA (=) to move to the next address, press S to move to the previous address. An attempt to change the content outside the RAM area is indicated by the Er symbol. You can end the entry by pressing another function key (L, Br, Ad, R, Ex)

Changing the Contents of Registers

After pressing the R button, the message rXXXX AF will appear, where the symbols XXXX represent the current contents of the register whose name is displayed on the right. The contents of the register can be changed by pressing hexadecimal digits. Confirming with dA (=) will move us to the next register in the AF, BC, DE, HL, SP series. You can exit by pressing any other function key.

Setting Breakpoints

After pressing the Br button, the message b0000 A1 prompts us to enter the address of the first breakpoint. After confirming with the dA button, the message b0000 A2 prompts you to enter the address of the second breakpoint, which you also confirm with the dA (=) button. The process automatically continues with the entry of the start address; see the following paragraph.

Starting the User Program

After pressing the Ex button, we are prompted with the message GXXXX, where the symbols XXXX represent a random or last used start address, or the address where the program was interrupted by a breakpoint. This can be changed by pressing hexadecimal digits. After pressing the dA (=) button, the character E will be displayed on the screen and the user program will be started.

The following information is probably being published for the first time:

Breakpoint

When the program is stopped at a breakpoint, ?XXXX BP is displayed, where XXXX represents the address of the current breakpoint. In this state, the monitor accepts all of the commands listed above.

Monitor Variables

Address Length Name Description
1FD9h 3 vector5 jump to interrupt handler RST 28H
1FDCh 3 vector6 jump to interrupt handler RST 30H
1FDFh 3 vector7 jump to interrupt handler RST 38H
1FE2h 2 break1 address of the first break
1FE4h 1 instr1 overwritten instruction
1FE5h 2 break2 address of the second break
1FE7h 1 instr2 overwritten instruction
1FE8h 2 PC contents of program counter
1FEAh 2 AF contents of register AF
1FECh 2 BC contents of register BC
1FEEh 2 DE contents of register DE
1FF0h 2 HL contents of register HL
1FF2h 2 SP contents of stack pointer
1FF4h 2 in_addr address entered
1FF6h 1 in_data data entered
1FF7h 9 buffer area shown on the screen

Character Encoding

Code Character Code Character Code Character
00h 0 10h G 20h "
01h 1 11h H 21h =
02h 2 12h h 22h ?
03h 3 13h i 23h mezera
04h 4 14h J    
05h 5 15h L    
06h 6 16h M    
07h 7 17h n    
08h 8 18h o    
09h 9 19h P    
0Ah A 1Ah r    
0Bh b 1Bh t    
0Ch C 1Ch U    
0Dh d 1Dh u    
0Eh E 1Eh Y    
0Fh F 1Fh -    

Key Encoding

Code Key Code Key Code Key
80h 0 88h 8 90h dA
81h 1 89h 9 91h Ex
82h 2 8Ah A 92h Ad
83h 3 8Bh B 93h L
84h 4 8Ch C 94h S
85h 5 8Dh D 97h Br
86h 6 8Eh E 9Ah R
87h 7 8Fh F    

Available Subroutines

When writing our own programs, we can also use subroutines from the monitor ROM:

014Fh - Address Display: The contents of the HL register are stored in the variable in_addr and the display memory.1)

0160h - Data Display: The contents of register A are stored in the variable in_data and the display memory.1)

0179h - Wait: Only display is performed. The number of display cycles must be entered in register DE.

0188h - Clear Display: The character from register A is placed in the first segment from the left, the remaining segments are filled with spaces (turned off)1)

0196h - Wait for Key Press: While waiting, the display content is displayed. The code of the pressed key is returned in register A. The Z flag indicates the dA (=) key, the CY flag indicates a numeric key.

01FDh - Display: Performs display and keyboard handling. The CY flag indicates a pressed key. To display another memory area (custom text), it is possible to call from address 0200h. Then the HL register must contain the appropriate text address. For a readable display, it is necessary to call repeatedly.


1) For custom display, it is necessary to subsequently call subroutine 0196h or 01FDh.

This English translation of the Savia 84 article from Malecky.cz is hosted on alex-j-lowry.github.io.