ZX Review
#5-6
04 ноября 1997 |
|
Этюды - Процедура поиска текстовых файлов.
Может быть, стоит на базе этюдов и почившего в бозе разде- ла для начинающих создать ка- кой-то уголок программиста, в котором систематизированно осве- щать практические приемы прог- раммирования. Уровень начинающе- го проходится довольно быстро, а между начинающим и мастером - большой диапазон промежуточных уровней, представители которых и составляют большую часть читате- лей "Ревю". Для повышения общего уровня грамотности не мешало бы систе- матизировать способы сокращения размера типовых процедур и повы- шения их быстродействия, особен- но для процедур копирования бло- ков памяти. В принципе, это все уже приводилось, но разбросано по разным номерам. А в послед- нее время в программах начинают встречаться фрагменты типа: LOOP LDI ; 16 тактов JP PE,LOOP ; 10 тактов (Информация о времени выпол- нения команд взята из трехтомни- ка по программированию в машин- ных кодах. "Инфорком", 1993г.) Очевидно, автор где-то про- читал, что LDI быстрее LDIR (21 такт). В результате длина больше на три байта, а быстродействие ниже на 5 тактов в каждом цикле перемещения байта. Кажется, уже кто-то предла- гал заняться коллективным прог- раммированием. Написать таким способом игру, имеющую большую коммерческую ценность, малове- роятно, хотя бы потому, что вряд ли у кого хватит сил вручную на- бивать огромное количество спрайтов. Но написать еще один вариант TETRIS или BALL BREAKER с минимальным количеством спрай- тов вполне возможно. Сама игра не имеет первостепенного значе- ния. Главное - показать весь процесс создания законченной программы. А разработанные за это время процедуры можно в дальнейшем использовать в само- стоятельно разрабатываемых прог- раммах. Если в результате появится еше хотя бы несколько десятков программистов, пишущих для SPECTRUM, лучше будет всем, по- тому что рынок программного обеспечения невозможно насытить увеличением количества предла- гаемых программ. Чем больше программ, тем больше пользовате- лей и больше спрос на другие программы. А количество тем для программирования бесконечно. ПРОЦЕДУРА ПОИСКА ТЕКСТОВЫХ ФАЙЛОВ Я не встречал пока ни одно- го дискового доктора, поддер- живающего альтернативную коди- ровку, ставшую фактическим стан- дартом текстовых файлов ZX-SPECTRUM. Для упрощения про- цесса восстановления дисков, со- держащих текстовые файлы ZX-WORD, ZX/IBM EDITOR, ZX-ASM и т.п., предлагаю процедуру прос- мотра дисков с разрушенным ката- логом. Начальные дорожка и сектор задаются в переменной TRACK. На экран выводится содержимое трех смежных секторов. В верхней час- ти экрана печатаются номера до- рожки и сектора, с которых начи- нается вывод. Секторы выделяют- ся цветом фона. При нажатии BREAK происхо- дит выход из процедуры, при на- жатии любой другой клавиши выво- дится дамп следующих трех секто- ров. По адресу FONT в процессе компиляции загружается знакоге- нератор, содержащий образы 256 символов с кодами 0-255. LOADCODE - директива ассемблера XAS, выполняющая загрузку блока кодов. Если Вы пользуетесь дру- гим ассемблером, замените ее аналогичной директивой Вашего ассемблера. Для ZEUS это PLACE, для TASM, ALASM - INGBIN, ZX-ASM 3 - INSERT. Знакогенератор можно соста- вить самостоятельно, но гораздо проще извлечь его, при помощи програмы FIND EDIT FONT, из лю- бого текстового редактора, ис- пользующего матрицу 6х8 пиксе- лов. Еще проще использовать один из наборов знаков, прилагаемых к ассемблеру ZX-ASM 3. Процедура PRIN_42, использу- ющаяся для печати в формате 42 символа в строке, заимствована из ZX-Ревю N4-5/96 стр.101 ( (c) А.Матюшев). 140. INIT LD HL,#0100 ;H-TRK, L-SEC. TRACK EQU $-2 LD (#5CF4),HL XOR A OUT (#FE),A LD A,#45 LD (#5C8D),A START LD HL,#4000 LD DE,#4001 LD (HL),L LD BC,#1840 LDIR LD A,#30 LOOP1 LD C,#E0 ; B=0 LD (HL),A LDIR SUB 8 CP #18 JR NZ,LOOP1 LD C,31 LD (HL),B LDIR LD A,2 CALL #1601 LD DE,MES1 LD C,MES2-MES1 CALL #203C LD HL,#5CF5 PUSH HL CALL NUMBER LD DE,MES2 LD BC,FONT-MES2 CALL #203C POP HL DEC HL CALL NUMBER LD HL,#0200 LD (XTXT),HL LD HL,BUFF PUSH HL LD DE,(#5CF4) LD BC,#0305 CALL #3D13 POP HL LD C,#03 ; B=0 LOOP LD A,(HL) CALL PRIN_42 INC HL DJNZ LOOP PUSH HL LD HL,YTXT INC (HL) POP HL DEC C JR NZ,LOOP KEY XOR A IN A,(#FE) OR %11100000 INC A JR Z,KEY CALL #1F54 ; BREAK? RET NC JR START NUMBER LD C,(HL) LD B,0 CALL #2D2B JP #2DE3 MES1 DEFB 22,00,6 DEFM "TRACK:" MES2 DEFB 6 DEFM "SECTOR:" FONT LOADCODE "Font" PRIN_42 PUSH HL LD HL,XTXT LD A,41 CP (HL) JR NC,WR2 XOR A LD (HL),A INC HL INC (HL) WR2 POP HL LD A,(HL) PRSYM EXX PUSH HL LD L,A LD H,0 ADD HL,HL ADD HL,HL ADD HL,HL LD DE,FONT ADD HL,DE PUSH HL LD DE,(XTXT) LD A,E ADD A,A LD E,A ADD A,A ADD A,E LD E,255 LD L,8 CHPL1 INC E SUB L JR NC,CHPL1 ADD A,L LD H,A LD A,L SUB H LD (SL1-1),A LD (SL2-1),A LD A,D; AADR AND #18 ADD A,#40 LD H,A LD A,D AND 7 RRCA RRCA RRCA ADD A,E LD L,A POP DE LD C,8 SCRL LD A,(DE) LD B,0 SL1 SRL (HL) DJNZ SL1 AND A LD B,0 SL2 RL A RL (HL) DJNZ SL2 INC HL LD (HL),A DEC HL INC H INC DE DEC C JR NZ,SCRL LD HL,XTXT INC (HL) POP HL EXX RET XTXT DEFB 0 YTXT DEFB 0 BUFF ; буфер для загрузки 3-х секторов 2 Кроме восстановления испор- ченных дисков, приведенную выше процедуру можно использовать для преобразования текстов, содержа- щихся в HELP-программах, к виду, пригодному для печати. Мониторы-отладчики, к сожа- лению, тоже пока не понимают по- русски, и более быстрым может оказаться следующий способ: за- пускается HELP, вставляется чис- тый диск и нажимается MAGIC. Программа после этого может за- виснуть, но текст будет сохра- нен в распакованном виде. (Защи- щать от MAGIC свой рекламный продукт будет только сумасшед- ший). Остается просканировать диск, извлечь текст и при помощи текстового редактора удалить ко- довый мусор в начале и в конце файла. * * *
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября