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
;
;*******************************************************
;* *
;* 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