DataMuseum.dk

Presents historical artifacts from the history of:

Jet Computer Jet80

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Jet Computer Jet80

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦c347a445d⟧ TextFile

    Length: 12032 (0x2f00)
    Types: TextFile
    Names: »PRIMOE.Z80«

Derivation

└─⟦7303e23ba⟧ Bits:30003507 JET80 System diskette
    └─ ⟦this⟧ »PRIMOE.Z80« 

TextFile

	TITLE	'PRIMO.Z80'

;**********************************************************
;*    PROGRAMMET SÆTTER SIO1A-CTC0 PÅ FØLJANDE SÆTT:      *
;**********************************************************
;*              TILLDELNINGAR OCH DEFINITIONER            *
;**********************************************************
	.Z80

; SENASTE UPPDATERING: 1984-01-03.

; KONSTANTER

CR	EQU	0DH		; VAGNRETUR
LF	EQU	0AH		; RADFRAMMATNING
BELL	EQU	7		; RING I KLOCKAN

; ZILOG COUNTER TIMER (CTC) PORT NUMMER:

CTC0	EQU	8		; CTC CHANNEL 0


CTC9600		EQU	00000100B	; TKONST =  9600 BAUD*32
CTC4800		EQU	00001000B	; TKONST =  4800 BAUD*32
CTC1200		EQU	00100000B	; TKONST =  1200 BAUD*32
CTC300		EQU	10000000B	; TKONST =   300 BAUD*32

; LINE PRINTER DEFINITIONER:

LPTCTL	EQU	1		; CONTROL PORT

	PAGE
	ASEG
	ORG	100H
START:	LD	SP,STACK
	JP	START2
	DEFB	0,0,0,0,0,0,0,0,0,0
DEFAU:	DEFB	'B6H1D3S2P0'
	DEFB	0,0,0,0,0,0
START2:	CALL	PNEXT
	DEFB	CR,LF,LF
	DEFB	'INITIATION OF PRINTER/MODEMPORT - ',0
	CALL	KRYPTO
START1:	CALL	PNEXT
	DEFB	LF,LF,LF
	DEFB	'BAUDRATE    :',0
	LD	A,(DEFAU+1)
	SUB	'0'-1
	LD	B,A
	LD	DE,5
	LD	HL,BAUD+20
	JR	LOOP1A
LOOP1:	ADD	HL,DE
LOOP1A:	DJNZ	LOOP1
	LD	DE,BAUDTX
	LD	BC,5
	LDIR
	CALL	PNEXT
BAUDTX:	DEFB	'.....',CR,LF
	DEFB	'HANDSHAKING :  ',0
	LD	A,(DEFAU+3)
	SUB	'0'-1
	LD	B,A
	LD	DE,3
	LD	HL,HAND+2
	JR	LOOP2A
LOOP2:	ADD	HL,DE
LOOP2A:	DJNZ	LOOP2
	LD	DE,HANDTX
	LD	BC,3
	LDIR
	CALL	PNEXT
HANDTX:	DEFB	'...',CR,LF
	DEFB	'DATABITS    :    ',0
	LD	A,(DEFAU+5)
	SUB	'0'-1
	LD	B,A
	LD	DE,1
	LD	HL,DATA+8
	JR	LOOP3A
LOOP3:	ADD	HL,DE
LOOP3A:	DJNZ	LOOP3
	LD	DE,DATATX
	LD	BC,1
	LDIR
	CALL	PNEXT
DATATX:	DEFB	'.',CR,LF
	DEFB	'STOPBITS    :  ',0
	LD	A,(DEFAU+7)
	SUB	'0'-1
	LD	B,A
	LD	DE,3
	LD	HL,STOP+3
	JR	LOOP4A
LOOP4:	ADD	HL,DE
LOOP4A:	DJNZ	LOOP4
	LD	DE,STOPTX
	LD	BC,3
	LDIR
	CALL	PNEXT
STOPTX:	DEFB	'...',CR,LF
	DEFB	'PARITY      :',0
	LD	A,(DEFAU+9)
	SUB	'0'-1
	LD	B,A
	LD	DE,5
	LD	HL,PARITY+3
	JR	LOOP5A
LOOP5:	ADD	HL,DE
LOOP5A:	DJNZ	LOOP5
	LD	DE,PARITX
	LD	BC,5
	LDIR
	CALL	PNEXT
PARITX:	DEFB	'.....             '
	DEFB	'Commandstring :  ',0
	LD	HL,DEFAU
	LD	DE,KOMTX
	LD	BC,10
	LDIR
	CALL	PNEXT
