Zdrojový kód odpovídá originálu až na nezbytně nutné změny vynucené použitím jiného překladače TASM z důvodů kontroly chyb. Původně napsáno v
DEBUG ASM48 PV02.SRC PAGEWIPTH(95) NOOBJECT XREF
ISIS-II MCS-48/UPI-41 MACRO ASSEMBLER, V3.0

Výpis programu PETR


;
;*******************************************************
;*                                                     *
;*   RIDICI  PROGRAM  PRO  STAVEBNICI    P  E  T  R    *
;*                                                     *
;*      P.C.  16. 6.1986                               *
;*      T.T.   2. 7.1986  REV.                         *
;*      P.C.  13.10.1986  OVLADAC MGF V.1              *
;*      P.C.   6. 2.1987  REV., SNIZENI ROZSAHU        *
;*      P.C.  12. 3.1987  OVLADAC MGF V.2              *
;*      P.C.  20. 8.1987  UPRAVA PRO NOVY HARDVARE     *
;*      T.T./P.C. XII/87  REV. OVERONACI VERZE 1 KB    *
;*      T.T.  II/88       REV. -> PVO2.SRC             *
;*                                                     *
;*******************************************************
;
;       XTAL 6 MHZ
;
;       H  A  R  D  W  A  R  E
;
;       T1=1    REZIM  "PETR"
;       T1=0    REZIM  "EXTERNI ROM"
;       ADRESY V EXTERNI ROM:
EXTRES  .EQU    400H            ;RESET
EXTINT  .EQU    403H            ;INTERNAL INTERRUPT
EXTTIN  .EQU    407H            ;TIMER/COUNTER INTERRUPT
;
; OBSAZENI PORTU 8048
;       P10-P17 .. EXTERNAL  ("PETR" - PORT 1)
;
;       P20-P23 .. PRO ROZSIROVANI SYSTEMU
;        NAVIC P23 .. IO/M (OBOU) 8155
;              P22 .. CE VNITRNI 8155
;              P21 .. CE PRIDAVNE 8155
;       P24     .. VYSTUP MUX7 (POUZE PRO KLAVESNICI)
;       P25-P27 .. VSTUPNI LINKY MATICE KLAVESNICE
P55IOM  .EQU    00001000B       ;ZAPOJENI
P55CE0  .EQU    00000100B       ;JEDNOTLIVYCH
P55CE1  .EQU    00000010B       ;VODICU
MUX7    .EQU    00010000B       ;BRANY P2
;
;       T0      .. EXTERNAL  ("PETR" - LINKA T)
;       INT     .. EXTERNAL  ("PETR" - LINKA INT)
;
; OBSAZENI PORTU 8155
;       PA0-PA7 .. EXTERNAL  ("PETR" - PORT 2)
;       PB0-PB7 .. SEGMENTY DISPLEJE
;       PC0-PC5 .. VYSTUP MUX1-MUX6 (DISPLEJ A KLAVESNICE)
;
; PRIPOJENI  MAGNETOFONU
;       MGF OUTPUT = P11
;       MGF INPUT  = P10
MGBITW  .EQU    00000010B       ;PRO ZAPIS
MGBITR  .EQU    00000001B       ;PRO CTENI
;
;
;       S  O  F  T  W  A  R  E
;
;       OBSAZENI REGISTRU
;
;       RB0 - PRACOVNI REGISTY
;           R4  "PETR" PRIZNAK F
;           R6  AKTUALNI ADRESA MEM
;           R7  "PETR" HODNOTA PC
;
;       RB1 - PRERUSENI OD CASOVACE
;           R0  USCHOVA STAVU LINEK P20-P23
;           R1  PRACOVNI SMERNIK
;           R2  CITAC MUX
;           R3  DETEKCE KLAVESY "STOP"
STOPO   .EQU    1BH             ;SMERNIK NA R3
;           R4  CITAC CHVENI PRI DETEKCI TLACITKA
;           R5  POSLEDNI STISKNUTE TLACITKO
;           R6  DETEKOVANE TLACITKO
KEY     .EQU    1EH             ;SMERNIK NA R6
;           R7  USCHOVA ACC
;
;       OBSAZENI INTERNI RAM
;
VID0    .EQU    20H             ;VIDEOREGISTRY. PRAVY
VID1    .EQU    VID0+1          ; .
VID2    .EQU    VID0+2          ; .
VID3    .EQU    VID0+3          ; .
VID4    .EQU    VID0+4          ; .
VID5    .EQU    VID0+5          ; LEVY
SP      .EQU    26H             ;"PETR" STACK POINTER
ACC     .EQU    27H             ;"PETR" ACC
TIM128  .EQU    28H             ;CASOVAC 1.28 MS
P1D     .EQU    29H             ;KOPIE DAT NA P1 (8048)
P2D     .EQU    2AH             ;KOPIE DAT NA P2 (PA 8155)
BUFF    .EQU    2BH             ;BUFFER CISLIC 2BH - 30H
STKMIN  .EQU    31H             ;OBLAST PRO ZASOBNIK
STKMAX  .EQU    3AH             ; 10 POLOZEK
;       3BH-3FH ... VOLNE
;
;       PRIZNAKY
;       F0 .. PRITOMNOST ROZSIRUJICI 8155
;       F1 .. ZADOST O PRERUSENI PROCESORU PETR
;
;       KONSTANTY
;
KTIM    .EQU    0F0H            ;KONSTANTA PRO CASOVAC
                                ;  (1.28 MS, CCA 800HZ)
CHVENI  .EQU    3               ;POCET CTENI NUTNYCH PRO
                                ;   DETEKCI TLACITKA
