|
DataMuseum.dkPresents historical artifacts from the history of: Jet Computer Jet80 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Jet Computer Jet80 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 12032 (0x2f00) Types: TextFile Names: »PRIMOE.Z80«
└─⟦7303e23ba⟧ Bits:30003507 JET80 System diskette └─ ⟦this⟧ »PRIMOE.Z80«
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»