KOMTX:	DEFB	'..........',CR,LF,LF
	DEFB	'Baudrate   Handshaking    Databits    Stopbits      Parity',CR,LF
	DEFB	'0:   110      0:    NO     0:    5      0:   1     0: NONE',CR,LF
	DEFB	'1:   300      1:   YES     1:    6      1: 1.5     1: EVEN',CR,LF
	DEFB	'2:   600                   2:    7      2:   2     2:  ODD',CR,LF
	DEFB	'3:  1200                   3:    8',CR,LF
	DEFB	'4:  2400',CR,LF
	DEFB	'5:  4800',CR,LF
	DEFB	'6:  9600',CR,LF
	DEFB	'7: 19200',CR,LF
	DEFB	'8: 38400',CR,LF
	DEFB	'9: 76800',CR,LF,LF
	DEFB	CR,'I=Init port, N=New default saved, <RET>=no change, commandstring.',CR,LF,0
VAL:	CALL	PNEXT
	DEFB	'Your choice ?                     '
	DEFB	8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,0
	LD	A,(5DH)		; BUFFERT
	CP	'I'
	JR	NZ,VAL1
	CALL	PNEXT
	DEFB	'I',0
	JR	INIT1
VAL1:	CALL	RDCONB
	LD	HL,CONINB+1
	LD	A,(HL)
	AND	A
	JP	Z,SLUT
	CP	1
	JR	Z,INIT
	CALL	ANALYS
	JP	C,ERROR
	LD	HL,BVAL
	LD	A,(HL)
	LD	(DEFAU+1),A
	INC	HL
	LD	A,(HL)
	LD	(DEFAU+3),A
	INC	HL
	LD	A,(HL)
	LD	(DEFAU+5),A
	INC	HL
	LD	A,(HL)
	LD	(DEFAU+7),A
	INC	HL
	LD	A,(HL)
	LD	(DEFAU+9),A
	CALL	PNEXT
	DEFB	LF,0
	JP	START1

INIT:	INC	HL
	LD	A,(HL)
	RES	5,A
	CP	'I'
	JP	NZ,ERR1
INIT1:	LD	A,(DEFAU+1)
	SUB	'0'-1
	LD	B,A
	LD	HL,BAUD
	JR	INLP1A
INLP1:	INC	HL
	INC	HL
INLP1A:	DJNZ	INLP1
	LD	A,(HL)
	LD	(CTCR),A
	INC	HL
	LD	A,(HL)
	LD	(WR4),A
	LD	A,(DEFAU+3)
	SUB	'0'-1
	LD	B,A
	LD	HL,HAND
	JR	INLP2A
INLP2:	INC	HL
INLP2A:	DJNZ	INLP2
	LD	A,(HL)
	LD	(WR3),A
	LD	A,(DEFAU+5)
	SUB	'0'-1
	LD	B,A
	LD	HL,DATA
	JR	INLP3A
INLP3:	INC	HL
	INC	HL
INLP3A:	DJNZ	INLP3
	LD	A,(HL)
	LD	(WR5),A
	INC	HL
	LD	A,(HL)
	LD	HL,WR3
	OR	(HL)
	LD	(HL),A	
	LD	A,(DEFAU+7)
	SUB	'0'-1
	LD	B,A
	LD	HL,STOP
	JR	INLP4A
INLP4:	INC	HL
INLP4A:	DJNZ	INLP4
	LD	A,(HL)
	LD	HL,WR4
	OR	(HL)
	LD	(HL),A
	LD	A,(DEFAU+9)
	SUB	'0'-1
	LD	B,A
	LD	HL,PARITY
	JR	INLP5A
INLP5:	INC	HL
INLP5A:	DJNZ	INLP5
	LD	A,(HL)
	LD	HL,WR4
	OR	(HL)
	LD	(HL),A
	LD	HL,T9600
	CALL	INISTM
	CALL	PNEXT
	DEFB	CR,LF,'..............Printer/Modem port initialized.',CR,LF,0
SLUT:	JP	0
ERR1:	CP	'N'
	JP	Z,OPEN
ERROR:	CALL	PNEXT
	DEFB	BELL,BELL,0
	JP	VAL

FEL:	SCF
	LD	HL,BVAL
	LD	A,(DEFAU+1)
	LD	(HL),A
	INC	HL
	LD	A,(DEFAU+3)
	LD	(HL),A
	INC	HL
	LD	A,(DEFAU+5)
	LD	(HL),A
	INC	HL
	LD	A,(DEFAU+7)
	LD	(HL),A
	INC	HL
	LD	A,(DEFAU+9)
	LD	(HL),A
	RET

