From 34d100b807ac77a3ec0c23ba8d5514254bad68e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Thu, 15 Jun 2017 17:36:25 +0200 Subject: [PATCH] Kernel version 0.9 : DHGR.DRV, primitives, LIBGFX : DrawLine working.... --- DRV/DHGR.DRV.S.txt | 233 ++++++++++++++++++++++++++++++++++++---- Floppies/A2OSX.BOOT.po | Bin 143360 -> 143360 bytes Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes LIB/LIBGFX.S.txt | 216 +++++++++++++++++++++++++++++++------ SBIN/DESKTOP.S.txt | 40 +++++-- 6 files changed, 431 insertions(+), 58 deletions(-) diff --git a/DRV/DHGR.DRV.S.txt b/DRV/DHGR.DRV.S.txt index 0863f024..d5e8a9e3 100644 --- a/DRV/DHGR.DRV.S.txt +++ b/DRV/DHGR.DRV.S.txt @@ -17,6 +17,7 @@ AUTO 6 ZPBase .EQ ZPDRV ZPShiftLo .EQ ZPDRV+2 ZPShiftHi .EQ ZPDRV+4 +ZPCount .EQ ZPDRV+6 *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -262,20 +263,20 @@ SETPIXEL >STYA ZPBase SETPIXEL.MONO ldx CB.Cache+S.CB.X1+1 Get X Hi byte.... lda DIV7.lo,x - sta .2+1 + sta .1+1 lda DIV7.hi,x - sta .2+2 + sta .1+2 lda MOD7.lo,x - sta .4+1 + sta .2+1 lda MOD7.hi,x - sta .4+2 + sta .2+2 lda DIV7.BASE,x ldx CB.Cache+S.CB.X1 clc -.2 adc $ffff,x DIV7 : x = X.LO, a = X DIV 7 +.1 adc $ffff,x DIV7 : x = X.LO, a = X DIV 7 pha save X DIV 7 lsr @@ -290,7 +291,7 @@ SETPIXEL.MONO ldx CB.Cache+S.CB.X1+1 Get X Hi byte.... tay sta $c000,y -.4 ldy $ffff,x MOD7 : x = X.LO, y = X MOD 7 +.2 ldy $ffff,x MOD7 : x = X.LO, y = X MOD 7 lda CB.Cache+S.CB.OP beq .5 @@ -322,8 +323,8 @@ SETPIXEL.C16 lda CB.Cache+S.CB.X1 ror lsr CB.Cache+S.CB.X1+1 ror - tay Y=CX/4 (range 0->139) - lda DIV7.0,y A=CX/4/7 (range 0->19) + tay Y=X/4 (range 0->139) + lda DIV7.0,y A=X/4/7 (range 0->19) asl times 2 (range 0->38) @@ -424,9 +425,56 @@ HLINE.I lda CB.Cache+S.CB.MODE bit #S.CB.MODE.C16 bne HLINE.C16 -HLINE.MONO +HLINE.MONO lda CB.Cache+S.CB.X2 Count=X2-X1 + sec + sbc CB.Cache+S.CB.X1 + eor #$ff + sta ZPCount + lda CB.Cache+S.CB.X2+1 + sbc CB.Cache+S.CB.X1+1 + eor #$ff + sta ZPCount+1 + + ldx CB.Cache+S.CB.X1+1 Get X Hi byte.... + lda DIV7.lo,x + sta .1+1 + lda DIV7.hi,x + sta .1+2 + + lda MOD7.lo,x + sta .2+1 + lda MOD7.hi,x + sta .2+2 + + lda DIV7.BASE,x + ldx CB.Cache+S.CB.X1 + + clc +.1 adc $ffff,x DIV7 : x = X.LO, a = X DIV 7 + + pha save X DIV 7 + lsr + ldy CB.Cache+S.CB.Y1 + clc + adc BASEL,y setup line Base Ptr (A=Col) + sta ZPBase + lda BASEH,y + sta ZPBase+1 + ply + lda COL.BANK,y + tay + sta $c000,y +.2 ldy $ffff,x MOD7 : x = X.LO, y = X MOD 7 + + + + + + + + HLINE.C16 rts *-------------------------------------- @@ -440,8 +488,163 @@ VLINE >STYA ZPBase dey bpl .1 - + sta SET80STORE +VLINE.MONO ldx CB.Cache+S.CB.X1+1 Get X Hi byte.... + + lda DIV7.lo,x + sta .1+1 + lda DIV7.hi,x + sta .1+2 + + lda MOD7.lo,x + sta .2+1 + lda MOD7.hi,x + sta .2+2 + + lda DIV7.BASE,x + ldx CB.Cache+S.CB.X1 + + clc + +.1 adc $ffff,x DIV7 : x = X.LO, a = X DIV 7 + sta XDIV7 save X DIV 7 + +.2 lda $ffff,x MOD7 : x = X.LO, y = X MOD 7 + sta XMOD7 + + lda CB.Cache+S.CB.OP + beq .4 + + ldx CB.Cache+S.CB.Y1 + +.3 lda XDIV7 + tay + lsr + clc + adc BASEL,x + sta ZPBase + lda BASEH,x + sta ZPBase+1 + + ldx COL.BANK,y + sta $C000,x + + ldy XMOD7 + lda (ZPBase) XOR + eor Mono.Masks,y y = mod 7 + sta (ZPBase) + + inc CB.Cache+S.CB.Y1 + ldx CB.Cache+S.CB.Y1 + cpx CB.Cache+S.CB.Y2 + bne .3 + + sta CLR80STORE + rts + +.4 lda (ZPBase) + ldx CB.Cache+S.CB.COLOR get color + bne .6 + + and Mono.NMasks,y includes And $7F for mono + sta (ZPBase) + sta CLR80STORE + rts + +.6 and #$7F switch back this byte to mono + ora Mono.Masks,y + sta (ZPBase) + sta CLR80STORE + rts + +VLINE.C16 lda CB.Cache+S.CB.X1 + lsr CB.Cache+S.CB.X1+1 divide by 4 + ror + lsr CB.Cache+S.CB.X1+1 + ror + tay Y=X/4 (range 0->139) + lda DIV7.0,y A=X/4/7 (range 0->19) + + asl times 2 (range 0->38) + + ldx CB.Cache+S.CB.Y1 + adc BASEL,x setup line Base Ptr (cc by asl) + sta ZPBase ZPBase now point to first of... + lda BASEH,x + sta ZPBase+1 ...the 4 columns + + lda MOD7.0,y get MOD + + asl times 4 to compute index in MASK tables + asl + tax set in X for Masks,NMasks + + lda CB.Cache+S.CB.COLOR + + asl times 4 to compute index in PIXELS table + asl + tay + + lda Color.Masks,x bits in 1st byte to light? + beq .10 + and Color.Pixels,y apply color + sta GBYTE + + sta SETPAGE2 + + lda (ZPBase) + and Color.NMasks,x reset existing pixel, + ora GBYTE + sta (ZPBase) + +.10 inx + iny + + lda Color.Masks,x + beq .11 + and Color.Pixels,y apply color + sta GBYTE + + sta CLRPAGE2 + + lda (ZPBase) + and Color.NMasks,x reset existing pixel, + ora GBYTE + sta (ZPBase) + +.11 inc ZPBase + inx + iny + + lda Color.Masks,x + beq .12 + and Color.Pixels,y apply color + sta GBYTE + + sta SETPAGE2 + + lda (ZPBase) + and Color.NMasks,x reset existing pixel, + ora GBYTE + sta (ZPBase) + +.12 inx + iny + + lda Color.Masks,x + beq .13 + and Color.Pixels,y apply color + sta GBYTE + + sta CLRPAGE2 + + lda (ZPBase) + and Color.NMasks,x reset existing pixel, + ora GBYTE + sta (ZPBase) + +.13 sta CLR80STORE rts *-------------------------------------- * FILLRECT @@ -516,16 +719,10 @@ Shifthi.hi .BS 7 *-------------------------------------- CB.Cache .BS S.CB *-------------------------------------- -CX .BS 2 -CY .BS 1 -COL .BS 1 +XDIV7 .BS 1 +XMOD7 .BS 1 GBYTE .BS 1 *-------------------------------------- -SB.StartPage .BS 1 -SB.Page .BS 1 -SB.StartCol .BS 1 -SB.Col .BS 1 -*-------------------------------------- STAT .DA #0 .DA #0,#0,#0 >PSTR "Apple II DHGR" diff --git a/Floppies/A2OSX.BOOT.po b/Floppies/A2OSX.BOOT.po index 1b6deb6fba717cc8ae803c6956a119083ba96efe..e9ef645cc018bdd686556e7842b1c3b891d3eeb6 100644 GIT binary patch delta 4888 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 delta 4889 zcma(U3wTr2`J9{NHVu#l5E^QQd)lOrP_CsuR{7>;>4QevG&Gl&(;56=;!p?-aiT1R z5`~Ui+5{{p#hQ(by57>qY%P+&#MKr*SeR~eD&Gnyg3=n0=R~^y-Xu+$Y~L2>x##@v z|D6AEPSt?2YCzeRDwm%~%Nyfj-bM@x3?jc3f6&y^Ne znu@s)H~j?oa!wY*crl)FhQyf178rw^^m6dU5jkPWW!J0&k)sPjmK>NgD-n6rqcto< z+2s}UEyWQZ=wE^%%9u@E2&ZN4XjA9d71SXHAz?hzqG8-64Dz~B&0br&>PNQphZ_TF z=QWqy$ZJb)wCTKoG!=k#08T%z`C0_)8f|)SAYBCO0jvvw^^LX+Z$Kx4GXSg)fioIy zncje21ZM&`Lj)T@N@k-i%NxiL;aLFB43TFw+OoZYOc9(7;4D}7XJ+lewEnd7X|5@}q>_Vpx@MowBh!uFjXkoix$6NFUK_!ygV z%zqQ+Q%U1e*7fA68TJ+I7R?PF9}%8mw<`TBT5YU%9?SO2X~ z?KQNnVznEFhf5!BSP=xKt5WUvrWgVfAGqJZSF`;5BOU$+Z)cCIW}W`?ebE>$3Ue+77vfs> zKiEV^td5hL{Y{DO{@v1!1-Aho+ zVD}A5_QHl=fj{44_bpmx-?&Mdcge9*Zm)u3EdDZ>3?_@oXC4gw`!Q2P5Yk%tD&nq! z+~e(J+pmb$x~GcdTea4vG0YPrUvQGaTEcH6f{P4pC;TRos~WeF_)FZWWzP|zmb5xa zEf6?~u${EJNG;H~h)_pbcaYjT!tWq&Nd|#zv#6t*_@}s2K!?auEn?xjSwx<25cgyT5W+?xVqPM`CL*FS%vD5oXz5QE3u9eECM=oj)8MJ7*C(mwGZsBAq|g@#cV_USp2w0jVamYmtK}m z!ZQKWNn2`uy^XKkURUpQ?b!KB10XKpt`wY_D#c#|b3abCzlsvkw3xEG3+YQa&Ri5c zMscKn17-DQOj+H9CL2xAmm(JhdLIO!J9w)QZwXRh?LwJz3oA?|#yMem^zR@5Kac{@ z9tl9uI;WW97Kf=o>+eD9tT?Tc$|~kWUngh*w3fz%JxG&cIZE0Aq(F)E=y0}!bzE^7 zbg~g|=|6}qB&L_`LRm$nh33LC6Bm+5cZ0Y;$A|-IMa7o6T!lHTmp%m2#>e>(M!Qth z98W%`l)GQs)42EbrZ?b_ZeY(3v4(R07Us9H$AoE_XMeM_=*A21u!4HCC5ZYdrsb_| z?H#bXg*`vRN~-g%AjXE}@~*dg4oaA=by!K0cS32I!<=MTl1ttr?~udfIQg7hB$vod zqG*`$B2KZNCc>ReOA6!O1SwjFt+i(e-%Yl4ks9|{<}D)J#k8b`kYk6A65%N6&-Y&l zJXCv@@CV7Z9s*=<6Sop*-3SK9%+0w?DebxZInoE?m(uu^G=5D4!n8095Wh`?Go~c^NcJuymMLyC0KSDHG7knSsM@k%MEiWz~<-{kTb#|QAbRY{GCW$)*WKYKV zI-z`|8cEdjKfyRKb<~aD*L}MhQxrbju;hLGdZ&i6V$T-nzwhwvDal^L>zWXt)`0%fP`}@a${tkQEu!{P}r$N#~Sl)FIW2zg!i-%>{*MNKR z9rn{;!m0TEDGSCz*eUufoN-4&jHM{cXdcx9==0D44#eDhd`MSZWE?pW5J_J|W6-M; zL}^itLJZX61*3NR8W^`dc7IS>;Yd&gxA6uX-u*F;J0D6fjD&$mN8g4+Src=1b{`r) z5>t{i@Bp5jcSW>HPWwOS#2S_R$KgKsj;Qp)KHMS5_>v z6bIjaU|k|;b;KP+asdZzv0~(vO{;*+8ZnL$W5?%$XRD_Vdc&E|zc>e{4PD~|R?5D- z@D(h+$DWTdt@?U!=$pW$%imtP3b1RqYXB=J*lU6=qg2MkR5H~}4TF%|1|6aw2lUO@ zy+(XXi5;UY*)d~tPEC`l-T;kYinlExSj?@>!(z3~w>IH+wn=r;;MaGs**Gw*N!HH# zr!-ORY_CqNmrk89g=x_SpJyV2Tg^;K@M^6;(Jy}tELwv-mocTde)C`7-GU{=?lr8! z-@7*6l>#~N1@=&sxZ^H}dQT#ykjv==B`j`vlBfjd4W<3gP#e_2?Q|?rlRL?M#6&o< ziimg9JxJY5@mTGi-HaL9TbEQCWzF(@D->|GS}N;_!H*I?p@u2GCq;fuut)NV>TODO zvz#BR=Etd<5X{D_x7ju7UR^VC>fCkWZXMt!s<%y0i%qho3Du`HYxv1wZ{}0Tac{3~-#wx&`|_N+CV8)}J=dw*qPZSws-ih>e*J-v)u^7IPEv}!F=wra`JWlPyd z*F3rsnU<}6Zq=F zfxeUh+L1rKMS?c${{+7P=U^!riKwZ}Y^I0-bN`S158D1;4DJrx!Ws;ZuH6mt$&^;Q T<#scZA<9EjZDg844NUqsY_6-R diff --git a/Floppies/A2OSX.BUILD.po b/Floppies/A2OSX.BUILD.po index 918848d9089ac39a74c8db392de33c7688c484f2..d780b77266eff5e3ad232eddadd2f6bbece80434 100644 GIT binary patch delta 2580 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 C56&O} diff --git a/Floppies/A2OSX.SRC.po b/Floppies/A2OSX.SRC.po index a262a51ea988a4d9a9fb15a6f445cca84dc5dd35..29187223bac82bdd02f11aab9c14d57df2d0ed14 100644 GIT binary patch delta 16045 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 DL(2My delta 14248 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 diff --git a/LIB/LIBGFX.S.txt b/LIB/LIBGFX.S.txt index f90b0470..fd940f5c 100644 --- a/LIB/LIBGFX.S.txt +++ b/LIB/LIBGFX.S.txt @@ -120,19 +120,26 @@ DrawLine ldy #S.CB.Y2+1 jmp GoDevGFX DX=0 : VLIN Y1,Y2 At X1 .1 >SWAP16 CB.Cache+S.CB.X1,CB.Cache+S.CB.X2 - >SWAP16 CB.Cache+S.CB.Y1,CB.Cache+S.CB.Y2 - >NOT16 DX swap X1/X2, Y1/Y2, set DX=-DX +* >SWAP16 CB.Cache+S.CB.Y1,CB.Cache+S.CB.Y2 + lda CB.Cache+S.CB.Y1 + ldx CB.Cache+S.CB.Y2 + stx CB.Cache+S.CB.Y1 + sta CB.Cache+S.CB.Y2 -.2 stz IY + >NOT16 DX swap X1/X2, Y1/Y2, set DX=-DX (DX positive) - sec +.2 lda #1 + sta IY lda CB.Cache+S.CB.Y2 + sec sbc CB.Cache+S.CB.Y1 sta DY - lda CB.Cache+S.CB.Y2+1 - sbc CB.Cache+S.CB.Y1+1 +* lda CB.Cache+S.CB.Y2+1 + lda #0 +* sbc CB.Cache+S.CB.Y1+1 + sbc #0 sta DY+1 DY% = Y2% - Y1% bmi .3 DY < 0 ... @@ -144,25 +151,28 @@ DrawLine ldy #S.CB.Y2+1 jmp GoDevGFX DY=0 : HLIN X1,X2 At Y1 .3 >NOT16 DY set DY=-DY - dec IY + lda #$ff + sta IY set IY=-1 .4 ldx #DEVMGR.GFX.SETPIXEL jsr GoDevGFX - sec lda DX + sec sbc DY - sta DXY + tax lda DX+1 - sbc DY+1 - sta DXY+1 +* sbc DY+1 + sbc #0 bmi DrawLine.IncY DY is greater than DX, we will increase on Y axis - ora DXY - bne DrawLine.IncX DY is lower than DX, we will increase on X axis + txa + beq DrawLine.IncXY DX=DY, go inc X & Y + + jmp DrawLine.IncX DY is lower than DX, we will increase on X axis -DrawLine.XY lda DX DX=DY +DrawLine.IncXY lda DX DX=DY eor #$ff sta Counter lda DX+1 @@ -178,23 +188,12 @@ DrawLine.XY lda DX DX=DY bne .3 inc CB.Cache+S.CB.X1+1 -.3 bit IY - bmi .4 - - inc CB.Cache+S.CB.Y1 - bne .5 - inc CB.Cache+S.CB.Y1+1 - bra .5 - -.4 sec - lda CB.Cache+S.CB.Y1 - sbc #1 +.3 lda CB.Cache+S.CB.Y1 Y1=Y1+IY + clc + adc IY sta CB.Cache+S.CB.Y1 - bcs .5 - dec CB.Cache+S.CB.Y1+1 - -.5 ldx #DEVMGR.GFX.SETPIXEL + ldx #DEVMGR.GFX.SETPIXEL jsr GoDevGFX bra .1 @@ -207,7 +206,82 @@ DrawLine.IncY lda DY eor #$ff sta Counter+1 - rts + lda DX IE=2*DX + asl + sta IE + pha + + lda DX+1 + rol + sta IE+1 + tax + + pla D=IE-DY + sec + sbc DY + sta D + + txa + sbc DY+1 + sta D+1 + + lda DX INE=2*(DX-DY) + sec + sbc DY + pha + + lda DX+1 + sbc DY+1 + tax + + pla + + asl + sta INE + txa + rol + sta INE+1 + +.1 inc Counter + bne .2 + inc Counter+1 + beq .8 + +.2 lda D+1 IF D < 0 ... + bmi .4 + + lda D D > 0 : D=D+INE + clc + adc INE + sta D + lda D+1 + adc INE+1 + sta D+1 + + inc CB.Cache+S.CB.X1 X1=X1+1 + bne .5 + inc CB.Cache+S.CB.X1+1 + + bra .5 + +.4 lda D D > 0 : D=D+IE + clc + adc IE + sta D + lda D+1 + adc IE+1 + sta D+1 + +.5 lda CB.Cache+S.CB.Y1 Y1=Y1+IY + clc + adc IY + sta CB.Cache+S.CB.Y1 + + ldx #DEVMGR.GFX.SETPIXEL + jsr GoDevGFX + bra .1 + +.8 rts DrawLine.IncX lda DX eor #$ff @@ -216,7 +290,83 @@ DrawLine.IncX lda DX eor #$ff sta Counter+1 - rts + lda DY IE=2*DY + asl + sta IE + pha + +* lda DY+1 + lda #0 + rol + sta IE+1 + tax + + pla D=IE-DX + sec + sbc DX + sta D + + txa + sbc DX+1 + sta D+1 + + lda DY INE=2*(DY-DX) + sec + sbc DX + pha + +* lda DY+1 + lda #0 + sbc DX+1 + tax + + pla + asl + sta INE + txa + rol + sta INE+1 + +.1 inc Counter + bne .2 + inc Counter+1 + beq .8 + +.2 lda D+1 ID D < 0 .... + bmi .4 + + lda D D > 0 : D=D+INE + clc + adc INE + sta D + lda D+1 + adc INE+1 + sta D+1 + + lda CB.Cache+S.CB.Y1 Y1=Y1+IY + clc + adc IY + sta CB.Cache+S.CB.Y1 + + bra .5 + +.4 lda D D < 0 : D=D+IE + clc + adc IE + sta D + lda D+1 + adc IE+1 + sta D+1 + +.5 inc CB.Cache+S.CB.X1 X1=X1+1 + bne .6 + inc CB.Cache+S.CB.X1+1 + +.6 ldx #DEVMGR.GFX.SETPIXEL + jsr GoDevGFX + bra .1 + +.8 rts *-------------------------------------- GetCB >PULLW ZPCBPtr @@ -235,7 +385,9 @@ hDev .BS 1 DX .BS 2 DY .BS 2 IY .BS 1 -DXY .BS 2 +IE .BS 2 +D .BS 2 +INE .BS 2 Counter .BS 2 *-------------------------------------- CB.Cache .BS S.CB diff --git a/SBIN/DESKTOP.S.txt b/SBIN/DESKTOP.S.txt index ac24632a..f9932ea8 100644 --- a/SBIN/DESKTOP.S.txt +++ b/SBIN/DESKTOP.S.txt @@ -42,6 +42,8 @@ L.MouseData .DA MouseData L.SetPixel.CB .DA SetPixel.CB L.DrawLine1.CB .DA DrawLine1.CB L.DrawLine2.CB .DA DrawLine2.CB +L.DrawLine3.CB .DA DrawLine3.CB +L.DrawLine4.CB .DA DrawLine4.CB .DA 0 *-------------------------------------- CS.INIT >LDYA L.MSG.INIT @@ -225,6 +227,10 @@ Destop.Paint lda #S.CB.MODE.C16 >LIBCALL hLibGFX,LIBGFX.DrawLine >PUSHW L.DrawLine2.CB >LIBCALL hLibGFX,LIBGFX.DrawLine + >PUSHW L.DrawLine3.CB + >LIBCALL hLibGFX,LIBGFX.DrawLine + >PUSHW L.DrawLine4.CB + >LIBCALL hLibGFX,LIBGFX.DrawLine .8 rts *-------------------------------------- @@ -253,21 +259,39 @@ SetPixel.Y .BS 2 *-------------------------------------- DrawLine1.CB .BS 1 hDC DrawLine1.OP .DA #0 -DrawLine1.Mode .DA #S.CB.MODE.MONO +DrawLine1.Mode .DA #S.CB.MODE.C16 DrawLine1.Color .DA #1 -DrawLine1.X1 .DA 200 -DrawLine1.Y1 .DA 0 -DrawLine1.X2 .DA 200+191 -DrawLine1.Y2 .DA 191 +DrawLine1.X1 .DA 80 +DrawLine1.Y1 .DA 191 +DrawLine1.X2 .DA 80+191 +DrawLine1.Y2 .DA 0 *-------------------------------------- DrawLine2.CB .BS 1 hDC DrawLine2.OP .DA #0 -DrawLine2.Mode .DA #S.CB.MODE.C16 +DrawLine2.Mode .DA #S.CB.MODE.MONO DrawLine2.Color .DA #8 -DrawLine2.X1 .DA 220 +DrawLine2.X1 .DA 90 DrawLine2.Y1 .DA 0 -DrawLine2.X2 .DA 220+191 +DrawLine2.X2 .DA 140 DrawLine2.Y2 .DA 191 +*-------------------------------------- +DrawLine3.CB .BS 1 hDC +DrawLine3.OP .DA #0 +DrawLine3.Mode .DA #S.CB.MODE.MONO +DrawLine3.Color .DA #8 +DrawLine3.X1 .DA 100 +DrawLine3.Y1 .DA 0 +DrawLine3.X2 .DA 100+191 +DrawLine3.Y2 .DA 191 +*-------------------------------------- +DrawLine4.CB .BS 1 hDC +DrawLine4.OP .DA #0 +DrawLine4.Mode .DA #S.CB.MODE.MONO +DrawLine4.Color .DA #8 +DrawLine4.X1 .DA 110 +DrawLine4.Y1 .DA 0 +DrawLine4.X2 .DA 559 +DrawLine4.Y2 .DA 191 MAN SAVE /A2OSX.SRC/SBIN/DESKTOP.S ASM