ÚVOD | Novinky | 8 Bitů | Příslušenství | Drobnosti | TTL | Kontakt
SAPI-1 | ONDRA | PMI-80 | PMD-85 | klony PMD-85 | klony SM50/40 | PETR | PLAN-80A | IQ151 | TNS | FK-1 | HVĚZDA | SP 830 | PCS 1-QR6000
ZPS | Technické prostředky | Programové vybavení | Dokumentace
.XLIST PAGE 65 .LIST ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TITLE COPY KZD/MGF = CKM ; MIKOS V5 JE V RAM, MIKOS/K JE V EPROM ; 24.3.1988 ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SM EQU 00 ; ASEG ; *** DEFINOVANI PAMETOVEHO PROSTORU * @R@ EQU 4000H ; ZACATEK SYSTEMOVE RAM (1K) RSTN EQU 0CFH ; RST1 .. POUZIVA SYSTEM MONIT EQU 0 ; ROM VERZE ZPS-2 ERAM EQU 0000 EP3 EQU 1800H TVBEG EQU 3800H ; TV-RAM EPROM EQU 0C00H ; O.S. ; * MONITOR ENTRY * CI EQU 103H RI EQU 106H CO EQU 109H PO EQU 10CH CSTS EQU 112H IOCHK EQU 115H IOSET EQU 118H MEMCK EQU 11BH IODEF EQU 11EH SPCL EQU 121H CRLF EQU 124H EXPR EQU 127H ERROR EQU 12AH ASHEX EQU 12DH DADR EQU 130H DBYT EQU 133H HILO EQU 136H NEXT EQU 139H SPACE EQU 13CH CINCR EQU 13FH TEXT EQU 142H HXASC EQU 148H EXFLG EQU 14BH TXIMM EQU 151H WND@ EQU 154H KZD EQU 157H RNAME EQU 15AH INTER EQU 15DH SERI@ EQU 17BH SERO@ EQU 17EH SMST@ EQU 181H ; TERMINAL TLINE EQU 24 TCOLUM EQU 80 ; ZAZNAM LENGHT EQU 255 ; DELKA BLOKU NAMLE EQU 11 ; DELKA JMENA COMLE EQU 64 ; DELKA KOMENTARE ;------------------------------------------ ; KONSTANTY ETX EQU 3 BS EQU 8 HT EQU 9 LF EQU 0AH VT EQU 0BH CR EQU 0DH PREAM EQU 10H ; PREAMBLE/POSTAMBLE SUBS EQU 1AH ; END FLAG ESC EQU 1BH HOME EQU 1DH ERS EQU 1EH DEL EQU 7FH ; DELETE ; SPREC EQU 0DFH ; KONSTANTY RIZENI SPSTART EQU 0FBH ; SP-210 SPSTOP EQU 7FH SPPAUS EQU 0EFH SPREWZ EQU 0BFH SPREWK EQU 0F7H SPRS EQU 8BH ; RIDICI SLOVO 8255 ; SER. I/O URES EQU 13H UDATA EQU 12H USTAT EQU 11H UMODE EQU 10H PRENOS EQU 14H ; NASTAVENI PRENOSU ;PARALEL. I/O SPC EQU 37H SPIN EQU 35H SPOUT EQU 34H ; BLOKOVA NAVESTI EOR EQU 0 ; "END OF RECORDS" SOH EQU 01H ; "START OF HEADER" EOT EQU 04H ; "END OF TEXT" CAN EQU ':' ; JMENO PASKY ; 'A' ; DATOVY (ASCII) BLOK ; 'B' ; BINARNI BLOK ;************************************ ; ASEG .PHASE 4400H ; START ;************************************ ; ;==================================== ; T A B U L K A S L U Z E B K O S ;==================================== JMP INITS ; INIT PROGRAMU JMP COPY ; SKOKOVA TABULKA JMP FIND ; 1 JMP OPEN ; 2 JMP CLOSE ; 3 JMP COPY ; 4 JMP COPY ; 5 JMP BINAR ; 6 ZAC: JMP GET@ ; 7 JMP MOTA ; 8 JMP PUT@ ; 9 JMP STOP ; 10 CAS: DC 'PERINA' ; KONSTANTA ;==================================== ; INICIALIZACE SYSTEMU KOS ;==================================== INITS: MVI A,0C3H LXI H,TVBEG MOV B,M MOV M,A CMP M ; TEST VIDEORAM JZ INI1 XRA A ; JE TERMINAL INI1: STA TSM MOV M,B ; ZNAK ZPET LXI D,GET@ ; GET MGF MVI C,3 ; RI2 CALL IODEF LXI D,PUT@ ; PUT MGF MVI C,5 ; PO2 CALL IODEF XRA A STA TSP ; JE SP-210 MVI A,SPRS OUT SPC ; RIDICI SLOVO SP-210 STA JEDE? ; MGF STOJI CALL IOCHK STA @IOB ; ULOZ IOBYT JMP MGFIN ;==================================== ; MENU A VYHODNOCENI POVELU OBSLUHY ;==================================== COPY: LXI SP,406DH ; MSTACK CALL STOP CALL TXIMM DB CR,LF,LF,LF DB 'KOPIROVACI PROGRAM MGF - KZD-1' DB CR,LF,LF OR 80H CALL IOCHK MVI C,'*' ANI 0CH CPI 0CH JZ $+5 MVI C,' ' CALL CO CALL TXIMM DB ' M...MGF CTENI, KZD ZAPIS' DB CR,LF OR 80H CALL IOCHK MVI C,'*' ANI 30H CPI 30H JZ $+5 MVI C,' ' CALL CO CALL TXIMM DB ' K...KZD CTENI, MGF ZAPIS' DB CR,LF DB ' L...CTI SOUBOR' DB CR,LF DB ' B...ZAPIS BINARNI SOUBOR' DB CR,LF DB ' A...ZAPIS ZNAKOVY SOUBOR' DB CR,LF DB ' Q...UKONCENI PROGRAMU' DB CR,LF DB 'PRO MAGNETOFON:' DB CR,LF DB ' I...INIT KAZETY' DB CR,LF DB ' D...ADRESAR KAZETY' DB CR,LF DB ' X...PREPINANI K-10/SP-210' DB CR,LF DB ' R...PREVINUTI KAZETY (SP)' DB CR,LF DC '<,>...RYCHLOPOSUVY (SP)' COPY1: CALL CRLF MVI C,'_' CALL TTSP JNZ COPY2 MVI C,':' COPY2: CALL CO CALL ECHOCR CPI 'D' JZ DIR ; DIRECTORY CPI 'I' JZ INIT ; INICIALIZACE PASKY CPI 'B' JZ BSAVE CPI 'L' ; LOAD JZ CLOAD CPI 'A' JZ WSAVE CPI 'K' JZ KZDIN CPI 'M' JZ MGFIN CPI 'X' JZ EXCH CPI '>' JZ MOTA CPI '<' JZ REWIZ CPI 'R' JZ @REW CPI 'Q' JNZ COPY ; SPATNY POVEL LDA @IOB MOV C,A ; PRO KONEC CALL IOSET ; OBNOV IOBYT JMP NEXT ;************************************ ; REALIZACE POVELU ;************************************ ;==================================== ; NASTAV MGF IN, KZD OUT ;==================================== MGFIN: CALL IOCHK ; <A>=IOBYT ANI 11000011B ORI 00101100B ; PO1, RI2 MG1: MOV C,A CALL IOSET JMP COPY ;==================================== ; NASTAV KZD IN, MGF OUT ;==================================== KZDIN: CALL IOCHK ANI 11000011B ORI 00111000B ; PO2, RI1 JMP MG1 ;==================================== ; PREVIN PASKU ;==================================== MOTA: CALL TTSP ; TEST SP-210 JZ REWIK ; PRO SP-210 MVI A,28H ; SEPNUTI RELE MGF. OUT UMODE JMP MOTA1 REWIK: MVI A,SPREWK ; PREVINUTI NA KONEC CALL SPPULS MOTA1: CALL DONE CALL STOP JMP COPY ;==================================== ; DIRECTORY ;==================================== DIR: CALL PLAY INR A DIR0: CZ VYPISH XRA A DIR1: XCHG SHLD BNI ; CISLO SOUBORU.. MVI C,'%' ; CHYBA SEKVENCE CNZ CO CALL SEARCH ; HLAVICKA JZ DIR0 ORA A JNZ DIR1A CALL STOP ; NUTNO PRO SP-210 IF SM LDA TSM ORA A JNZ COPY ; KONEC PASKY PRO TV CALL SERCR MVI C,1FH CALL SERO@ ; KONEC PASKY PRO ENDIF JMP COPY ; TERMINAL DIR1A: CPI EOT JNZ DIR2 CALL DBTCR IF SM LDA TSM ORA A CZ CRLF ; PRO TERMINAL ENDIF DIR2: CALL NUFIL JMP DIR1 ;==================================== ; ZAPIS VYSTUPNI SOUBOR ;==================================== BSAVE: XRA A ; BINARNI SOUBOR JMP CSAVE ; ============== WSAVE: MVI A,0FFH ; ZNAKOVY SOUBOR ; ============== CSAVE: STA BINF? MVI C,0 MVI A,2 CALL EXFLG ; NEBER 1A CALL IOCHK ANI 30H ; PO CPI 30H JZ OPEN ; PRO MGF MVI C,2 CALL KZD ; OPEN KZD JMP CSAV1 ;==================================== ; OTEVRI NOVY SOUBOR PRO ZAPIS ;==================================== OPEN: CALL RNAME CPI '@' ; APPEND? JZ OPE4 CPI '.' PUSH PSW CZ REWIND POP PSW LDA @OF1 ; PODRUHE? ORA A PUSH PSW ; ===================== CNZ CLOSE ; UZAVRI A PRIPOJ DALSI POP PSW ; SOUBOR JNZ OPE4 ; ===================== PUSH H CALL PLAY OPE1: CALL SEARCH ; KONEC ZAZNAMU ? CZ VYPISH ; SOH MOV A,D STA BTO ; CISLO SOUBORU LDA BOUT-1 ; ANO CPI EOT JZ OPE3 ; DALSI BLOK CPI CAN OPE3: CZ OK? JNZ OPE1 ; DALSI BLOK POP H DB 3EH ; MVI A,# OPE4: XRA A ; APPEND PUSH H LHLD BNO ; CISLO SOUBORU INR H MVI L,0 SHLD BNO ; CISLO BLOKU A SOUBORU ORA A ; APPEND? CNZ RECOR MVI A,SOH STA @OF1 POP H CALL WRNAM CSAV1: LDA BINF? ORA A JNZ CSAV2 ; NENI BIN. SOUBOR CALL IOCHK ANI 30H CPI 30H JZ BINAR ; PRO MGF MVI C,6 CALL KZD ; BINAR NA KZD JMP CSAV2 ;==================================== ; NASTAV BINARNI SOUBOR ;==================================== BINAR: MVI A,30H CALL GAPO ; START ZAPISU CALL BTIM8 MVI A,'B' STA BOUT-1 CSAV2: LXI D,FREE+1 LHLD ADREND XCHG CSAV3: MOV C,M CALL PO ; ZAPIS DLE IOBYTU CALL HILO JNC CSAV3 CALL IOCHK ANI 30H CPI 30H JZ CLOSE ; PRO MGF MVI C,3 CALL KZD ; CLOSE PRO KZD JMP COPY ;==================================== ; UZAVRI VYSTUPNI SOUBOR ;==================================== CLOSE: CLOSE0: LDA @OF1 ; NENI OTEVREN ORA A JZ COPY PUSH H LHLD ADRO INX H MVI M,SUBS ; ZAPIS POSLEDNI ZNAK MVI A,EOT ; UZAVRI BLOK CALL WOBW XRA A STA @OF1 ; CLOSE POP H CALL STOP JMP COPY ;==================================== ; CTI VSTUPNI SOUBOR ;==================================== CLOAD: CALL IOCHK ANI 0CH ; RI CPI 0CH JZ FIND ; PRO MGF MVI C,1 CALL KZD ; FIND PRO KZD JMP CLOA1 ;==================================== ; OTEVRI SOUBOR PRO CTENI ;==================================== FIND: CALL RNAME CPI '.' PUSH PSW CZ REWIND POP PSW MVI B,NAMLE LXI D,FNAME CALL MOVE CALL EXT? CNZ PLAY CALL CMPNM MVI A,1 MOV E,A XCHG SHLD BNI ; CISLO SOUBORU STA @IF1 MVI A,LOW(BIEND-1) STA ADRI CLOA1: CALL MEMCK MOV E,A MOV D,B DCX D ; MEMTOP-1 LXI H,FREE CLOA2: CALL HILO JC EREND ; KONEC PAMETI CALL RI ; CTI DLE IOBYTU MOV M,A ; VSTUP DO PAMETI JNC CLOA2 ; NEBYL SUB (1AH) DCX H ; PRED SUB SHLD ADREND ; ADR. KONCE SOUBORU DIRSTP: XRA A STA @IF1 ; CLOSE CALL IOCHK ANI 0CH CPI 0CH JZ CLOA3 ; PRO MGF XRA A STA DEBL ; BLOK 255 B MVI C,10 CALL KZD ; STOP PRO KZD JMP COPY CLOA3: CALL STOP ; PRO MGF JMP COPY EREND: SHLD ADREND CALL TXIMM DB CR,LF,LF DC 'KONEC PAMETI' JMP COPY ;==================================== ; INICIALIZUJ NOVOU KAZETU ;==================================== INIT: CALL TTSP JNZ INIT2 ; PRO K-10 CALL REWIND CALL RECPUL MVI B,4 INIT1: MVI A,250 CALL TIME ; CEKANI 3*2.5 SEC. DCR B JNZ INIT1 JMP INIT3 INIT2: MVI A,28H ; SEPNUTI RELE MGF. OUT UMODE CALL TXIMM DC ' PREVIN A ZAPNI ' CALL RECOR INIT3: CALL XSTOP CALL TXIMM DC ' ZADEJ' LXI H,0 ;0..CISLO SOUBORU SHLD BNO CALL RNAME MVI A,CAN CALL WRNAM JMP COPY ; ZAPIS JMENO SOUBORU WRNAM: PUSH PSW PUSH H ; ADRESA JMENA CALL NULBF INX H MVI B,COMLE ; JMENO+POZNAMKA XCHG POP H PUSH D CALL MOVE POP H MVI B,NAMLE LXI D,WRNM ; VYSTUPNI POLE WRN1: MOV A,M ANI 3FH ; KOD PRO AND-1 JNZ $+5 MVI A,' ' ; BLANK STAX D INX H INX D DCR B JNZ WRN1 POP PSW CALL WOBW MVI M,'A' ;TYP DATA JMP CRLF ;=================================== ; PREPNUTI K-10 / SP-210 ;=================================== EXCH: LDA TSP XRI 0FFH STA TSP JMP COPY ;=================================== ; PREVINUTI NA ZACATEK - RUCNI STOP ;=================================== REWIZ: CALL TTSP JNZ COPY ; NENI SP-210 MVI A,SPREWZ JMP REWIK+2 ;=================================== ; PREVINUTI NA ZACATEK - AUTOMATICKY ;=================================== @REW: CALL REWIND JMP COPY REWIND: CALL TTSP RNZ ; NENI SP-210 MVI A,SPREWZ CALL SPPULS MVI A,200 CALL TIME ; CEKANI 2 SEC. REWI1: CALL BREAK@ IN SPIN ; STAV SP-210 CPI 0F7H ; TEST STOPU JNZ REWI1 ; JESTE NENI STOP JMP STOP ;==================================== ; TEST NA JMENO CALL PHDR CMPNM: CALL SEARCH ; POROVNEJ JMENO JNZ CMPNM ; NENI HLAVICKA CPI CAN JZ CMPNM-3 ; VYPIS VOLUME JMENO ; PRO ZAPIS CPF10: LXI B,FNAME MVI E,NAMLE CALL TESTJM JNZ CMPNM ; DALSI JMENO RET TESTJM: INX H ; JMENO LDAX B CPI '*' JZ JMENO? CALL @ANAL JZ VYPISH CMP M RNZ INX B DCR E JNZ TESTJM ; VYPIS HLAVICKU VYPISH: PUSH D LXI H,BIN-1 CALL PHDR IF SM LDA TSM ORA A JNZ VYP1 MVI C,1FH ; PRO TERMINAL CALL SERO@ CALL CRLF ENDIF VYP1: POP D XRA A RET IF SM SERCR: MVI C,CR ; ZNAK "CR" NA SERIOVY JMP SERO@ ; VYSTUP ENDIF JMENO?: CALL VYPISH ; ANO / NE OK?: CALL TXIMM DC '--(A/N)?' CALL ECHOCR CPI 'A' ; PISMENA RZ CPI 'Y' RET ; TISK HLAVICKY SOUBORU PHDR: IF SM LDA TSM ORA A PUSH PSW CNZ CRLF ; POUZE PRO TV POP PSW CZ SERCR ; PRO TERMINAL ELSE CALL CRLF ENDIF INX H MVI D,COMLE JMP TEXT ; IDENTIFIKACE BLOKU NA CO PNAME: LXI H,READNM ; VYPIS "B" ZNAKU Z POLE PNAM1: MOV A,M ; READNM NA CO CPI 1FH JNC PNAM2 ADI 40H ; KOD SAPI-1 NA ASCII PNAM2: MOV C,A CALL CO INX H DCR B JNZ PNAM1 RET DBTCR: CALL CRLF DBTV: MOV A,D CALL DBYT DBTV1: CALL SPACE MOV A,E CALL DBYT JMP SPACE OBNOV: LHLD POSICE ; VRACENI OKNA CALL TXIMM DB 9BH ; ESC MOV C,L CALL CO MOV C,H CALL CO LDA MOD@ STA MODE RET OKNO: PUSH D ; NASTAVENI OKNA LXI H,MODE MOV A,M MVI M,0 ; ZRUS ^P STA MOD@ CALL SPCL LXI H,2020H DAD D SHLD POSICE CALL TXIMM DB HOME OR 80H POP D RET ; JE EXTERNI JMENO '"' ? EXT?: LDA EXTEXT CPI '"' RET ; ANALYZA ODDELOVACU @ANAL: CPI ' ' RZ ANAL: CPI CR RZ ORA A RET ; VYPIS TEXT TXNAM: CALL TXIMM DB CR,LF DC ' NAZEV:' RET BREAK: LDA TSM ORA A ; PRO TERMINAL RZ ; NETESTUJ BREAK@: CALL CSTS RZ CALL CI JMP ETX? ; CTI A VYPIS ZNAK ECHO: CALL CINCR RZ ETX?: CPI ETX RNZ CALL DIRSTP ; CLOSE & STOP JMP NEXT ; BREAK=>C ; ZOBRAZ "CTENI" PLAY: CALL TTSP JZ START ; PRO SP-210 CALL TXIMM DC ' CTENI ' REC0: CALL DONE START: CALL DUPL MVI A,38H ; NASTAVENI MGF. GAPO: MOV C,A LDA JEDE? ORA A RZ ; MGF JEDE CALL TTSP MOV A,C JNZ STAR2 ; PRO K-10 PUSH PSW ; RIDICI SLOVO ANI 0FH PUSH PSW ; PRIZNAK Z CNZ SPGO ; START CTENI POP PSW CZ RECPUL ; START ZAPISU POP PSW ; 38 / 18 STAR2: OUT UMODE OUT URES ; RESET UARTU MVI A,1FH OUT USTAT ; NASTAVENI PRENOSU IN UDATA ; NEPLATNA DATA XRA A STA JEDE? RET STOP: CALL DUPL CALL TTSP ; TEST SP-210 MVI A,SPSTOP STOP1: CZ SPPULS ; PRO SP-210 MVI A,10H OUT UMODE STA JEDE? ;------------------------------------ ; PREPNUTI NA TERMINAL SM7202 ; VSTUP: A - TYP SOUBORU PNASM: MOV B,A LDA TSM ORA A RNZ ; NENI TERMINAL CALL DUPL MOV A,B CPI 'B' MVI A,9 ; TERMINAL + STOP MGF. JNZ PN1 MVI A,29H ; TERMINAL + START MGF. PN1: OUT UMODE OUT URES MVI A,PRENOS ; NASTAVENI PRENOSU OUT USTAT IN UDATA ; NEPLATNA DATA XRA A OUT UDATA RET DUPL: LDA TSM ; DVA ZNAKY "NUL" ORA A ; NA SERIOVY VYSTUP RNZ MVI C,0 CALL SERO@ JMP SERO@ ; TEST PRIPOJENI SP-210 TTSP: LDA TSP ORA A RET ; Z=1 PRO SP-210 ; GENEROVANI RIDICIHO PULSU NA SP-210 ; VSTUP: A - RIDICI SLOVO RECPUL: CALL T10MS MVI A,SPREC OUT SPOUT ; ZAZNAM SPGO: CALL T10MS MVI A,SPSTART ; SPUSTENI SPPULS: OUT SPOUT MVI A,21 CALL TIME ; PULS DELKY 210 MS MVI A,0FFH OUT SPOUT ; KONEC SIGNALU RET ; ZOBRAZ "ZAPIS!" RECOR: CALL TTSP RZ ; PRO SP-210 NIC CALL TXIMM DB CR,LF DC ' ZAPIS!' DONE: CALL TXIMM DC ' HOTOVO ?' ECHOCR: CALL ECHO PUSH PSW CALL CRLF POP PSW RET ; CASOVE PODPROGRAMY BTIM8: LDA CAS BTIME: MOV B,A ; * 10 MS MOV A,M ; 'B' ? CPI 'B' MOV A,B JNZ TIME RRC RRC RRC ; /8 JMP TIME T10MS: MVI A,1 ; PRO 10 MS TIME: PUSH B ; ACC*10MS (TCY=500NS) TIME1: LXI B,800+255 TIME2: DCX B ; ( 5) INR B ; ( 5) DCR B ; ( 5) JNZ TIME2 ; (10) 10MS LOOP @ 12.5US DCR A JNZ TIME1 POP B RET ; PRESUN PAMETI MOVE: MOV A,M STAX D INX H INX D DCR B JNZ MOVE RET ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ; OPERACE SE SOUBORY ;==================================== ; NAJDI BLOK NA PASCE ;==================================== SEARCH: XRA A SEAR1: MVI C,'#' ; CHYBA CC CO CALL ZVYS CALL READF JC SEAR1 ; PRO CHYBU MOV A,M ORA A JNZ RIB2 CALL TXIMM ; PRO KONEC PASKY DB CR,LF,LF DC 'SOUBOR NENALEZEN' JMP COPY ; ZVYS CISLO BLOKU ZVYS: LHLD BNI INX H SHLD BNI RET ;=================================== ; CTI VSTUPNI BUFFER ;=================================== RIB: PUSH D PUSH B CALL ZVYS CALL READ JC ERRD ; CHYBA CALL NUFIL ; CISLO O.K. ? JNZ ERRD ; CHYBA BLOKU RIB1: POP B POP D LXI H,BIN-1 MOV A,M RIB2: CPI CAN ; NAZEV PASKY RZ CPI SOH ; JMENO SOUBORU RET ; (HL)..TYP BLOKU ;=================================== ; CHYBA C T E N I ;=================================== ERRD: CALL XSTOP CALL TTSP ; PRO SP-210 1. OPRAVA MVI B,100 ; (ABY STIHALA MECHANIKA) JZ ERR31 ; AUTOMATICKY "A" ERRD0: CALL STOP ; ZPRACUJ CHYBU CTENI LHLD BNI XCHG CALL DBTCR ; POZADOVANE CISLO CALL TXIMM DB CR,LF DC 'CHYBA CTENI: I/D/N/A=ZNOVA ?' CALL ECHO ; POKRACUJ CPI 'N' JZ ERRD8 ; PRO "N" CPI 'I' JNZ ERRD1 LDA BTI INR A STA BTI ; ZVYS CISLO SOUBORU IF SM LDA TSM ORA A CZ CRLF ; PRO TERMINAL ENDIF JMP ERRD7 ERRD1: CPI 'D' JNZ ERRD3 LDA BTI DCR A STA BTI ERRD2: MVI B,200 ; PRO "D" CALL VRAT ; NAVRAT O 2 SEC. CALL READF CALL NUFIL JNC ERRD2 ; JESTE VRACEJ JMP ERRD7 ERRD3: MVI B,50 ; PRO "A" NAVRAT O 0.5 SEC ERR31: CALL VRAT JMP ERRD7 ERRD4: CALL TXIMM DB CR,LF DC 'VRAT ZPET ' CALL PLAY ERRD7: CALL READF ; ZNOVA CTI JC ERRD7 CALL NUFIL ; A HLEDEJ JZ ERRD8 JNC ERRD0 ; PREJEL JMP ERRD7 ; CTI DAL ERRD8: CALL CRLF JMP RIB1 ; JE TO DOBRE VRAT: CALL TTSP POP H ; NAVRATOVA ADRESA VRAT JNZ ERRD4 ; PRO K-10 PUSH H ; PRO SP-210 OK MVI A,SPREWZ ; PREVIJENI VZAD CALL SPPULS ; DOBA VSTUPUJE V <A> MOV A,B JMP TIME ;================================ ; ZAPIS VYSTUPNI BUFFER ;================================ WOBW: STA BOUT-1 WOB: PUSH D LHLD BNO INX H SHLD BNO XCHG ;********************************************* ; ZAPIS BLOKU: HL - ADRESA VYSTUPNIHO BUFFERU ; DE - CISLO SOUBORU A BLOKU ;********************************************* WRBLO: PUSH B PUSH D LXI H,BOUT-1 ; START BLOKU CALL DUPL MVI A,30H CALL GAPO ; START WRITE CALL BTIM8 ; 800/100 MS LDA CASK ORA A CNZ BTIM8 ; PRODLOUZENO 2x CALL SEROP CALL SEROP CALL SEROP ; PREAMBLE LXI B,(LENGHT+1) AND 0FFH CALL SEROM ; DATA LXI H,WRNM MVI C,NAMLE CALL SEROM ; JMENO POP D MOV A,E CALL SEROUT ; CISLO BLOKU MOV A,D CALL SEROUT ; CISLO SOUBORU MOV A,B CALL SEROUT ; KONTROLNI SUMA CALL SEROP XRA A CALL SEROUT ; ZAVER BLOKU LXI H,BIN-1 PUSH H MOV A,M CALL PNASM ; PREPNI NA TERMINAL CALL OKNO CALL DBTV1 ; CISLO BLOKU A CALL OBNOV ; SOUBORU NA CO CALL T10MS ; 10 MS POP H SHLD ADRO ; ZACATEK MOV A,M CALL ZASTAV POP B POP D ; NULUJ VYSTUPNI BUFFER ; --------------------- NULBF: LXI H,BOUT-1 PUSH H MVI A,LENGHT INX H MVI M,0 DCR A JNZ $-4 POP H ;(BLOK TYP) ADRM RET ; ZASTAV NA KONCI BLOKU ZASTAV: SUI 'B' RZ INR A JZ XSTOP ; 'A' CALL BTIM8 MOV A,M DCR A ; SOH ? JNZ STOP ; NENI SOH ; VOLANI STOP NA K-10 / PAUSE NA SP-210 XSTOP: CALL TTSP MVI A,SPPAUS ; PAUSE NA SP-210 JZ STOP1 JNZ STOP ; STOP NA K-10 ; CISLO BLOKU O.K. ? NUFIL: PUSH H LHLD BNI DCX H CALL HILO ; POROVNEJ POP H RET ;================================== ; CTI BYTE Z KAZETY ;================================== GET@: PUSH B PUSH D PUSH H LDA @IF1 ; BYL OTEVREN SOUBOR? ORA A CZ FIND ; KDYZ NE, TAK FIND LHLD ADRI GET0: INX H MOV A,L ; PRAZDNY? CPI BIEND AND 0FFH MOV A,M SHLD ADRI JZ GET1 ; <A>..BYTE CPI SUBS ; EOF? TEST JNZ GETEX ;- MOV C,A CALL KONEC? GET00: MOV A,C ; POSLEDNI BLOK JNZ GETEX ;- MOV E,L ; ADR ZNAKU SUBS LXI H,BIEND ; HLEDEJ OD KONCE GET01: DCX H CMP M ; JE SUBS JNZ GET01 ;- MOV A,L SUB E ; STEJNY ADR? JNZ GET00 ;- NENI KONEC GET2: XRA A STA @IF1 ; UZAVRI SOUBOR CALL STOP MVI A,SUBS STC ; CY=1 !!! DB 6 ; ZRUS ORA GETEX: ORA A POP H POP D POP B RET GET1: CALL KONEC? CNZ RIB JNZ GET0 ; KONEC SOUBORU JMP GET2 KONEC?: LDA BIN-1 ; POSLEDNI BLOK? CPI EOT RET ; ZY=1...ANO ;=============================== ; ZAPIS BYTE NA KAZETU ;=============================== PUT@: CALL PUTEND ; JE ^Z ? JC CLOSE0 PUSH B PUSH D PUSH H LDA @OF1 ; BYL OTEVREN? ORA A PUSH B CZ OPEN ; KDYZ NE, TAK OPEN POP B LHLD ADRO INX H MOV M,C ; ZAPIS SHLD ADRO MOV A,L CPI (BOEND AND 0FFH) - 1 CZ WOB POP H POP D POP B MOV A,C ORA A ; NCY RET PUTEND: LDA BOUT-1 CPI 'B' RZ LDA MODE ANI 2 XRI 2 RZ MOV A,C CPI SUBS STC RZ ORA A RET CHECK: MOV C,B ; KONTROLNI SOUCET ? CALL RICH CMP C RZ ERSTP: CALL STOP ; ZASTAV A OHLAS CHYBU JMP ERROR RADR@: CALL RICH MOV L,A CALL RICH ; HL MOV H,A RET RICH: CALL RI ; CTENI & SUMA JC ERSTP JMP SUM@ PADR@: MOV C,L CALL POCH MOV C,H POCH: MOV A,C ; ZAPIS & SUMA ADD B MOV B,A JMP PO ;******************************************** ; CTENI BLOKU: HL - ADRESA VSTUPNIHO BUFFERU ; VYSTUP: DE - CISLO SOUBORU A BLOKU ; CY=1 PRO CHYBU ;******************************************** READF: XRA A ; NASTAV FIND MOD STA FND READ: RBLOK: PUSH B LXI H,READNM ; PRO TERMINAL CALL START ; SYNCHRONIZACE SYNC: IN UDATA SYNC1: CALL T10MS ; 10 MS CALL BREAK IN USTAT RLC JC SYNC ; CEKEJ NA READY ; RBL2: MVI C,3 ; 3*PREAMBLE RBL3: CALL SERIN CPI PREAM JNZ SYNC ; GAP DCR C JNZ RBL3 MVI C,'*' LDA FND ; FIND MOD? ORA A JNZ $+5 ; NECTE MVI C,':' MOV M,C INX H PUSH H LXI H,BIN-1 LXI B,(LENGHT+1) AND 0FFH ; CTI BLOK DAT CALL SERIM POP H MVI M,'"' INX H MVI C,NAMLE CALL SERIM MVI M,'"' INX H MVI M,' ' CALL SERIN MOV E,A CALL SERIN MOV D,A MOV C,B ; KONTROLNI SUMA CALL SERIN SUB C PUSH PSW LXI H,BIN-1 PUSH H MOV A,M CALL PNASM ; PREPNUTI NA TERMINAL CALL OKNO MVI B,15 CALL PNAME ; VYPIS JMENA CALL DBTV CALL OBNOV POP H SHLD ADRI ; POCATECNI ADRESA LDA FND ORA A MOV A,M MVI B,'A' JZ $+4 INR B CMP B CC XSTOP MOV A,B STA FND ; ZRUS FIND MOD POP PSW ; PRO ZERO ..O.K POP B RZ STC RET ; ELSE ...ERROR ; ZAPIS DO PAMETI SERIM: CALL SERIN ;CTI MOV M,A INX H DCR C JNZ SERIM RET SEROM: MOV A,M ; Z PAMETI INX H CALL SEROUT ; NA :CT: DCR C JNZ SEROM RET ; VSE SEROP: MVI A,PREAM ; BLOCK-MARK ; ZAPIS ZNAKU NA MGF SEROUT: CALL SUM@ PUSH B MOV C,A CALL SERO@ POP B RET ; VSTUP ZNAKU Z MGF SERIN: CALL SERI@ SUM@: PUSH PSW ADD B MOV B,A CALL BREAK POP PSW RET ;********************************** ; COPY DATA ;********************************** ; PROMENNE PRO O.S. FNAME: DS 12 ; JMENO SOUBORU BNO: DS 1 ; CISLO BLOKU BTO: DS 1 ; CISLO SOUBORU BNI: DS 1 ; BTI: DS 1 ; INPUT ADRO: DS 2 ; ADR OUTPUT ADRI: DS 2 ; ADR INPUT FND: DS 1 ; FIND/READ ;******************************* ; I/O BUFFER PRO KOS ;******************************* DS 1 ; TYP BLOKU BOUT: BIN: DS LENGHT ; DATA BIEND EQU $ BOEND EQU $ WRNM: DS 11 ; JMENO SOUBORU READNM: DS 22 ; BUFFER PRO ZOBRAZENI POSICE: DS 2 ; OKNA V MIKOSU MOD@: DS 1 ; TSP: DS 1 ; PRO SP-210 - 0 JEDE?: DS 1 ; 0/X - MGF. JEDE/STOJI ; DEBL EQU 427FH ; DELKA BLOKU JEVER EQU 4280H ; 0 - NENI VERIFIKACE ; SEKV: DS 1 ; 0 - NENI ESCAPE SEKV. TSM: DS 1 ; PRO TERMINAL = 0 ADREND: DS 2 BINF?: DS 1 ; 0 = BINARNI SOUBOR @IOB: DS 1 ; PUVODNI IOBYT FREE EQU $ .DEPHASE ;********************************************* ; ROZDELENI S Y S T E M O V E R A M ;********************************************* ; RST1 EQU @R@ ; RESTART VEKTORY ;........>>> ;...... ;<<... UZIVATELSKY & MONITOR. ZASOBNIK ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%% .PHASE @R@+6DH ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ; MONITOR DATA ; MSTAK: DS 2 ACSAV: DS 2 BCSAV: DS 2 DESAV: DS 2 HLSAV: DS 2 PCSAV: DS 2 SPSAV: DS 2 ; BRAD: DS 2 INSTR: DS 1 BRAD2: DS 2 INST2: DS 1 CADR: DS 2 ; KURZOR ADR. ;------------------------- WMKOD: DS 14 ; KOD PRO KURZORY PREV: DS 21 ; PREVODNI KODY..0 ;------------------------- ; USER I/O DEVICE ; CILOC: DS 3 ; 0 COLOC: DS 3 ; 1 R1LOC: DS 3 ; 2 R2LOC: DS 3 ; 3 P1LOC: DS 3 ; 4 P2LOC: DS 3 ; 5 LILOC: DS 3 ; 6 CSLOC: DS 3 ; 7 DS 1 MEMTOP: DS 2 ; 8 ERRSW: DS 3 ; 9 CI@0: DS 3 ; 10 CO@: DS 3 ; 11 CSTS@: DS 3 ; 12 LO@: DS 3 ; 13 KOS@: DS 3 ; 14 RI@: DS 3 ; 15 PO@: DS 3 ; 16 CCPM: DS 3 ; 17 GRAF: DS 3 RESER: DS 3 IONUM EQU ($-CILOC)/3+1 ; IOBYT: DS 1 ; RIZENI I/O ZARIZENI ; ;****************************** ;<< EXTERNE OVLADANE FLAGY: >> ;****************************** MODE: DS 1 ; CO-MODE @IF1: DS 1 @IF2: DS 1 @OF1: DS 1 @OF2: DS 1 LINE: DS 1 ; RADEK COLUM: DS 1 ; SLOUPEC RESL: DS 1 ; RESERVACE RESC: DS 1 ; SLOUPEC RESL1: DS 1 ; POSLEDNI RADEK RESC1: DS 1 ; POSLEDNI SLOUPEC PRER: DS 1 ; UROVEN PRERUSENI ; ; PROMENNE PRO OPERACNI SYSTEM ; CUR@: DS 1 KEY: DS 1 CASK: DS 1 ; <>0 - PRODLUZ MEZERY WNDP: DS 6 ; PARAMETRY PRO 2.OKNO EXSER EQU $-MODE ; KONEC SLUZEB ; CHAR: DS 1 XFLG: DS 1 ; ;**************************************************** ; DATA SPOLECNA PRO MONITOR A O.S. ;**************************************************** ; ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @BT: DS 1 @PED: DS 1 SADR: DS 2 ; START ADR EADR: DS 2 ; END ADR SUM: DS 1 EXTEXT: DS 1 OPT: DS 1 NAMBUF: DS 65 ; .DEPHASE END
ÚVOD | Novinky | 8 Bitů | Příslušenství | Drobnosti | TTL | Kontakt
SAPI-1 | ONDRA | PMI-80 | PMD-85 | klony PMD-85 | klony SM50/40 | PETR | PLAN-80A | IQ151 | TNS | FK-1 | HVĚZDA | SP 830 | PCS 1-QR6000
ZPS | Technické prostředky | Programové vybavení | Dokumentace