ANALYS:	RRA			; KOLLA OM UDDA
	JR	C,FEL
	AND	00000111B; ANTAL BYTES
	LD	C,A
	INC	C		; ØKA MED 1
ANALY1:	OR	A
	DEC	C		; MINSKA MED EN TILL
	RET	Z
	INC	HL		; BØR PEKA PÅ TECKEN
	LD	A,(HL)		; SPAR DETTA
	RES	5,A
	INC	HL		; PARAMETER
	CP	'B'		; ÆR DET BAUD
	JR	Z,ANAB		; JA...HOPPA
	CP	'H'		; ÆR DET HAND SHAKE
	JR	Z,ANAH
	CP	'D'		; ÆR DET DATABITAR
	JR	Z,ANAD
	CP	'S'		; ÆR DET STOPPBITAR
	JR	Z,ANAS
	CP	'P'		; ÆR DET PARITET
	JR	NZ,FEL
ANAP:	LD	A,(HL)
	CP	'0'
	JR	C,FEL
	CP	'3'
	JR	NC,FEL
	LD	(PVAL),A
	JR	ANALY1
ANAS:	LD	A,(HL)
	CP	'0'
	JR	C,FEL
	CP	'3'
	JR	NC,FEL
	LD	(SVAL),A
	JR	ANALY1
ANAD:	LD	A,(HL)
	CP	'0'
	JR	C,FEL
	CP	'4'
	JR	NC,FEL
	LD	(DVAL),A
	JR	ANALY1
ANAB:	LD	A,(HL)
	CP	'0'
	JR	C,FEL
	CP	'9'+1
	JR	NC,FEL
	LD	(BVAL),A
	JR	ANALY1
ANAH:	LD	A,(HL)
	CP	'0'
	JR	C,FEL
	CP	'2'
	JP	NC,FEL
	LD	(HVAL),A
	JR	ANALY1

BAUD:	DEFB	0AEH,0C0H	;   110 BAUD
	DEFB	80H,80H		;   300 BAUD
	DEFB	40H,80H		;   600 BAUD
	DEFB	20H,80H		;  1200 BAUD
	DEFB	10H,80H		;  2400 BAUD
	DEFB	08H,80H		;  4800 BAUD
	DEFB	04H,80H		;  9600 BAUD
	DEFB	02H,80H		; 19200 BAUD
	DEFB	01H,80H		; 38400 BAUD
	DEFB	01H,40H		; 76800 BAUD
	DEFB	'  110'
	DEFB	'  300'
	DEFB	'  600'
	DEFB	' 1200'
	DEFB	' 2400'
	DEFB	' 4800'
	DEFB	' 9600'
	DEFB	'19200'
	DEFB	'38400'
	DEFB	'76800'

HAND:	DEFB	0H		; INGEN
	DEFB	20H		; JA
	DEFB	' NO'
	DEFB	'YES'

DATA:	DEFB	08AH,001H	; 5 BITS: Tx,Rx
	DEFB	0CAH,081H	; 6 BITS: Tx,Rx
	DEFB	0AAH,041H	; 7 BITS: Tx,Rx
	DEFB	0EAH,0C1H	; 8 BITS: Tx,Rx
	DEFB	'5'
	DEFB	'6'
	DEFB	'7'
	DEFB	'8'

STOP:	DEFB	04H		; 1 STOP-BIT
	DEFB	08H		; 1.5 STOP-BITS
	DEFB	0CH		; 2 STOP-BITS
	DEFB	'  1'
	DEFB	'1.5'
	DEFB	'  2'


PARITY:	DEFB	0H		; INGEN
	DEFB	03H		; JÆMN
	DEFB	01H		; UDDA
	DEFB	' NONE'
	DEFB	' EVEN'
	DEFB	'  ODD'

BVAL:	DEFB	'6'
HVAL:	DEFB	'1'
DVAL:	DEFB	'3'
SVAL:	DEFB	'0'
PVAL:	DEFB	'0'

; INISTM:
; INITIERAR I/O-PORT FRÅN EN TABELL.
; INGÅNG:		HL = ADRESS TILL TABELL AV FØLJANDE
;			     UTSEENDE:
;			SLUT MARKERAS MED BYTE=0.
;                       BYTE1 = ANTAL BYTES TILL PORT.
;                       BYTE2 = PORTADRESS.
;                       BYTE3...BYTEN = DATA TILL PORT.

