ZX Review
#3-4
22 июля 1997 |
|
Этюды - Е.Мороз. Бегущая строчка.
(c) Евгений Мороз, Красноярский край, с. Бражное. Предлагаю программу типа "бе- гущая строчка по таблице в пре- рываниях". Текст программы дан адаптированным к прерываниям, т.к. я полагаю, что легче убрать "прерывательные" навороты, чем их поставить. Вот ее листинг: 147. ORG 50000 TABLE EQU 60000 SIZE EQU 8 IMOFF DI LD A,63 LD I,A IM 1 EI RET ENT IMON DI LD A,9 LD I,A IM 2 LD A,#C3 LD (65129),A LD HL,SCROLL LD (65130),HL EI RET SCROLL PUSH AF PUSH HL PUSH DE PUSH BC CALL LINE POP BC POP DE POP HL POP AF JP 56 NEXT LD HL,(TXTM) INC HL LD (TXTM),HL LD A,(HL) CP 255 JR NZ,NEXT1 LD HL,TXT LD (TXTM),HL LD A,(HL) NEXT1 AND 127 CP 32 JR C,NEXT3 LD L,A LD H,0 ADD HL,HL ADD HL,HL ADD HL,HL LD DE,(23606) ADD HL,DE LD DE,BUF+SIZE LD B,8 NEXT2 LD A,(HL) LD (DE),A INC HL INC D DJNZ NEXT2 NEXT3 LD A,7 JR LINE2 LINE LD A,(LINEM) DEC A JR Z,NEXT LINE2 LD (LINEM),A CALL SCR RET SCR LD DE,TABLE LD HL,BUF+SIZE LD C,8 SCR1 PUSH HL AND A RL (HL) DEC HL LD B,SIZE SCR2 PUSH BC RL (HL) PUSH AF CALL DEG DEC HL POP AF POP BC DJNZ SCR2 POP HL INC H DEC C JR NZ,SCR1 RET DEG LD B,8 DEG1 PUSH BC LD A,(HL) DEG2 RLA DJNZ DEG2 CALL PLOT POP BC DJNZ DEG1 RET PLOT PUSH HL EX DE,HL LD C,(HL) JR NC,PL2 PL1 LD B,C PL2 INC HL LD E,(HL) INC HL LD D,(HL) INC HL EX DE,HL LD A,(HL) OR C XOR C OR B LD (HL),A POP HL RET LINEM DEFB 1 TXTM DEFW TXT-1 BUF DEFS 2048 TXT DEFM "HELLO ALL HA" DEFM "CKERS ALL OV" DEFM "ER THE WORLD" DEFM " !!! " DEFS SIZE DEFB 255 2 Также приводим ее дамп: C350: F3 3E 3F ED 47 ED 56 FB:F5 C358: C9 F3 3E 09 ED 47 ED 5E:9D C360: 3E C3 32 69 FE 21 6D C3:0E C368: 22 6A FE FB C9 F5 E5 D5:28 C370: C5 CD AE C3 C1 D1 E1 F1:9A C378: C3 38 00 2A FE C3 23 22:66 C380: FE C3 7E FE FF 20 07 21:C7 C388: 00 CC 22 FE C3 7E E6 7F:DD C390: FE 20 38 16 6F 26 00 29:7D C398: 29 29 ED 5B 36 5C 19 11:B1 C3A0: 08 C4 06 08 7E 12 23 14:04 C3A8: 10 FA 3E 07 18 06 3A FD:0F C3B0: C3 3D 28 C7 32 FD C3 CD:21 C3B8: BB C3 C9 11 60 EA 21 08:46 C3C0: C4 0E 08 E5 A7 CB 16 2B:F5 C3C8: 06 08 C5 CB 16 F5 CD DC:DD C3D0: C3 2B F1 C1 10 F4 E1 24:3C C3D8: 0D 20 E8 C9 06 08 C5 7E:CA C3E0: 17 10 FD CD EA C3 C1 10:12 C3E8: F5 C9 E5 EB 4E 30 01 41:F9 C3F0: 23 5E 23 56 23 EB 7E B1:EA C3F8: A9 B0 77 E1 C9 01 FF CB:00 C400 - CBFF - область буфера CC00: 48 45 4C 4C 4F 20 41 4C:ED CC08: 4C 20 48 41 43 4B 45 52:EE CC10: 53 20 41 4C 4C 20 4F 56:ED CC18: 45 52 20 54 48 45 20 57:F3 CC20: 4F 52 4C 44 20 21 21 21:A0 CC28: 20 00 00 00 00 00 00 00:14 CC30: 00 FF 00 00 00 00 00 00:FB Без каких-либо изменений программа в прерываниях зани- мает больше, чем 1/50 секунды, однако SOS тормозит не очень сильно (для работы с ним в кон- це обработчика поставлен JP 56 - его можно без опаски убирать). Размер таблицы для scroll'a и длина его зависит от переменной SIZE и равен SIZE*192. В пред- ставленном виде значение пере- менной установлено равным вось- ми, а значит, по экрану SPECCY побегут восемь вполне приличного вида букв. Если будет необходи- мо, его достаточно просто изме- нить в тексте на ассемблере и в тексте на Бейсике (это редактор таблицы - по запросу программы). В редакторе есть машинокодовая вставка - ее текст: 147. ORG [PROG+7] ; так ;написать нельзя, посчитайте ;это значение. LD A,(PROG+5) AND #18 RRCA RRCA RRCA OR #58 LD B,A LD A,(PROG+6) AND #07 RRCA RRCA RRCA ADD A,D LD C,A RET 2 Этот текст надо отассемблиро- вать в строку REM, оставив два байта под переменные. Величину PROG берите из редактора, она зависит от наличия BETA-DISK и INTERFACE-1. Приведенный вариант редактора написан в расчете на магнитофонный вариант компьютера ( дисководом я не обременен). Счастливые же их обладатели смо- гут без проблем добавить нужные USR 15619. Он довольно неуклюж, но в целом справляется со своей работой, задавая траекторию дви- жения скролла, используя "вол- нистые" графики синуса (можно косинуса). Также без проблем Вы можете вместо этого "волноводства" вставить элементарный опрос кла- виатуры и создавать свою един- ственную и неповторимую таблицу. Обращаю Ваше внимание на метку BUF, которая резервирует в памя- ти место, достаточное для хране- ния 32 букв, формат хранения ко- торых соответствует формату син- клеровского экрана (этим и объ- ясняется столь немалый размер буфера), благодаря чему при ус- тановке BUF в экране Вы будете иметь еще одну самую обычную бе- гущую строчку, необходимую для сканирования. Метка TAB определяет началь- ный адрес таблицы и должна соот- ветствовать вводимой величине по запросу Бейсик-редактора. 0 REM здесь должна находиться машинокодовая процедура. 10 PAPER 0:INK 7: BORDER 0: CLEAR 24999 20 INPUT "TAB ";r ;REM начальный адрес расположения таблицы. 30 INPUT "SIZE ";d ;REM и ее размер (в буквах) 40 LET q=PEEK 23636*256+PEEK 23635 100 FOR m=88 TO 57 STEP -32/d 110 FOR n=255 TO 0 STEP -32/d 120 LET x=n 130 LET y=INT (m+n/5*SIN (n/25)) 140 PLOT x,y 150 GO SUB 300 160 NEXT n 170 NEXT m 180 STOP 300 REM *CREATING TABLE* 310 LET c=INT (x/8): LET u=INT (y/8) 320 POKE q+5,21-u: POKE q+6,c 330 LET s=USR (q+7)+ABS (7-(y-u*8))*256: PRINT #0;AT 1,0; "SCREEN$ "s 340 LET b=2^(ABS (x-c*8-7)): PRINT #0;AT 1,23;"BIN ";b;" " 350 PRINT #0;AT 0,23;"TAB ";r 360 POKE r,b 370 POKE r+2,INT (s/256): POKE r+1,(s-INT (s/256)*256) 380 LET r=r+3 390 RETURN ********************************
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября