ÚVOD | Novinky | 8 Bitů | Příslušenství | Drobnosti | TTL | Kontakt


SAPI-1 | ONDRA | PMI-80 | PMD-85 | klony PMD-85 | PP01 | PETR | PLAN-80A | IQ151


ZPS | Technické prostředky | Programové vybavení | Dokumentace


8 bity / SAPI-1 / Programové vybavení / V5.0 / ASM MIKOS


Výpis programu MIKOS V5.0


.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 | PP01 | PETR | PLAN-80A | IQ151


ZPS | Technické prostředky | Programové vybavení | Dokumentace


8 bity / SAPI-1 / Programové vybavení / V5.0 / ASM MIKOS



SAPI.cz - web o československých osmibitech, zejména SAPI-1. Provozuje EC1045 od roku 2011
Za korekce češtiny dekuji: MELSOFTovi, Silliconovi, Martinu Lukáškovi a NOSTALCOMPovi

Když začínám blbnout z 8bitů tak se chodím léčit mezi otaku.
Animefest.cz