INISTM:
	LD	A,(HL)		; KOLLA OM TABELLEN ÆR SLUT
	OR	A
	RET	Z		; JA (HL)=0...ÅTER.
	LD	B,A		; HÆMTA TABELLÆNGD. BYTE-RÆKNARE.
	INC	HL		; NÆSTA BYTE
	LD	C,(HL)		; HÆMTA I/O PORT ADRESS.
	INC	HL		; PEKA PÅ DATA BYTES
	OTIR			; SÆND TILL I/O PORT.
	JR	INISTM		; UPPREPA FØR NÆSTA TABELL.


	PAGE
; TABELLER ------------------------------------------------

; 9600 BAUD NO HANDSHAKE.
T9600:	DEFB	2,CTC0		; 2 BYTES TILL CTC0.
	DEFB	01000101B	; COUNTER. TIDSKONST FØLJER
CTCR:	DEFB	CTC9600		; 9600 BAUD.
	DEFB	9,LPTCTL	; 9 BYTES TILL DART B
	DEFB	18H		; RESET CHANNEL.
	DEFB	14H		; SELECT WRITE REGISTER 4.
WR4:	DEFB	10000111B	; X32 CLOCK, 1 STOP BIT, PARITY EVEN
	DEFB	13H		; SELECT WRITE REGISTER 3.
WR3:	DEFB	11100001B	; NO HARDWARE HANDSHAKE ON DB25 PIN 4.
				; RX 8 BITS, RX ENABLE.
	DEFB	15H		; SELECT WRITE REGISTER 5.
WR5:	DEFB	11101010B	; DTR, TX 8 BITS, TX ENABLE, *RTS LOW.
	DEFB	01H		; SELECT WRITE REGISTER 1.
	DEFB	0		; NO INTERRUPTS, UNMODIFIED INTERRUPT
				; VECTOR (BOTH CHANNELS).
	DEFB	0		; TABELLSLUT.

;**********************************************************
;*                 GENERELLA SUBRUTINER                   *
;**********************************************************
; PCRLF - GER NY RAD

PCRLF:	CALL	PNEXT
	DEFB	CR,LF,0
	RET

; PNEXT - SKRIVER UT DEN TEXT, SOM OMEDELBART FØLJER
;         SUBRUTINANROPET.
;         TEXTEN MÅSTE AVSLUTAS AV EN BYTE = 0.

PNEXT:	EX	(SP),HL		; HL -> TECKENBYTE
	LD	A,(HL)		; A = TECKENBYTE
	INC	HL		; NÆSTA BYTE
	EX	(SP),HL		; BYT TILLBAKA
	OR	A		; ÆR DET NOLL (SISTA TECKEN)?
	RET	Z		; JA...ÅTER
	LD	C,A		; C=TECKEN
	CALL	CONOUT		; SKRIV DETTA
	JR	PNEXT		; NÆSTA TECKEN

; RDCONB - GØR ANROP TILL BDOS OCH LÆSER IN BUFFERT.

RDCONB:	LD	C,10		; READ CONSOLE BUFFERT
	LD	DE,CONINB
	JP	5

; CONOUT - SKRIVER UT DET TECKEN, SOM FINNS I C PÅ 
;	   CONSOLE.

CONOUT:	PUSH	HL
	LD	HL,9
	JR	GO

GO:	PUSH	DE		; LAGRA DE
	LD	DE,(1)		; DE=BIOS-VEKTOR
	ADD	HL,DE		; ADDERA ØNSKAD VEKTOR
	POP	DE		; DE ÅTER
	EX	(SP),HL		; BYT FØR ATT KLARA
	RET			; HOPP TILL HL:s LÆGE.

FCB:	DEFB	0		; DEFAULT DRIVE
	DEFB	'PRIMO   COM'
	DEFB	0		; EXTENT
	DEFB	0,0		; S1,S2
	DEFB	0		; RC
	DEFW	0,0,0,0,0,0,0,0
	DEFB	0		; CR
	DEFB	0,0,0		; R0,R1,R2

OPEN:	LD	C,15		; OPEN
	LD	DE,FCB
	CALL	5
	OR	A
	JR	Z,SETDMA
	CALL	PNEXT
	DEFB	CR,LF
	DEFB	'Cannot open PRIMO.COM',CR,LF,0
	JP 	0
SETDMA:	LD	C,26		; SETDMA
	LD	DE,80H
	CALL	5
	LD	C,33		; READ RANDOM
	LD	DE,FCB
	CALL	5
	OR	A
	JR	Z,FLYTTA
	CALL	PNEXT
	DEFB	CR,LF
	DEFB	'Cannot read PRIMO.COM',CR,LF,0
	JP	0
FLYTTA:	LD	BC,10
	LD	DE,90H		; TILL ADRESS
	LD	HL,DEFAU
	LDIR
	LD	C,26		; SETDMA
	LD	DE,80H
	CALL	5
	LD	C,34		; WRITE RANDOM
	LD	DE,FCB
	CALL	5
	OR	A
	JR	Z,OK
	CALL	PNEXT
	DEFB	CR,LF
	DEFB	'Cannot write PRIMO.COM',CR,LF,0
	JP	0
OK:	CALL	PNEXT
	DEFB	CR,LF
	DEFB	'..............New default values saved, but not sent to port.',0
	JP	0

KRYPTO:	LD	HL,KOD
	LD	DE,KOD
	LD	B,38/2
KRYP1:	LD	A,(HL)		; LÆGG 1:AN
	LD	C,A		; I C.
	INC	HL
	LD	A,(HL)		; OCH 2:AN I A.
	XOR	C		; STARTA DEKRYTERING
	AND	01010101B
	XOR	C
	AND	01111111B
	LD	(DE),A		; LAGRA 1:AN.
	INC	DE
	LD	A,(HL)
	XOR	C
	AND	10101010B
	XOR	C
	RES	7,A
	LD	(DE),A		; LAGRA 2:AN.
	INC	DE
	INC	HL
	DJNZ	KRYP1
	CALL	PNEXT		; SKRIV TEXT

KOD:	DEFB	((('C' XOR 'o') AND 55H) XOR 'C') OR 128
	DEFB	(('C' XOR 'o') AND 0AAH) XOR 'C'
	DEFB	((('p' XOR 'y') AND 55H) XOR 'p') OR 128
	DEFB	(('p' XOR 'y') AND 0AAH) XOR 'p'
	DEFB	((('r' XOR 'i') AND 55H) XOR 'r') OR 128
	DEFB	(('r' XOR 'i') AND 0AAH) XOR 'r'
	DEFB	((('g' XOR 'h') AND 55H) XOR 'g') OR 128
	DEFB	(('g' XOR 'h') AND 0AAH) XOR 'g'
	DEFB	((('t' XOR ' ') AND 55H) XOR 't') OR 128
	DEFB	(('t' XOR ' ') AND 0AAH) XOR 't'
	DEFB	((('(' XOR 'C') AND 55H) XOR '(') OR 128
	DEFB	(('(' XOR 'C') AND 0AAH) XOR '('
	DEFB	(((')' XOR ' ') AND 55H) XOR ')') OR 128
	DEFB	((')' XOR ' ') AND 0AAH) XOR ')'
	DEFB	((('1' XOR '9') AND 55H) XOR '1') OR 128
	DEFB	(('1' XOR '9') AND 0AAH) XOR '1'
	DEFB	((('8' XOR '4') AND 55H) XOR '8') OR 128
	DEFB	(('8' XOR '4') AND 0AAH) XOR '8'
	DEFB	(((',' XOR ' ') AND 55H) XOR ',') OR 128
	DEFB	((',' XOR ' ') AND 0AAH) XOR ','
	DEFB	((('J' XOR 'e') AND 55H) XOR 'J') OR 128
	DEFB	(('J' XOR 'e') AND 0AAH) XOR 'J'
	DEFB	((('t' XOR ' ') AND 55H) XOR 't') OR 128
	DEFB	(('t' XOR ' ') AND 0AAH) XOR 't'
	DEFB	((('C' XOR 'o') AND 55H) XOR 'C') OR 128
	DEFB	(('C' XOR 'o') AND 0AAH) XOR 'C'
	DEFB	((('m' XOR 'p') AND 55H) XOR 'm') OR 128
	DEFB	(('m' XOR 'p') AND 0AAH) XOR 'm'
	DEFB	((('u' XOR 't') AND 55H) XOR 'u') OR 128
	DEFB	(('u' XOR 't') AND 0AAH) XOR 'u'
	DEFB	((('e' XOR 'r') AND 55H) XOR 'e') OR 128
	DEFB	(('e' XOR 'r') AND 0AAH) XOR 'e'
	DEFB	(((' ' XOR 'C') AND 55H) XOR ' ') OR 128
	DEFB	((' ' XOR 'C') AND 0AAH) XOR ' '
	DEFB	((('o' XOR 'r') AND 55H) XOR 'o') OR 128
	DEFB	(('o' XOR 'r') AND 0AAH) XOR 'o'
	DEFB	((('p' XOR '.') AND 55H) XOR 'p') OR 128
	DEFB	(('p' XOR '.') AND 0AAH) XOR 'p'
	DEFB	CR,LF,0
	RET

CONINB:	DEFB	10		; CONSOLE-BUFFERT MAX 5 TECKEN.
	DEFS	12		; RÆKNARE OCH BUFFERT
	DEFS	100
STACK	EQU	$
	END
«eof»