┌---------------------------------------┐ │░░░░░░░░░░ Programming ░░░░░░░░░░░░│ └---------------------------------------┘ (C) PAWEL/RS To the programmer's library Fast and compact driver print 42 (..) characters per line For many months I was accompanied by the driver was improved and tested water 42 characters per line. In front of you is flawless product, and I hope from now on and I won't have to look at the medical Linearly printed text. The principle of using bath in this driver if you look into it very simple, you can even say a few a banal phrase: - “Like everything ingenious.” Of course I do not claim copyright, it was used in one way or another before, but I think I managed to achieve it best results with small size re programs. Well of course if you need even greater speed, then you can spin- draw conclusionsymbol in every possible position positions, according to my calculations it will take no more more than 500 bytes. You can also use ZX-ASM's method - output 4 at once symbol. To quickly calculate the SIM address ox in the font, a special one is used here format different from ZX-ASM's. Not- large font conversion procedure is given. The font should be positioned according to even address, that is, the address with the lowest byte equal to zero, just like the sign masks. I hope you understand that the driver must be compiled into a fast pas- crush. The program is typed in assembler ZX-ASMZ. Load the text, remove all non- necessary, perform the "Import" function. ;42 Symbols driver by Pawel/RS/NHG Print text, HL -Address (code 0 - end) WRITE LD A,(HL) INC HL AND A RET Z CP 32 JR C,WRIT2 WRIT1 PUSH HL CALL PRSYM POP HL JR WRITEProcessing control codes: ;(Only two control codes are given here, but nothing will stop you from adding yours) WRIT2 CP 13 JR Z,PR13 CP 22 JR Z,PR22 LD A,63 JR WRIT1 PR13 PUSH HL LD HL,(PSA) LD A,L AND 224 ADD A,#20 LD L,A JR NZ,PR13_1 LD A,H ADD A,8 LD H,A CP #58 JR C,PR13_1 LD H,#40 PR13_1 LD (PSA),HL XOR A LD(LBT),A POP HL JR WRITE PR22 LD A,(HL) INC HL PUSH DE PUSH HL CALL 3742POP DE LD A,(DE) INC DE ADD A,L LD L,A LD (PSA),HL XOR A LD(LBT),A POP HL EX DE,HL JP WRITE The driver itself, in the A-character code PRSYM LD HL,0 PSA EQU $-2 ;current screen address. LD E,A LS LD D,FONT/256 LBT EQU $+1:LD A,0 ;number of bits shifted AND A JP Z,LSb LD C,A N.E.G. SUB JPSSL-SSL+2 LD(JPSSL+1),A SLA C LD B,TABLS/256 LD A,(BC) LD (LS1+1),A INC C LD A,(BC) LD (LS2+1),ALD B,9 JP LSS RRCA RRCA RRCA RRCA RRCA RRCA RRCA RRCA SSL LD C,A LS1 AND 0 OR (HL) LD (HL),A INC L LD A,C LS2 AND 0 OR (HL) LD (HL),A DEC L INC H LSS LD A,(DE) INC D JPSSL DJNZ SSL LSбA ;сюда можно вставить вывод атриб. LD A,(LBT) ADD A,6 LD (LBT),A CP 8 RET C AND 7 LD(LBT),A LD HL,(PSA) INC L JP NZ,PRSЗ LD A,H ADD A,8 LD H,A PRSЗ LD (PSA),HL RET Untwisted character printing without shift, you can completely remove it or use a loop LSb LD A,(DE) INC D OR(HL) LD(HL),A INC H LD A,(DE) INC D OR(HL) LD(HL),A INC H LD A,(DE) INC D OR(HL) LD(HL),A INC H LD A,(DE) INC D OR (HL) LD(HL),A INC HLD A,(DE) INC D OR (HL) LD (HL),A INC H LD A,(DE) INC D OR (HL) LD (HL),A INC H LD A,(DE) INC D OR (HL) LD (HL),A INC H LD A,(DE) INC D OR (HL) LD (HL),A INC H JP LSбA По ровному адресу: FONT INSERT "Font10M" ;Ckohb.фонт Таблица, располагается по адресу с младшим байтом равным 0 (для быстрого расчета, но можно и по неровному адресу, предварительно подкорректировав расчет). TABLS DB %11111100,%00000000 DB%01111110,%00000000 DB %00111111,%00000000 DB %00011111,%10000000 DB %00001111,%11000000 DB %00000111,%11100000 DB %00000011,%11110000 DB %00000001,%11111000 If you need to print characters with attributes, then insert the following pro- tsedurku: LD HL,(PSA) LD A,H AND #18 RRCA RRCA RRCA ADD A,#58 LD H,A ATR EQU $+1:LD A,7 ;current attributes LD (HL),A By the way, the standard code for changing the attri- There are 16 bottles, the second byte contains the attribute. Exactly this format will support VIEW'er no- howl version of REAL COMMANDER. To print with the previous image cleared, I need several marriagesмодифицированная процедура: LS LD E,A LD D,FONT/256 PSA EQU $+1 LD HL,0 LBT EQU $+1:LD A,0 AND A JP Z,LSб LD C,A NEG SUB JPSSL-SSL+2 LD (JPSSL+1),A SLA C LD B,TABLS/256 LD A,(BC) LD (LS1+1),A CPL LD (LSЗ+1),A INC C LD A,(BC) LD (LS2+1),A CPL LD (LSЧ+1),A LD B,9 JP LSS RRCA RRCA RRCA RRCA RRCARRCA RRCA RRCA SSL LD C,A LD A,(HL) LSЗ AND 0 LD (HL),A LD A,C LS1 AND 0 OR (HL) LD (HL),A INC L LD A,(HL) LSЧ AND 0 LD (HL),A LD A,C LS2 AND 0 OR (HL) LD (HL),A DEC L INC H LSS LD A,(DE) INC D JPSSL DJNZ SSL LSбA LD A,(LBT) ADD A,6 LD (LBT),A CP 8 RET C AND 7 LD (LBT),A LDHL,(PSA) INC L JP NZ,PRSЗ LD A,H ADD A,8 LD H,A PRSЗ LD (PSA),HL RET Здесь заключено в цикл LSб LD B,8 LSбB LD A,(HL) AND %00000011 LD (HL),A LD A,(DE) INC D OR (HL) LD (HL),A INC H DJNZ LSбB JP LSбA КОНВЕРТОР ФОНТОВ ZX-ASM'а: ORG #6000 LD HL,FONT1 LD DE,FONT2 LD C,0 N1 LD B,8 PUSH DE N2 LD A,(HL) LD (DE),A INC HLINC D DJNZ N2 POP DE INC E DEC C JP NZ,N1 LD HL,FONT2 LD DE,#4000 LD BC,2048 LDIR JP 7997 ORG #8000 FONT1 INSERT "Font8" FONT2 EQU $ The program will convert and display the font, to record it, find out the value of the label FONT2 and go to TR-DOS and write it down (length 2048 bytes). P.S.: This driver was successfully used called in my latest program REAL COM- MANDER. If anyone else manages to get it speed up, then write to me or the editor newspapers LPRINT.
Share your thoughts about the article