DIXTNC is the TNC built by Jesus Arias (EB1DIX) at Valladolid (Spain) arround Sep-95. This TNC is mainly a direct implementation of Z80 familly peripherals: Z80 SIO & Z80 CTC. This system allows up to 24 Kb of RAM & 8 KB of ROM (currently battery backed SRAM) and provides two serial ports to interface a packet-radio modem and a KISS host. The modem is not included, but provisions was made to connect an simple TC3105 1200 bps modem or G3RUH modem. The speed of the ports can be selected via jumpers up to 19200 bps. The system clock is 4.9152 MHz. This clock drives the Z80 CPU & Z80 CTC. The CTC outputs 0 & 1 drives the clocks of the SIO port A & SIO port B. Port A is intended to modem use, and the clock must be 1 x bps, but the random logic included in the TNC divides the CTC clock by 16 before it comes to SIO. The SIO port B is the RS232 port and it needs a 16 x bps clock. So, the two CTC divisors must be programed to 16 x bps clocks. The KISS firmware included is based on the original code of K3MC. This soft. is divided into modules. Any of these modules must be assembled alone, and finally the objet files must be linked together to obtain the ROM image. This image follows the Motorola S-record format, and an utility is provided to convert this file to raw binary data. The modules are: tnc.h Label definitions to be used with almost all other sources. boot.asm Reset code & interrupt vectors. main.asm CTC & SIO init. RAM test. free buffer allocation, initial message, main program loop. ia.asm Interrupt routines for SIO port A. ib.asm Interrupt routines for SIO port B. ictc.asm CTC channel 3 periodic interrupt. buffer.asm Buffer handler routines. util.asm LED handler & print routines. const.asm Constant data & default variables values. var.asm Variables allocated into RAM. The multitasking character of this software is maintained trought the extensive use of interrupts. The SIO interrupts are generated on every character received or transmited, on modem DCD changes, on the end of frames or on host break chars. One channel of the CTC also provides a periodic interrupt (100 Hz) for timer pourposes. A lot of code handles the KISS protocol in the ib.asm file. The p-persistence algoritm is included in the main.asm file. Some critical parts of the code must be interrupt protected. The RAM area is divided into four regions. The first addresses are intended for program variables (about 50 bytes). Then two circular queues follows with 512 bytes each. A variable length area is intended for data buffer lists. Each buffer includes 124 data bytes and needs 128 RAM bytes. Finally, 128 bytes plus remainings are reserved for stack. 8 KB of RAM allows for about 50 buffers of 124 bytes each, that can be enough for normal use of the TNC.