;
P55R    .EQU    0               ;RIZENI 8155
P55A    .EQU    1               ;PORT A
P55B    .EQU    2               ;PORT B
P55C    .EQU    3               ;PORT C
;
;       CISLA CHYB
;
ERR1    .EQU    1               ;PRETECENI PRI DEC-->BIN
ERR2    .EQU    2               ;ADRESA MIMO PAMET
ERR3    .EQU    3               ;NEZNAMA INSTRUKCE
ERR4    .EQU    4               ;OPERAND MIMO ROZSAH
ERR5    .EQU    5               ;PREPLNENI ZASOBNIKU (CALL)
ERR6    .EQU    6               ;PRAZDNY ZASOBNIK (RET)
ERR7    .EQU    7               ;CHYBA CTENI Z MGF
;
;       KONSTANTY PRO ZOBRAZOVANI
;
;DEFINICE ZAPOJENI SEGMENTU NA JEDNOTLIVE LINKY PORTU B
;
S0      .EQU    00000100B       ;   ---- S0 ----
S1      .EQU    00010000B       ;  !            !
S2      .EQU    10000000B       ;  S5           S1
S3      .EQU    00100000B       ;  !            !
S4      .EQU    01000000B       ;   ---- S6 ----
S5      .EQU    00001000B       ;  !            !
S6      .EQU    00000010B       ;  S4           S2
S7      .EQU    00000001B       ;  !            !
ZTECKA  .EQU    S7              ;   ---- S3 ----      S7
;
ZZ0     .EQU    S0+S1+S2+S3+S4+S5
ZZ1     .EQU    S1+S2
ZZ2     .EQU    S0+S1+S3+S4+S6
ZZ3     .EQU    S0+S1+S2+S3+S6
ZZ4     .EQU    S1+S2+S5+S6
ZZ5     .EQU    S0+S2+S3+S5+S6
ZZ6     .EQU    S0+S2+S3+S4+S5+S6
ZZ7     .EQU    S0+S1+S2
ZZ8     .EQU    S0+S1+S2+S3+S4+S5+S6
ZZ9     .EQU    S0+S1+S2+S3+S5+S6
ZZA     .EQU    S0+S1+S2+S4+S5+S6
ZZP     .EQU    S0+S1+S4+S5+S6
ZZE     .EQU    S0+S3+S4+S5+S6
ZZF     .EQU    S0+S4+S5+S6
ZZS     .EQU    ZZ5
ZZM     .EQU    S2+S4+S6
ZZH     .EQU    S1+S2+S4+S5+S6
ZZC     .EQU    S0+S3+S4+S5
ZRUN    .EQU    S2+S3+S4+S6
;
; KODY TLACITEK
;
TL0     .EQU    0               ;SKUPINA CISEL
TL1     .EQU    TL0+1           ;MUSY BYT ZA SEBOU
TL2     .EQU    TL0+2
TL3     .EQU    TL0+3
TL4     .EQU    TL0+4
TL5     .EQU    TL0+5
TL6     .EQU    TL0+6
TL7     .EQU    TL0+7
TL8     .EQU    TL0+8
TL9     .EQU    TL0+9
;
TLPREV  .EQU    10              ;TYTO TRI KODY
TLEND   .EQU    11              ;MUSI NASLEDIVAT
TLNEXT  .EQU    12              ;ZA SEBOU !
;
TLMEM   .EQU    13              ;PRIKAZOVE KLAVESY
TLACC   .EQU    14              ;MUSI BYT ZA SEBOU
TLPC    .EQU    15
TLRUN   .EQU    16
TLSTEP  .EQU    17
TLSAVE  .EQU    18
TLLOAD  .EQU    19
;
TLSTOP  .EQU    TLEND           ;TLACITKO VE FUNKCI STOP
NOKEY   .EQU    80H
;
        .BLOCK  10
;;         .ORG    768
;; ;
;; ;       TABULKA PRO ZOBRAZOVANI CISLIC
;; ;       UMISTENA OD ZACATKU PAGE 3
;; ;
;; TABCIS: .DB     ZZ0,ZZ1,ZZ2,ZZ3,ZZ4
;;         .DB     ZZ5,ZZ6,ZZ7,ZZ8,ZZ9
;
        .ORG    0
;                                                       
;********************************************************
;*                                                      *
;*              VEKTOR  RESTARTU  A  PRERUSENI          *
;*                                                      *
;********************************************************
;
; ADRESA 0 - RESET
        JMP     RESET
        NOP
; ADRESA 3 - EXT INT
        JT1     INTINT          ;PRERUSENI PETR
        JMP     EXTINT
; ADRESA 7 - TIMER/COUNTER INT
        JT1     TIMER
        JMP     EXTTIN
;
;
;********************************************************
;*                                                      *
;*              PRERUSENI  OD  CASOVACE                 *
;*                                                      *
;********************************************************
;
TIMER   SEL     RB1
        MOV     R7,A            ;USCHOVA ACC
        MOV     A,#KTIM
        MOV     T,A             ;CASOVAC
; USCHOVA STAVU LINEK P20 - P23 (NA KONCI HO OBNONI)
        IN      A,P2
        MOV     R0,A
; OBSLUHA DISPLEJE
; 1. ZHASNOUT SVITICI ZNAK, MAPOVAT VNITRNI 8155, IO
        CALL    ZHAS0
; 2. POSUN MULTIPLEXU. NYNI JE LINKA MUX7=1
        DJNZ    R2,TIM2         ;CITAC MULTIPLEXU
;       PRO MUX=7: NASTAVIT LINKU P24 (VYSTUP MUX7) := 0
        ANL     P2,#~MUX7
        MOV     R2,#7           ;REINCIALIZACE CITACE
