Procedure for drawing a line

ZXNet echo conference «code.zx»

From Aleksandr Majorov To Han Solo 11 August 2000

Hello Han! 10 Aug 00 23:25, Han Solo -> All: [skipped] HS> I started doing general assembly language programming, me HS> interested in the subject. If anyone has any, please send me a message, at least HS> slow, although the fastest procedure, at your discretion. There’s no way to figure it out yourself! ;) I won’t explain anything. The pages are wildly old, I could barely find them :) The speed is not high IMHO... draw.asm and draw1.asm - I think I tested output speeds two segments per screen. Therefore, at the beginning there are synchro-HALTs and a border “timer” :) ╒═════════════════════════ Home draw.asm ═════════════════════════╕ ORG 25000 LOOP HALT LD B,0 DJNZ$ DJNZ$ DJNZ$ LD A,1 OUT(254),A LD B,10 LD C,20 LD D,30 LD E,40 CALL DRAW LD A,2 OUT(254),A LD B,0 ;Y1 LD C,0 ;X1 LD D,30 ;Y2 LD E,0 ;X2 CALL DRAW XOR A OUT(254),A LD A,#7F IN A,(#FE) RRCA JR C,LOOP RET DRAW LD A,D CP B JR NC,LL6515 PUSH DE PUSH BC POP DE POP B.C. LL6515 PUSH BC EXX POP B.C. ;CALCULATE THE ADDRESS OF THE STARTING POINT LD A,B AND A RRASCF RRA AND A RRA XOR B AND #F8 XOR B ; ADD A,#80 LD H,A LD A,C RLCA RLCA RLCA XOR B AND #C7 XOR B RLCA RLCA LD L,A ;ВЫЧИСЛЕHИЕ БИТА ТОЧКИ LD A,C AND #07 RLCA RLCA RLCA CPL OR #C7 LD (LL6525+1),A XOR A LL6525 SEP 7,A ;УСТ. БИТ ТОЧКИ LD D,A EXX LD A,D SUB B LD B,A LD D,0 JR Z,$+3 INC D LD A,E SUB C LD C,A LD E,0 JR Z,$+3 INC E JR NC,LL6544 LD E,#FF LD A,C NEG LD C,A LL6544 LD A,C CP B JR NC,LL654E LD L,C PUSH DE XOR A LD E,A JR LL6555 LL654E OR A RET Z LD L,B LD B,C PUSH DE LD D,0 LL6555 LD H,B LD A,B RRA LL6558 ADD A,L JR C,LL655E CP H JR C,LL6565 LL655E SUB H LD C,A EXX POP BCPUSH BC JR LL6569 LL6565 LD C,A PUSH THE EXX POP BC LL6569 XOR A XOR C JR Z,LL657C INC A JR NZ,LL6577 RLC D JR NC,LL657C DEC L JR LL657C LL6577 RRC D JR NC,LL657C INC L LL657C XOR A XOR B JR Z,LL6590 INC H LD A,H AND #07 JR NZ,LL6590 LD A,L ADD A,#20 LD L,A CCF SBC A,A AND #F8 ADD A,H LD H,A ;HАРИСОВАТЬ ТОЧКУ LL6590 LD A,D OR (HL) LD (HL),A EXX LD A,C DJNZ LL6558 POP OF RET ╘═════════════════════ Конец draw.asm ═════════════════════════╛ ╒════════════════════════ Hачало draw1.asm ══════════════════════════ SCR2 EQ #4000 ORG 25000 LOOP HALT LD B,0 DJNZ $ DJNZ $ DJNZ $ LD A,1 OUT (254),A LD H,1 LD L,20 LD D,30 LD E,40 CALL VECTOR LD A,2 OUT (254),A LD H,0 ;Y1 LD L,0 ;X1 LD D,30 ;Y2 LD E,0 ;X2 CALL VECTOR XOR A OUT (254),ALD A,#7F IN A,(#FE) RRCA JR C,LOOP RET ; наpисовать вектоp HL - DE VECTOR LD A,D SUB H JR NC,VEC1 NEG EX DE,HL VEC1 LD D,A ;D = X1-X2 ;H=X L=Y LD B,L LD A,L RLCA RLCA LD L,A LD A,H LD H,SCR2/512 ADD HL,HL LD C,A ;ВЫЧИСЛЕHИЕ БИТА ТОЧКИ LD A,C AND #07 RLCA RLCA RLCA CPL OR #C7 LD ($+5),A ; см. SET ?,A XOR A SET 7,A ;УСТ. БИТ ТОЧКИ LD C,A LD A,D OR A JP Z,V_ZX ;pазмеp по X=0,по Y-? LD A,E SUB B JP Z,V_PZ ; LX>0,LY=0 JP NC,V_PP ; LX>0,LY>0 ;------------------------------ V_PM NEG ; LX>0,LY<0 LD E,A CP D JR C,VPMX ; LX>0,LY<0,LX>LY VPMY LD A,D ; LX>0,LY<0,LY>LX LD B,E LD D,#FE ; деление pезмеpа по X на pазмеp по Y SPMY ADD A,A JR C,SPMY1 CP E JR NC,SPMY1 SLA D JR C,SPMY JP SPMY2 SPMY1 SUB E SLI D JR C,SPMY SPMY2 LD A,#80 ; pисование DPMY ADD A,D JR NC,DPMY1 RRC C JR NC,DPMY1 INC HL ;L DPMY1 EX AF,AF' LD A,L SUB 8 ;на стpокy вышеLD L,A JR NC,$+3 DEC H LD A,C OR (HL) LD (HL),A EX AF,AF' DJNZ DPMY RET VPMX LD B,D LD A,E LD E,#FE SPMX ADD A,A JR C,SPMX1 CP D JR NC,SPMX1 SLA E JR C,SPMX JP SPMX2 SPMX1 SUB D SLI E JR C,SPMX SPMX2 LD A,#80 DPMX ADD A,E JR NC,DPMX2 EX AF,AF' LD A,L SUB 8 ;на стpокy выше LD L,A JR NC,$+3 DEC H EX AF,AF' DPMX2 RRC C JR NC,DPMX3 INC HL ; L DPMX3 EX AF,AF' LD A,C OR (HL) LD (HL),A EX AF,AF' DJNZ DPMX RET ;------------------------------ V_ZX LD A,B SUB E RET Z JR C,VZP VZM LD B,A DZM LD A,L SUB 8 ;на стpокy выше LD L,A JR NC,$+3 DEC H DZM2 LD A,C OR (HL) LD (HL),A DJNZ DZM RET VZP NEG LD B,A DZP LD A,L ADD A,8 ;на стpокy ниже LD L,A JR NC,$+3 INC H DZP2 LD A,C OR (HL) LD (HL),A DJNZ DZP RET V_PZ LD B,D DPZ RRC C JR C,DPZ2 DPZ1 LD A,C OR (HL) LD (HL),A DJNZ DPZ RET DPZ2 INC HL ; L LD A,B SUB 8 JR C,DPZ1LD B,A LD A,(HL) OR 255 LD (HL),A RET Z JR DPZ2 ;------------------------------ V_PP LD E,A CP D JR C,VPPX VPPY LD A,D LD B,E LD D,#FE SPPY ADD A,A JR C,SPPY1 CP E JR NC,SPPY1 SLA D JR C,SPPY JR SPPY2 SPPY1 SUB E SLI D JR C,SPPY SPPY2 LD A,#80 DPPY ADD A,D JR NC,DPPY1 RRC C JR NC,DPPY1 INC HL ;L DPPY1 EX AF,AF' LD A,L ADD A,8 ;на стpокy ниже LD L,A JR NC,$+3 INC H DPPY3 LD A,C OR (HL) LD (HL),A EX AF,AF' DJNZ DPPY RET VPPX LD B,D LD A,E LD E,#FE SPPX ADD A,A JR C,SPPX1 CP D JR NC,SPPX1 SLA E JR C,SPPX JR SPPX2 SPPX1 SUB D SLI E JR C,SPPX SPPX2 LD A,#80 DPPX ADD A,E JR NC,DPPX3 EX AF,AF' LD A,L ADD A,8 ;на стpокy ниже LD L,A JR NC,$+3 INC H EX AF,AF' DPPX3 RRC C JR NC,DPPX4 INC HL ;L DPPX4 EX AF,AF' LD A,C OR (HL) LD (HL),A EX AF,AF' DJNZ DPPX RET ╘═════════════════════════ Конец draw1.asm ═════════════════════════╛ Aleksand

