Ú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