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 ACCSET 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 ACC MEM ; 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