ÚVOD | Novinky | 8 Bitů | Příslušenství | Drobnosti | TTL | Kontakt
SAPI-1 | ONDRA | PMI-80 | PMD-85 | klony PMD-85 | klony SM50/40 | PETR | PLAN-80A | IQ151 | TNS | FK-1 | HVĚZDA | SP 830 | PCS 1-QR6000
ZPS | Technické prostředky | Programové vybavení | Dokumentace
Zdrojový kód byl získán pomocí zpětného inženýrství.
; OVLADAC PRO XY4130 PRES PORT3 NA JPR-1
; PRO SAPI-1 ZPS-2 A MONITOR V5.0
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;
TITLE OVLADAC PRO XY4130 NA SAPI-1 ZPS-2 MON V5.0
;
; KONSTANTY
CR EQU 0DH
LF EQU 0AH
BEL EQU 7
CTRLC EQU 3
;
;PERIFERIE
PORT2 EQU 2C00H
;
; SLUZBY MONITORU
IOCHK EQU 0115H ; I/O BYT CHEK <A>
IOSET EQU 0118H ; I/O BYT SET <C>
IODEF EQU 011EH ; DEFINICE UZIVATELSKYCH PERIFERII
NEXT EQU 0139H ; PREDANI OVLADANI MONITORU
CINCR EQU 013FH ; ECHO+ANALYZA
EXFLG EQU 014BH ; EXTERNI RIZENI FLAGU
;
; ROZSIRENE SLUZBY MONITORU V5.0
TX EQU 0151H ; ZOBRAZENI NASLEDUJICIHO TEXTU
;
; ADRESI V PAMETI
ROM EQU 1800H ;ADRESA V ROM
RAM EQU 4290H ;ADRESA V RAM
;********************************
; START PROGRAMU
;
ASEG
ORG ROM
;
; TABULKA SKOKU
JMP ZNAKP ; TISK JEDNOHO ZNAKU <C>
JMP ZAVOV ; ZAVED OVLADAC
JMP VPOZ ; NASTAVI VYCHOZI POZICI PO ZALOZENI PAPIRU
; X V <DE>, Y V <BC> PRO TEXT ?
JMP AMOVA ; ABSULUTNI PRESUN X V <DE>, Y V <BC>
JMP AVECTA ; ABSOLUTNI VEKTOR X V <DE>, Y V <BC>
JMP APOIN ; ABSOLUTNI BOD X V <DE>, Y V <BC>
JMP RMOVA ; RELATIVNI PRESUN X V <DE>, Y V <BC>
JMP RVECTA ; RELATIVNI VEKTOR X V <DE>, Y V <BC>
JMP RPOIN ; RELATIVNI BOD X V <DE>, Y V <BC>
JMP NASZN ; NASTAV VELIKOST PISMA <HL>
; SIXX, SIXY, SIYX, SIYY
JMP TESTT ; TEST TISKARNY (VYTISKNE ZNAKY 10H AZ FFH)
JMP NTABGZ ; NASTAV ADRESU GENERATORU ZNAKU <HL>
LHLD ATABGZ ; VRAT ADRESU GENERATORU ZNAKU <HL>
RET
;
;ZAVEDENI OVLADACE
ZAVOV: MVI C,13 ; SYSTEMOVA TISKARNA
LXI D,ZNAKP ; ADRESA OVLADACE
CALL IODEF ; NASTAV
CALL IOCHK ; NACTI IOBYT
ANI 10111111B
ORI 10000000B ; L=L .. TISKARNA
MOV C,A
CALL IOSET ; NASTAV IOBYT
LXI H,PVZN
CALL NASZN ; NASTAV POCATECNI VELIKOST ZNAKU
LXI H,TABGZ ; ADESA TABULKY ZNAKU V EPROM
SHLD ATABGZ ; ULOZ AKTUALNI TABULKU ZNAKU
CALL TX ; ZOBRAZ TEXT
DB CR,LF
DB 'L=XY413','0'+80H
JMP HOME
; VYCHOZI HODNOTY PRO VELIKOST TEXTU
PVZN: DW 4 ; SIXX
DW 0 ; SIXY
DW 0 ; SIYX
DW 4 ; SIYY
;
;VSTUP DO TISKUVE RUTINY, ZNAK JE V <C>
;
ZNAKP: PUSH B
PUSH D
PUSH H
CALL ZNAKC
POP H
POP D
POP B
RET
;
NTABGZ: SHLD ATABGZ ; UKOZ NOVOU ADRESU GENERATORU ZNAKU <HL>
RET
;
NASZN: LXI D,SIXX ; NASTAV NOVOU VELIKOST ZNAKU
MVI B,8
NASZN1: MOV A,M
STAX D
INX D
INX H
DCR B
JNZ NASZN1
RET
;
; ULOZI <DE> NA TXTSX, <BC> NA TXTSY A TXTNS NASTAVI NA 1
; SOURADNICE V TXTSX A TXTSY SLIUZI PRO TISK TEXTU
;
ULZXY: XCHG ; PROHOT <DE> A <HL>
SHLD TXTSX ; <DE> ULOZ NA TXTSX
XCHG ; PROHOT <DE> A <HL>
MOV H,B
MOV L,C ; <BC> DO <HL>
SHLD TXTSY ; <BC> ULOZ NA TXTSY
MVI A,1
STA TXTNS ; PRIZNAK NOVYCH SOURADNIC
RET
;
AMOVA: CALL ULZXY ; ULOZ X A Y
MOVA: CALL PEN0 ; ZVEDNI PERO
JMP ABS0 ; ADSULUTNI PRESUN
;
AVECTA: CALL ULZXY ; ULOZ X A Y
VECTA: CALL PEN1 ; SPUST PERO
JMP ABS0 ; ADSULUTNI PRESUN
;
APOIN: CALL ULZXY ; ULOZ X A Y
CALL MOVA ; ADSULUTNI PRESUN
JMP PENP ; UDELEJ TECKU
;
RVECTA: CALL ULZXY ; ULOZ X A Y
CALL PEN1 ; SPUST PERO
JMP RELA ; RESATIVNI PRESUN
;
; NASTAVI PISATKO DO VYCHOZI POLOHY A POZCE DANE <BC> A <DE>
;
VPOZ: CALL ULZXY ; ULOZ X A Y
VPOZ1: LXI H,1414H ; NASTAV CASOVACI KONSTANTY
SHLD TKON1
SHLD TKON2
;
;NASTAVY POCATECNI KONSTATY
;TKON1 = 14H KONSTANTA PRO CASOVOU SMICKU 1
;TKON2 = 14H KONSTANTA PRO CASOVOU SMICKU 2
;TKON3 = 14H KONSTANTA PRO CASOVOU SMICKU 3
;
PUSH D ; SORADNICE X DO ZASOBNIKU
PUSH B ; SORADNICE Y DO ZASOBNIKU
MVI A,1
STA SPEN ; SPUST PERO ?????
LXI B,8
MOV D,B
MOV E,C ; "8" DO X A Y
CALL RELA1 ; RELATIVNI PRESUN -> SINCHRONIZOVAT MOTORY
LXI H,0D08H
SHLD TKON1
;
;NASTAVY KONSTATY
;TKON1 = 08H KONSTANTA PRO CASOVOU SMICKU 1
;TKON2 = 0DH KONSTANTA PRO CASOVOU SMICKU 2
;TKON3 = 14H KONSTANTA PRO CASOVOU SMICKU 3
;
LXI H,06A4H ; 1610, 16.1 CM?
SHLD STPX ; OKAMZITA POLOHA X
LXI H,04B0H ; 1200, 12.0CM?
SHLD STPY ; OKAMZITA POLOHA Y
POP B
PUSH B ; OBNOV Y DO <BC>
LXI D,0 ; X NA 0
CALL MOVA ; PRESUN
POP B
PUSH B ; OBNOV Y DO <BC>
LXI D,50H ; 80, 8MM? NASTAV Y
CALL MOVA ; PRESUN
XRA A
STA STPX ; VYNULUJ SPODNI BYTE OKAMZITE POLOHZ NA OSE X
POP B
POP D ; OBOV ZADANE X A Y
CALL MOVA ; PRESUN
;
;NASTAVY POCATECNI KONSTATY
;DIAK = 00H PRIZNAK DIAKRITIKY, BUDE ZNAMENKO
;ZBS = 00H ZNAK BS
;DIAK2 = 00H PRIZNAK DIAKRITIKY, BYLO ZNAMENKO
;GZNAK = 00H PRIZNAK GRAFICKEHO ZNAKU
;TXTNS = 00H PRIZNAK NOVYCH SURADNIC PRO TISK TEXTU
;RADKO = 10H ROZSTUP MEZI RADKY
;WIDE = 06H DRUH MEZERY MEZI ZNAKY
;
MVI A,0AH
STA TKON3
MVI A,6
STA WIDE ; TISKOVA MEZERA
DCR A
LXI H,DIAK ; PRIZNAK DIAKRITIKY
VPOZ2: MVI M,0
INX H
DCR A
JNZ VPOZ2 ; POKUT NENI NULA TAK ZNOVU
MVI A,10
STA RADKO ; ROZESTUP MEZI RADKY
RET
;
; ABSOLUTNI A RELATIVNI PRESUN
;
RMOVA: CALL ULZXY ; ULOZ X A Y
RELA1: CALL PEN0 ; ZVEDNI PERO
RELA: LHLD STPX ; K X PRICTI RELATIVNI DX
DAD D ; = NOVA X
XCHG
LHLD STPY ; TOTEZ S Y
DAD B
MOV B,H
MOV C,L ; A MUZES UDELAT ABS. PRESUN
ABS0: LHLD STPX ; DE = ZADAVE XZ
XCHG ; HL = SKUTECNE X
SHLD STPX ; DE <=> HL ; X <=> XZ
SHLD NOPX ; A ULOZ NA NOVOU POZ. TISKU
CALL SMR ; ZJISTI SMER POSUVU PRO X
PUSH H ; SCHOVEJ ROZDIL X A XZ
PUSH B ; SCHOVEJ YZ
MOV C,A ; C = SMER POSUVU
POP D ; DE = PREDESLE BC TJ. ZADANA YZ
LHLD STPY ; HL = SKUTECNA Y
XCHG ; DE <=> HL ; Y <=> YZ
SHLD STPY
SHLD NOPY ; ULOZ
CALL SMR ; A ZJISTI SMER PRO Y
RLC
RLC
RLC
RLC ; DO VYSICH 4 BITU A
MOV B,A
ORA C ; SLOZ S C
STA DIRE ; <= SMER DO Y A DO X
POP D ; OBNOV ROZDIL X A XZ
RZ ; JSOU JI OBA POVUNY 0 VRAT SE
MOV A,L
SUB E
MOV A,H
SBB D ; TEST, KTERY POSUN JE VETSI
MOV A,C ; A = SMER POSUNU A
JC DALX ; SKOC PROTOZE (YZ-Y)<(XZ-X)
XCHG ; DE <=> HL ; (XZ-X) <=> (YZ-Z)
MOV A,B ; A = SMER DO Y
DALX: STA DIR1
SHLD DIFF
LXI H,14H ; MALE POZASTAVENI
CALL ZPOZ0
MVI A,29H
STA ACCE ; ROZBEHOVA RYCHLOST
MOV B,D ; BC = ROZDIL
MOV C,E
XRA A
SUB E
MOV L,A
MVI A,0
SBB D
MOV H,A ; HL = DE * -1
XRA A
MOV A,D
RAR
MOV D,A
MOV A,E
RAR
MOV E,A ; DE = DE / 2
ABS1: PUSH H ; SCHOVEJ HL A DE
PUSH D
XCHG ; DE <=> HL
MOV H,B
MOV L,C ; HL = BC
DAD H
DCX H ; HL = HL * 2 - 1
DAD D ; HL = HL + DE
LXI H,ACCE
JNC ABS2 ; JE-LI HL >= 0 SKOC
LDA TKON3
CMP M
JZ ABS2
DCR M
ABS2: MVI A,28H
SUB M
SUB C
MVI A,0
SBB B
JC ABS3
INR M
ABS3: LHLD DIFF
POP D
DAD D
XCHG
POP H
PUSH H
DAD D
LDA DIR1
JNC ABS4
XCHG
LDA DIRE
ABS4: PUSH D
CALL ELEM
DCX B
MOV A,B
ORA C
POP D
POP H
JNZ ABS1
RET
;
SMR: MOV A,L ; VRATI A = 0 PRO SKUT. = ZADANE
; A = 8 PRO SKUT. < ZADANE
; A = A PRO SKUT. > ZADANE
;
; (VRATI A = 0 PRO SKUT. = ZADANE MINIGRAF)
; ( A = 1 PRO SKUT. < ZADANE MINIGRAF)
; ( A = F PRO SKUT. > ZADANE MINIGRAF)
SUB E
MOV L,A ; L = L - E
MOV A,H
SBB D
MOV H,A ; H = H - D - PREDCHOZI ZNAM.
DAD H ; HL = HL * 2
JNC SMVL ; -> JE-LI HL KLADNE
XRA A ; ZAPORNE - PREVED NA KLADNE
SUB L
MOV L,A
MVI A,0
SBB H
MOV H,A ; HL = -1 * HL
MVI A,0AH ; PRIZNAK A NAVRAT (MINIGRAF MVI A,0FH)
RET
SMVL: MOV A,H
ORA L
RZ ; JE-LI HL = 0 VRAT SE
MVI A,8 ; (MINIGRAF MVI A,01H)
RET ; JINAK PRIZNAK A NAVRAT
;
; ZANAK PRO TISK JE V <C>
;
; VZYNAM RIDICICH ZNAKU
;
; 00H - ZAPNE REZIM GRAFICKEHO ZNAKU
; 08H - ZNAK ZPET
; 0AH - NOVY RADEK
; 0CH - NOVA STRANKA
; 0DH - NAVRAT VOZU
; 0EH - ZAPNI DIAKRITIKU
; 0FH - VYPNI DIARITIKU
;
ZNAKC: LDA TXTNS ; PRIZNAK NOVYCH SOURADNIC PRO TEXT
DCR A ; PRIZNAK -1
JNZ ZNAKC1 ; NEJSOU NOVE SOURADNICE - NENI NULA
STA TXTNS ; NULUJ PRIZNAK
PUSH B ; SCHOV ZNAK
CALL HOME ; NASTAV PISATKO NA VYCHOZI SOURADNICE
POP B ; OBNOV ZNAK
ZNAKC1: LDA GZNAK ; 0 <> GRAFICKY ZNAK
ORA A
JNZ GRAFZ ; TISK GRAFICKEHO ZNAKU
ORA C
JZ NGZ ; NASTAV ZE BUDE GRAFICKY ZNAK, ZNAK BYL 00H
CPI 10H
JNC KOI ; POKUT ZNAK VETSI NEZ 10H -> TISK
CPI 0CH
JZ STRAN ; NOVA STRANKA
CPI CR
JZ PCR ; NAVRAT VORU
CPI LF
JZ PLF ; NOVY RADEK
CPI 0FH
JZ DIAKS ; NYPNE DIAKRITYKU
CPI 0EH
JNZ HBS ; TEST NA BS
MVI A,1
DB 6 ; (MVI)
DIAKS: XRA A
; MVI B,0AFH ; PRI PRIMEM PRUCHODU ZAPNE DIAKRITIKU
STA DIAK ; ULOZ ZDA JDE O NORMANI ZNAK NEBO S DIAKRITIKOU
; 0 = JE ZNAK S DIAKRITIKOU
; 0 <> JE NORMANI ZNAK
RET
;
GRAFZ: MOV A,C
PUSH PSW
CALL ZNAK4 ; TISK 1 SEGMETU ZNAKU, DATA V <A>
POP PSW
ANI 80H
RZ ; DALSI SEGMENT ZNAKU
XRA A
STA GZNAK ; ZRUS T TIS GAFICKEHO ZNAKU
JMP ZNAK3 ; MEZI ZNAKOVA MEZERA
;
; NAVRAT VOZU (CR)
;
PCR: LDA RADKO ; NACTI RADKOVANI
MOV B,A
LHLD SIYX ; VELIKOST PISMA SIYX
XCHG ; A DO <DE>
LHLD TXTSX ; NACTI POLOHU TEXTU X
CALL HLMDE ; SPOCITEJ
MOV A,H
ORA A
JM STRAN ; JE-LI ZAPORNA X, NOVA STRANKA
SHLD TXTSX ; ULOZ NOVOU POLOHU TEXTU X
LDA RADKO ; NACTI RADKOVANI
MOV B,A
LHLD SIYY ; VELIKOST PISMA SIYX
XCHG ; A DO <DE>
LHLD TXTSY ; NACTI POLOHU TEXTU Y
CALL HLMDE ; SPOCITEJ
MOV A,H
ORA A
JM STRAN ; JE-LI ZAPORNA X, NOVA STRANKA
SHLD TXTSY ; ULOZ NOVOU POLOHU TEXTU Y
JMP PLF1 ; A NOVY RADEK
;
; NOVY RADEK (LF)
;
PLF: LHLD TXTSY ; NACTI SOURADNICI TEXTU Y
PLF1: MOV B,H
MOV C,L ; DEJ JI DO <BC>
LHLD TXTSX ; NACTI SOURADNICI TEXTU X
XCHG ; DEJ JI DO <DE>
JMP MOVA ; PRESUN
;
; ZALOZEZENI NOVEHO PAPIRU
;
STRAN: XRA A ; MODE PRO DISPLEJ
MOV C,A ; NORMALNI ZNAK
CALL EXFLG
CALL IOCHK ; NACTI IOBYT
MOV C,A ; IOBYT DO <C>
PUSH B ; USCHOVEJ IOBYT A PUVODNI OBSAH EXFLAG
ANI 11111100B
ORI 1 ; C=C POUZE KLAVESNICE S DISPLEJEM
MOV C,A
CALL IOSET ; NASTAV
CALL PEN0 ; ZVEDNI PERO
CALL TX ; ZOBRAZ TEXT
DB CR,LF,BEL,'ZALOZ '
DB 'PAPIR A STISKNI'
DB ' KLAVESU',CR,LF+80H
CALL CINCR ; CEKEJ NA STISK KLAVESI
POP B ; OBNOV IOBYT A PUVODNI OBSAH EXFLAG
PUSH PSW ; SCHOV STISKLU KLAVESU
CALL IOSET ; OBNOV PUVODNI IOBYT
MOV A,B
MVI C,0 ; MODE PRO DISPLEJ
CALL EXFLG ; OBNOV PUVODNI TYP ZNAKU
POP PSW ; OBNOV STISKLU KLAVESU
CPI CTRLC
JZ NEXT ; POKUT ^C NAVTAT DO MONITORU
HOME: LXI B,99CH ; (2460 24.6CM?) POCATECNI HODNOTA OSY Y
MOV H,B
MOV L,C
SHLD TXTSY ; ULOZ Y
LXI H,0 ; POCATECNI HODNOTA OSY X
SHLD TXTSX ; ULOZ NOVE X
XCHG ; A X DO <DE>
JMP VPOZ1 ; NASTAV VYHOZI POZICI PO ZALOZENI PAPIRU
;
; HLEDANI ZNAKU S DIAKRITIKOU (KOI-8CS) ZNAK JE V <C>
;
KOI: MVI A,11111000B ; JEN HORNICH 5 BITU
ANA C
CPI 18H
RZ ; POKUT ZNAKY 18H AZ 1FH NAVRAT
MOV A,C ; ZNAK DO <A>
CPI 80H
JC HBS ; JE MENSI NEZ 7FH -> KOI-7, TISK
SUI 80H ; <A> - 80H
CPI 40H
JC DIKZ ; JE MENSI NEZ 3FH -> 80H-BFH, TISK DIAKRITYKY MAL. PIS.
SUI 40H ; <A> - 40H -> C0H-FFH
LXI H,TKOI2 ; ADESA KONVERZNI TABULKY VEL. PIS
ADD L
MOV L,A
MOV A,H
ACI 0
MOV H,A ; SPOCITEJ ADRESU V TABULCE
CALL DIAKS ; ULOZI PRIZNAK DIAKRITIKY (0)
MOV A,M ; DATA Z TABULKY
ORA A
JZ NEDIK ; NENI ZNAK S DIAKRITIKOU
PUSH PSW ; SCHOV ZNAK Z TABULKY
RLC
RLC
RLC ; O 3 BITI V LEVO
ANI 00000111B ; JEN SPODNI 3 BITY
ORI 00011000B ; PRIDEJ BIT 3 A 4 TJ. 18H AZ 1FH
CALL HBS
POP PSW ; OBNOV ZNAK Z TABULKY
ANI 00111111B ;
JZ NEDIK ; POKUT 3F TAK MEZERA
ORI 01000000B ; JINAK PRIDEJ BIT 6
HBS: PUSH H ; SCHOV <HL>
CPI 8
JNZ ZNAK10 ; POKUT NENI 8 JDEM TISKNOUT ZNAK Z <A>
STA ZBS ; ULOZ BS
POP H ; OBNOV <HL>
RET
;
NEDIK: MVI A,20H ; NENI ZNAK S DIAKRITIKOU? TAK MEZERA
JMP HBS
;
; TISKNE DIAKRITICKA ZNAMENKA
;
DIKZ: CALL TSTBS ; TEST NA BS
MOV A,C ; ZNAK DO <A>
MVI B,5 ; POCITALO NASTAV NA 5
DIKZ1: RAR ; O BIT V PRAVO PRES CY
JNC DIKZ3 ; NENI-LI 1 TAK DALSI POKUS
PUSH B
PUSH PSW
LXI H,DIKZT ; ADRESA DIAKRITICKYCH ZNAKU
MOV A,B ; POCITALO DO <A>
ADD A ; * 2
ADD A ; * 4 .
ADD L
MOV L,A
MOV A,H
ACI 0
MOV H,A ; PRICTI K ADRESE GENERATORO DIAK ZNAMENEK
MVI D,4 ; BUDOU DVE USECKY TJ. 4 KROKY
DIKZ2: MOV A,M ; NACTI DATA
CALL ZNAK4 ; TISK 1 SEGMETU ZNAKU, DATA V <A>
INX H
DCR D
JNZ DIKZ2 ; POKUT NENI 0 TAK DALSI
POP PSW
POP B
DIKZ3: DCR B
JP DIKZ1 ; POKUT JE PARITA TAK DASLI KOLO
JMP ZNAK3 ; MEZI ZNAKOVA MEZERA
;
;ODECTE KRAT <DE> OD <HL>
;
HLMDE: XRA A ; DO <A> 0
ORA B
RZ ; JE-JI B 0 NAVRAT
XRA A
SUB E
MOV E,A
MVI A,0
SBB D
MOV D,A ; <DE>=1-<DE> ... DVOJKOVY DOPLNEK ?
HLMDE1: DAD D ; <HL>=<HL>-<DE>
DCR B
RZ ; JE-LI O NAVRAT
JMP HLMDE1
;
TSTBS: PUSH H
LXI H,ZBS ; DO <HL> ADRESU PRIZNAKU BS
XRA A ; ZNULUJ <A>
CMP M ; POROVNEJ
MOV M,A ; ZNULUJ PRIZNAK BS
CZ NPOZ ; POKUT NEBYL BS NOVA POZICE
POP H
RET
;
;NASTAVY NOVOU POZICI
;
NPOZ: LHLD NOPX
SHLD PREX
LHLD NOPY
SHLD PREY
RET
;
; TISK ZNAKU, ZNAK JE V <A>
;
ZNAK10: PUSH PSW
LXI H,DIAK2 ; PRIZNAK DIAKRYTIKY 2
XRA A
CMP M
JZ ZNAK11 ; POKU JE NULA SKOK NA TISK
MOV M,A ; A ULOZ NULU
MVI A,22H ; DO PROSTRED ZNAKU
CALL ZNAK4 ; TISK 1 SEGMETU ZNAKU, DATA V <A>
CALL NPOZ ; NOVA POZICE O PUL ZNAKU
ZNAK11: POP PSW
LXI H,ZBS ; ADRESU PRIZNAKU BS
ANI 7FH ; JEN KOI-7
MOV C,A ; ZNAK DO <C>
CALL TSTBS ; TEST NA BS
LDA DIAK ; NECTI PRIZNAK DIAKRITZKY
ORA A
JZ ZNAK12 ; NENI TAK TISK
MOV A,C
CPI 7BH
JC ZNAK12 ; JE MENSI NEZ 7BH TJ. {, TAK TISK
ADI 5 ; PRICTI 5
MOV C,A ; NOVY ZNAK DO <C>
INR M ; ULOZ HO NA NIC
ZNAK12: MOV A,C ; ZNAK DO <A>
SUI 10H ; JE JI MENSI NEZ 10H
JC ZNAK2 ; SKOC
ANI 0F8H ; NE, NULUJ NEJNISI 3 BZTY
RAR
RAR ; ROTACE PRES CY O DVA BITY VPRAVO
LHLD ATABGZ ; ARESA TABULKY ZNAKU
ADD L ; A PRICTI K NIZSI ADRESE TABGZ ZNAKU
MOV L,A ; A DO
MVI A,0 ; <A>=0
ADC H ; A PRICTI CY K VYSSI ADRESE TABGZ ZNAKU
MOV H,A ; A DO
MOV A,M
INX H
MOV H,M
MOV L,A ; DO <HL> ADRESU GENERATOTU ZNAKU
MOV A,C ; OBVOV ZNAK
ANI 7 ; POUZE 3 NEJNIZSI BITY
MOV C,A
JZ VYZN ; JSOU-LI 0 SKOC
SKZN: MOV A,M ; NEJSOU
ORA A
INX H
JP SKZN ; TESTUJ NEJVYSI BIT
DCR C
JNZ SKZN ; POKUT NENI 0 TAK DALSI ZNAK
; TISKOVA DATA VYBRANA
VYZN: MVI A,8 ; ??? NASTAV VYCHOZI POLOHU PRO TISK ???
CALL ZNAK4 ; TISK 1 SEGMETU ZNAKU, DATA V <A>
ZNAK1: MOV A,M ; CTI TISKONA DATA
CALL ZNAK4 ; TISK 1 SEGMETU ZNAKU, DATA V <A>
MOV A,M ; ZNONU NACTI TISKONA DATA
INX H ; UKAZOVATKO +1
ORA A
JP ZNAK1 ; POKUNT NENI PARITA TAK DALSI SEGMENT ZNAKU
ZNAK2: POP H
ZNAK3: PUSH H
LDA WIDE ; TISKOVA MEZERA
ANI 3FH
MVI C,0
CALL ZNAK5
POP H
RET
;
NGZ: INR A
STA GZNAK ; NASTAV PRIZNAK PRO GRAFICKY ZNAK <1>
CALL TSTBS ; TEST NA BS
;
; KRESLI VLASTNI USECKU ZNAKU
; KPYYYXXX
; !! ! +- 0 AZ 4 (7)
; !! +---- 0 AZ 7
; !+------ 0 - PRESUN, 1 - TISK
; +------- 1 - POSLEDNI ZNAK
;
ZNAK4: MOV C,A
ANI 7 ; OSA X
ZNAK5: PUSH H
PUSH D
PUSH PSW
LHLD SIXX
XCHG
LHLD PREX
CALL ZNAK8
XCHG
MOV A,C
ANI 38H ; OSA Y
RAR
RAR
RAR
LXI H,ZBS
ADD M
MOV B,A
LHLD SIYX
XCHG
CALL ZNAK8
POP PSW
PUSH H
LHLD SIXY
XCHG
LHLD PREY
CALL ZNAK8
MOV A,B
XCHG
LHLD SIYY
XCHG
CALL ZNAK8
PUSH H
MOV A,C
ANI 40H ; PERO
JZ ZNAK6
LHLD NOPX
XCHG
LHLD NOPY
MOV B,H
MOV C,L
LDA SPEN
ORA A
CZ MOVA
POP B
POP D
CALL VECTA
JMP ZNAK7
ZNAK6: CALL PEN0
POP H
SHLD NOPY ; POLOHA PRISTIHO TISKU Y
POP H
SHLD NOPX ; POLOHA PRISTIHO TISKU X
ZNAK7: POP D
POP H
RET
;
ZNAK8: INR E ; POCITA VELIKOST ZNAKU
DCR E
RZ
PUSH H
LXI H,0
ZNAK9: DCR A
JM ZNAK0
DAD D
JMP ZNAK9
ZNAK0: POP D
DAD D
RET
;-----------------------------------------------------
; PROVED KROK S MOTORY
;-----------------------------------------------------
; SMR VRATI A = 0 PRO SKUT. = ZADANE 0000
; A = 8 PRO SKUT. < ZADANE 0100
; A = A PRO SKUT. > ZADANE 1010
;
; 76543210
; <A> YYYYXXXX
;
;PRIPOJENI XY41XX K PORTU 3OUT NA JPR-1
;
; PORT2 OUT0 - PERO
; PORT2 OUT1 - X/Y
; PORT2 OUT6 - +/-
; PORT2 OUT7 - KROK
;
ELEM: LHLD SMOT ; NACTI STAV MOTORU JE V
MOV H,A ; CO DELAT V DO
LDA SMOT ; NACTI STAV MOTORU <A>
ANI 01000100B ; JEN BIT 6 A 2
ORA H ; SLOZ PRES OR
STA SMOT ; ULOZ STAV MOTORU
XRA A ; VYVUJ <A>
MOV H,A ; A TAKY
LDA ACCE ; RICHLOST PRI ROZBEHU
RAR ; V PRAVO PRES CY TJ. /2
MOV L,A ; A DO
JMP ROSAY ; JDEM CUKAT S MOTORY
;
RPOIN: CALL ULZXY ; ULOZ X A Y
CALL PEN0 ; DVEDNI PERO
CALL RELA ; RELATIVNI PRESUN
PENP: CALL PEN1 ; SPUST PERO
;PERO NAHORU
PEN0: LDA SPEN ; NACTI STAV PERA
DCR A ; STAV PERA -1
RNZ ; PERO ZVEDNUTO - NAVRAT
LHLD TKON1 ; NACTI CASOVACI KONSTANY 1 A 2 DO <HL>
JMP PENZ ; ZVEDNI PERO V <A> 00H
;PERO DOLU
PEN1: LDA SPEN ; NACTI STAV PERA
DCR A ; STAV PERA -1
RZ ; PERO DOLE - NAVRAT
; V <A> FFH
LHLD TKON2 ; NACTI CASOVACI KONSTANY 2 A 3 DO <HL>
PENZ: ANI 1 ; JEN NEN BIT 0
STA SPEN ; ULOZ STAV PERA
MOV A,L
STA SPED ; NASTAV AKTUALNI RICHLOST (K3)
LXI H,01F4H ; PAUZA PRO PERO
ORI 80H ; KROK NA 1 TJ. BIT 7
STA PORT2 ; VYSTAV STAV PERA NA PORT
JMP ZPOZ0 ; A PAUZA
;
;RESIME OSU Y
ROSAY: PUSH H ; ULOZ "RYCHLOSTI"
LHLD SPEN ; NACTI STAV PERA A MOTORU DO <HL>
MOV A,H ; STAV MOTORU DO <A>
RLC ; O BIT V LEVO [65432107]
JNC ROSAX ; POKUT BIT 7 [0] TAK BUDEM RESIT OSU X
XRI 80H ; EX-OR S <A> 10000000
JP ROSAX ; POKUT BIT 6 [1] TAK BUDEM RESIT OSU X
MOV H,A ; SCHOV DATA
ANI 40H ; JEN HORNI 4 BITY
ORI 2 ; NASTAV OSU Y NA XY JE TO X
CALL KROK ; UDELEJ KROK
MOV A,H ; OBNOV DATA
;RESIME OSU X
ROSAX: RLC
RLC
RLC
RLC ; PRETOCIT NA DATA PRO OSU X [21076543]
JNC WAITM ; POKUT BIT 3 [0] TAK BUDEME RESIT PAUZU
XRI 0C0H ; EX-OR S <A> 11000000
JP WAITM ; POKUT BIT 2 [1] TAK BUDEME RESIT PAUZU
MOV H,A ; SCHOV DATA
ANI 40H ; JEN HORNI 4 BITY
CALL KROK ; UDELEJ KROK
MOV A,H ; OBNOV DATA
WAITM: RLC
RLC
RLC ; DATA PRO RIZENI MOTORU DO VYCHOZI POLOHY [76543210]
STA SMOT ; A ULOZ
POP H ; OBNOV "RYCHLOSTI"
;
;SPOZDOVACI SMICKA
;
ZPOZ0: LDA SPED ; AKTUALNI RYCHLOST
ZPOZ1: DCR A
JNZ ZPOZ1
DCX H
MOV A,H
ORA L
JNZ ZPOZ0
RET
;
KROK: ORA L ; PRIPOJ STAV PERA
STA PORT2
ORI 80H
STA PORT2 ; UDELJ KROK
RET
;
; TEST TISKKARNY
; VYTISKNE ZNAKZ OD 10H PO FFH
;
TESTT: MVI C,0CH
CALL ZNAKC1 ; NOVOU STRANKU
MVI C,10H ; OD ZNAKU 10H
TESTT1: PUSH B ; SCHOV ZNAK
CALL ZNAKC1 ; TISKNI ZNAK
LDA ZBS ; NACTI BS NEBO NECO JINEHO
ORA A
MVI C,20H ; MEZERA
CNZ ZNAKC1 ; POKUT JE BS TAK TISK
MVI C,20H ; MEZERA
CALL ZNAKC1 ; VYTISKNIJI
POP B ; VRAT ZNAK
INR C ; DALSI ZNAK
RZ ; POKUT JE VSECH 255 ZNAKU -> NAVRAT
MVI A,0FH
ANA C ; JEN SPODNI 4 BITY
JNZ TESTT1 ; POKUT NENI NULA -> DALSI ZNAK
PUSH B
MVI C,0DH
CALL ZNAKC1 ; JINAK NOVY RADEK
POP B
JMP TESTT1
;
;DIAKRITICKE ZNAMENKA PRO KOI-8CS
;
DIKZT: DB 38H,6AH,28H,7AH,3AH,6CH,2AH,7CH
DB 28H,5AH,18H,6AH,2AH,5CH,1AH,6CH
DB 18H,4AH,08H,5AH,1AH,4CH,0AH,5CH
;
;TABULKA PRO DIAKRITICKE ZNAKZ KOI-8CS
;
TKOI2: DB 00H,21H,00H,63H,64H,65H,00H,00H
DB 00H,29H,0F5H,00H,00H,00H,35H,2FH
DB 00H,00H,72H,73H,74H,35H,00H,25H
DB 00H,39H,7AH,00H,40H,00H,00H,00H
DB 00H,01H,00H,43H,44H,45H,00H,00H
DB 00H,09H,0D5H,00H,00H,00H,15H,0FH
DB 00H,00H,52H,53H,54H,15H,00H,05H
DB 00H,19H,5AH,00H,40H,00H,00H,00H
;
;GENERATOR ZNAKU
;***************
;
TABGZ: DW TAB10,TAB20,TAB20,TAB28,TAB30
DW TAB38,TAB40,TAB48,TAB50,TAB58
DW TAB60,TAB68,TAB70,TAB78,TAB80
;
TAB10: DB 18H,68H,71H,73H,6CH,5CH,53H,51H,0D8H ;10H, VELKE KOLECKO
DB 10H,70H,74H,54H,0D0H ;11H, CTVEREC
DB 20H,72H,64H,52H,0E0H ;12H, KOSOCTVEREC
DB 14H,72H,50H,0D4H ;13H, SIPKA DOLU (TROUHELNIK)
DB 12H,70H,74H,0D2H ;14H, SIPKA DOLU (TROUHELNIK)
DB 12H,72H,20H,0E4H ;15H, VELKE PLUS
DB 10H,74H,30H,0D4H ;16H, VELKY KRIZEK
DB 12H,72H,20H,64H,14H,70H,10H,0F4H ;17H, VELKA HVEZDICKA
TAB20: DB 80H,3AH,5AH,0AH,0CAH,31H,7AH
DB 32H,0FBH,39H,49H,0BH,7BH,2CH,68H,18H,0DCH
DB 10H,53H,5CH,63H,61H,68H,71H
DB 74H,3AH,0CAH,7CH,39H,70H,69H
DB 72H,79H,1BH,52H,4BH,54H,0DBH
DB 0CH,68H,70H,79H,7AH,73H,6BH
DB 50H,49H,4AH,0DCH,3BH,0F2H
TAB28: DB 3BH,69H,59H,0CBH,39H,6BH,5BH
DB 0C9H,11H,73H,24H,60H,31H,0D3H
DB 20H,64H,32H,0D2H,12H,0C1H,20H
DB 0E4H,0AH,0CAH,0FCH
TAB30: DB 7CH,34H,54H,4BH,49H,50H,70H
DB 79H,7BH,0F4H,29H,7BH,0CBH,30H
DB 79H,7BH,74H,6CH,48H,0CCH,30H
DB 79H,7BH,74H,6CH,63H,5CH,54H
DB 4BH,49H,0D0H,0BH,7BH,58H,0DCH
DB 10H,49H,4BH,54H,5CH,63H,60H
DB 78H,0FCH,34H,7BH,79H,70H,50H
DB 49H,4BH,54H,5CH,63H,61H,0D8H,7CH,0F8H
TAB38: DB 09H,50H,58H,61H,63H,6CH,74H
DB 7BH,79H,70H,68H,61H,63H,5CH
DB 54H,4BH,0C9H,10H,49H,4BH,54H
DB 74H,7BH,79H,70H,68H,61H,63H
DB 0ECH,1AH,5AH,2AH,0EAH,01H,52H
DB 22H,0E2H,33H,61H,0D3H,28H,6CH
DB 18H,0DCH,31H,63H,0D1H,30H,79H
DB 7BH,74H,6CH,5AH,52H,0AH,0CAH
TAB40: DB 68H,71H,73H,6CH,54H,4BH,4AH
DB 51H,61H,6AH,63H,0CBH,7AH,4CH
DB 21H,0E3H,78H,7BH,74H,6CH,63H
DB 60H,63H,5CH,54H,4BH,0C8H,34H
DB 7BH,79H,70H,50H,49H,4BH,0D4H
DB 78H,7BH,74H,54H,4BH,0C8H,3CH
DB 78H,48H,4CH,20H,0E2H,78H,7CH,20H,0E2H
DB 34H,7BH,79H,70H,50H,49H,4BH,54H,5CH,0DAH
TAB48: DB 78H,3CH,4CH,20H,0E4H,09H,4BH,4AH
DB 7AH,79H,0FBH,10H,49H,4BH,54H
DB 0FCH,78H,3CH,60H,0CCH,38H,48H
DB 0CCH,78H,62H,7CH,0CCH,78H,4CH
DB 0FCH,09H,50H,70H,79H,7BH,74H,54H,4BH,0C9H
TAB50: DB 78H,7BH,74H,6CH,63H,0E0H,09H
DB 50H,70H,79H,7BH,74H,54H,4BH
DB 49H,1AH,0CCH,78H,7BH,74H,6CH
DB 63H,60H,0CCH,10H,49H,4BH,54H
DB 5CH,63H,61H,68H,70H,79H,7BH
DB 0F4H,38H,7CH,3AH,0CAH,38H,50H
DB 49H,4BH,54H,0FCH,38H,4AH,0FCH
DB 38H,49H,6AH,4BH,0FCH
TAB58: DB 7CH,38H,0CCH,38H,62H,7CH,22H
DB 0CAH,38H,7CH,48H,0CCH,3BH,79H
DB 49H,0CBH,38H,0CCH,39H,7BH,4BH
DB 0C9H,31H,7AH,0F3H,0H,0C4H
TAB60: DB 39H,0F2H,29H,6BH,64H,54H,4BH
DB 49H,50H,59H,5BH,54H,0CCH,78H
DB 28H,6BH,64H,54H,4BH,0C8H,2CH
DB 69H,60H,50H,49H,0CCH,3CH,4CH
DB 49H,50H,60H,69H,0ECH,18H,5CH
DB 64H,6BH,69H,60H,50H,49H,0CCH
DB 0AH,72H,7BH,7CH,21H,0E3H,00H
DB 43H,4CH,6CH,69H,60H,58H,51H,0D4H
TAB68: DB 78H,28H,6BH,64H,0CCH,09H,4BH
DB 4AH,6AH,69H,3AH,0FAH,01H,42H
DB 4BH,6BH,6AH,3BH,0FBH,78H,2CH
DB 58H,0CCH,09H,4BH,4AH,7AH,0F9H
DB 68H,60H,69H,62H,4AH,22H,6BH
DB 64H,0CCH,68H,60H,69H,6BH,64H
DB 0CCH,09H,50H,60H,69H,6BH,64H,54H,4BH,0C9H
TAB70: DB 00H,68H,6BH,64H,5CH,53H,0D0H
DB 04H,6CH,69H,60H,58H,51H,0D4H
DB 09H,69H,61H,6AH,6BH,0E4H,4BH
DB 54H,5BH,59H,60H,69H,0ECH,0CH
DB 4BH,52H,72H,21H,0E3H,28H,50H,49H
DB 4BH,54H,0ECH,28H,4AH,0ECH,28H
DB 49H,62H,4BH,0ECH
TAB78: DB 6CH,28H,0CCH,0H,43H,4CH,6CH
DB 28H,58H,51H,0D4H,28H,6CH,48H
DB 0CCH,0BH,52H,5AH,61H,6AH,72H
DB 0FBH,0AH,0FAH,09H,52H,5AH,63H
DB 6AH,72H,0F9H,20H,69H,5BH,0E4H,80H
TAB80: DB 32H,0FBH
TAB81: DB 2AH,71H,7AH,73H,0EAH
DB 39H,72H,0FBH,31H,7AH,0F3H,39H,79H,3BH,0FBH
;
DB 0,0,'TESLA DIZ'
DB 0,0,0,0,0,0,0,0
;
KONROM EQU $-1 ;POSLEDNI BYTE V ROM
ROMC EQU $-ROM ;CEKOVA DELAKA KODU
;
ORG RAM ;BLOK PROMENYCH
SIXX: DS 2 ; VELIKOST PISMA XX 4290H
SIXY: DS 2 ; VELIKOST PISMA XY 4292H
SIYX: DS 2 ; VELIKOST PISMA YX 4294H
SIYY: DS 2 ; VELIKOST PISMA YY 4296H
DIAK: DS 1 ; PRIZNAK DIAKRITIKY, BUDE ZNAMENKO 4298H
ZBS: DS 1 ; ZNAK BS
DIAK2: DS 1 ; PRIZNAK DIAKRYTIKY, BYLO ZNAMENKO 429AH
GZNAK: DS 1 ; PRIZNAK PRO GRAFICKY ZNAK 429BH
TXTNS: DS 1 ; PRIZNAK NOVYCH SURADNIC PRO TISK TEXTU 429CH
RADKO: DS 1 ; ROZSTUP MEZI RADKY 429DH
WIDE: DS 1 ; DRUH MEZERY MEZI ZNAKY 429EH
TKON1: DS 1 ; KONSTANTA PRO CASOVOU SMICKU 1 A249H
TKON2: DS 1 ; KONSTANTA PRO CASOVOU SMICKU 2 42A0H
TKON3: DS 1 ; KONSTANTA PRO CASOVOU SMICKU 3 42A1H
STPX: DS 2 ; OKAMZITA POLOHA PERA X 42A2H
STPY: DS 2 ; OKAMZITA POLOHA PERA Y 42A4H
TXTSX: DS 2 ; SOURADNICE X PRO TISK TEXTU 42A6H
TXTSY: DS 2 ; SOURADNICE Y PRO TISK TEXTU 42A8H
ATABGZ: DS 2 ; ARESA AKTUANIHO GENERATORU ZNAKU 42AAH
NOPX: DS 2 ; POLOHA PRISTIHO TISKU ZN. X 42ACH
NOPY: DS 2 ; POLOHA PRISTIHO TISKU ZN. Y 42AEH
SPEN: DS 1 ; OKAMZITY STAV PERA 42B0H
SMOT: DS 1 ; STAV KROKOVYCH MOTORU
PREX: DS 2 ; SOUR. PREDCHOZIHO TISKU X 42B2H
PREY: DS 2 ; SOUR. PREDCHOZIHO TISKU Y 42B4H
SPED: DS 1 ; AKTUALNI RICHLOST POSUVU 42B6H
ACCE: DS 1 ; RICHLOST PRI ROZBEHU 42B7H
DIRE: DS 1 ; SMER DO OS Y A X 42B8H
DIR1: DS 1 ; ? 42B9H
DIFF: DS 2 ; ROZDIL SOUR. ZADANE A SKUT. 42BAH
;
KONRAM EQU $-1 ; POSLEDNI BZTE V RAM
RAMC EQU $-RAM ; CEKOVE OBSAZENI RAM
;
END
;
ÚVOD | Novinky | 8 Bitů | Příslušenství | Drobnosti | TTL | Kontakt
SAPI-1 | ONDRA | PMI-80 | PMD-85 | klony PMD-85 | klony SM50/40 | PETR | PLAN-80A | IQ151 | TNS | FK-1 | HVĚZDA | SP 830 | PCS 1-QR6000
ZPS | Technické prostředky | Programové vybavení | Dokumentace