Код:
device zxspectrum48
ORG 60000
EI
XOR A
CALL 8859
LD A,68
LD (23693),A
CALL 3435
LD A,2
CALL 5633
; Î÷èñòêà ñòðîêè äëÿ ââîäà èìåíè
LD HL,NAME
LD DE,NAME+1
LD BC,19
LD (HL)," "
LDIR
; Âûâîä òàáëèöû ñèìâîëîâ â ðàìêå
CALL TABL
CALL LINES
LD A,68
LD (23693),A
LD BC,#506 ;íà÷àëüíûå êîîðäèíàòû êóðñîðà â òàáëèöå
LD E,0 ;íîìåð ñèìâîëà â ñòðîêå ââîäà
SET 3,(IY+48) ;ðåæèì ââîäà ïðîïèñíûõ áóêâ
; Óïðàâëåíèå êóðñîðîì è ïå÷àòü âûáðàííîãî ñèìâîëà â ñòðîêó
KEYS CALL SETCUR ;âûâîä êóðñîðà
XOR A
LD (23560),A
WAIT LD A,(23560) ;îæèäàíèå íàæàòèÿ êëàâèøè
AND A
JR Z,WAIT
CP "6" ;ïåðåìåùåíèå êóðñîðà íà
JR Z,RIGHT ; îäèí øàã âïðàâî
CP "7" ;ïåðåìåùåíèå êóðñîðà
JR Z,LEFT ; íà îäèí øàã âëåâî
CP "9" ;ïåðåìåùåíèå êóðñîðà
JR Z,UP ; íà îäèí øàã ââåðõ
CP "8" ;ïåðåìåùåíèå êóðñîðà
JR Z,DOWN ; íà îäèí øàã âíèç
CP "0" ;ïå÷àòü âûáðàííîãî ñèìâîëà
JR Z,SELECT ; â ñòðîêå ââîäà
JR KEYS
; Ïåðåìåùåíèå êóðñîðà âïðàâî
RIGHT LD A,C ;ïðîâåðêà äîñòèæåíèÿ êóðñîðîì
CP 24 ; ïðàâîé ãðàíèöû òàáëèöû
JR NC,KEYS
CALL RESCUR ;óäàëåíèå êóðñîðà íà ïðåæíåì ìåñòå
INC C ;èçìåíåíèå ïîëîæåíèÿ êóðñîðà
INC C
CALL SETCUR ;óñòàíîâêà êóðñîðà íà áóêâó òàáëèöû
JR KEYS
; Ïåðåìåùåíèå êóðñîðà âëåâî
LEFT LD A,C ;ïðîâåðêà äîñòèæåíèÿ êóðñîðîì
CP 7 ; ëåâîé ãðàíèöû òàáëèöû
JR C,KEYS
CALL RESCUR
DEC C
DEC C
CALL SETCUR
JR KEYS
; Ïåðåìåùåíèå êóðñîðà ââåðõ
UP LD A,B ;ïðîâåðêà äîñòèæåíèÿ êóðñîðîì
CP 6 ; âåðõíåé ãðàíèöû òàáëèöû
JR C,KEYS
CALL RESCUR
DEC B
DEC B
CALL SETCUR
JR KEYS
; Ïåðåìåùåíèå êóðñîðà âíèç
DOWN LD A,B ;ïðîâåðêà äîñòèæåíèÿ êóðñîðîì
CP 11 ; íèæíåé ãðàíèöû òàáëèöû
JR NC,KEYS
CALL RESCUR
INC B
INC B
CALL SETCUR
JR KEYS
; Âûáîð ñèìâîëà, êîòîðûé çàòåì áóäåò íàïå÷àòàí â ñòðîêå èëè âûáîð
; ôóíêöèè äëÿ ðåäàêòèðîâàíèÿ ýòîé ñòðîêè
SELECT PUSH BC
PUSH DE
CALL SND ;çâóêîâîé ñèãíàë, èçäàâàåìûé ïðè
; ïåðåìåùåíèè ñèìâîëà èç òàáëèöû â
; íàáèðàåìóþ ñòðîêó
POP DE
POP BC
LD A,B
CP 11
JR NZ,MOVE ;ïå÷àòü ñèìâîëà
LD A,C
CP 20
JR Z,DELETE ;óäàëåíèå ñèìâîëà â ñòðîêå
CP 22
JR Z,SPACE ;ïå÷àòü ïðîáåëà â ñòðîêå
CP 24
RET Z ;âûõîä èç ïðîãðàììû
; Ïåðåìåùàåì ñèìâîë èç òàáëèöû â íàáèðàåìóþ ñòðîêó è ñìåùàåì êóðñîð
; íà ïîçèöèþ âïðàâî, ïðè ýòîì äåëàåì ïðîâåðêó òîãî, ÷òîáû ñèìâîë
; íå âûøåë çà çàäàííûå ãðàíèöû ñòðîêè (ñëåâà è ñïðàâà).
MOVE LD A,E
CP 20
JP NC,KEYS
LD D,0
PUSH BC
PUSH DE
LD A,B ;ïî âåðòèêàëüíîé êîîðäèíàòå êóðñîðà
; îïðåäåëÿåì àäðåñ äàííûõ ñòðîêè
; òàáëèöû (STR1, STR2, STR3 èëè STR4)
SUB 5
LD HL,D_STR
LD E,A
ADD HL,DE
LD E,(HL)
INC HL
LD D,(HL)
EX DE,HL
LD A,C ;ïî ãîðèçîíòàëüíîé êîîðäèíàòå íàõîäèì
; êîä ñèìâîëà â áëîêå äàííûõ
SUB 6
LD C,A
LD B,0
ADD HL,BC
POP DE
POP BC
LD A,(HL) ;ïîìåùàåì êîä ñèìâîëà â A
LD HL,NAME ;îïðåäåëÿåì àäðåñ â ñòðîêå NAME
ADD HL,DE ; äëÿ ââîäà ñèìâîëà
LD (HL),A ;ïîìåùàåì ñèìâîë â ñòðîêó ââîäà
CALL PR_STR ;âûâîäèì ñòðîêó ââîäà íà ýêðàí
INC E ;ñìåùàåì ïîçèöèþ ââîäà âïåðåä
JP KEYS
; Óäàëåíèå íåïðàâèëüíî íàáðàííîãî ñèìâîëà
DELETE LD A,E ;ïðîâåðêà äîñòèæåíèÿ íà÷àëà ñòðîêè ââîäà
AND A
JP Z,KEYS
DEC E ;óìåíüøàåì ïîçèöèþ ââîäà
LD D,0
LD HL,NAME
ADD HL,DE
LD (HL)," " ;çàìåíÿåì óäàëÿåìûé ñèìâîë ïðîáåëîì
CALL PR_STR
JP KEYS
; Ââîä ïðîáåëà
SPACE LD A,E ;ïðîâåðêà äîñòèæåíèÿ êîíöà ñòðîêè ââîäà
CP 20
JP NC,KEYS
LD D,0
LD HL,NAME
ADD HL,DE
LD (HL)," "
CALL PR_STR
INC E ;óâåëè÷èâàåì ïîçèöèþ ââîäà
JP KEYS
; Âûâîä êóðñîðà èçìåíåíèåì áàéòà àòðèáóòîâ
RESCUR LD A,68 ;PAPER 0, INK 4, BRIGHT 1
JR PRATTR
; Óäàëåíèå êóðñîðà âîññòàíîâëåíèåì áàéòà àòðèáóòîâ
SETCUR LD A,79 ;PAPER 1, INK 7, BRIGHT 1
; Âû÷èñëÿåì àäðåñ àòðèáóòîâ çíàêîìåñòà è çàíîñèì
; ïî ýòîìó àäðåñó áàéò èç àêêóìóëÿòîðà
PRATTR LD L,B
LD H,0
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
PUSH AF
LD A,H
ADD A,#58
LD H,A
LD A,L
ADD A,C
LD L,A
POP AF
LD (HL),A
RET
; Ïîäïðîãðàììà ïå÷àòè òàáëèöû ñèìâîëîâ
TABL LD DE,STR
LD BC,LENSTR
JP 8252
; Ïîäïðîãðàììà ïå÷àòè ââåäåííîé ñòðîêè
PR_STR PUSH BC
PUSH DE
LD DE,STR5
LD BC,LENLIN
CALL 8252
POP DE
POP BC
RET
; Ïîäïðîãðàììà ðèñîâàíèÿ ðàìêè
LINES EXX
PUSH HL
LD A,66
LD (23695),A
LD BC,#8A2C ;B = 138, C = 44
CALL 8933
LD DE,#101
LD BC,160 ;B = 0, C = 160
CALL 9402
LD DE,#FF01
LD BC,#3D00 ;B = 61, C = 0
CALL 9402
LD DE,#1FF
LD BC,160
CALL 9402
LD DE,#101
LD BC,#3D00
CALL 9402
POP HL
EXX
RET
; Êîðîòêèé çâóêîâîé ñèãíàë
SND LD B,30
LD HL,350
LD DE,2
SND1 PUSH BC
PUSH DE
PUSH HL
CALL 949
POP HL
POP DE
POP BC
SBC HL,DE
DJNZ SND1
RET
; Äàííûå òàáëèöû ñèìâîëîâ
STR DEFB 22,5,6
STR1 DEFM "1 2 3 4 5 6 7 8 9 0" ;ñèìâîëû ÷åðåç îäèí ïðîáåë
DEFB 22,7,6
STR2 DEFM "A B C D E F G H I J"
DEFB 22,9,6
STR3 DEFM "K L M N O P Q R S T"
DEFB 22,11,6
STR4 DEFM "U V W X Y Z . d s e"
STR5 DEFB 22,19,5,16,5,">",16,2
NAME DEFM "····················"
DEFB 16,5,"<"
LENSTR EQU $-STR ;äëèíà ñòðîêè äëÿ ïå÷àòè òàáëèöû
LENLIN EQU $-STR5 ;äëèíà ñòðîêè ââîäà èìåíè
; Àäðåñà äàííûõ ñèìâîëîâ â òàáëèöå
D_STR DEFW STR1,STR2,STR3,STR4
savesna "probe.sna",#6000