From 6bb1a4d46b03ed5b111656e6e7cb2b44253ef3d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Thu, 23 Nov 2017 17:51:52 +0100 Subject: [PATCH] Kernel 0.9.1 : DHGR Driver, BitBLT --- .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes .Tools/ShiftTables.cmd | 63 ++++++++++++++++ DRV/CONSOLE.DRV.S.txt | 155 +++++++++++++++++---------------------- DRV/DHGR.DRV.S.BLT.txt | 155 ++++++++++++++++++++++++++++++--------- DRV/DHGR.DRV.S.LINE.txt | 6 +- DRV/DHGR.DRV.S.txt | 69 ++++++++++------- DRV/DHGR.DRV.T.txt | 12 +-- INC/LIBGUI.I.txt | 8 +- LIB/LIBGUI.S.txt | 21 ++---- SYS/KERNEL.S.CORE.txt | 2 +- SYS/KERNEL.S.D01.txt | 24 +++++- SYS/KERNEL.S.GP.txt | 2 +- SYS/KERNEL.S.IRQ.txt | 13 ++-- SYS/KERNEL.S.JMP.txt | 11 --- 15 files changed, 339 insertions(+), 202 deletions(-) create mode 100644 .Tools/ShiftTables.cmd diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index bbb5b4232b24acd952a6de595452a97982befb13..7be6bada25d02b565e79d0e29ee7f33c1274e0de 100644 GIT binary patch delta 5447 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 delta 6006 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 ReFBpNLjYl7po^19 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 delta 21517 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 aDA5sH@^x)ox2H~MS#~_^C>zhQ5B)z`Ad@rz diff --git a/.Tools/ShiftTables.cmd b/.Tools/ShiftTables.cmd new file mode 100644 index 00000000..ca245917 --- /dev/null +++ b/.Tools/ShiftTables.cmd @@ -0,0 +1,63 @@ +@echo off +title Kernel DOC generator +COLOR 2A +prompt ] +SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION + +mode con:cols=80 lines=24 + +cls +echo Apple //e + +(echo.)>SHIFT.L1.TXT +set /a B=0 +set SHIFT= .DA + +:LOOP1 + +call :ToBin %B% + +set SHIFT=%SHIFT% #%Output:~2,6%%Output:~0,1% + + + +set /a B+=1 +set /a MOD=B%%4 + +if "%MOD%" EQU "0" ( + echo %SHIFT% + set SHIFT= .DA + ) + +if "%B%" NEQ "128" goto LOOP1 + + + + + +echo. +echo (I know, this batch is stupid ;-) +echo. +pause +exit 0 + + +:ToBin + +SET Output= +SET CurrentValue=64 +SET InputValue=%1 + +:TopLoop +IF !CurrentValue! LEQ !InputValue! ( +SET Output=!Output!1 +SET /A InputValue=!InputValue!-!CurrentValue! +) ELSE ( +SET Output=!Output!0 +) + +If !CurrentValue! EQU 1 GOTO :EOF +SET /A CurrentValue=!CurrentValue!/2 + +Goto TopLoop + diff --git a/DRV/CONSOLE.DRV.S.txt b/DRV/CONSOLE.DRV.S.txt index 18028564..6f6aaeee 100644 --- a/DRV/CONSOLE.DRV.S.txt +++ b/DRV/CONSOLE.DRV.S.txt @@ -197,9 +197,7 @@ WRITE bit bEscMode bcc COUT.Ctrl ora INVFLG - ldx CH - ldy CV - jsr SetCharAtXY + jsr SetCharAtCurPos *-------------------------------------- FS ldx CH cpx #79 @@ -224,9 +222,7 @@ DEL ldx CH .3 lda #$20 ora INVFLG - ldx CH - ldy CV - jmp SetCharAtXY + jmp SetCharAtCurPos *-------------------------------------- COUT.Ctrl ldx #CtrlChars.Cnt-1 @@ -291,7 +287,10 @@ COUT.ExecEscSeq stz EscSeqParamCnt .1 inx lda EscSeq,x - jsr IsDigit + + cmp #'0' + bcc .2 + cmp #'9'+1 bcs .2 dec bEscSeqInNum @@ -487,32 +486,35 @@ SCROLL.UP ldx SCROLLTOP inx - jsr SETUP.L2X - - jsr COPY.L2toL1 + jsr COPY.XtoL1 cpx SCROLLBOT bne .1 *-------------------------------------- -CLREOL ldx CH - ldy #80 +CLREOL ldy CH Start + ldx #80 End bra CLR -CLRLINE ldx #0 - ldy #80 +CLRLINE ldy #0 Start + ldx #80 End bra CLR -CLRSOL ldx #0 - ldy CH +CLRSOL ldy #0 Start + ldx CH End -CLR sty .2+1 +CLR stx .2+1 + + ldx CV + .1 lda #" " - ldy CV - jsr SetCharAtXY X,Y unmodified - inx -.2 cpx #$ff Self Modified + phy + jsr SetCharAtYX X unmodified + ply + iny +.2 cpy #$ff Self Modified bne .1 + clc rts *-------------------------------------- @@ -522,9 +524,7 @@ SCROLL.DN ldx SCROLLBOT dex - jsr SETUP.L2X - - jsr COPY.L2toL1 + jsr COPY.XtoL1 cpx SCROLLTOP bne .1 @@ -667,77 +667,73 @@ CURBLNK lda A2osX.ASCREEN CURBLNK1 lda CURON bne CURBLNK.OFF - ldx CH - ldy CV - jsr GetCharAtXY + + jsr GetCharAtCurPos sta CURCHAR and #$80 - ldx CH - ldy CV eor #" " - jsr SetCharAtXY bra CUREXIT -CURBLNK.OFF ldx CH - ldy CV - lda CURCHAR - jsr SetCharAtXY - -CUREXIT lda CURON +CURBLNK.OFF lda CURCHAR + +CUREXIT jsr SetCharAtCurPos + + lda CURON eor #CURSOR.BLINK.SPEED sta CURON CUREXIT.RTS rts *-------------------------------------- -SetCharAtXY cmp #$40 +SetCharAtCurPos ldy CH + ldx CV +*-------------------------------------- +SetCharAtYX cmp #$40 bcc .10 cmp #$5F bcs .10 and #$3F -.10 php - pha - txa - lsr +.10 pha + jsr SETUP.L1X + + tya + lsr + tay + + pla bcs .1 + php sei sta SETWRITEAUX - -.1 clc - adc BASEL,y - sta ZPBaseL1 - lda BASEH,y - sta ZPBaseL1+1 - - pla - sta (ZPBaseL1) - + sta (ZPBaseL1),y sta CLRWRITEAUX plp - clc + rts + +.1 sta (ZPBaseL1),y rts *-------------------------------------- -GetCharAtXY php - txa - lsr +GetCharAtCurPos ldy CH + ldx CV +*-------------------------------------- +GetCharAtYX jsr SETUP.L1X - bcs .1 + tya + lsr + tay + bcs .1 + + php sei sta SETREADAUX - -.1 clc - adc BASEL,y - sta ZPBaseL1 - lda BASEH,y - sta ZPBaseL1+1 - - lda (ZPBaseL1) - + lda (ZPBaseL1),y sta CLRREADAUX - plp + rts + +.1 lda (ZPBaseL1),y rts *-------------------------------------- SETUP.L1X lda BASEL,x @@ -746,29 +742,23 @@ SETUP.L1X lda BASEL,x sta ZPBaseL1+1 rts *-------------------------------------- -SETUP.L2X lda BASEL,x +COPY.XtoL1 lda BASEL,x sta ZPBaseL2 lda BASEH,x sta ZPBaseL2+1 - rts -*-------------------------------------- -COPY.L2toL1 php + + php sei sta SETWRITEAUX sta SETREADAUX - ldy #39 + jsr .1 -.1 lda (ZPBaseL2),y - sta (ZPBaseL1),y - dey - bpl .1 - sta CLRWRITEAUX sta CLRREADAUX plp - ldy #39 +.1 ldy #39 .2 lda (ZPBaseL2),y sta (ZPBaseL1),y @@ -776,13 +766,6 @@ COPY.L2toL1 php bpl .2 rts *-------------------------------------- -IsDigit cmp #'0' - bcc .9 - cmp #'9'+1 - rts cc if ok, cs if not -.9 sec - rts -*-------------------------------------- Decimal.Out stz DecimalBuffer stz DecimalBuffer+1 @@ -899,9 +882,9 @@ DEVSTAT .DA #S.DSTAT.S.WRITE+S.DSTAT.S.READ .DA #S.DSTAT.T.CHAR .DA #0 .DA $0900 -ENQ.String >CSTR "A2osXTERM" +ENQ.String >CSTR "XTERM" SB.IS.TTYPE .DA #IAC,#SB,#TELOPT.TTYPE,#SB.IS - .AS 'A2osXTERM' + .AS 'XTERM' .DA #IAC,#SE SB.IS.TTYPE.LEN .EQ *-SB.IS.TTYPE *-------------------------------------- diff --git a/DRV/DHGR.DRV.S.BLT.txt b/DRV/DHGR.DRV.S.BLT.txt index 6f22bbf8..136e17ae 100644 --- a/DRV/DHGR.DRV.S.BLT.txt +++ b/DRV/DHGR.DRV.S.BLT.txt @@ -43,19 +43,19 @@ BITBLT >LDYA CB.CACHE+S.CB.SrcPtr pha tya clc - adc ZPBMDataPtr - sta ZPBMDataPtr + adc ZPBMDataPtr0 + sta ZPBMDataPtr0 pla pha - adc ZPBMDataPtr+1 - sta ZPBMDataPtr+1 + adc ZPBMDataPtr0+1 + sta ZPBMDataPtr0+1 tya adc BM.Cache+S.BM.MASK.OFS - sta ZPBMMaskPtr + sta ZPBMMaskPtr0 pla adc BM.Cache+S.BM.MASK.OFS+1 - sta ZPBMMaskPtr+1 + sta ZPBMMaskPtr0+1 lda CB.Cache+S.CB.X1 pha @@ -72,18 +72,18 @@ BITBLT >LDYA CB.CACHE+S.CB.SrcPtr pha clc - adc ZPBMDataPtr - sta ZPBMDataPtr + adc ZPBMDataPtr0 + sta ZPBMDataPtr0 bcc .3 - inc ZPBMDataPtr+1 + inc ZPBMDataPtr0+1 .3 pla - adc ZPBMMaskPtr - sta ZPBMMaskPtr + adc ZPBMMaskPtr0 + sta ZPBMMaskPtr0 bcc .4 - inc ZPBMMaskPtr+1 + inc ZPBMMaskPtr0+1 .4 lda S.CB.X2 sec @@ -106,11 +106,98 @@ BITBLT >LDYA CB.CACHE+S.CB.SrcPtr adc BLT.DX+1 jsr LBUF.SetBounds2YA -.5 lda BLT.BMBitOfs - sta BLT.BMBitOfsL + lda S.CB.Y2 + sec + sbc S.CB.Y1 + sta BLT.DY -.6 jsr BLT.Get7BMBits + lda BLT.BMBitOfs + sta BLT.BMBitOfsL + lda LBUF.C1 + sta BLT.ScreenC + + >LDYA ZPBMDataPtr0 + >STYA ZPBMDataPtr + >LDYA ZPBMMaskPtr0 + >STYA ZPBMMaskPtr + ldx BLT.SCRBitOfs + beq BITBLT.LOOP + + ldy Shift.L.LO,x X = 1->6 + sty ZPShiftPtr + + ldy Shift.L.HI,x X = 1->6 + sty ZPShiftPtr+1 + + +BITBLT.LOOP ldx BLT.SCRBitOfs + bne .2 + +.1 jsr BLT.Get7BMDBits we have 0xxxxxxxx in A + + ldx BLT.ScreenC + sta LBUF.DATA,x + inc BLT.ScreenC + cpx LBUF.C2 + bne .1 + + bra BITBLT.DRAW + +.2 jsr BLT.Get7BMDBits we have 0xxxxxxxx in A + + pha save it for 2nd part + + ldx BLT.SCRBitOfs + and Mask7BitsH,x 0000xxxx, keep col1 bits only + tay + + lda (ZPShiftPtr),y make 0xxxx000 + + ldy BLT.ScreenC + ora LBUF.DATA,y + sta LBUF.DATA,y + + pla + + inc BLT.ScreenC + cpy LBUF.C2 + beq BITBLT.DRAW + + and Mask7BitsL,x 0yyy0000 + tay + + lda (ZPShiftPtr),y 00000yyy + + ldy BLT.ScreenC + sta LBUF.DATA,y + + inc BLT.ScreenC + cpy LBUF.C2 + bne .2 + +BITBLT.DRAW ldy S.CB.Y1 + jsr LBUF.DrawAtY + inc S.CB.Y1 + + lda ZPBMDataPtr0 + clc + adc BM.Cache+S.BM.RowBytes + sta ZPBMDataPtr0 + bcc .6 + + inc ZPBMDataPtr0+1 + +.6 lda ZPBMMaskPtr0 + clc + adc BM.Cache+S.BM.RowBytes + sta ZPBMMaskPtr0 + bcc .7 + + inc ZPBMMaskPtr0+1 + +.7 dec BLT.DY + bne BITBLT.LOOP clc rts *-------------------------------------- @@ -121,39 +208,39 @@ BITBLT >LDYA CB.CACHE+S.CB.SrcPtr * LBUF DATA/MASK Bits * c6543210 c6543210 * ^ -* SCRBitOfsL (0->6) +* SCRBitOfs (0->6) *-------------------------------------- -BLT.Get7BMBits lda (ZPBMDataPtr) +BLT.Get7BMDBits lda (ZPBMDataPtr) ldx BLT.BMBitOfsL - beq BLT.Get7BMBits0 done! and no need to advance ZPBMDataPtr - lsr Range 0->127 - dex Range 0->6 - beq BLT.Get7BMBits1 + beq BLT.Get7BMBits0 OFS=0, done! and no need to advance ZPBMDataPtr + lsr OFS=1->7, shift one (Range 0->127) + dex OFS 0->6 + beq BLT.Get7BMBits1 OFS was 1....done and go to next byte, OFS=0 - ldy Shift7.LO-1,x X = 1->6 - sty ZPBMShiftPtr+1 - - ldy Shift7.HI-1,x X = 1->6 - sty ZPBMShiftPtr+1 + ldy Shift.R.LO,x X = 1->6 + sty ZPShiftPtr - and Mask7BitsL,x Get only needed bits - tay + ldy Shift.R.HI,x X = 1->6 + sty ZPShiftPtr+1 - lda (ZPBMShiftPtr),y + and Mask7BitsL,x Get only left upper X bits + tay xxxxx000 + + lda (ZPShiftPtr),y shift'em RIGHT 000xxxxx pha inc ZPBMDataPtr Next BM data byte - bne .1 + bne .2 inc ZPBMDataPtr+1 -.1 lda (ZPBMDataPtr) - and Mask7BitsH,x +.2 lda (ZPBMDataPtr) get next byte + and Mask7BitsH,x only first Y bits 000000yy tay - pla + pla get back right part bits 000xxxxx - ora (ZPBMShiftPtr),y + ora (ZPShiftPtr),y shift right 000000yy and ORA with 000xxxxx=0yyxxxxx dec BLT.BMBitOfsL X = 1->6, ADD 7 MOD 8..... rts diff --git a/DRV/DHGR.DRV.S.LINE.txt b/DRV/DHGR.DRV.S.LINE.txt index 0e33e7da..488502cd 100644 --- a/DRV/DHGR.DRV.S.LINE.txt +++ b/DRV/DHGR.DRV.S.LINE.txt @@ -57,10 +57,10 @@ HLINE.C16 lda CB.Cache+S.CB.X1 asl clc adc L.Color.Pixels - sta ZPPalettePtr + sta .2+1 lda L.Color.Pixels+1 adc #0 - sta ZPPalettePtr+1 + sta .2+2 ldx LBUF.C1 @@ -68,7 +68,7 @@ HLINE.C16 lda CB.Cache+S.CB.X1 and #3 Compute index in Palette (Mod 4) tay - lda (ZPPalettePtr),y +.2 lda $ffff,y SELF MODIFIED sta LBUF.DATA,x cpx LBUF.C2 diff --git a/DRV/DHGR.DRV.S.txt b/DRV/DHGR.DRV.S.txt index a160043b..7f1331d6 100644 --- a/DRV/DHGR.DRV.S.txt +++ b/DRV/DHGR.DRV.S.txt @@ -17,12 +17,12 @@ AUTO 6 *-------------------------------------- ZPCmdPtr .EQ ZPDRV ZPBasePtr .EQ ZPDRV+2 -ZPPalettePtr .EQ ZPDRV+4 -ZPBMDataPtr .EQ ZPDRV+6 -ZPBMMaskPtr .EQ ZPDRV+8 -ZPBMSavePtr .EQ ZPDRV+10 -ZPBMShiftPtr .EQ ZPDRV+12 -ZPSCRShiftPtr .EQ ZPDRV+14 +ZPShiftPtr .EQ ZPDRV+4 +ZPBMDataPtr0 .EQ ZPDRV+6 +ZPBMMaskPtr0 .EQ ZPDRV+8 +ZPBMDataPtr .EQ ZPDRV+10 +ZPBMMaskPtr .EQ ZPDRV+12 +ZPBMSavePtr .EQ ZPDRV+14 *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -147,12 +147,12 @@ J.LBUF.DrawAtY .DA LBUF.DrawAtY.XOR .DA LBUF.DrawAtY.SET .DA LBUF.DrawAtY.ORA .DA LBUF.DrawAtY.AND -L.SHIFT.R2 .DA SHIFT.R2 - .DA SHIFT.R3 - .DA SHIFT.R4 - .DA SHIFT.R5 - .DA SHIFT.R6 - .DA SHIFT.R7 +L.SHIFT .DA SHIFT.L1 + .DA SHIFT.L2 + .DA SHIFT.L3 + .DA SHIFT.L4 + .DA SHIFT.L5 + .DA SHIFT.L6 L.DSTAT .DA DSTAT L.Color.Pixels .DA Color.Pixels .DA 0 end or relocation @@ -164,21 +164,31 @@ STATUS >LDYA L.DSTAT OPEN sta A2osX.SCRNDEVS+2 DEV.ID in A ldx #0 - - ldy #0 - -.1 lda L.SHIFT.R2,x Get relocated LO BYTE - sta Shift7.LO,y + ldy #1 +.1 lda L.SHIFT,x Get relocated LO BYTE + sta Shift.L.LO,y inx - - lda L.SHIFT.R2,x Get relocated HI BYTE - sta Shift7.HI,y - + + lda L.SHIFT,x Get relocated HI BYTE + sta Shift.L.LO,y inx iny - cpy #6 6 LO/HI bytes to set in tables + cpx #12 bne .1 + + ldx #0 SHIFT.L1 = SHIFT.R6 !!! + ldy #6 + +.2 lda L.SHIFT,x Get relocated LO BYTE + sta Shift.L.LO,y + inx + + lda L.SHIFT,x Get relocated HI BYTE + sta Shift.L.LO,y + inx + dey + bne .2 *-------------------------------------- CONTROL ldy #0 @@ -286,11 +296,11 @@ YAMultX stx GBYTE bne .2 rts *-------------------------------------- - .INB /A2OSX.SRC/DRV/DHGR.DRV.S.PIX - .INB /A2OSX.SRC/DRV/DHGR.DRV.S.LINE - .INB /A2OSX.SRC/DRV/DHGR.DRV.S.RECT .INB /A2OSX.SRC/DRV/DHGR.DRV.S.BLT .INB /A2OSX.SRC/DRV/DHGR.DRV.S.LBUF + .INB /A2OSX.SRC/DRV/DHGR.DRV.S.LINE + .INB /A2OSX.SRC/DRV/DHGR.DRV.S.PIX + .INB /A2OSX.SRC/DRV/DHGR.DRV.S.RECT *-------------------------------------- DRV.CS.END *-------------------------------------- @@ -367,8 +377,10 @@ CONTROL.LCM .DA #SETDHIRES .DA #$ff *-------------------------------------- -Shift7.LO .BS 6 -Shift7.HI .BS 6 +Shift.L.LO .BS 7 +Shift.L.HI .BS 7 +Shift.R.LO .BS 7 +Shift.R.HI .BS 7 *-------------------------------------- CB.CmdLen .DA S.CB.Y1+1 SETPIXEL .DA S.CB.Y1+1 GETPIXEL @@ -393,8 +405,9 @@ LBUF.DATA .BS 80 BLT.BMBitOfs .BS 1 BLT.BMBitOfsL .BS 1 BLT.SCRBitOfs .BS 1 -BLT.SCRBitOfsL .BS 1 BLT.DX .BS 2 +BLT.DY .BS 1 +BLT.ScreenC .BS 1 *-------------------------------------- GBYTE .BS 1 GWORD .BS 2 diff --git a/DRV/DHGR.DRV.T.txt b/DRV/DHGR.DRV.T.txt index 2b90579c..ad5d8eee 100644 --- a/DRV/DHGR.DRV.T.txt +++ b/DRV/DHGR.DRV.T.txt @@ -171,12 +171,12 @@ MOD7.256 .HS 040506 .HS 00010203040506 .HS 00 *-------------------------------------- -SHIFT.R2 .BS 128 -SHIFT.R3 .BS 128 -SHIFT.R4 .BS 128 -SHIFT.R5 .BS 128 -SHIFT.R6 .BS 128 -SHIFT.R7 .BS 128 +SHIFT.L1 .BS 128 +SHIFT.L2 .BS 128 +SHIFT.L3 .BS 128 +SHIFT.L4 .BS 128 +SHIFT.L5 .BS 128 +SHIFT.L6 .BS 128 *-------------------------------------- BASEL .HS 00.00.00.00.00.00.00.00 .HS 80.80.80.80.80.80.80.80 diff --git a/INC/LIBGUI.I.txt b/INC/LIBGUI.I.txt index 49387866..8a345f98 100644 --- a/INC/LIBGUI.I.txt +++ b/INC/LIBGUI.I.txt @@ -61,15 +61,13 @@ CUT.T.TEXT .EQ 12 *-------------------------------------- S.CUR.HotPointX .EQ 0 S.CUR.HotPointY .EQ 1 -S.CUR.DATA .EQ 2 16x16 bits = 32 bytes -S.CUR.MASK .EQ 34 -S.CUR .EQ 66 +S.CUR.BM .EQ 2 *-------------------------------------- S.BM.F .EQ 0 S.BM.F.BBP1 .EQ %00000001 S.BM.F.BBP2 .EQ %00000010 -S.BM.F.BBP4 .EQ %00001000 -S.BM.F.BBP8 .EQ %00010000 +S.BM.F.BBP4 .EQ %00000100 +S.BM.F.BBP8 .EQ %00001000 S.BM.RowBytes .EQ 1 S.BM.W .EQ 2 S.BM.H .EQ 4 diff --git a/LIB/LIBGUI.S.txt b/LIB/LIBGUI.S.txt index 095b967e..1c072dc0 100644 --- a/LIB/LIBGUI.S.txt +++ b/LIB/LIBGUI.S.txt @@ -430,8 +430,11 @@ CB.CmdLen .DA S.CB.Y1+1 SETPIXEL *-------------------------------------- CB.Cache .BS S.CB *-------------------------------------- -CUR.Arrow .DA #0 - .DA #0 +CUR.Arrow .DA #S.BM.F.BBP1 + .DA #2 RowBytes + .DA 12 W + .DA 12 H + .DA CUR.Arrow.MASK-CUR.Arrow CUR.Arrow.DATA .DA %00000001.000000000 .DA %00000011.000000000 .DA %00000101.000000000 @@ -444,10 +447,6 @@ CUR.Arrow.DATA .DA %00000001.000000000 .DA %00000000.000000000 .DA %00000000.000000000 .DA %00000000.000000000 - .DA %00000000.000000000 - .DA %00000000.000000000 - .DA %00000000.000000000 - .DA %00000000.000000000 CUR.Arrow.MASK .DA %00000000.000000000 .DA %00000000.000000000 .DA %00000010.000000000 @@ -460,16 +459,6 @@ CUR.Arrow.MASK .DA %00000000.000000000 .DA %00000000.000000000 .DA %00000000.000000000 .DA %00000000.000000000 - .DA %00000000.000000000 - .DA %00000000.000000000 - .DA %00000000.000000000 - .DA %00000000.000000000 -*-------------------------------------- -PAT.Arrow .DA #S.BM.F.BBP1 - .DA #1 RowBytes - .DA 7 W - .DA 8 H - .DA 0 *-------------------------------------- MAN SAVE /A2OSX.SRC/LIB/LIBGUI.S diff --git a/SYS/KERNEL.S.CORE.txt b/SYS/KERNEL.S.CORE.txt index 3aee027b..b3d7934a 100644 --- a/SYS/KERNEL.S.CORE.txt +++ b/SYS/KERNEL.S.CORE.txt @@ -452,7 +452,7 @@ CORE.PSResume ldy #S.PS.PC *-------------------------------------- TSKMGR.EVENTCNT .BS 1 *-------------------------------------- -DevMgr.Stat .DA DevMgr.NUL.Code +DevMgr.Stat .DA DevMgr.FreeMem DevMgr.Free .DA DevMgr.FreeMem .DA DevMgr.HiMem DevMgr.Count .DA #2 NUL,SYS diff --git a/SYS/KERNEL.S.D01.txt b/SYS/KERNEL.S.D01.txt index 4f99f220..e58ae789 100644 --- a/SYS/KERNEL.S.D01.txt +++ b/SYS/KERNEL.S.D01.txt @@ -417,6 +417,17 @@ DevMgr.SYS.ClrEOL bne .1 .2 rts *-------------------------------------- +DevMgr.SYS.ScrollAux + sta SETREADAUX + +.1 lda (ZPDRV+2),y + sta (ZPDRV),y + dey + bpl .1 + + sta CLRREADAUX + rts +*-------------------------------------- DevMgr.SYS.Scroll ldx #1 .1 jsr DevMgr.SYS.SetBaseX @@ -427,13 +438,20 @@ DevMgr.SYS.Scroll lda DevMgr.SYS.BASEH,x sta ZPDRV+3 - ldy #39 - php sei + ldx #DevMgr.SYS.Scroll-DevMgr.SYS.ScrollAux-1 + +.2 lda DevMgr.SYS.ScrollAux,x + sta $102,x + dex + bpl .2 + + ldy #39 + sta SETWRITEAUX - jsr DevMgr.SYS.ScrollAux + jsr $102 sta CLRWRITEAUX plp diff --git a/SYS/KERNEL.S.GP.txt b/SYS/KERNEL.S.GP.txt index 955fcf2b..56a3d573 100644 --- a/SYS/KERNEL.S.GP.txt +++ b/SYS/KERNEL.S.GP.txt @@ -219,7 +219,7 @@ GO.EXIT.SaveA lda #$ff plp GO.EXIT.JMP jmp $FFFF Self Modified *-------------------------------------- -* Called for ProDOS IRQ Manager (LCBNK1) +* Called from ProDOS IRQ Manager (LCBNK1) * A,X,Y, $FA->$FF Already Saved * Main RAM,ZP/LC selected * must begin with CLD diff --git a/SYS/KERNEL.S.IRQ.txt b/SYS/KERNEL.S.IRQ.txt index 1a083e62..a58c4bdb 100644 --- a/SYS/KERNEL.S.IRQ.txt +++ b/SYS/KERNEL.S.IRQ.txt @@ -46,12 +46,9 @@ K.IrqHAuxLC sta .12+1 bcs .8 rti -.2 - pla pull P +.2 pla pull P bra * - lda .12+1 - .8 jmp (IRQ.OldFFFE) *-------------------------------------- * Called by : @@ -78,17 +75,17 @@ K.IrqH.TCLOCK ldy IRQ.VBL.n0 clc rts *-------------------------------------- -K.IrqH.VBL jsr IRQ.VBL.MSM SERVEMOUSE - bcs K.IrqH.DEV Not From Mouse +K.IrqH.VBL jsr IRQ.VBL.MSM SERVEMOUSE + bcs K.IrqH.DEV Not From Mouse ldx IRQ.VBL.0n lda $778,x and #$08 IRQ was caused by VBL ? beq K.IrqH.DEV - ldx IRQ.VBL.MRM+2 $Cn + ldx IRQ.VBL.MRM+2 $Cn ldy IRQ.VBL.n0 - jsr IRQ.VBL.MRM READMOUSE + jsr IRQ.VBL.MRM READMOUSE inc CORE.IRQTick diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index 1bbe551f..41db45d7 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -435,17 +435,6 @@ K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00 .DA 0 .DA 0 *-------------------------------------- -DevMgr.SYS.ScrollAux - sta SETREADAUX - -.1 lda (ZPDRV+2),y - sta (ZPDRV),y - dey - bpl .1 - - sta CLRREADAUX - rts -*-------------------------------------- PullP1P2P3 sec .HS 90 bcc PullP1P2 clc