From 5984f77ab09716616c521c961e652b00cc479e2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Mon, 12 Jun 2017 17:47:27 +0200 Subject: [PATCH] Kernel version 0.9 : DHGR.DRV, saved few bytes in tables, room for additional primitives, Bugfix in drawline.... --- DRV/DHGR.DRV.S.txt | 63 +++++++++++++++++++++++----------------- DRV/DHGR.DRV.T.txt | 57 +++++++++++++++++++----------------- Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes 4 files changed, 67 insertions(+), 53 deletions(-) diff --git a/DRV/DHGR.DRV.S.txt b/DRV/DHGR.DRV.S.txt index 2e88a6b8..0863f024 100644 --- a/DRV/DHGR.DRV.S.txt +++ b/DRV/DHGR.DRV.S.txt @@ -157,7 +157,11 @@ DRV.CS.START .DA STATUS *-------------------------------------- L.STAT .DA STAT L.DIV7.0 .DA DIV7.0 + .DA DIV7.256 + .DA DIV7.512 L.MOD7.0 .DA MOD7.0 + .DA MOD7.256 + .DA MOD7.512 L.Shift0.Lo .DA Shift0.lo L.Shift0.Hi .DA Shift0.hi .DA 0 end or relocation @@ -172,21 +176,21 @@ STATUS >LDYA L.STAT *-------------------------------------- OPEN sta A2osX.SCRNDEVS+2 DEV.ID in A - lda L.DIV7.0+1 - sta DIV7.hi - inc - sta DIV7.hi+1 - inc - sta DIV7.hi+2 - ldy #0 ldx #0 -.1 lda L.MOD7.0,y +.1 lda L.DIV7.0,y + sta DIV7.lo,x + lda L.MOD7.0,y sta MOD7.lo,x + iny + + lda L.DIV7.0,y + sta DIV7.hi,x lda L.MOD7.0,y sta MOD7.hi,x + iny inx cpx #3 @@ -254,8 +258,11 @@ SETPIXEL >STYA ZPBase lda CB.Cache+S.CB.MODE bit #S.CB.MODE.C16 bne SETPIXEL.C16 -*---- MONO ---------------------------- - ldx CB.Cache+S.CB.X1+1 + +SETPIXEL.MONO ldx CB.Cache+S.CB.X1+1 Get X Hi byte.... + + lda DIV7.lo,x + sta .2+1 lda DIV7.hi,x sta .2+2 @@ -264,23 +271,26 @@ SETPIXEL >STYA ZPBase lda MOD7.hi,x sta .4+2 + lda DIV7.BASE,x ldx CB.Cache+S.CB.X1 -.2 lda DIV7.0,x A=Col*2+AuxBit - - eor #1 toggle last bit : 0=Aux, 1=Main - lsr .3+1 reset CLRPAGE2 address - lsr CS=Aux - rol .3+1 if CS, -> SETPAGE2 -.3 sta CLRPAGE2 - - ldy CB.Cache+S.CB.Y1 + clc +.2 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 -.4 ldy MOD7.0,x x = X.LO +.4 ldy $ffff,x MOD7 : x = X.LO, y = X MOD 7 lda CB.Cache+S.CB.OP beq .5 @@ -306,7 +316,7 @@ SETPIXEL >STYA ZPBase sta (ZPBase) sta CLR80STORE rts -*-----16 Colors ----------------------- + SETPIXEL.C16 lda CB.Cache+S.CB.X1 lsr CB.Cache+S.CB.X1+1 divide by 4 ror @@ -410,11 +420,11 @@ HLINE >STYA ZPBase dey bpl .1 - lda CB.Cache+S.CB.MODE +HLINE.I lda CB.Cache+S.CB.MODE bit #S.CB.MODE.C16 bne HLINE.C16 -*----- MONO --------------------------- - + +HLINE.MONO HLINE.C16 @@ -430,7 +440,7 @@ VLINE >STYA ZPBase dey bpl .1 -VLINE.I + rts *-------------------------------------- @@ -451,7 +461,7 @@ FILLRECT >STYA ZPBase bpl .1 -.2 jsr VLINE.I +.2 jsr HLINE.I lda CB.Cache+S.CB.Y1 cmp CB.Cache+S.CB.Y2 @@ -497,6 +507,7 @@ Shift6.hi .BS 128 *-------------------------------------- .INB /A2OSX.SRC/DRV/DHGR.DRV.T *-------------------------------------- +DIV7.lo .BS 3 DIV7.hi .BS 3 MOD7.lo .BS 3 MOD7.hi .BS 3 diff --git a/DRV/DHGR.DRV.T.txt b/DRV/DHGR.DRV.T.txt index 376764e8..47a4b1f5 100644 --- a/DRV/DHGR.DRV.T.txt +++ b/DRV/DHGR.DRV.T.txt @@ -66,9 +66,33 @@ Color.Pixels .DA #%00000000,#%00000000,#%00000000,#%00000000 black (color bit di .DA #%11011101,#%10111011,#%11110111,#%11101110 pink .DA #%11101110,#%11011101,#%10111011,#%11110111 yellow *-------------------------------------- -* COL*2+AUX Bit +COL.BANK .DA #SETPAGE2,#CLRPAGE2,#SETPAGE2,#CLRPAGE2 + .DA #SETPAGE2,#CLRPAGE2,#SETPAGE2,#CLRPAGE2 + .DA #SETPAGE2,#CLRPAGE2,#SETPAGE2,#CLRPAGE2 + .DA #SETPAGE2,#CLRPAGE2,#SETPAGE2,#CLRPAGE2 + .DA #SETPAGE2,#CLRPAGE2,#SETPAGE2,#CLRPAGE2 + .DA #SETPAGE2,#CLRPAGE2,#SETPAGE2,#CLRPAGE2 + .DA #SETPAGE2,#CLRPAGE2,#SETPAGE2,#CLRPAGE2 + .DA #SETPAGE2,#CLRPAGE2,#SETPAGE2,#CLRPAGE2 + .DA #SETPAGE2,#CLRPAGE2,#SETPAGE2,#CLRPAGE2 + .DA #SETPAGE2,#CLRPAGE2,#SETPAGE2,#CLRPAGE2 + .DA #SETPAGE2,#CLRPAGE2,#SETPAGE2,#CLRPAGE2 + .DA #SETPAGE2,#CLRPAGE2,#SETPAGE2,#CLRPAGE2 + .DA #SETPAGE2,#CLRPAGE2,#SETPAGE2,#CLRPAGE2 + .DA #SETPAGE2,#CLRPAGE2,#SETPAGE2,#CLRPAGE2 + .DA #SETPAGE2,#CLRPAGE2,#SETPAGE2,#CLRPAGE2 + .DA #SETPAGE2,#CLRPAGE2,#SETPAGE2,#CLRPAGE2 + .DA #SETPAGE2,#CLRPAGE2,#SETPAGE2,#CLRPAGE2 + .DA #SETPAGE2,#CLRPAGE2,#SETPAGE2,#CLRPAGE2 + .DA #SETPAGE2,#CLRPAGE2,#SETPAGE2,#CLRPAGE2 + .DA #SETPAGE2,#CLRPAGE2,#SETPAGE2,#CLRPAGE2 *-------------------------------------- -DIV7.0 .HS 0000000000000001010101010101 +DIV7.BASE .HS 002449 Indexed with X.HI +*-------------------------------------- +DIV7.0 .HS 00 +DIV7.512 .HS 000000 +DIV7.256 .HS 000000 + .HS 01010101010101 .HS 0202020202020203030303030303 .HS 0404040404040405050505050505 .HS 0606060606060607070707070707 @@ -86,34 +110,13 @@ DIV7.0 .HS 0000000000000001010101010101 .HS 1E1E1E1E1E1E1E1F1F1F1F1F1F1F .HS 2020202020202021212121212121 .HS 2222222222222223232323232323 - .HS 24242424 -DIV7.256 .HS 24242425252525252525 - .HS 2626262626262627272727272727 - .HS 2828282828282829292929292929 - .HS 2A2A2A2A2A2A2A2B2B2B2B2B2B2B - .HS 2C2C2C2C2C2C2C2D2D2D2D2D2D2D - .HS 2E2E2E2E2E2E2E2F2F2F2F2F2F2F - .HS 3030303030303031313131313131 - .HS 3232323232323233333333333333 - .HS 3434343434343435353535353535 - .HS 3636363636363637373737373737 - .HS 3838383838383839393939393939 - .HS 3A3A3A3A3A3A3A3B3B3B3B3B3B3B - .HS 3C3C3C3C3C3C3C3D3D3D3D3D3D3D - .HS 3E3E3E3E3E3E3E3F3F3F3F3F3F3F - .HS 4040404040404041414141414141 - .HS 4242424242424243434343434343 - .HS 4444444444444445454545454545 - .HS 4646464646464647474747474747 - .HS 4848484848484849 -DIV7.512 .HS 494949494949 - .HS 4A4A4A4A4A4A4A4B4B4B4B4B4B4B - .HS 4C4C4C4C4C4C4C4D4D4D4D4D4D4D - .HS 4E4E4E4E4E4E4E4F4F4F4F4F4F4F + .HS 24242424242424 + .HS 25 *-------------------------------------- MOD7.0 .HS 00 MOD7.512 .HS 010203 MOD7.256 .HS 040506 + .HS 00010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 @@ -131,7 +134,7 @@ MOD7.256 .HS 040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 .HS 0001020304050600010203040506 - .HS 0001020304050600010203040506 + .HS 00010203040506 .HS 00 *-------------------------------------- BASEL .HS 00.00.00.00.00.00.00.00 diff --git a/Floppies/A2OSX.BUILD.po b/Floppies/A2OSX.BUILD.po index de8142e874a09fe8bc2b85461d921b564cec96ce..3c1d681e8921899be1f7df4786640934a1dca4e2 100644 GIT binary patch delta 890 zcmb`@PiWIn90%~%zRqo#TkBM)n@E%NZ|a_~gSdkpMRyS9I;I1$;7k0hQsC-L2y$(3C{QUFW5CV8>RF&29*=F6^a%3e+KVUwrqv)Ef>pC80$q z*jHn}CIztRqa3id<)#X*bRQFSE^+tp8(;gPtH ztv;jHuY;YgRrlG)+!O8%SK!Lr6e*2)}6 z0mI2^J;*r9YW--P7LlD|0Iiq5K(d*t*N?N>HPp62ep}-ctTsr;>R>MvMuyRp>z887 z>!WD8fedFPgnN*(%Hjx8)>zz+luZ^7AmuBISB1$r+0}ieC(G$ERJ@7Iy6-WRFn8iC$@RRqx7uD^ft${U zF1u5G`Wni;eUbnB0`J9K*nke3`fdn*R>=?)a@UvPTbr6#fiCsNDAcUY*JKgOqC*zz XWbuG3*2`jpEH=s_Ba2P*;=$Ix3#f73 delta 788 zcmZwDOK1~87zgm#Zfe`DHK`V98(T8Fn`di3sJ2Z(JqqSfUl9~9SuX+6#j6KNpk|}O zUW&4au9O_?D;qS`hDfJ`;-Lz{R1f0Kr67U&hzO!LXVVl)afjKN@Au#NU?-g(PN#>T zRbBiW5if4K^ql*;8xhg#me2Yq7epDMRmD`j_nwVsoIrXC2N|j2q{9IW-J-Jb!eqVjYFMt@KJ^ z42T!>5+?nizsCfF{s9+8fg~fRxQSI98(PJBypoT?%}0kbw0wCev%YK$T1TMPUZj_* z;VG)4N}@;$BS726?M59=^=wDh+=5kDeDQJ#IZvr0&i~?4qcAZBSDiUqPDX@66mB`~ ziPOGp3<|=$H3EV#OWGr~1LMJn9s~VCrAUwe2zSI_idNTlCh;A~mtEO^PbKONcOG+o zB9U3YO{d$Q(}(p-+PWdMrNXxEDt%?qio&~NP;34kg>n6-CUF2=IQA_e# tX`sx1bs6au-eWwz#+#bTYpP3An>BThrnYEmtERSTs-UUuPu0Eq{{eHxKrjFR diff --git a/Floppies/A2OSX.SRC.po b/Floppies/A2OSX.SRC.po index a9ecd41bfc5c4c994a8d09312ef22c1f33aceb07..8ffef538d8bef2401d754919784e7e0ecb81a209 100644 GIT binary patch delta 7384 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