:: СОДЕРЖАНИЕ НОМЕРА
:: Газетные рубрики
:: АВТОРЫ
:: Поиск
:: Поддержка проекта
Webmoney:
|
:: №31 (04.07.2007) Просмотров: 4656
Рубрика: Этюды. Номер: №31 (04.07.2007). Этюды(c) Алексей ЧервовПроцедура печати 85 символов в строке. Печать происходит на двух экранах при помощи стандартного линейного двухкилобайтного шрифта на 64 символа в строке, прижатого к правому краю. Весь код занимает 256 байт. font EQU #60;Старший байт адреса шрифта. ORG #8000 LD A,23 LD BC,#7ffd OUT (C),A ;Очистка двух экранов (c) tiboh LD HL,#4000 LD D,L LD E,L cls LD (HL),D SET 7,H LD (HL),E RES 7,H INC HL LD A,H CP #58 JR C,cls LD DE,#4445;Атрибуты CP #5b JR NZ,cls LD DE,text; Адрес текста, в конце 0 LD HL,#4000;Адрес экрана CALL print key LD A,23 HALT XOR 8 LD (key+1),A LD BC,#7ffd OUT (C),A LD A,#7f IN A,(#fe) RRA JR C,key RET print LD B,font+1 PUSH DE,HL,HL EXX POP HL SET 7,H EXX CALL pr POP HL,DE INC H LD A,H AND 7 JR NZ,$+11 LD A,L SUB #e0 LD L,A SBC A,A AND #f8 ADD A,H LD H,A INC B LD A,B CP font+8 JR C,print+2 RET pr LD A,(DE) OR A RET Z LD C,A LD A,(BC) RLCA LD C,A AND 96 LD (HL),A LD A,C EXX AND 128 LD (HL),A EXX INC DE LD A,(DE) OR A RET Z LD C,A LD A,(BC) RLCA RLCA LD C,A AND 12 OR (HL) LD (HL),A LD A,C EXX AND 16 OR (HL) LD (HL),A EXX INC DE LD A,(DE) OR A RET Z LD C,A LD A,(BC) RRCA LD C,A AND 1 OR (HL) LD (HL),A LD A,C AND 128 INC L LD (HL),A LD A,C EXX AND 2 OR (HL) LD (HL),A INC L EXX INC DE LD A,(DE) OR A RET Z LD C,A LD A,(BC) AND 48 OR (HL) LD (HL),A LD A,(BC) EXX AND 64 LD (HL),A EXX INC DE LD A,(DE) OR A RET Z LD C,A LD A,(BC) RLCA LD C,A AND 6 OR (HL) LD (HL),A LD A,C EXX AND 8 OR (HL) LD (HL),A EXX INC DE LD A,(DE) OR A RET Z LD C,A LD A,(BC) RLCA RLCA LD C,A AND 192 INC L LD (HL),A LD A,C EXX AND 1 OR (HL) LD (HL),A INC L EXX INC DE LD A,(DE) OR A RET Z LD C,A LD A,(BC) RRCA LD C,A AND 24 OR (HL) LD (HL),A LD A,C EXX AND 32 LD (HL),A EXX INC DE LD A,(DE) OR A RET Z LD C,A LD A,(BC) AND 3 OR (HL) LD (HL),A LD A,(BC) EXX AND 4 OR (HL) LD (HL),A INC L EXX INC L INC DE JP pr Печать десятичных чисел без нуля. 59 байт. LD IX,Буфер 5 байт LD HL,Число LD BC,0 LD DE,0-10000 CALL num LD DE,0-1000 CALL num LD DE,0-100 CALL num LD DE,0-10 CALL num LD A,L JR num2 num ADD HL,DE INC B JR C,$-2 DEC B SBC HL,DE LD A,B OR C RET Z LD C,A LD A,B num2 ADD A,48 LD (IX),A INC IX LD B,0 RET (c) 2k by groove^tnl На 0...240 секторов вперед. IN: DE,текущий_трек/сектор B,количество_перепрыгиваемых_секторов OUT: DE = новые_трек/сектор LD A,B ADD A,E LD B,A AND #F LD E,A LD A,D DUP 4 ;Повторить SRL B ;блок 4 раза EDUP ADD A,B LD D,A RET На 0...65520 секторов вперед. IN: DE,текущий_трек/сектор HL,количество_перепрыгиваемых_секторов OUT: DE = новые_трек/сектор LD B,0 LD C,E ADD HL,BC LD A,L AND #F LD E,A DUP 4 ;Повторить RR H ;блок 4 раза RR L EDUP LD A,L ADD A,D LD D,A RET (c) SAM style На 0...256 секторов назад. ld de,track_sector ld b,delta ld a,e sub b ld e,a ret nc lab1 dec d add a,16 jr nc,lab1 ld e,a ret На 0...65520 секторов назад. ld de,track_sector ld hl,delta ld a,l and 15 rr h rr l sra h rr l sra h rr l sra h rr l ld h,l ld l,a ld a,e sub l jr nc,lab1 dec d lab1 and 15 ld e,a ld a,d sub h ld d,a ret |