ZXNet эхоконференция «code.zx»


тема: Печать: 51 символ в строке



от: 500:812/07.05
кому: Dmitry Lomov
дата: 10 May 1998
Привет, Dmitry ! [...] Вот эта самая процедура печати строки на 51 символ.... В связи с тем, что мне приш- лось переписывать из XAS'а в тетрадь, а из тетради в ZXASM, в ней могла закрастся ошибка. А вот и сама процедура вывода строки: PRINT51 LD A,H; HL- SCRN ADDRESS LD (PXS0+1),A LD (PXS1+1),A LD (PXS2+1),A EX DE,HL EXX LD B,7; Цикл LD HL,STRING; Строка PXSB LD E,(HL) INC L LD A,(HL) INC L LD D,#60; по #6000 фонт EXX LD C,A EXX LD A,(HL) INC L EX DE,HL EXX LD L,A LD B,#60 !ASSM7 LD A,(BC) RRCA RRCA RRCA LD H,B LD H,(HL) INC B RRA RR H RRA RR H EXX OR (HL) INC H EXX LD (DE),A INC E LD A,H LD (DE),A; 1&2&3 символ DEC E INC D !CONT EXX DEC B RET Z; возврат, если приехали EX DE,HL LD A,(HL) INC L EXX PXS0 LD D,0 LD L,A EX DE,HL EXX LD A,(HL) INC L LD E,(HL) INC L LD D,#60 EX DE,HL EXX LD C,A LD B,#60 !ASSM 7 LD D,B LD A,(DE) RRC (HL) RLA RL (HL) INC L LD D,A LD A,(BC) INC B RRCA RRCA RRCA SRL A EXX LD C,(HL) RR C EX AF,AF INC H LD A,C RRCA RRCA EXX INC L LD (HL),A DEC L EX AF,AF OR D LD (HL),A DEC L INC H !CONT LD D,B LD A,(DE) RRC (HL) RLA RL (HL) INC L LD D,A LD A,(BC) RRCA RRCA RRCA SRL A EXX LD C,(HL) RR C EX AF,AF LD A,C RRCA RRCA EXX INC L LD (HL),A DEC L EX AF,AF OR D LD (HL),A; 4&5&6 символ INC L PXS1 LD H,0 EXX EX DE,HL LD A,(HL) INC L EXX LD E,A EXX LD A,(HL) INC L EXX LD C,A LD B,#60 EX DE,HL !ASSM 7 LD H,B LD H,(HL) LD A,(DE) RL H RLA RL H RLA LD (DE),A INC E LD A,(BC) INC B RRCA RRCA RRCA OR H LD (DE),A INC D DEC E !CONT LD H,B LD H,(HL) LD A,(DE) RL H RLA RL H RLA LD (DE),A INC E LD A,(BC) RRCA RRCA RRCA OR H LD (DE),A; 7&8 символ INC E PXS2 LD D,0 EXX JP PXSB Рутина.. на первый вгляд может показатся бредом, особенно когда оптимизируешь ее. Эта процедура немного укорочена, т.е. в моей программе она немного изменена. Если читатель сильнее перегруженности, то он, я думаю, разберется в этой незатейливой процедуре. До скорого, PHOENIX. -+- ZXASM 3.0