TIM2    ;NASTAVENI LINEK MUX1-MUX6 (BRANA C 8155)
        MOV     A,R2            ;CITAC MULTIPLEXU
        ADD     A,#TABMUX-1
        MOVP    A,@A            ;A=DATA K ZAPISU
        MOV     R1,#P55C        ;  NA BRANU C 8155
        MOVX    @R1,A           ;ZAPIS MUX1-MUX6
; 3. ROZSVICENI ZNAKU NA NOVE POZICI
;       (V PRIPADE MUX=7 JE DISPLEJ NEAKTIVNI,
;        NA HODNOTE DAT ZAPSANYCH NA BRANU B NEZALEZI)
        MOV     A,R2            ;CITAC MUX
        ADD     A,#VID0-1
        MOV     R1,A
        MOV     A,@R1           ;DATA NA DISPLEJ
        CPL     A
        MOV     R1,#P55B
        MOVX    @R1,A           ;ROZSVITI DISPLEJ
;
;       CTENI STAVU TLACITEK
;
TIM3    IN      A,P2
        CPL     A
        ANL     A,#11100000B    ;MASKA LINEK P25-P27
        CLR     C
        MOV     R1,#3
TIM4    RLC     A
        JC      TIM6            ;JE TLACITKO
        DJNZ    R1,TIM4
        ;NENI TLACITKO
        MOV     A,R5            ;POSLEDNI TLACITKO
        ANL     A,#7
        XRL     A,R2            ;NA STEJNE LINCE MUX ?
        JNZ     TIM8            ;NE NIC
        ; TLACITKO BYLO PUSTENO
TIM5    MOV     R5,#NOKEY       ;LASTKEY := NEPLATNE
        JMP     TIM8
        ; NASEL STISKNUTE TLACITKO
TIM6    JNZ     TIM5            ;JSOU STISKNUTA DVE
        MOV     A,R1            ;PORADI TLACITKA (1..3)
        RL      A
        RL      A               ;*8
        RL      A
        ORL     A,R2            ;JESTE CITAC MUX
        ;V A JE KOD TLACITKA  9 .. 30
        XCH     A,R5            ;AKTUALIZUJE LASTKEY
        XRL     A,R5            ;STEJNE JAKO PREDTIM ?
        JZ      TIM7
        MOV     R4,#CHVENI      ;NOVE, ZNOVU CITAT CHVENI
TIM7    MOV     A,R4
        JZ      TIM8            ;JIZ DETEKOVANO
        DJNZ    R4,TIM8         ;CITAC CHVENI
        ;DETEKCE TLACITKA
        MOV     A,R5            ;LASTKEY
        ADD     A,#TABTL-9      ;PTR DO TABULKY
        MOVP    A,@A            ;PREKODOVANI TLACITKA
        MOV     R6,A            ;KOD TLACITKA
        ;V R6 (KEY) OCEKAVA KOD TLACITKA HLAVNI PGM
;TEST STISKU "STOP":
        XRL     A,#TLSTOP       ;TL. VE VYZNAMU STOP
        MOV     R3,A            ;R3:=0 .. DETEKOVANO
TIM72
;
; VYSTUP Z CASOVACE. OBNOVA LINEK P10 A P24
;
TIM8    MOV     R1,#TIM128      ;CITA V CASOVACI 1.28 MS
        INC     @R1
;
        MOV     A,R0            ;STAV P2 PRI PRERUSENI
        ORL     A,#11110000B    ;P24..P27 := 1
        OUTL    P2,A            ;OBNOVA P20..P23
        MOV     A,R7            ;OBNOVA ACC
        RETR
;
;       TABULKA PRO PREKODOVANI TLACITEK
;
TABTL
;KLAVESNICE:            CITAC MUX =
;          6      5      4      3      2      1      7
;       -------------------------------------------------
;P25 <- ! 7   !  8   !  9   !  0   ! SAVE ! LOAD !HW.RES!
;P26 <- ! 4   !  5   !  6   ! ACC  !  PC  ! RUN  ! STEP !
;P27 <- ! 1   !  2   !  3   ! MEM  ! PREV ! NEXT ! END  !
;       -------------------------------------------------
;ORGANIZACE TABULKY:
;       MUX=NEDEF  1   2   3   4   5   6   7
;P25               .   .   .   .   .   .   X
;P26           X   .   .   .   .   .   .   .
;P27           X   .   .   .   .   .   .   .
;
 .DB       TLLOAD,TLSAVE,TL0   ,TL9   ,TL8   ,TL7   ,NOKEY
 .DB NOKEY,TLRUN ,TLPC  ,TLACC ,TL6   ,TL5   ,TL4   ,TLSTEP
 .DB NOKEY,TLNEXT,TLPREV,TLMEM ,TL3   ,TL2   ,TL1   ,TLEND
;
;TABULKA PRO KODOVANI VYSTUPU MULTIPLEXU NA BRANE C 8155
TABMUX  .DB     11110111B       ;MUX=1  (SVITI VPRAVO)
        .DB     11101111B       ;    2          .
        .DB     11011111B       ;    3          .
        .DB     11111110B       ;    4          .
        .DB     11111101B       ;    5          .
        .DB     11111011B       ;    6  (SVITI VLEVO)
        .DB     11111111B       ;    7  (DISPLEJ ZHASTNUTY)
;
;*********************************************************
;*                                                       *
;*              OBSTUHA  VNEJSIHO  PRERUSENI             *
;*                                                       *
;*********************************************************
;
INTINT  CLR     F1
        CPL     F1              ;F1 := 1
        DIS     I
        RETR
;
;********************************************************
;*                                                      *
;*              RESET  SYSTEMU                          *
;*                                                      *
;********************************************************
;
RESET   ;INICIALIZACE VNITRNI 8155 (DISPLEJ)
        MOV     R1,#P55R        ;RIDICI PORT 8155
        MOV     A,#0FH          ;POVEL: A=B=C=OUT
        CALL    WR55IO          ;VYSTUP, MAPUJE 8155 IO
        INC     R1
        MOV     A,#0FFH
        ;MOVX   @R1,A           ;PA<--FF NIC !
        INC     R1
        MOVX    @R1,A           ;PB<--FF (ZHASNE DISP.)
        INC     R1
        MOVX    @R1,A           ;MULTIPLEX NEAKTIVNI