From Aleksandr Majorov To Han Solo 12 August 2000

Hello Han! 12 Aug 00 04:45, Han Solo -> Aleksandr Majorov: [skipped] AM>> There’s no way to figure it out! ;) HS> hmm.. people are different, and everyone wants to use their brains HS> different areas. yup, brains are different - liquid, gaseous :)) AM>> I won’t explain anything. The pages are wildly old, I could barely find them :) AM>> The speed is not high IMHO... HS> you are in vain. Beginners should always be helped, otherwise Spectrum HS> die. :-( What am I doing??????? HS> Well, in general, thank you for the procedures. I figured it out first, but HS> not with the second one yet, and it’s buggy. Run it yourself, you'll see. Yep, I told you that I studied it and improved it :))))) HS> If it’s not difficult, then explain in detail the help for the second HS> procedure. ;-) I don’t know Help myself :) I broke this procedure out from somewhere and studied it. Here it is, only in a different modification. This p/n works - I checked it now. Only after completion of work she immediately returns and therefore you may not see anything :)))) This test was created as part of the project "quick drawing of vectors, so that draw words" ;))))))) This is one of the first tests, so the speed maybe short... ╒═════════════════════════ Home vector.asm ═════════════════════════╕ ;SCALING OBJECTS ;objects are described by vectors (see end) ;data array is transferred to WORKSPACE ;multiplied by MAGX,MAGY, then drawn ;according to data from WORKSPASE ORG 50000 SCR2 EQU #8000 ;second screen TBIT EQU #7E00 ;bit table. ;(for drawing a point) THAS EQU #7F00 ;address table. START LD HL,TBIT LD A,#80 LD B,L STBIT LD (HL),A RRCA INC HL DJNZ STBIT LD A,SCR2/256 STHAS LD (HL),A INC A AND #F7 INC L DJNZ STHAS LD HL,WORKSP LD DE,WORKSP+1 LDBC,WORKSP-DATA LD(HL),0 LDIR LD A,#10 LD (SELM),A MAGS PUSH AF LD (MAGX),A ;scale X LD (MAGY),A ;scale Y ;scale = MAG/100 D.I. LD HL,SCR2 ;screen cleaning_2 LD DE,SCR2+1 LD BC,6143 LD(HL),L LDIR CALL NEWMAG ;zoom ;and drawing LD IY,#5C3A EI LD HL,SCR2 ;screen output LD DE,#4000 LD BC,6144 LD(HL),L LDIR POP AF ADD A,#10 ;next scale CP#10 JR NZ,MAGS RET NEWMAG LD IX,DATA LD IY,WORKSP LD E,#80LD A,(MAGX) NEG CALL MAGB LD C,H LD A,(SELM) LD E,A LD A,(MAGY) NEG CALL MAGB LD B,H IMAG LD A,(MAGY) LD E,A LD A,(IX+0) OR A JR NZ,SMAG OR (IX+1) JR NZ,SMAG0 OR (IX+2) OR (IX+3) JR Z,DRAW INC IX INC IX LD (IY+0),0 LD (IY+1),0 INC IY INC IY JR IMAG SMAG0 LD A,(IX+0) SMAG CALL MAGB LD A,B ADD A,H LD (IY+0),A LD A,(MAGX) LD E,A LD A,(IX+1) CALL MAGB LD A,C ADD A,H LD (IY+1),A INC IX INC IX INC IY INC IY JR IMAG MAGB EX AF,AF' ; LD A,E ;A=English OR A ;E=surface JR NZ,MAGB1 EX AF,AF' ;out : h = a*e LD H,A RET MAGB1 EX AF,AF' PUSH BC LD HL,0 LD D,H LD B,8 MAGB2 ADD HL,HL RLA JR NC,NMAGB ADD HL,DE ADC A,D NMAGB DJNZ MAGB2 POP BC RET ; pисование DRAW LD IX,WORKSP LD BC,#A000 ;equivalent of spell: b=Y,c=X DRAW1 LD A,(IX+0) ADD A,B LD L,A ;L=Y1+SMY , H=X1+SMX LD A,(IX+1) ADD A,C LD H,A SUB COR (IX+0) ;возвpат если 81+Y1=0 RET Z LD A,(IX+2) ADD A,B LD E,A ; E=Y2+SMY , D=X2+SMX LD A,(IX+3) ADD A,C LD D,A SUB C OR (IX+2) ;если X2+Y2=0 , то ;pисовать со следyющей точки JR Z,DRAW2 PUSH BC CALL VECTOR POP BC INC IX INC IX JR DRAW1 DRAW2 INC IX INC IX INC IX INC IX JR DRAW1 ; наpисовать вектоp HL - DE VECTOR LD A,D SUB H JR NC,VEC1 NEG EX DE,HL VEC1 LD D,A PUSH HL ; D = X1-X2 LD A,H ; H=X,L=Y. LD (SBIT+1),A AND #F8 RRCA RRCA RRCA LD B,A LD A,L RLCA RLCA AND #E0 OR B LD H,THAS/256 ;HL=ADDR POINT LD H,(HL) ;C=BIT LD L,A SBIT LD A,(TBIT) LD C,A EX (SP),HL ;выбоp п/п pисования ;в зависимости от вектоpа LD A,D OR A JP Z,V_ZX ;pазмеp по X=0,по y-? LD A,E SUB L JP Z,V_PZ ; LX>0,LY=0 JP NC,V_PP ; LX>0,LY>0 V_PM NEG ; LX>0,LY<0 LD E,A CP D JR C,VPMX ; LX>0,LY<0,LX>LY VPMY LD A,D ; LX>0,LY<0,LY>LX LD B,E LD D,#FE;деление pазмеpа по X на pазмеp по Y SPMY ADD A,A JR C,SPMY1 CP E JR NC,SPMY1 SLA D JR C,SPMY JR SPMY2 SPMY1 SUB E SCF RL D JR C,SPMY SPMY2 LD A,#80 POP HL ; pисование DPMY ADD A,D JR NC,DPMY1 RRC C JR NC,DPMY1 INC L DPMY1 EX AF,AF' LD A,H AND 7 JR Z,DPMY2 DEC H JR NDPMY DPMY2 LD A,L SUB #21 INC A LD L,A LD A,H SBC A,0 OR 7 LD H,A NDPMY LD A,C CONT1 OR (HL) LD (HL),A EX AF,AF' DJNZ DPMY RET VPMX LD B,D LD A,E LD E,#FE SPMX ADD A,A JR C,SPMX1 CP D JR NC,SPMX1 SLA E JR C,SPMX JR SPMX2 SPMX1 SUB D SCF RL E JR C,SPMX SPMX2 LD A,#80 POP HL DPMX ADD A,E JR NC,DPMX2 EX AF,AF' LD A,H AND 7 JR Z,DPMX0 DEC H JR DPMX1 DPMX0 LD A,L SUB #21 INC A LD L,A LD A,H SBC A,0 OR 7 LD H,A DPMX1 EX AF,AF' DPMX2 RRC C JR NC,DPMX3 INC L DPMX3 EX AF,AF' LD A,C CONT2 OR (HL) LD (HL),A EX AF,AF' DJNZ DPMX RET V_ZX LD A,L POP HL SUB E RET Z JR C,VZP VZM LD B,A DZM LD A,H AND 7 JR Z,DZM1 DEC H JR DZM2 DZM1 LD A,L SUB #21 INC A LD L,A LD A,H SBC A,0 OR 7 LD H,A DZM2 LD A,C CONT3 OR (HL) LD (HL),A DJNZ DZM RET VZP NEG LD B,A DZP LD A,H CPL AND 7 JR Z,DZP1 INC H JR DZP2 DZP1 LD A,L ADD A,#21 DEC A LD L,A LD A,H ADC A,0 AND #F8 LD H,A DZP2 LD A,C CONT4 OR (HL) LD (HL),A DJNZ DZP RET V_PZ LD B,D POP HL DPZ RRC C JR C,DPZ2 DPZ1 LD A,C CONT5 OR (HL) LD (HL),A DJNZ DPZ RET DPZ2 INC L LD A,B SUB 8 JR C,DPZ1 LD B,A LD A,(HL) CPL LD (HL),A RET Z JR DPZ2 V_PP LD E,A CP D JR C,VPPX VPPY LD A,D LD B,E LD D,#FE SPPY ADD A,A JR C,SPPY1 CP E JR NC,SPPY1 SLA D JR C,SPPY JR SPPY2 SPPY1 SUB E SCF RL D JR C,SPPY SPPY2 LD A,#80 POP HL DPPY ADD A,D JR NC,DPPY1 RRC C JR NC,DPPY1 INC L DPPY1 EX AF,AF' LD A,H CPL AND 7 JR Z,DPPY2 INC H JR DPPY3 DPPY2 LD A,L ADD A,#21 DEC A LD L,A LD A,H ADC A,0 AND #F8 LD H,A DPPY3 LD A,C CONT6 OR (HL) LD (HL),A EX AF,AF' DJNZ DPPY RET VPPX LD B,D LD A,E LD E,#F8 SPPX ADD A,A JR C,SPPX1 CP D JR NC,SPPX1 SLA E JR C,SPPX JR SPPX2 SPPX1 SUB D SCF RL E JR C,SPPX SPPX2 LD A,#80 POP HL DPPX ADD A,E JR NC,DPPX3 EX AF,AF' LD A,H CPL AND 7 JR Z,DPPX1 INC H JR DPPX2 DPPX1 LD A,L ADD A,#21 DEC A LD L,A LD A,H ADC A,0 AND #F8 LD H,A DPPX2 EX AF,AF' DPPX3 RRC C JR NC,DPPX4 INC L DPPX4 EX AF,AF' LD A,C CONT7 OR (HL) LD (HL),A EX AF,AF' DJNZ DPPX RET ; pабочие массивы SELM DB 0 MAGX DB 0 ;масштаб по X MAGY DB 0 ;масштаб по Y ;pисyнок ;фоpмат данных: ;вектоpа описываются дpyг за дpyгом ;конец пеpвого вектоpа - начало втоpого. ; Y0,X0 - Y1,X1 - Y2,X2 - ... ; +0,+1 +2,+3 ; +0,+1 +2,+3 ;едли +0,+1=0 то конец данных ;если +2,+3=0 то pисовать ;со след. точки (+4,+5 - +6,+7) DATA DB 0,8,31,8,31,15,8,15 DB 16,23,16,24,8,32,31,32DB 31,39,0,39,0,32,8,24 DB 8,23,0,15,0,7,0,0 DB 0,0,0,0,0,0 WORKSP EQU $ ╘═════════════════════════ Конец vector.asm ═════════════════════════╛ Aleksand

From Aleksandr Majorov To Han Solo 15 August 2000

Hello Han! 14 Aug 00 04:28, Han Solo -> Aleksandr Majorov: [skipped] AM>> We need to strengthen our brains! ;) HS> Tell me, how should they be strengthened? ;) Smart books to read. Try to put the calculator aside and do the math in your head. Try to come up with an algorithm yourself..... [skipped] AM>> Of course you can, damn it, is it really hard to guess? AM>> Instead of increasing MAG?? we need to reduce it. AM>> And draw objects small. HS> Why are you so angry Who am I?????? HS> I was joking. :))) HS> So there was a question for filling. :)) Well, who got enough sleep where? ;) [skipped] AM>> It's lazy to look for fellows. AM>> What do you need? HS> Everything is needed. I will now be a collector of source codes. :) You already have about 10 disks ;))))))) HS> Don't be lazy. Just enter the search mask ********.asm, and let's go HS> your Windows is looking for. And businesslike. :))))))))) There are almost no fellows at the PC. Everything is on live discs. And on the PC everything is in archives and on companies :))))) HS>>> I’m also interested in learning about chunks, their format, what they are, HS>>> typy pypy.... AM>> These are small 2x2 point objects that are AM>> one “big” dot with 4 gradations of brightness :))) HS> FAQ????? :)))) Did you understand what you said..... Yes, I got it :) HS> Seriously, it’s not clear what you wrote above. I repeat for tankers :) This is an object consisting of 4 points, a 2x2 square. These 2x2 points are considered one "point" and are perceived visually with one “point”. Thus, the screen does not consist of 256x192 pixels, but only 128x96 "big dots". Each of these “big dots” can have 4 brightness levels, without using attributes: ┌─┬─┐ ┌─┬─┐ ┌─┬─┐ ┌─┬─┐ │ │ │ │Х│ │ │Х│ │ │Х│Х│ ├─┼─┤ ├─┼─┤ ├─┼─┤ ├─┼─┤ │ │ │ │ │ │ │ │Х│ │Х│Х│ └─┴─┘ └─┴─┘ └─┴─┘ └─┴─┘ In principle, you can try to create another brightness level ┌─┬─┐ │Х│ │ ├─┼─┤ │Х│Х│ └─┴─┘ But most likely there will be no sense from this. That's actually the whole "theory". Then everything depends on the method of storing point images: one byte - one point %000000aa and up to one byte - four dots %ddccbbaa And a way to quickly display data from an array on the screen. (Stack, two screens, ...) [skipped] AM>> Break all sorts of demos - there's plenty of it. HS> Well said. If it were clear there, I wouldn’t ask. HS> Maybe I don't know how to break? :)What is there to know? In extreme cases, there is enough shadow work :) I extracted the necessary items and dumped them on disk. STS disassembled and sit and study! How many effects have I pulled out this way... Alexand

From Aleksey Malov To Han Solo 15 August 2000

Greetings, Han! Sun 13 Aug 2000 at 01:44:16 Han Solo and Aleksandr Majorov were talking on the topic The procedure for drawing a line. HS> I'm also interested to know HS> about chunks, their format, what they are, a lot of money... Most chunky 2D effects (tunnels, plasma, voxels, bump mappings and others) can be done in multicolor and two to three times faster than chunks originals. If you don't believe me, come to CC'000 and watch our demo Tryptimine Dream. You've never seen anything like this on the Spectrum! Happy Han! Vivid/Brainwave^X-Project was with you.