от: 500:812/07.05
кому: Dmitry Lomov
дата: 13 May 1998
Привет, Dmitry ! YK>> Вот эта самая процедура печати строки на YK>> 51 символ.... В связи с тем, что мне приш- DL> [] YK>> А вот и сама процедура вывода строки: DL> [skip громадную процедуру] DL> вроде, работать будет. :) DL> только одно "но" - DL> у первой части (которая печатает первые три символа в два DL> столбца байт) повторов - 7 штук, а упрощенного "хвоста", DL> как у других кусков, нету. посему, вроде, первые три символа DL> займут по вертикали семь пикселей, а не восемь DL> (имхо, естественно; детально я не копал.) как я писал, там могла быть ошибка. DL> я посчитал (прикидочно) скорость работы - 78 тактов/байт экрана, DL> или 392 такта на символ. печать всей строки - 20.000 тактов. DL> это совпадает с твоими данными? Hу где-то 3,.. строки в прерывании. Вот немного другая пороцедура, она чуть побыстрее: PRINT51 LD A,H; HL - SCRN ADRESS LD (PXS0+1),A LD (PXS1+1),A CALL PXSA EX DE,HL LD A,H SUB 7 LD H,A !ASSM 7 RLC (HL) INC H !CONT RLC (HL) RET PXSA EX DE,HL EXX LD LY,7; счетчик LD HL,STRING PXSB LD E,(HL) INC L LD A,(HL) INC L LD D,#60; По #6000 фонт EXX LD C,A EXX LD A,(HL) INC L EX DE,HL EXX LD L,A LD B,#60 !ASSM 7 LD A,(BC) RRCA RRCA RRCA LD H,B LD H,(HL) INC B RRA RR H RRA RR H EXX OR (HL) INC H EXX LD (DE),A INC E LD A,H RRCA LD (DE),A DEC E INC D !CONT LD A,(BC) RRCA RRCA RRCA LD H,B LD H,(HL) RRA RR H RRA RR H EXX OR (HL) EXX LD (DE),A INC E LD A,H RRCA LD (DE),A;1&2&3 DEC LY RET Z PXS0 LD D,0 EXX EX DE,HL LD A,(HL) INC L EXX EX DE,HL LD E,A EXX LD A,(HL) INC L LD B,(HL) INC L LD E,(HL) INC L PUSH HL LD H,(HL) LD D,#60 EX DE,HL; LD E,L EXX LD C,A LD B,#60 !ASSM 7 LD D,B LD A,(DE) RLA RL (HL) LD D,A LD A,(BC) INC B RRCA RRCA RRCA RRA EXX LD L,B LD C,(HL) RR C EXX OR D LD D,L INC L LD (HL),A EXX LD A,C RRCA RRCA LD L,E LD C,(HL) RL C RLA RL C RLA EXX INC L LD (HL),A EXX LD L,D LD A,(HL) INC H RRCA RRCA RRCA OR C EXX INC L LD (HL),A LD L,D INC H !CONT LD D,B LD A,(DE) RLA RL (HL) LD D,A LD A,(BC) RRCA RRCA RRCA RRA EXX LD L,B LD C,(HL) RR C EXX OR D INC L LD (HL),A EXX LD A,C RRCA RRCA LD L,E LD C,(HL) RL C RLA RL C RLA EXX INC L LD (HL),A EXX LD L,D LD A,(HL) INC H RRCA RRCA RRCA OR C EXX INC L LD (HL),A; 4&5&6&7&8 INC L PXS1 LD H,0 EX DE,HL EXX POP HL INC L JP PXSB DL> так вот, это есть медленно :( DL> моя процедура печатает DL> со скоростью 55 тактов/байт экрана (правда, она печатает не на DL> экран, а в буфер. выброс буфера на экран идет со скоростью 11 DL> тактов/байт. если бы я делал прямо на экран, было бы 57 тактов/байт. DL> а если ее еще и оптимизировать под экран, может, еще быстрее. сейчас DL> она оптимизирована под буфер). моя процедура традиционно жрет одну DL> банку под фонт :) Я не могу такое позволить. Если загружа- емый текст занимает 255 сек. (4 банка), еще один банк под таблицы. DL> если очень надо, могу заслать. разбираться в ней еще сложнее :) Так отчего-же не заслал? Засылай в эху. Кому надо - тот разберется. И мне будет интересно. DL> только один вопрос - ты ее так в тексте и пишешь? DL> это неправильно. слишком много памяти уходит. DL> надо было написать процедуру, которая создаст эту программу DL> в памяти. а размер этой процедуры был бы байт 150, наверное. Когда в программе объем памяти лимити- рован, это не имеет смысла. Конечно в расчете на то, что размер тек- ста = 255 секторов. В моей проге 4 фонта 32,42,51,64 символа. И вместе они занимают пол банка. Есть вариант: каждый раз распаковывать фонты, инсталлировать новые процедуры печати.. Hе знаю кому подойдет такой вариант... А так, можно. В моем буте так сделано. Всего доброго, PHOENIX. -+- ZXASM 3.0

от: Yaroslav Kozlov
кому: Dmitry Lomov
дата: 24 May 1998
Привет, Dmitry ! YK>> хотите могу првести прием скроллинга YK>> (не POP HL:LD (XX),HL). Я то у себя DL> LD DE,....:PUSH DE Так 255 секторов не проскроллишь... Есть способ, по моему 211 тактов/16 байт. Он чуть помедленней POP HL: LD (xx),HL, зато более управляем по циклу. в рег. HL - чтение по стеку, 'HL запись по стеку, ну и остальные регистры - буфер. А там догадаться несложно. Это в игре Wec le mans... YK>> В исходниках твоих сам черт ногу сломит! YK>> Искал я эту процедуру, хотел сравнить со YK>> своей. И не нашел. В EV 1.00 фонт по дру- DL> печать депачится программой SETUP, а запускается через PRLINE. Посмотрю еще, хотя я смотрел через мо- нитор. Всего доброго, PHOENIX. -+- ZXASM 3.0




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Заслуженным алкоголикам всех времен и народов посвещается - А мы все пьем и пьем, Чем больше в себя вольем, Тем дольше проживем!
Проза - Небо N 9.
Программистам - Быстрая процедура вычерчивания окружности.
Мозаика - Cheat'ы к программам: Rise Out, The Turn or XOR'EM.
Как это было - рассказ с дня рождения GAME BOY.

В этот день...   8 мая