;
;INICIALIZACE HODNOT V INTERNI RAM
        MOV     R0,#VID0        ;NULUJE:
        MOV     R3,#8           ;  VIDEOREGISTRY,
        CALL    CLEAR           ;  ACC, SP
        MOV     R4,A            ;  PRIZNAK F
        MOV     R6,A            ;  ADRESU MEM
        MOV     R7,A            ;  PC
        CPL     A               ;A:=0FFH
        MOV     @R0,A           ;P1D
        INC     R0
        MOV     @R0,A           ;P2D
;INICIALIZACE CASOVACE, A=0FFH
        MOV     T,A             ;1. TIK = 80 MIKROSEC
        SEL     RB1
        MOV     R2,#1           ;CITAC MUX
        MOV     R3,A            ;DETEKCE "STOP"
;;      MOV     R5,A            ;LAST KEY := 0FFH
                                ;(NENI NUTNE)
        MOV     R6,A            ;KEY := 0FFH
        SEL     RB0
        ; ODSKOK DO EXTERNI ROM, JE-LI PRIPOJENA
        JT1     INTRES          ;POKRACUJE ZDE
        JMP     EXTRES          ;EXTERNAL RESET
;
INTRES  MOV     A,#~(P55IOM+P55CE1)
        OUTL    P2,A            ;MAPUJE POUZE DRUHOU 8155
        MOV     A,R0
        MOVX    @R1,A           ;ZAPISE NEJAKOU HODNOTU
        MOVX    A,@R1           ;A PRECTE JI ZPET
        XRL     A,R0            ;PRECETL TOTEZ ?
        JNZ     RES3            ;NE -> NENI DRUHA 8155
        CPL     F0              ;MAME OBE 8155 !
RES3    ;NULUJE RAM 8155
        ANL     P2,#~(P55IOM+P55CE0+P55CE1)
        CLR     A    ;MAPUJE OBE 8155, PAMET
        MOV     R1,A
RES1    MOVX    @R1,A
        DJNZ    R1,RES1
;RESET PROVEDEN
        STRT    T
        JMP     PRIKAZ          ;SKOK DO RIDICI SMICKY
;
;********************************************************
;*                                                      *
;*     PODPROGRAMY  PRO  INTERPRETACI  INSTRUKCI        *
;*                                                      *
;********************************************************
;
;
;********************************************************
;*                                                      *
;*      TRANSFORMACE  LOG. ADRESA--> FYZ. ADRESA        *
;*                                                      *
;********************************************************
;
;VSTUP:  A=LOGICKA ADRESA BUNKY PAMETI
;VYSTUP: PRIMAPUJE PAMET ODPOVIDAJICIHO OBVODU 8155,
;        V R1 VRATI ADRESU UVNITR PRIMAPOVANE STRANKY
; NICI REGISTRY A,R2
;
;TRANSFORMACNI FUNKCE:
;VNITRNI 8155:  FYZ. ADR. = 2*LOG.ADRESA
;VNEJSI 8155:   FYZ. ADR. = 2*LOG.ADRESA+1
;
LDADR:  MOVX    A,@R1
CVADR:  CALL    TSADR           ;TEST PRIPUSTNOSTI
        MOV     R1,#~(P55IOM+P55CE1)    ;PRO ADR >=128
        JB7     CVAD0
        MOV     R1,#~(P55IOM+P55CE0)    ;PRO ADR <128
CVAD0:  RL      A
        XCH     A,R1
        OUTL    P2,A            ;MAPUJE SPRAVNOU 8155
        RET
;
;********************************************************
;*                                                      *
;*              CTENI  OPERANDU  INSTRUKCI              *
;*                                                      *
;********************************************************
;
;VYSTUP:  A=HODNOTA OPERANDU MEM
;PRO LDOPF0 NAVIC: FLAG := 0, V R2 VRATI ACC
;
LDOPF0  MOV     R4,#0           ;NULUJE UZIV. FLAG
        MOV     A,@R0
        MOV     R2,A            ;ACC
;
LDOPM   CALL    LDADR           ;ADRESA OPERANDU DO R1
;;      INC     R1              ;CISLO PRIPADNE CHYBY
;;      MOVX    A,@R1           ;OPER.ZNAK
;;      JNZ     AERROR          ;NENULOVY => CHYBA
;;      DEC     R1
        MOVX    A,@R1
        RET
;
;********************************************************
;*                                                      *
;*              VYBER  OPERANDU  A  TEST 0..8           *
;*                                                      *
;********************************************************
;
; VRATI CARRY IFF OPERAND JE 8
; OPERAND VRATI V R2 8,...,1,0FFH
; A:=STARE R2
LT08    MOVX    A,@R1
        ADD     A,#-9
        JC      LERROR
;TED JE A = -9..-1
        ADD     A,#1            ;CARRY PRO OP.=8
        CPL     A
        INC     A
        XCH     A,R2
T01RET  RET
;
;********************************************************
;*                                                      *
;*              TEST,  ZDA  A = 0 NEBO 1                *
;*                                                      *
;********************************************************
;
;NENI-LI, OHLASI CHYBU 4
;PRI NANRATU: CARRY := BIT A.0, A VYNULUJE
T01     CLR     C
        RRC     A               ;BIT A.0 V CARRY
        JZ      T01RET          ;OSTATNI BITY A NULOVE
;
;SPOLECNA CHYBA - OPERAND MIMO POVOLENY ROZSAH
LERROR  MOV     R2,#ERR4        ;CISLO CHYBY
AERROR  JMP     ERROR
;
;********************************************************
;*                                                      *
;*      PODPROGRAM  PRO  PROVEDENI  OPERACE  OUT        *
;*                                                      *
;********************************************************
;
;   VSTUP: R0=ACC, R2 SMERNIK NA OBRAZ DAT NA PORTU
;   R1 = SMERNIK MA OPERAND INSTRUKCE (V EXT. RAM)
;   VYSTUP: V A DATA K VYSLANI NA PORT
;
POUT    CALL    LT08            ;CTE OPERAND, TEST 0..8
        MOV     R1,A            ;ADRESA OBRAZU DAT NA PORTU
        MOV     A,@R0           ;LOAD ACC
        JC      POUT8           ;CELY PORT
        CALL    T01             ;TEST 0..1, CY:=BIT
        MOV     A,#1
POUT1   RR      A
        DJNZ    R2,POUT1
;V A JE BIT 1 V ODPOVIDAJICI POLOZE
        JNC     POUT2           ;NULOVAT BIT
        ORL     A,@R1           ;JEDNICKYJE BIT
        RET
POUT2   CPL     A
        ANL     A,@R1           ;NULUJE BIT
POUT8   RET
;
;********************************************************
;*                                                      *
;*              K L A V E S N I C E                     *
;*                                                      *
;********************************************************
;
; CTENI STAVU KLAVESNICE, JE-LI ZNAK, JEHO PREVZETI
;
CTIKL   MOV     R0,#KEY
CTIKL3  MOV     A,#NOKEY
        XCH     A,@R0
        RET
;
;TEST PRIPUSTNOSTI ADRESY V A, NICI R2
TSADR   JF0     TSOK
        JB7     TSERR
TSOK    RET
TSERR   MOV     R2,#ERR2
;
;********************************************************
;*                                                      *
;*              OBSLUHA  CHYBY                          *
;*                                                      *
;********************************************************
;
; CISLO CHYBY V R2
ERROR0  MOV     R6,#0
ERROR   EN      TCNTI
        CALL    CLRD5           ;MAZE DISPLEJ
        MOV     @R0,#ZZE        ;'E' VLEVO
        MOV     A,R2
        CALL    ZOBR3           ;ZOBRAZI CISLO CHYBY
        ;CEKA NASTISK END
CEKEND  CALL    CTICIS
        JNZ     CEKEND
;
;********************************************************
;*                                                      *
;*              RIDICI SMICKA PRIKAZU                   *
;*                                                      *
;********************************************************
;
PRIKAZ  EN      TCNTI
        CALL    CLRD5           ;MAZE DISPLEJ
        MOV     @R0,#ZZC        ;'C' VLEVO
PRIK1:  CALL    CTIKL1          ;CEKA NA KLAVESU
        ADD     A,#-TLMEM       ;CY IFF PRIKAZ
        JNC     PRIK1
        ADD     A,#TAB1
        MOV     R0,#VID5        ;VEVY VIDEOREGISTR
        JMPP    @A              ;ROZKOK PODLE PRIKAZU
;
;       TABULKA PRIKAZU
;
;PORADI MUSI SOUHLASIT S PORADIM KODU KLAVES
TAB1    .DB     XMEM,XACC,XPC
        .DB     XRUN,XSTEP
        .DB     MGSAVE,MGLOAD
;
;********************************************************
;*                                                      *
;*              PRIKAZ  RUN,  STEP                      *
;*                                                      *
;********************************************************
;
XRUN    MOV     @R0,#ZRUN       ;ZPRAVA NA DISPLEJ
        CLR     F1              ;RUSI PRIJATE PRERUSENI
XR2     CALL    INSTR           
        MOV     R0,#STOPO         
        CALL    CTIKL3          ;TEST DETEKCE TL. STOP
        JNZ     XR2
;BREAK          ;DO REZIMU "STEP"
;
XSTEP   CALL    INSTR           ;PROVEDE JEDNU INSTRUKCI
        CALL    ZOBRPC          ;ZOBRAZI PC
        JMP     PRIK1           ;CEKA NA PRIKAZ,
                                ;  ANIZ BY MAZAL DISPLEJ
;
;********************************************************
;*                                                      *
;*              PRIKAZ  MEM                             *
;*                                                      *
;********************************************************
;
;DISPLEJ JE SMAZANY, R0=VID5
XMEM3   CALL    CLRD5
XMEM    MOV     @R0,#ZZM        ;ZOBRAZIT 'M'
        MOV     R1,#6           ;ADRESA MEMORY - R6
        CALL    ZC3A            ;ZOBRAZENI + VSTUP ADRESY
        ;A = OMEZOVAC
        ;END JE OSETRENO, JINAK ZOBRAZI OBSAH PAMET.BUNKY
        MOV     A,R6
        CALL    CVADR           ;KONVERZE NA 8155 ADRESU
        ;ZOBRAZENI SOUCASNE HODNOTY
        MOVX    A,@R1
        CALL    ZOBR3
        INC     R1
        MOVX    A,@R1
        CALL    ZOBR2
        ;VSTUP NOVE HODNOTY
        MOV     R5,#5           ;MAX. 5 CISLIC
        CALL    CISLO           ;VSTUP CISLA
        JC      XMEM4           ;BEZE ZMENY
        DEC     R1
        MOVX    @R1,A           ;ZAPIS HODNOTY
        INC     R1
        MOV     A,R3
        MOVX    @R1,A
XMEM4   CALL    TSTEND          ;OMEZOVAC DO A, TEST END
;PRO PREV A NEXT: POSUN ADRESY A POKRACOVANI
;A=-1 PRO PREV, +1 PRO NEXT
        ADD     A,R6            ;POSUN ADRESY
        MOV     R6,A
        JMP     XMEM3
;
;********************************************************
;*                                                      *
;*      PRIKAZY  ZMENY  STAVU PROCESORU                 *
;*                                                      *
;********************************************************
;
;       PRIKAZ ACC
;
XACC    CALL    CLRD5
        MOV     @R0,#ZZA
        MOV     R1,#ACC
        ; R1=ACC
        CALL    ZC3             ;VSTUP NOVE HODNOTY
        JC      XACC1           ;JEN OMEZOVAC
        MOV     @R1,A           ;ZAPIS NOVE HODNOTY ACC
XACC1   CALL    TSTEND          ;OMEZOVAC DO A,TEST END
        JB7     XSP             ;PREV
;
;       PRIKAZ PC
;
XPC     CALL    ZOBRPC
        MOV     R1,#7           ;ADRESA PC (R7)
        CALL    ZC3A            ;ZOBRAZENI A ZMENA
        ;A = OMEZOVAC
        JB7     XACC            ;PREV
;
;       ZMENA HODNOTY FLAGU
;
XF      CALL    CLRD5
        MOV     @R0,#ZZF
        MOV     A,R4            ;SOUCASNA HODNOTA
XF1     CALL    ZC1             ;ZOBRAZENI + VSTUP
        JC      XF3             ;JEN OMEZOVAC
        CALL    T01             ;TEST A=0..1, BIT DO CARRY
        RLC     A
        MOV     R4,A            ;NOVA HODNOTA
XF2
XF3     CALL    TSTEND
        JB7     XPC             ;PREV
;
;       ZMENA STACK POINTERU
;
XSP     CALL    CLRD5
        MOV     @R0,#ZZS
        MOV     R1,#SP
        MOV     A,@R1
        CALL    ZC1             ;ZOBRAZENI + VSTUP
        JC      XSP1            ;BEZE ZMENY
        MOV     @R1,A           ;ZMENA HODNOTY
XSP1    CALL    TSTEND          ;OMEZOVAC DO A,TEST END
        JB7     XF              ;PREV
        JMP     XACC            ;NEXT
;
;********************************************************
;*                                                      *
;*              PRIKAZY  SAVE  A  LOAD                  *
;*                                                      *
;********************************************************
;
;STRUKTURA ZAZNAMU
;  - ZAVADECI TON (BITY 0)
;  - SYNCHRONIZACNI BITY 1,0,0
;  - SYNCHRONIZACNI BYTE 'Y' (01011001B)
;  - DELKA ZAZNAMU (POCET BYTU V DATOVE CASTI), 2 BYTY
;                (NEJPRVE H-BYTE, POTOM L-BYTE)
;  ... VLASTNI DATA ...
;  - KONTROLNI SOUCET
;
;POUZITI REGISTRU - PLATI PRO SAVE I LOAD
;  R0 .. CITAC PRES OBVODY 8155
;  R1 .. ADRESA V RAMCI OBVODU 8155
;  R2 .. KONTROLNI SOUCET
;  R3 .. VYSILANY BYTE (PPRG. WBYTE)
;  R4 .. CITAC BITU V BYTU (PPRG. WBYTE)
;        POLARITA VSTUPNIHO SIGNALU (PPRG. SYNCHRO RBIT)
;  R5 .. CITAC PRODLEVY (PPRG. WBIT,RBIT)
;  R6, R7 NEMENI
;PRI NAVRATU DOSADI DO R4 (FLAG F PROCESORU "PETR") 0
;
;       ZAPIS  NA  MAGNETOFON  ( SAVE )
;
MGSAVE  CALL    ZHASNI          ;ZHASNE DISPLEJ
;UVODNI TON = 256 BITU 0
        MOV     R4,#0
MGSV1:  CALL    WBIT0           ;ZAZNAM BITU 0
        DJNZ    R4,MGSV1
;SINCHRONIZACNI BITY: 1,0,0
        MOV     A,#100B
        CALL    WBYTE
;INICIALIZACE NAHRAVACI ADRESY A KONTROLNIHO SOUCTU
        CLR     A
        MOV     R1,A            ;NAHRAVACI ADRESA
        MOV     R2,A            ;KONTROLNI SOUCET
;SINCHRONIZACNI ZNAK & DRUH NAHRAVKY
        MOV     A,#'Y'
        CALL    WBYTE
;ZJISTI ROZSAH OPERACNI PAMETI POCITCE PETR
;VYSLE DELKU ZAZNAMU V BYTECH
        MOV     A,#1
        JF0     MGSV2
        DEC     A
MGSV2   ;A=0 PRO JEDNU 8155, =1 PRO DVE 8155
        MOV     R0,A
        CALL    WBYTE           ;H-BYTE DELKY
        MOV     A,R0
        RRC     A
        CPL     C
        RRC     A
        CALL    WBYTE           ;L-BYTE DELKY
        INC     R0
;R0 = POCET OBVODU 8155 (1 NEBO 2)
        MOV     A,#~(P55IOM+P55CE0)
MGSV3   OUTL    P2,A            ;MAPUJE 8155
MGSV4   MOVX    A,@R1
        CALL    WBYTE
        DJNZ    R1,MGSV4
;CIKLUS PRES OBVODY 8155
        MOV     A,#~(P55IOM+P55CE1)
        DJNZ    R0,MGSV3
;ZAPIS KONTROLNIHO SOUCTU
        MOV     A,R2
        CPL     A
        INC     A
        CALL    WBYTE           ;ZAPIS CHKSUM
;PRO JISTOTU ZAVERECNY TON - BYTE 00H
        CALL    WBYTE0
        JMP     MGEND           ;R2=0, DULEZITE !
;
;       CTENI  Z  MAGNETOFONU  ( LOAD )
;
MGLOAD  CALL    ZHASNI
        MOV     R0,#'Y'
        CALL    SYNCHRO         ;SYNCHRONIZACE
        MOV     R1,A            ;A:=0
;
        CALL    RBYTE           ;H-BYTE DELKY, 0 NEBO 1
        INC     A
        MOV     R0,A            ;POCET OBVODU 8155
        CALL    RBYTE           ;L-BYTE DELKY,
                                ;  (ZDE BEZVYZNAMNY
        MOV     A,#~(P55IOM+P55CE0)
;NACTENI OBSAHU PAMETI SYSTEMU
MGLD1   OUTL    P2,A            ;MAPUJE 8155
MGLD2   CALL    RBYTE           ;CTE 1 BYTE
        MOVX    @R1,A
        DJNZ    R1,MGLD2
;
        MOV     A,#~(P55IOM+P55CE1)
        DJNZ    R0,MGLD1        ;CIKLUS PRES OBVODY 8155
;ZKONTROLUJE CHKSUM
        CALL    RBYTE
MGEND   MOV     A,R2
        MOV     R4,#0           ;PRIZNAK F := 0
        JZ      PRIKAZ          ;OK
        MOV     R2,#ERR7
        JMP     ERROR
;
;ZOBRAZENI A ZMENA HODNOTY BYTU NA ADRESE R1,
;TEST, ZDA NOVA HODNOTA MUZE BYT ADRESOU (NE=>CHYBA)
;V A VRATI OMEZOVAC (CISLO HO NECHA V R2)
ZC3A    CALL    ZC3
        JC      TSTEND          ;POUZE OMEZOVAC
        CALL    TSADR           ;MJ. TEST ROZSAHU
        MOV     @R1,A           ;NOVA HODNOTA
TSTEND  MOV     A,R2            ;OMEZOVAC
        JZ      PRIKAZ          ;END - UKONCENI PRIKAZU
        RET
;
; TABULKA INSTRUKCI - MUSI BYT NA ZACATKU STRANKY !
;
TAB2    .DB     IHLT            ; 1 .. HALT
        .DB     IDISP           ; 2 .. DISPLAY
        .DB     INOP            ; 3 .. NOP, PRODLEVA
        .DB     ILDC            ; 4 .. ACC:=KONST
        .DB     ILDA            ; 5 .. ACC:=MEM
        .DB     ISTA            ; 6 .. MEM:=ACC
        .DB     IADD            ; 7 .. ACC:=ACC+MEM
        .DB     ISUB            ; 8 .. ACC:=ACC-MEM
        .DB     IJMP            ; 9 .. JMP
        .DB     CMP0            ;10 .. CMP ACC=MEM
        .DB     IJF             ;11 .. JUMP ON FLAG
        .DB     ICMP1           ;12 .. CMP ACC>MEM
        .DB     ICMP2           ;13 .. CMP ACC SET FLAG
;
;       LOGICKE OPERACE
;
INOT    MOV     A,@R0
        CPL     A
        MOV     @R0,A
        RET
;
IAND    CALL    LDOPM
        ANL     A,@R0
        MOV     @R0,A
        RET
;
IOR     CALL    LDOPM
        ORL     A,@R0
        MOV     @R0,A
        RET
;
;       POROVNANI
;
CMP0    CALL    LDOPF0          ;POROVNANI ACC=MEM
        XRL     A,@R0
        JNZ     CMP4            ;R4:=1 .. SET FLAG
CMP6    INC     R4
CMP4    RET
;
ICMP2   CALL    LDOPF0          ;POROVNANI ACCMEM
;
ICMP1   CALL    LDOPF0          ;POROVNANI ACC>MEM
CMP5    CPL     A
        ADD     A,R2            ;CARRY IFF A(MEM)BIN
        MOV     R0,#BUFF+5      ;PTR NA CISLICE
        MOV     R5,#2           ;POCET CISLIC HI
        CALL    CISL6           ;PREVOD DEC-->BIN
        MOV     R3,A            ;HLOZ HI
        MOV     R5,#3           ;POCET CISLIC LOW
        ; PREVOD DEC-->BIN. R0 UKAZATEL NA HORNI CISLICI,
        ;                   R5 - POCET CISLIC.
        ; ZNICI @R0,R5. VYSLEDEK DA DO REG. A
CISL6   CLR     A
CISL5   JB7     CISL7           ;CHYBA - PRETECENI
        RL      A               ;*2
        MOV     @R0,A
        JB7     CISL7           ;PRETECENI
        RL      A               ;*4
        JB7     CISL7           ;PRETECENI
        RL      A               ;*8
        ADD     A,@R0           ;*10
        JC      CISL7           ;PRETECENI
        DEC     R0
        ADD     A,@R0           ;+NOVA CISLICE
        JC      CISL7           ;PRETECENI
        DJNZ    R5,CISL5        ;CIKLUS PRES CISLICE
CISL4   RET
        ;
        ; PRETECENI PRI PREVODU DEC-->BIN
CISL7   MOV     R2,#ERR1
        JMP     ERROR
;
;       PODPROGRAM PRO CTENI CISLA
;
;POSUNE R5 BYTU POCINAJE @R0 O 1 MISTO SMEREM
;K VYSSIM ADRESAM. DO 1.BYTU ZAPISE A.
;ZNICI R2, POSUNE R0, OSTATNI REGISTRY ZACHOVA
POSUN   XCH     A,R5
        MOV     R3,A            ;KOPIE DELKY
        XCH     A,R5
POS1    XCH     A,@R0
        INC     R0
        DJNZ    R3,POS1
        RET
;
;********************************************************
;*                                                      *
;*      PODPROGRAMY  PRO KOMIKACI  S  PERIFERIEMI       *
;*                                                      *
;********************************************************
;
;
;********************************************************
;*                                                      *
;*              M A G N E T O F O N                     *
;*                                                      *
;********************************************************
;
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;%                                                      %
;%  vypis obsluhy magnetofonu nebyl zverejnen,          %
;%  vypis ziskan zpetnym prekladem a doplnenim navesti  %
;%  az na jedno ktere se nepovedlo dohledat (x03a2)     %
;%                                                      %
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;
SYNCHRO ORL     P1,#1
RSYN0   MOV     R2,#50H
RSYN1   CALL    RBIT0
        JB0     RSYN0
        DJNZ    R2,RSYN1
RSYN2   CALL    RBIT0
        CPL     A
        JB0     RSYN2
        CALL    RBIT0
        CPL     A
        JB0     RSYN3
        CALL    RBIT0
RSYN3   CALL    RBYTE
        MOV     R2,A
        XRL     A,R0
        JNZ     RSYN0
        RET
;
WBIT0   CLR     C
WBIT    MOV     A,#0FFH
        RLC     A
        RLC     A
        CALL    OUT500
        XRL     A,#2
OUT500  OUTL    P1,A
        MOV     R5,#62H
CEKEJ   DJNZ    R5,CEKEJ
        RET
;
WBYTE0  CLR     A
WBYTE   CALL    CHR2
        MOV     R4,#8
WBIT2   RLC     A
        MOV     R3,A
        CALL    WBIT
        MOV     A,R3
        DJNZ    R4,WBIT2
        RET
;
RBIT0   MOV     A,R5
        MOV     R4,A
RBIT    MOV     R5,#94H
X03A2   DJNZ    R5,X03A2
        IN      A,P1
        MOV     R5,A
RBIT1   IN      A,P1
        XCH     A,R5
        XRL     A,R5
        CPL     A
        JB0     RBIT1
        MOV     A,R5
        XRL     A,R4
        RET
;
RBYTE   MOV     R3,#1
RBYT1   CALL    RBIT
        RRC     A
        MOV     A,R3
        RLC     A
        MOV     R3,A
        JNC     RBYT1
CHR2    XCH     A,R2
        ADD     A,R2
        XCH     A,R2
        RET
;
;       CTENI ZNAKU Z KLAVESNICE S CEKANIM
;       KOD PRECTENEHO TLACITKA VRATI V A.
;
CTIKL1  CALL    CTIKL
        JB7     CTIKL1          ;CEKACI SMICKA
        RET
;
; CTENI ZNAKU Z KLAVESNICE PRO POTREBY CTENI CISLA
;
CTICIS  CALL    CTIKL1          ;CEKA NA ZNAK
        ADD     A,#-TLMEM       ;TEST PRIKAZOVEHO TLACITKA
        JC      CTICIS          ;PRIKAZY IGNORUJE
        ADD     A,#3            ;CY IFF OMEZOVAC
        DEC     A
        MOV     R2,A
;VYSTUP: A=R2=PRECTENY ZNAK
; JE-LI TO OMEZOVAC, JE CARRY,
;       ZNAK = -1..PREV, 0..END, +1..NEXT.
; JE-LI TO CISLICE, ZNAK = HODNOTA CISLICE + (TL0-TLEND)
        RET
;
;********************************************************
;*                                                      *
;*              Z O B R A Z O V A N I                   *
;*                                                      *
;********************************************************
;
;
;********************************************************
;*                                                      *
;*          VYSTUP CISEL V DESITKOVE SOUSTAVE           *
;*                                                      *
;********************************************************
;
;       ZOBRAZENI PC
;
ZOBRPC  CALL    CLRD5
        MOV     @R0,#ZZP        ;'P' DO LEVEHO DISPLEJE
ZPC1    MOV     A,R7            ;PC
;
; ZOBR3: ZOBRAZENI TROJICE VPRAVO NA DISPLEJI
; ZOBR2: ZOBRAZENI DVOJICE, NUTNO NASTAVIT R0 !
; ZOBR1: ZOBRAZENI 1 CISLICE, NUTNO NASTAVIT RO !
;
ZOBR3   MOV     R0,#VID0        ;PTR DO VIDEOREGISTRU
        CALL    ZOBR1
ZOBR2:  CALL    ZOBR1
;
;  ZOBRAZI CISLICI A MOD10; A:=A DIV 10. NICI R2
;
ZOBR1   MOV     R2,#0FFH
ZOBR11  ADD     A,#-10
        INC     R2
        JC      ZOBR11
        ADD     A,#10
        ;R2=A DIV 10, A=A MOD 10
        MOVP3   A,@A
        MOV     @R0,A           ;ZOBRAZI A MOD 10
        INC     R0
        MOV     A,R2            ;A:=A DIV 10
        RET
;
;********************************************************
;*                                                      *
;*              MAZANI  DISPLEJE                        *
;*                                                      *
;********************************************************
;
CLRD5   MOV     R0,#VID0
;NULOVANI 5 BYTU POCINAJE R0
CLR5    MOV     R3,#5
CLEAR   CLR     A
CLR0    MOV     @R0,A
        INC     R0
        DJNZ    R3,CLR0
        RET
;
;********************************************************
;*                                                      *
;*      ZHASNUTI DISPLEJE A ZABLOKOVANI JEHO OBSLUHY    *
;*                                                      *
;********************************************************
;
ZHASNI  DIS     TCNTI
ZHAS0   MOV     R1,#P55B        ;ADRESA PORTU A (SEGMENTY)
        MOV     A,#0FFH         ;VSECHNY ZHASNOUT
WR55IO  ORL     P2,#P55IOM+P55CE1
        ANL     P2,#~P55CE0     ;MAPUJE VNITRNI 8155, IO
        MOVX    @R1,A           ;ZAPIS NA PORT
        RET
;
        .END


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