Ú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
.LIST
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
TITLE FIRMWARE SAPI-1 KOS V5.0A - K10/SP210
; 9.2.1988 (P.P.)
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;
ASEG
;
; *** DEFINOVANI DATOVEHO PROSTORU *
;
@R@ EQU 4000H ; ZACATEK SYSTEMOVE RAM (1K)
RSTN EQU 0CFH
EP3 EQU 1800H ; USER EPROM SYSTEM
;
;
MONIT EQU 0 ; ROM VERZE ZPS-2
ERAM EQU 0000
EPROM EQU 0C00H ; O.S.
;
;
; * MONITOR ENTRY *
;
CI EQU 103H
RI EQU 106H
CO EQU 109H
PO EQU 10CH
CSTS EQU 112H
CINCR EQU 13FH
IODEF EQU 11EH
SPCL EQU 121H
EXPR EQU 127H
DBYT EQU 133H
DADR EQU 130H
CRLF EQU 124H
HILO EQU 136H
NEXT EQU 139H
TEXT EQU 142H
IOCHK EQU 115H
SPACE EQU 13CH
IOSET EQU 118H
ERROR EQU 12AH
ASHEX EQU 12DH
HXASC EQU 148H
TXIMM EQU 151H
WND@ EQU 154H
RNAME EQU 15AH
INTER EQU 15DH
SERI@ EQU 17BH
SERO@ EQU 17EH
LENGHT EQU 255 ; DELKA BLOKU
NAMLE EQU 11 ; DELKA JMENA
COMLE EQU 64 ; DELKA KOMENTARE
;-------------------------------------------
CR EQU 0DH ; KONSTANTY
LF EQU 0AH
DEL EQU 7FH ; DELETE
ETX EQU 03H
HT EQU 9 ; TAB
PREAM EQU 10H ; PREAMBLE/POSTAMBLE
SUBS EQU 1AH ; END FLAG
HOME EQU 1DH
ERS EQU 1EH
;
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
;PARAREL. I/O
SPC EQU 37H
SPIN EQU 35H
SPOUT EQU 34H
; BLOKOVA NAVESTI
EOL 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
ORG EPROM ;START
;******************************************
;
;====================================
; T A B U L K A S L U Z E B K O S
;====================================
;
JMP MICOS
JMP INITS ; INIT SYSTEM
JMP FIND ; 1
JMP OPEN ; 2
JMP CLOSE ; 3
JMP LOAD ; 4
JMP SAVE ; 5
JMP BINAR ; 6
ZAC: JMP GET@ ; 7
JMP MOTA ; 8
JMP PUT@ ; 9
JMP STOP ; 10
;
MAXSL EQU $-EPROM
;
CAS: DC 'PERINA'
;
;====================================
; INICIALIZACE SYSTEMU KOS
;====================================
;
INITS:
MVI A,0A9H ; LO=L,RI-1,PO-1
STA FND ; NE FIND MODE
STA IOBYT
CALL TXIMM ; OHLASENI
DB 'MIKOS V5.0 '
DC '(C) TESLA DIZ 1987'
LXI H,KOS@@
SHLD KOS@+1
MVI A,SPRS ; RIDICI SLOVO PRO
OUT SPC ; SP-210
XRA A
STA @IF1 ; FIND FLAG
STA @OF1
STA TSP ; NASTAV SP-210
LXI H,ZAC ; VYPLN IODEF
LXI D,R1LOC
MVI B,12
CALL MOVE
LDA EP3 ; USER SYSTEM ?
CPI 0C3H
CZ EP3 + 3 ; START
JMP STOP
;
;====================================
; VYHODNOCENI SLUZBY MONITORU
;====================================
;
KOS@@: INR C
LXI D,EPROM
MVI B,MAXSL
SLUZBA: XCHG ; JMENO
MOV A,C
ADD C
ADD C ; *3
CMP B
RNC ; VETSI
MVI B,0
MOV C,A ; OFFSET
DAD B ; VYPOCTI ADR
PCHL
;
;====================================
; VUHODNOCENI POVELU OSLUHY
;====================================
;
MICOS: CALL STOP
XRA A
STA EXTEXT ; 0..NENI
MVI C,'_'
CALL TTSP
JNZ $+5
MVI C,':'
CALL CO
CALL ECHOCR
CPI 'D'
JZ DIR ; DIRECTORY
CPI 'I'
JZ INIT ; INICIALIZACE PASKY
CPI 'O'
JZ OPEN ; OPEN OUTPUT
CPI 'C' ; CLOSE UOTPUT
JZ CLOSE
CPI 'F' ; FIND INPUT
JZ FIND
CPI 'S'
JZ SAVE
CPI 'L' ; LOAD
JZ LOAD
CPI 'K'
JZ KONEC
CPI 'X'
JZ EXCH
CPI '>'
JZ MOTA
CPI '<'
JZ REWIZ
CPI 'R'
JZ REWIND
CPI 'M' ; PREVIJENI
RNZ ; JINY POVEL
;
;************************************
; REALIZACE POVELU KOS-I
;************************************
;
;====================================
; 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
STOP: CALL TTSP ; TEST SP-210
MVI A,SPSTOP
STOP1: CZ SPPULS ; PRO SP-210
MVI A,10H
OUT UMODE
STA JEDE?
RET
;
;====================================
; BINARNI SOUBOR NASTAV
;====================================
;
BINAR: MVI A,30H
CALL GAPO ; START ZAPISU
CALL BTIM8
MVI A,'B'
STA BOUT-1
RET
;
;====================================
; ZAPIS KONEC PASKY
;====================================
KONEC: CALL OK? ; ANO ?
RNZ
CALL RECOR
XRA A
JMP WOBW ; 00.. TYP
;
;====================================
; 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
JMP NEXT
DIR1A: CPI EOT
JNZ DIR2
CALL DBTCR
DIR2: CALL NUFIL
JMP DIR1
;
;====================================
; OPEN: OTEVRI NOVY SOUBOR PRO ZAPIS
;====================================
;
OPEN: CALL IOPO ; NASTAV IOBYT
CALL NPO
RM ; PO=SYSTEM..
MVI C,2
JNZ CCPM ; USER=2
CALL RNAME
CPI '@' ; APPEND?
JZ OPE5
CPI '.'
PUSH PSW
CZ REWIND
POP PSW
LDA @OF1 ; PODRUHE?
ORA A
PUSH PSW ; =====================
CNZ CLOSE ; UZAVRI A PRIPOJ DALSI
POP PSW ; DALSI 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
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
JMP WRNAM
OPE5: MVI A,8 ; NASTAV PO=1
CALL IOPO1
JMP OPE4
;
;====================================
; FIND: OTEVRI SOUBOR PRO CTENI
;====================================
;
FIND: CALL IORI
CALL NRI
RM ; SYSTEM RI
MVI C,1
JNZ CCPM ; USER 2
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
RET
;
;====================================
; LOAD BINARNI SOUBOR
;====================================
;
LOAD: CALL FIND ; OTEVRI SOUBOR
LO1: CALL RICH
ORA A ; BLANK?
JZ LO1
SUI '<'
JNZ ERSTP ; NENI BINARNI FORMAT
MOV B,A ; KONTROLNI SOUCET
CALL RADR@
SHLD EADR ; KONCOVA ADRESA
XCHG
CALL RADR@
SHLD SADR ; START. ADRESA
CALL RICH
CPI '>'
JNZ ERSTP ; NENI BINAR
PUSH H
CALL CHECK
MVI B,0 ; NULUJ
LO2: CALL RICH
MOV M,A
CALL HILO
JNC LO2
CALL CHECK
STA SUM
POP H
LXI D,4401H
CALL HILO
JNZ CLSTP
LXI H,0
SHLD @BT
; UZAVRI VSTUPNI SOUBOR
CLSTP: CALL CRLF
CALL NRI
RM
JNZ CLST2
DIRSTP: XRA A
STA @IF1 ; CLOSE
JMP STOP
CLST2: XRA A
STA @IF2
RET
;
;====================================
; SAVE ULOZ BINARNI SOUBOR
;====================================
;
SAVE: CALL OPEN
MVI C,2
CALL EXPR ; ROZSAH ADRES
CALL NPO
CZ BINAR
MVI C,'<' ; PRVNI BYTE
CALL POCH
MVI B,0 ; KONTROLNI SOUCET
POP H ; POCATECNI ADRESA
POP D ; KONCOVA ADRESA
CALL PADR@
XCHG
CALL PADR@
MVI C,'>'
CALL POCH
MOV C,B ; KONTROLNI SUMA ADRES
CALL POCH
;
MVI B,0 ; KONTROLNI SUMA DAT
SAV1: MOV C,M
CALL POCH
CALL HILO
JNC SAV1
MOV C,B ; SUMA
CALL POCH
;
;====================================
; SLOSE: UZAVRI VSTUPNI SOUBOR
;====================================
;
CLOSE: CALL NPO
RM
MVI C,3
JNZ CCPM
CLOSE0: LDA @OF1 ; NENI OTEVREN
ORA A
RZ
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
JMP STOP
;
;====================================
; 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 4*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
;
; 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
RET
;
;====================================
; PREVINUTI NA ZACATEK - RUCNI STOP
;====================================
;
REWIZ: CALL TTSP
RNZ ; NENI SP-210
MVI A,SPREWZ
JMP REWIK+2
;
;====================================
; PREVINUTI NA ZACATEK - AUTOMATICKY
;====================================
;
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 ; JESTLI 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
VIP1: POP D
XRA A
RET
;
JMENO?: CALL VYPISH
; ANO / NE
OK?: CALL TXIMM
DC '--(A/N)?'
CALL ECHOCR
CPI 'A' ; PISMENA
RZ
CPI 'Y'
RET
;
; TISK HLAVICKY SOUBORU
;----------------------
PHDR: CALL CRLF
INX H
MVI D,COMLE
JMP TEXT
;
; "OKNA" V MIKOSU PRO IDEVTIFIKACI BLOKU
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
;
; ANALIZA ODDELOVACU
;
@ANAL: CPI 20H
RZ
ANAL: CPI CR
RZ
ORA A
RET
;
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;
; TEST NA IOBYTE (PO)
;
NPO: LDA IOBYT
RRC
RRC
NRI1: RRC
RRC
ANI 3 ; ZARIZENI
DCR A ; MINUS .. SYSTEM
DCR A ; ZY.. USER=1
RET ; NZ.. USER=2
;
; TEST NA IOBYTE (RI)
;
NRI: LDA IOBYT
JMP NRI1
;
; NASTAV IOBYTE PODLE OPTION
;
IOPO: CALL CISLO
RC
RLC
RLC
IOPO1: MVI C,0CFH ; MASKA
JMP ZMIO
;
IORI: CALL CISLO
RC
MVI C,0F3H ; MASKA
ZMIO: RLC
RLC
MOV B,A
LDA IOBYT
ANA C
ORA B
STA IOBYT
RET
;
CISLO: SUI '0'
RC ; CY=1..NENI
CPI 3
CMC
RC
INR A
RET
;
; VYPIS TEXTU
;
TXNAM: CALL TXIMM
DB CR,LF
DC ' NAZEV:'
RET
BREAK:
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 '
RECO: CALL DONE
;
START:
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
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
;
; 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
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
JZ NEXT ; PRO KONEC SOUBORU
JMP RIB2
;
; ZVIS 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
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
CPI 'I'
JNZ ERRD1
LDA BTI
INR A
STA BTI ; ZVIS CISLO SOUBORU
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
;*********************************************
;
WRBLO: PUSH B
PUSH D
LXI H,BOUT-1 ; START BLOKU
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
CALL OKNO
CALL DBTV1
CALL OBNOV
POP B
CALL T10MS ; 10 MS
LXI H,BOUT-1
SHLD ADRO ; ZACATEK
MOV A,M
CALL ZASTAV
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
GETEX: ORA A
POP H
POP D
POP B
RET
;
GET1: CALL KONEC?
CNZ RIB
JNZ GET0 ; KONEC SOUBORU
JMP GET2
; POSLEDNI BLOK ?
KONEC?: LDA BIN-1
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
;KONTROLNI SOUCET?
CHECK: MOV C,B
CALL RICH
CMP C
RZ
; ZASTAV A OHLAS CHYBU
ERSTP: CALL STOP
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 ; ZAPI & 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
CALL START
; SYNCHRONIZACE
SYNC: IN UDATA
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
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
CALL OKNO
MVI B,15
CALL PNAME ; VYPIS JMENA
CALL DBTV
CALL OBNOV
LXI H,BIN-1
SHLD ADRI ; POCATECNI ADRESA
LDA FND
ORA A
MOV A,M
MVI B,'A'
JZ $+4
INR B
CMP B
CC XSTOP
MVI A,21
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 ZNAMU 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
@E@KOS EQU $
;
;****************************************
; 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
;
;****************************
;<< EXTERE 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
PREP: DS 1 ; UROVEN PRERUSENI
;
; PROMENE PRO OPRACNI SYSTEM
;
CUR@: DS 1
KEY: DS 1
CASK: DS 1 ; <>0 - PRODLUZ MEZERY
WNDP: DS 6 ; PARAMETR 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
;
;""""""""""""""""""""""""""""""""""
; PROMENE 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
TSM: DS 1
TSP: DS 1 ; PRO SP-210 - 0
POSICE: DS 2 ; OKNA V MIKOSU
MOD@: DS 1
JEDE?: DS 1 ; PRO =0 MGF. JEDE
; <>0 MGF. STOJI
;
.DEPHASE
;
END ; [P]
Ú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