From ef62a7d69f157b287d83d60ad2e8d6be6a334283 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Fri, 17 Nov 2017 17:16:05 +0100 Subject: [PATCH] Kernel 0.9.1 : GUI, API & Driver......RECT & BitBLT --- .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes BIN/ARP.S.txt | 18 ++--- BIN/EDIT.S.txt | 4 +- BIN/PING.S.txt | 4 +- BIN/RPCDUMP.S.txt | 6 +- BIN/X.CPMVRM.S.txt | 4 +- DRV/DHGR.DRV.S.LBUF.txt | 160 +++++++++++++++++++++++++++++++++------ DRV/DHGR.DRV.S.LINE.txt | 140 +++++++++++++++------------------- DRV/DHGR.DRV.S.PIX.txt | 64 +++++++--------- DRV/DHGR.DRV.S.RECT.txt | 32 ++++++++ DRV/DHGR.DRV.S.txt | 37 ++++----- INC/A2osX.I.txt | 3 +- INC/KERNEL.I.txt | 14 ++-- INC/LIBGUI.I.txt | 12 +-- INC/LIBTCPIP.I.txt | 4 +- INC/MACROS.I.txt | 4 + LIB/LIBGUI.S.txt | 4 +- SBIN/DHCPCLNT.S.txt | 4 +- SBIN/GETTY.S.txt | 16 ++-- SBIN/GUI.S.txt | 32 ++++---- SBIN/HTTPD.S.txt | 4 +- SBIN/KCONFIG.S.txt | 2 +- SBIN/LOGIN.S.txt | 4 +- SBIN/NFSD.S.txt | 4 +- SBIN/SHELL.S.txt | 4 +- SBIN/TELNETD.S.txt | 4 +- SYS/KERNEL.S.CORE.txt | 40 +--------- SYS/KERNEL.S.GP.txt | 17 +++++ SYS/KERNEL.S.JMP.txt | 2 +- 30 files changed, 376 insertions(+), 267 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 9138b795eea13f9831b9d624902fb4ca4da6d4ff..f09c2477c0e6c110335904a55785ffd2670ff95a 100644 GIT binary patch delta 26135 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 delta 25508 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 E0iH!2TmS$7 delta 22368 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 diff --git a/BIN/ARP.S.txt b/BIN/ARP.S.txt index 099acbb8..8f0e3914 100644 --- a/BIN/ARP.S.txt +++ b/BIN/ARP.S.txt @@ -23,9 +23,8 @@ CS.START cld .DA #$61 6502,Level 1 (65c02) .DA #1 BIN Layout Version 1 .DA 0 - .DA CS.END-CS.START - .DA DS.END-DS.START Data Segment to Allocate - .DA 0 + .DA #16 SS + .DA #2 ZP .DA 0 *-------------------------------------- * Relocation Table @@ -44,7 +43,7 @@ L.MSG2 .DA MSG2 .DA 0 *-------------------------------------- CS.INIT >LDYA L.LIBTCPIP - >SYSCALL LoadLibYA + >SYSCALL LoadLib.YA sta hLIBTCPIP lda (pPs) @@ -53,7 +52,8 @@ CS.INIT >LDYA L.LIBTCPIP clc rts *-------------------------------------- -CS.RUN >SYSCALL GetArgC +CS.RUN ldy #S.PS.ARGC + lda (pPs),y cmp #1 bne .1 jmp CS.RUN.DUMP @@ -81,8 +81,8 @@ CS.RUN.QUERY jsr Init.Timeout jsr Wait.TimeOut bcs .9 - >SYSCALL Sleep - >SYSCALL GetC + >SLEEP + >SYSCALL GetChar bcs .1 cmp #3 beq .8 @@ -106,7 +106,7 @@ CS.RUN.QUERY jsr Init.Timeout .9 sec rts *-------------------------------------- -CS.RUN.DUMP >LIBCALL hLIBTCPIP,LIBTCPIP.ARP.GetC.ACHE +CS.RUN.DUMP >LIBCALL hLIBTCPIP,LIBTCPIP.ARP.GETCACHE >STYA ZPPTR1 >LDYA L.MSG0 @@ -166,7 +166,7 @@ CS.DOEVENT lda (pEvent) rts *-------------------------------------- CS.QUIT lda hLIBTCPIP - >SYSCALL UnloadLibA + >SYSCALL UnloadLib.A clc rts *-------------------------------------- diff --git a/BIN/EDIT.S.txt b/BIN/EDIT.S.txt index b9a0c7fc..92635fdc 100644 --- a/BIN/EDIT.S.txt +++ b/BIN/EDIT.S.txt @@ -136,7 +136,7 @@ CS.RUN >LDYA L.SEQ.DETECT >SYSCALL PrintF.YA Send Query for term W & H bcs .9 -.1 >SYSCALL Sleep +.1 >SLEEP >SYSCALL GetChar bcs .1 @@ -153,7 +153,7 @@ CS.RUN >LDYA L.SEQ.DETECT lda (pData),y bne .99 - >SYSCALL Sleep + >SLEEP >SYSCALL GetChar bcs .2 diff --git a/BIN/PING.S.txt b/BIN/PING.S.txt index 02d114ec..edd28f24 100644 --- a/BIN/PING.S.txt +++ b/BIN/PING.S.txt @@ -84,7 +84,7 @@ CS.RUN.IPOK >SYSCALL GetArgC >PUSHYA >LIBCALL hLIBTCPIP,LIBTCPIP.HST.GETBYNAME bcc CS.RUN.HOSTOK - >SYSCALL Sleep + >SLEEP jsr Wait.Timeout bcc .2 @@ -183,7 +183,7 @@ CS.RUN.SEND.ECHO jsr Init.Timeout CS.RUN.WAIT.REPLY - >SYSCALL Sleep + >SLEEP >SYSCALL GetC bcs .1 cmp #3 Ctrl-C diff --git a/BIN/RPCDUMP.S.txt b/BIN/RPCDUMP.S.txt index df9cdd34..e96dd870 100644 --- a/BIN/RPCDUMP.S.txt +++ b/BIN/RPCDUMP.S.txt @@ -88,7 +88,7 @@ CS.RUN jsr Init.Timeout >LIBCALL hLIBTCPIP,LIBTCPIP.HST.GETBYNAME bcc .2 - >SYSCALL Sleep + >SLEEP jsr Wait.Timeout bcc .1 @@ -122,7 +122,7 @@ CS.RUN jsr Init.Timeout >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Write bcc .4 - >SYSCALL Sleep + >SLEEP jsr Wait.Timeout bcc .3 .91 bra .99 @@ -134,7 +134,7 @@ CS.RUN jsr Init.Timeout >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.ReadA bcc .6 - >SYSCALL Sleep + >SLEEP jsr Wait.Timeout bcc .5 bra .99 diff --git a/BIN/X.CPMVRM.S.txt b/BIN/X.CPMVRM.S.txt index 6b9a1186..55f7afbc 100644 --- a/BIN/X.CPMVRM.S.txt +++ b/BIN/X.CPMVRM.S.txt @@ -344,7 +344,7 @@ CS.RUN.DIR jsr CS.RUN.DIR.MSG jsr CS.RUN.OVERWRITE.MSG bcs CS.RUN.DIR.RTS -.1 >SYSCALL Sleep +.1 >SLEEP >SYSCALL GetChar bcs .1 cmp #3 @@ -408,7 +408,7 @@ CS.RUN.FILE jsr CS.RUN.FILE.MSG jsr CS.RUN.OVERWRITE.MSG bcs .9 -.1 >SYSCALL Sleep +.1 >SLEEP >SYSCALL GetChar bcs .1 cmp #3 diff --git a/DRV/DHGR.DRV.S.LBUF.txt b/DRV/DHGR.DRV.S.LBUF.txt index bd7ef686..a1b826ef 100644 --- a/DRV/DHGR.DRV.S.LBUF.txt +++ b/DRV/DHGR.DRV.S.LBUF.txt @@ -42,7 +42,67 @@ LBUF.SetBounds2YA LBUF.DrawAtY lda BASEL,y setup line Base Ptr sta ZPBasePtr lda BASEH,y - sta ZPBasePtr+1 + sta ZPBasePtr+1 + + lda CB.Cache+S.CB.OP + bit #S.CB.OP.RESTORE + bne .8 + bit #S.CB.OP.SAVE + beq .1 + + + lda CB.Cache+S.CB.OP + +.1 and #$f + tax + jmp (J.LBUF.DrawAtY,x) + +.8 rts +*-------------------------------------- +LBUF.DrawAtY.XOR + ldx LBUF.C1 x C1->C2 + + ldy COL.BANK,x + sta $C000,y + ldy COL.OFS,x + + lda (ZPBasePtr),y Get C1 + and LBUF.C1.MASK clear ONLY bits starting at X1 mod 7 + sta GBYTE + lda LBUF.DATA,x get DATA bits + and LBUF.C1.DATA set ONLY bits starting at X1 mod 7 + ora GBYTE + sta (ZPBasePtr),y update screen + + inx + cpx LBUF.C2 + beq .2 C1=C2, go setup C2 + bcs .8 C1+1 > C2, we are done... + +.1 ldy COL.BANK,x + sta $C000,y + ldy COL.OFS,x + + lda LBUF.DATA,x set all bytes between C1+1 & C2-1 + sta (ZPBasePtr),y + + inx + cpx LBUF.C2 + bne .1 + +.2 ldy COL.BANK,x + sta $C000,y + ldy COL.OFS,x + + lda (ZPBasePtr),y Get C2 + and LBUF.C2.MASK clear ONLY bits ending at X2 mod 7 + sta GBYTE + lda LBUF.DATA,x get DATA bits + and LBUF.C2.DATA set ONLY bits ending at X2 mod 7 + ora GBYTE + sta (ZPBasePtr),y update screen + +.8 rts *-------------------------------------- LBUF.DrawAtY.SET ldx LBUF.C1 x C1->C2 @@ -90,40 +150,94 @@ LBUF.DrawAtY.SET .8 rts *-------------------------------------- LBUF.DrawAtY.ORA - ldy LBUF.C1 y C1->C2 + ldx LBUF.C1 x C1->C2 -.1 ldx COL.BANK,y - sta $C000,x + ldy COL.BANK,x + sta $C000,y + ldy COL.OFS,x - lda (ZPBasePtr),y - and LBUF.MASK,y + lda (ZPBasePtr),y Get C1 + and LBUF.C1.MASK clear ONLY bits starting at X1 mod 7 + sta GBYTE + lda LBUF.DATA,x get DATA bits + and LBUF.C1.DATA set ONLY bits starting at X1 mod 7 + ora GBYTE + sta (ZPBasePtr),y update screen - ora LBUF.DATA,y + inx + cpx LBUF.C2 + beq .2 C1=C2, go setup C2 + bcs .8 C1+1 > C2, we are done... + +.1 ldy COL.BANK,x + sta $C000,y + ldy COL.OFS,x + + lda LBUF.DATA,x set all bytes between C1+1 & C2-1 sta (ZPBasePtr),y - cpy LBUF.C2 - iny - bcc .1 + inx + cpx LBUF.C2 + bne .1 - rts -*-------------------------------------- -LBUF.DrawAtY.XOR - ldy LBUF.C1 y C1->C2 +.2 ldy COL.BANK,x + sta $C000,y + ldy COL.OFS,x -.1 ldx COL.BANK,y - sta $C000,x + lda (ZPBasePtr),y Get C2 + and LBUF.C2.MASK clear ONLY bits ending at X2 mod 7 + sta GBYTE + lda LBUF.DATA,x get DATA bits + and LBUF.C2.DATA set ONLY bits ending at X2 mod 7 + ora GBYTE + sta (ZPBasePtr),y update screen - lda (ZPBasePtr),y - and LBUF.MASK,y +.8 rts +*-------------------------------------- +LBUF.DrawAtY.AND + ldx LBUF.C1 x C1->C2 - eor LBUF.DATA,y + ldy COL.BANK,x + sta $C000,y + ldy COL.OFS,x + + lda (ZPBasePtr),y Get C1 + and LBUF.C1.MASK clear ONLY bits starting at X1 mod 7 + sta GBYTE + lda LBUF.DATA,x get DATA bits + and LBUF.C1.DATA set ONLY bits starting at X1 mod 7 + ora GBYTE + sta (ZPBasePtr),y update screen + + inx + cpx LBUF.C2 + beq .2 C1=C2, go setup C2 + bcs .8 C1+1 > C2, we are done... + +.1 ldy COL.BANK,x + sta $C000,y + ldy COL.OFS,x + + lda LBUF.DATA,x set all bytes between C1+1 & C2-1 sta (ZPBasePtr),y - cpy LBUF.C2 - iny - bcs .1 + inx + cpx LBUF.C2 + bne .1 - rts +.2 ldy COL.BANK,x + sta $C000,y + ldy COL.OFS,x + + lda (ZPBasePtr),y Get C2 + and LBUF.C2.MASK clear ONLY bits ending at X2 mod 7 + sta GBYTE + lda LBUF.DATA,x get DATA bits + and LBUF.C2.DATA set ONLY bits ending at X2 mod 7 + ora GBYTE + sta (ZPBasePtr),y update screen + +.8 rts *-------------------------------------- MAN SAVE /A2OSX.SRC/DRV/DHGR.DRV.S.LBUF diff --git a/DRV/DHGR.DRV.S.LINE.txt b/DRV/DHGR.DRV.S.LINE.txt index 4d7df4ef..0e33e7da 100644 --- a/DRV/DHGR.DRV.S.LINE.txt +++ b/DRV/DHGR.DRV.S.LINE.txt @@ -5,7 +5,7 @@ INC 1 AUTO 6 .LIST OFF *-------------------------------------- -* HLINE X1,X2 at Y1 +* HLINE X1,X2 at Y1 (XOR,SET,ORA) *-------------------------------------- HLINE lda CB.Cache+S.CB.MODE @@ -80,70 +80,79 @@ HLINE.C16 lda CB.Cache+S.CB.X1 rts *-------------------------------------- -* VLINE Y1,Y2 at X1 +* VLINE Y1,Y2 at X1 (XOR,SET,ORA) *-------------------------------------- -VLINE lda CB.Cache+S.CB.OP - beq VLINE.OP0 +VLINE lda CB.Cache+S.CB.MODE + cmp #S.CB.MODE.MONO + bne VLINE.C16 -VLINE.XOR jsr VLINE.DIVMOD7 +VLINE.MONO >LDYA CB.Cache+S.CB.X1 + + jsr DIVMOD7YA + tay + lda COL.OFS,y + sta GBYTE Save COL (DIV) - ldy XMOD7 - lda Mono.Masks,y - sta .2+1 + lda COL.BANK,y + tay + sta $C000,y Select proper BANK - ldy XCOL7 + lda CB.Cache+S.CB.OP +* cmp #S.CB.OP.XOR + beq VLINE.MONO.XOR - ldx CB.Cache+S.CB.Y1 + lda CB.Cache+S.CB.COLOR + bne VLINE.MONO.WHITE -.1 lda BASEL,x +VLINE.MONO.BLACK + ldy CB.Cache+S.CB.Y1 + clc + +.1 lda BASEL,y + adc GBYTE sta ZPBasePtr - lda BASEH,x + lda BASEH,y sta ZPBasePtr+1 - lda (ZPBasePtr),y XOR -.2 eor #$ff - sta (ZPBasePtr),y - - inx - cpx CB.Cache+S.CB.Y2 + lda (ZPBasePtr) + and Mono.NMasks,x + sta (ZPBasePtr) + cpy CB.Cache+S.CB.Y2 + iny bcc .1 - beq .1 rts - -VLINE.OP0 lda CB.Cache+S.CB.MODE - dec - bne VLINE.C16 - -VLINE.MONO jsr VLINE.DIVMOD7 - ldy XMOD7 - lda Mono.NMasks,y includes And $7F for mono - sta .3+1 - - lda CB.Cache+S.CB.COLOR get color - beq .1 - lda Mono.Masks,y -.1 sta .4+1 - - ldy XCOL7 - - ldx CB.Cache+S.CB.Y1 - -.2 lda BASEL,x +VLINE.MONO.WHITE + +.1 lda BASEL,y + adc GBYTE sta ZPBasePtr - lda BASEH,x + lda BASEH,y sta ZPBasePtr+1 - lda (ZPBasePtr),y -.3 and #$ff -.4 ora #$ff - sta (ZPBasePtr),y + lda (ZPBasePtr) + ora Mono.Masks,x + sta (ZPBasePtr) + cpy CB.Cache+S.CB.Y2 + iny + bcc .1 - inx - cpx CB.Cache+S.CB.Y2 - bcc .2 - beq .2 + rts +VLINE.MONO.XOR + +.1 lda BASEL,y + adc GBYTE + sta ZPBasePtr + lda BASEH,y + sta ZPBasePtr+1 + + lda (ZPBasePtr) + eor Mono.Masks,x + sta (ZPBasePtr) + cpy CB.Cache+S.CB.Y2 + iny + bcc .1 rts @@ -177,6 +186,7 @@ VLINE.C16 lda CB.Cache+S.CB.X1 lda Color.Masks,x bits in 1st byte to light? beq .10 + and Color.Pixels,y apply color sta GBYTE @@ -192,6 +202,7 @@ VLINE.C16 lda CB.Cache+S.CB.X1 lda Color.Masks,x beq .11 + and Color.Pixels,y apply color sta GBYTE @@ -208,6 +219,7 @@ VLINE.C16 lda CB.Cache+S.CB.X1 lda Color.Masks,x beq .12 + and Color.Pixels,y apply color sta GBYTE @@ -223,6 +235,7 @@ VLINE.C16 lda CB.Cache+S.CB.X1 lda Color.Masks,x beq .13 + and Color.Pixels,y apply color sta GBYTE @@ -234,37 +247,6 @@ VLINE.C16 lda CB.Cache+S.CB.X1 sta (ZPBasePtr) .13 rts -*-------------------------------------- -VLINE.DIVMOD7 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 - - lda MOD7.lo,x - sta .3+1 - lda MOD7.hi,x - sta .3+2 - - lda DIV7.BASE,x - ldx CB.Cache+S.CB.X1 Get X LO byte.... - - clc - -.2 adc $ffff,x DIV7 : x = X.LO, a = X DIV 7 - sta XDIV7 save X DIV 7 - - tay - lsr - sta XCOL7 - ldx COL.BANK,y - sta $C000,x - -.3 lda $ffff,x MOD7 : x = X.LO, y = X MOD 7 - sta XMOD7 - rts - *-------------------------------------- MAN SAVE /A2OSX.SRC/DRV/DHGR.DRV.S.LINE diff --git a/DRV/DHGR.DRV.S.PIX.txt b/DRV/DHGR.DRV.S.PIX.txt index 0311cef1..d312540b 100644 --- a/DRV/DHGR.DRV.S.PIX.txt +++ b/DRV/DHGR.DRV.S.PIX.txt @@ -6,8 +6,7 @@ AUTO 6 .LIST OFF *-------------------------------------- * SETPIXEL -* In : YA = Ptr to CtrlBlk : -* 1 : OP (XOR only) +* 1 : OP (XOR,SET,ORA) * 2 : Mode * 3 : Color * 4 : SrcX1 @@ -17,60 +16,51 @@ SETPIXEL lda CB.Cache+S.CB.MODE bit #S.CB.MODE.C16 bne SETPIXEL.C16 -SETPIXEL.MONO ldx CB.Cache+S.CB.X1+1 Get X Hi byte.... +SETPIXEL.MONO >LDYA CB.Cache+S.CB.X1 - lda DIV7.lo,x - sta .1+1 - lda DIV7.hi,x - sta .1+2 + jsr DIVMOD7YA + tay + lda COL.OFS,y + phy - 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) + adc BASEL,y sta ZPBasePtr lda BASEH,y sta ZPBasePtr+1 + ply lda COL.BANK,y tay - sta $c000,y - -.2 ldy $ffff,x MOD7 : x = X.LO, y = X MOD 7 - + sta $C000,y Select proper BANK + lda CB.Cache+S.CB.OP +* cmp #S.CB.OP.XOR + beq SETPIXEL.MONO.XOR - bne .5 + lda CB.Cache+S.CB.COLOR + bne SETPIXEL.MONO.WHITE - lda (ZPBasePtr) XOR - eor Mono.Masks,y y = mod 7 +SETPIXEL.MONO.BLACK + lda (ZPBasePtr) + and Mono.NMasks,x + sta (ZPBasePtr) + + rts + +SETPIXEL.MONO.WHITE + lda (ZPBasePtr) + ora Mono.Masks,x sta (ZPBasePtr) rts -.5 lda (ZPBasePtr) - ldx CB.Cache+S.CB.COLOR get color - bne .6 - - and Mono.NMasks,y includes And $7F for mono +SETPIXEL.MONO.XOR + lda (ZPBasePtr) + eor Mono.Masks,x sta (ZPBasePtr) - rts -.6 and #$7F switch back this byte to mono - ora Mono.Masks,y - sta (ZPBasePtr) rts SETPIXEL.C16 lda CB.Cache+S.CB.X1 diff --git a/DRV/DHGR.DRV.S.RECT.txt b/DRV/DHGR.DRV.S.RECT.txt index acfe6139..f0a5876e 100644 --- a/DRV/DHGR.DRV.S.RECT.txt +++ b/DRV/DHGR.DRV.S.RECT.txt @@ -6,6 +6,7 @@ AUTO 6 .LIST OFF *-------------------------------------- * FILLRECT +* 1 : OP (XOR,SET,ORA) * 2 : Mode * 3 : Color * 4 : SrcX1 @@ -28,6 +29,37 @@ FILLRECT jsr HLINE .8 rts *-------------------------------------- +* 4 : SrcX1 +* 6 : SrcY1 +* 8 : SrcX2 +* 10 : SrcY2 +* 18 : S.CB.DstPtr = Size in Bytes to save this RECT +*-------------------------------------- +GETRECTBUFSIZE >LDYA CB.Cache+S.CB.X1 + jsr DIVMOD7YA + + sta GBYTE + + >LDYA CB.Cache+S.CB.X2 + jsr DIVMOD7YA + + inc COL2 + 1 + sec + sbc GBYTE (COL2+1)-COL1 + tax + + >LDYA CB.Cache+S.CB.Y1 + jsr YAMultX + + phy + + ldy #S.CB.DstPtr+1 + sta (ZPCmdPtr),y + pla + dey + sta (ZPCmdPtr),y + rts +*-------------------------------------- MAN SAVE /A2OSX.SRC/DRV/DHGR.DRV.S.BLT LOAD /A2OSX.SRC/DRV/DHGR.DRV.S diff --git a/DRV/DHGR.DRV.S.txt b/DRV/DHGR.DRV.S.txt index a3d3ab3d..f958916c 100644 --- a/DRV/DHGR.DRV.S.txt +++ b/DRV/DHGR.DRV.S.txt @@ -18,6 +18,7 @@ ZPBasePtr .EQ ZPDRV+2 ZPPalettePtr .EQ ZPDRV+4 ZPBMDataPtr .EQ ZPDRV+6 ZPBMMaskPtr .EQ ZPDRV+8 +ZPBMSavePtr .EQ ZPDRV+10 *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -74,7 +75,12 @@ J.Cmds .DA SETPIXEL .DA VLINE .DA FILLRECT .DA BITBLT + .DA GETRECTBUFSIZE *-------------------------------------- +J.LBUF.DrawAtY .DA LBUF.DrawAtY.XOR + .DA LBUF.DrawAtY.SET + .DA LBUF.DrawAtY.ORA + .DA LBUF.DrawAtY.AND L.DSTAT .DA DSTAT L.DIV7.0 .DA DIV7.0 .DA DIV7.256 @@ -168,24 +174,23 @@ WRITE >STYA ZPCmdPtr * X = MOD *-------------------------------------- DIVMOD7YA dec - beq DIVMOD7Y1 - bpl DIVMOD7Y2 - -DIVMOD7Y0 lda DIV7.0,y - ldx MOD7.0,y - rts - -DIVMOD7Y1 lda DIV7.256,y + bmi .2 clc + beq .1 + + lda DIV7.512,y + adc #$49 + ldx MOD7.512,y + rts + +.1 lda DIV7.256,y adc #$24 ldx MOD7.256,y rts -DIVMOD7Y2 lda DIV7.512,y - clc - adc #$49 - ldx MOD7.512,y - rts +.2 lda DIV7.0,y + ldx MOD7.0,y + rts *-------------------------------------- * IN: * Y,A = num1 (16) @@ -234,7 +239,8 @@ CB.CmdLen .DA S.CB.Y1+1 SETPIXEL .DA S.CB.X2+1 HLINE .DA S.CB.Y2+1 VLINE .DA S.CB.Y2+1 FILLRECT - .DA S.CB.DstPtr+1 BITBLT + .DA S.CB.DstPtr+1 BITBLT + .DA S.CB.DstPtr+1 GETRECTBUFSIZE *-------------------------------------- CB.Cache .BS S.CB BM.Cache .BS S.BM @@ -253,9 +259,6 @@ LBUF.C2.DATA .BS 1 LBUF.MASK .BS 80 LBUF.DATA .BS 80 *-------------------------------------- -XDIV7 .BS 1 -XMOD7 .BS 1 -XCOL7 .BS 1 GBYTE .BS 1 GWORD .BS 2 *-------------------------------------- diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 8316e185..d8706669 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -32,6 +32,7 @@ A2osX.ROMCALL .EQ $BD09 A2osX.BADCALL .EQ $BD0C *-------------------------------------- pDevJmp .EQ $BD10 +A2osx.SLEEP .EQ $BD13 *-------------------------------------- * $BEE0->$BEEF : Public Variables *-------------------------------------- @@ -214,7 +215,7 @@ SYS.GetMem0.YA .EQ $EA SYS.NewStr.YA .EQ $EC SYS.GetMemStat.YA .EQ $EE -SYS.Sleep .EQ $F0 +* .EQ $F0 * .EQ $F2 * .EQ $F4 * .EQ $F6 diff --git a/INC/KERNEL.I.txt b/INC/KERNEL.I.txt index 6fa8d15f..01f75697 100644 --- a/INC/KERNEL.I.txt +++ b/INC/KERNEL.I.txt @@ -97,7 +97,13 @@ K.MLI.PATH .EQ $03B0 64+1 -> $03F0 * Main/Aux $800 -> $BFF : System Screen *-------------------------------------- PS.Table.PID .EQ $0C00 K.PS.MAX -PS.Table.hMem .EQ $0C00+K.PS.MAX +PS.Table.hMem .EQ $0C20 K.PS.MAX +*-------------------------------------- +Evt.Table .EQ $0C40 K.EVT.MAX*S.EVT.SIZE=8*8=64b +*-------------------------------------- +Flt.Table .EQ $0C80 K.FLT.MAX*S.FLT.SIZE=4*32=128b +*-------------------------------------- +K.IOBuf256 .EQ $0D00 Main K.Buf256 .EQ $0E00 Main *-------------------------------------- K.STACKTOP .EQ $0F20 down to $0f00 @@ -107,11 +113,9 @@ K.STACKTOP .EQ $0F20 down to $0f00 Z80STACK .EQ $0FFF (0FFFFh) Down to $0F20 Z80JMP .EQ $1000 (00000h) Up To $10FF *-------------------------------------- -Flt.Table .EQ $1100 K.FLT.MAX*S.FLT.SIZE=8*32=128b +* free $1100->15FF = $500 *-------------------------------------- -Evt.Table .EQ $1180 K.EVT.MAX*S.EVT.SIZE=16*8=128b -*-------------------------------------- -Dev.Table .EQ $1200 K.DEV.MAX*S.DEV.SIZE=32*16=512b +Dev.Table .EQ $1600 K.DEV.MAX*S.DEV=32*16=512b *-------------------------------------- * MemMgr : $1800->$1FFF MAIN/AUX (2 kBytes) *-------------------------------------- diff --git a/INC/LIBGUI.I.txt b/INC/LIBGUI.I.txt index a26e3445..49387866 100644 --- a/INC/LIBGUI.I.txt +++ b/INC/LIBGUI.I.txt @@ -13,13 +13,15 @@ S.CB.CMD.HLINE .EQ 4 S.CB.CMD.VLINE .EQ 6 S.CB.CMD.FILLRECT .EQ 8 S.CB.CMD.BITBLT .EQ 10 -S.CB.CMD.DRAWLINE .EQ 12 +S.CB.CMD.GETRECTBUFSIZE .EQ 12 +S.CB.CMD.DRAWLINE .EQ 14 S.CB.OP .EQ 1 S.CB.OP.XOR .EQ %00000000 screen EOR bitmap -> Screen -S.CB.OP.SET .EQ %00000001 replace screen with bitmap -S.CB.OP.ORA .EQ %00000010 combine screen & bitmap -> Screen +S.CB.OP.SET .EQ %00000010 replace screen with bitmap +S.CB.OP.ORA .EQ %00000100 combine screen & bitmap -> Screen +S.CB.OP.AND .EQ %00000110 Apply BitMap mask before painting S.CB.OP.SAVE .EQ %00010000 Save Screen to DstPtr before painting -S.CB.OP.AND .EQ %00100000 Apply BitMap mask before painting +S.CB.OP.RESTORE .EQ %00100000 Restore Screen From DstPtr before painting S.CB.OP.COLOR .EQ %01000000 Assume BitMap is COLOR S.CB.MODE .EQ 2 S.CB.MODE.MONO .EQ %00000001 b/w (1 bit/pixel) @@ -55,6 +57,7 @@ CUR.T.WAIT .EQ 4 CUR.T.RESIZEX .EQ 6 CUR.T.RESIZEY .EQ 8 CUR.T.RESIZEXY .EQ 10 +CUT.T.TEXT .EQ 12 *-------------------------------------- S.CUR.HotPointX .EQ 0 S.CUR.HotPointY .EQ 1 @@ -81,7 +84,6 @@ LIBGUI.SetCursor.A .EQ 10 LIBGUI.SetCursorPos .EQ 12 LIBGUI.HideCursor .EQ 14 LIBGUI.ShowCursor .EQ 16 -LIBGUI.DrawLine .EQ 18 *-------------------------------------- MAN SAVE /A2OSX.BUILD/INC/LIBGUI.I diff --git a/INC/LIBTCPIP.I.txt b/INC/LIBTCPIP.I.txt index f15731f0..4dda77b4 100644 --- a/INC/LIBTCPIP.I.txt +++ b/INC/LIBTCPIP.I.txt @@ -31,12 +31,12 @@ LIBTCPIP.PULSEA .EQ 10 LIBTCPIP.ARP.Clear .EQ 12 LIBTCPIP.ARP.Query .EQ 14 LIBTCPIP.ARP.Add .EQ 16 -LIBTCPIP.ARP.GetC.Ache .EQ 18 +LIBTCPIP.ARP.GetCache .EQ 18 LIBTCPIP.DNS.Clear .EQ 20 LIBTCPIP.DNS.Query .EQ 22 LIBTCPIP.DNS.Add .EQ 24 -LIBTCPIP.DNS.GetC.Ache .EQ 26 +LIBTCPIP.DNS.GetCache .EQ 26 LIBTCPIP.HST.GetByName .EQ 28 LIBTCPIP.HST.GetByAddr .EQ 30 diff --git a/INC/MACROS.I.txt b/INC/MACROS.I.txt index bbbd3821..1c9763b5 100644 --- a/INC/MACROS.I.txt +++ b/INC/MACROS.I.txt @@ -19,6 +19,10 @@ AUTO 6 .EM *-------------------------------------- * SYSCALLs Macros +*-------------------------------------- + .MA SLEEP + jsr A2osX.SLEEP + .EM *-------------------------------------- .MA SYSCALL ldx #SYS.]1 diff --git a/LIB/LIBGUI.S.txt b/LIB/LIBGUI.S.txt index 6630e4a3..0669e68e 100644 --- a/LIB/LIBGUI.S.txt +++ b/LIB/LIBGUI.S.txt @@ -51,8 +51,8 @@ CS.START cld *-------------------------------------- .1 .DA LIB.LOAD .DA LIB.UNLOAD - .DA InitGUI.A -J.Cmds .DA CloseGUI J.Cmds-12 !!! +J.Cmds .DA InitGUI.A + .DA CloseGUI J.Cmds-12 !!! .DA Draw .DA SetCursor.A .DA SetCursorPos diff --git a/SBIN/DHCPCLNT.S.txt b/SBIN/DHCPCLNT.S.txt index 992f8b9a..68ee3563 100644 --- a/SBIN/DHCPCLNT.S.txt +++ b/SBIN/DHCPCLNT.S.txt @@ -131,7 +131,7 @@ CS.RUN.SDISC ldy #hSocket .1 lda #S.IPCFG.STATUS.SDISC sta IPCFG -CS.RUN.ROFFER >SYSCALL Sleep +CS.RUN.ROFFER >SLEEP jsr CS.RUN.SKT.RCVD bcc .1 @@ -167,7 +167,7 @@ CS.RUN.SREQ ldx #3 lda #S.IPCFG.STATUS.SREQ sta IPCFG -CS.RUN.RACK >SYSCALL Sleep +CS.RUN.RACK >SLEEP jsr CS.RUN.SKT.RCVD bcc .1 diff --git a/SBIN/GETTY.S.txt b/SBIN/GETTY.S.txt index f8823f8d..f9a3607e 100644 --- a/SBIN/GETTY.S.txt +++ b/SBIN/GETTY.S.txt @@ -83,13 +83,13 @@ CS.INIT ldy #S.PS.ARGC sec .9 rts *-------------------------------------- -CS.RUN >SYSCALL Sleep +CS.RUN >SLEEP >SYSCALL GetChar bcs CS.RUN .11 * jsr PRINTA2 - >SYSCALL Sleep + >SLEEP >SYSCALL GetChar bcc .11 @@ -112,7 +112,7 @@ CS.RUN >SYSCALL Sleep CS.RUN.LOOP -.1 >SYSCALL Sleep +.1 >SLEEP >SYSCALL GetChar bcs .4 @@ -140,14 +140,14 @@ CS.RUN.LOOP .8 clc rts *-------------------------------------- -CS.RUN.IACMODE >SYSCALL Sleep Wait for IAC VERB (or SB) +CS.RUN.IACMODE >SLEEP Wait for IAC VERB (or SB) >SYSCALL GetChar bcs CS.RUN.IACMODE >STA.G IAC.VERB * jsr PRINTA -.1 >SYSCALL Sleep Wait for IAC OPT +.1 >SLEEP Wait for IAC OPT >SYSCALL GetChar bcs .1 @@ -164,7 +164,7 @@ CS.RUN.IACVERB jmp CS.RUN.LOOP *-------------------------------------- CS.RUN.IACSB -.1 >SYSCALL Sleep +.1 >SLEEP >SYSCALL GetChar bcs .1 @@ -175,7 +175,7 @@ CS.RUN.IACSB lda #0 sta (pData) reset IAC.SB.DATA -.2 >SYSCALL Sleep +.2 >SLEEP >SYSCALL GetChar bcs .2 @@ -198,7 +198,7 @@ CS.RUN.IACSB sta (pData),y bra .2 -.4 >SYSCALL Sleep +.4 >SLEEP >SYSCALL GetChar bcs .4 diff --git a/SBIN/GUI.S.txt b/SBIN/GUI.S.txt index 5af1bdc9..fd87274f 100644 --- a/SBIN/GUI.S.txt +++ b/SBIN/GUI.S.txt @@ -179,6 +179,9 @@ CS.QUIT clc *-------------------------------------- Destop.Paint >PUSHW L.Rect.CB >LIBCALL hLIBGUI,LIBGUI.Draw + + >PUSHW L.DrawLines.CB + >LIBCALL hLIBGUI,LIBGUI.Draw lda #S.CB.MODE.C16 sta SetPixel.Mode @@ -222,12 +225,7 @@ Destop.Paint >PUSHW L.Rect.CB cmp #16 bne .1 -.4 - - >PUSHW L.DrawLines.CB - >LIBCALL hLIBGUI,LIBGUI.Draw - - rts +.4 rts *-------------------------------------- *-------------------------------------- *-------------------------------------- @@ -292,14 +290,6 @@ Rect.CB .DA #S.CB.CMD.FILLRECT .DA #0 *-------------------------------------- -SetPixel.CB .DA #S.CB.CMD.SETPIXEL -SetPixel.OP .BS 1 -SetPixel.Mode .BS 1 -SetPixel.Color .BS 1 -SetPixel.X .BS 2 -SetPixel.Y .BS 2 - .DA #0 -*-------------------------------------- DrawLines.CB .DA #S.CB.CMD.DRAWLINE .DA #S.CB.OP.ORA .DA #S.CB.MODE.C16 @@ -337,7 +327,7 @@ DrawLines.CB .DA #S.CB.CMD.DRAWLINE .DA 191 .DA #S.CB.CMD.DRAWLINE - .DA #S.CB.OP.ORA + .DA #S.CB.OP.SET .DA #S.CB.MODE.MONO .DA #1 .DA 28 @@ -346,7 +336,7 @@ DrawLines.CB .DA #S.CB.CMD.DRAWLINE .DA 191 .DA #S.CB.CMD.DRAWLINE - .DA #S.CB.OP.ORA + .DA #S.CB.OP.SET .DA #S.CB.MODE.MONO .DA #1 .DA 84 @@ -355,7 +345,7 @@ DrawLines.CB .DA #S.CB.CMD.DRAWLINE .DA 191 .DA #S.CB.CMD.DRAWLINE - .DA #S.CB.OP.ORA + .DA #S.CB.OP.XOR .DA #S.CB.MODE.MONO .DA #1 .DA 0 @@ -365,6 +355,14 @@ DrawLines.CB .DA #S.CB.CMD.DRAWLINE .DA #0 *-------------------------------------- +SetPixel.CB .DA #S.CB.CMD.SETPIXEL +SetPixel.OP .BS 1 +SetPixel.Mode .BS 1 +SetPixel.Color .BS 1 +SetPixel.X .BS 2 +SetPixel.Y .BS 2 + .DA #0 +*-------------------------------------- .DUMMY .OR 0 DS.START diff --git a/SBIN/HTTPD.S.txt b/SBIN/HTTPD.S.txt index b412bc3b..86e9309d 100644 --- a/SBIN/HTTPD.S.txt +++ b/SBIN/HTTPD.S.txt @@ -69,7 +69,7 @@ CS.RUN jsr Init.Timeout lda (ZPIPCfgPtr) Configured ? bmi CS.RUN.INIT - >SYSCALL Sleep + >SLEEP jsr Wait.Timeout bcc .1 >SYSCALL GetC @@ -102,7 +102,7 @@ CS.RUN.INIT ldx #3 >LDYA L.MSG.INITOK >SYSCALL PrintF.YA -.2 >SYSCALL Sleep +.2 >SLEEP jsr CS.RUN.SERVER bcs CS.RUN.ERR diff --git a/SBIN/KCONFIG.S.txt b/SBIN/KCONFIG.S.txt index 72340f00..8ab33c38 100644 --- a/SBIN/KCONFIG.S.txt +++ b/SBIN/KCONFIG.S.txt @@ -96,7 +96,7 @@ CS.RUN.REPaint >LDYA L.MSG.FCONF >LDYA ZPCfgPtr jsr CS.RUN.DumpConfYA -CS.RUN.Loop >SYSCALL Sleep +CS.RUN.Loop >SLEEP >SYSCALL GetChar bcs CS.RUN.Loop diff --git a/SBIN/LOGIN.S.txt b/SBIN/LOGIN.S.txt index 16fd7a1e..653eeb03 100644 --- a/SBIN/LOGIN.S.txt +++ b/SBIN/LOGIN.S.txt @@ -58,7 +58,7 @@ CS.RUN lda #0 lda #0 Echo all caracters jsr INPUT.RESET -.1 >SYSCALL Sleep +.1 >SLEEP >SYSCALL GetChar bcs .1 no char jsr INPUT.CHARIN @@ -72,7 +72,7 @@ CS.RUN lda #0 lda #'*' jsr INPUT.RESET -.2 >SYSCALL Sleep +.2 >SLEEP >SYSCALL GetChar bcs .2 no char jsr INPUT.CHARIN diff --git a/SBIN/NFSD.S.txt b/SBIN/NFSD.S.txt index 83e6d43e..57eea77c 100644 --- a/SBIN/NFSD.S.txt +++ b/SBIN/NFSD.S.txt @@ -68,7 +68,7 @@ CS.RUN jsr Init.Timeout lda (ZPIPCfgPtr) Configured ? bmi CS.RUN.INIT - >SYSCALL Sleep + >SLEEP jsr Wait.Timeout bcc .1 @@ -96,7 +96,7 @@ CS.RUN.INIT ldx #3 >LDYA L.MSG.INITOK >SYSCALL PrintF.YA -.11 >SYSCALL Sleep +.11 >SLEEP ldy #bCTRLC lda (pData),y bmi .99 diff --git a/SBIN/SHELL.S.txt b/SBIN/SHELL.S.txt index 70833cea..9a253bf3 100644 --- a/SBIN/SHELL.S.txt +++ b/SBIN/SHELL.S.txt @@ -174,7 +174,7 @@ CS.RUN >LDA.G bReadMode READ Command ? .12 jsr CL.PrintPrompt bcs .9 -.1 >SYSCALL Sleep +.1 >SLEEP >SYSCALL GetChar bcs .1 no char @@ -211,7 +211,7 @@ CS.RUN >LDA.G bReadMode READ Command ? CS.RUN.READ lda #0 reset Buffer sta (ZPCMDBuf) -.1 >SYSCALL Sleep +.1 >SLEEP >SYSCALL GetChar bcs .1 no char diff --git a/SBIN/TELNETD.S.txt b/SBIN/TELNETD.S.txt index 03e5f575..f6f681d1 100644 --- a/SBIN/TELNETD.S.txt +++ b/SBIN/TELNETD.S.txt @@ -69,7 +69,7 @@ CS.RUN jsr Init.Timeout lda (ZPIPCfgPtr) Configured ? bmi CS.RUN.INIT - >SYSCALL Sleep + >SLEEP jsr Wait.Timeout bcc .1 >SYSCALL GetC @@ -102,7 +102,7 @@ CS.RUN.INIT ldx #3 >LDYA L.MSG.INITOK >SYSCALL PrintF.YA -.2 >SYSCALL Sleep +.2 >SLEEP jsr CS.RUN.SERVER bcs CS.RUN.ERR diff --git a/SYS/KERNEL.S.CORE.txt b/SYS/KERNEL.S.CORE.txt index 1804e496..5c389bf5 100644 --- a/SYS/KERNEL.S.CORE.txt +++ b/SYS/KERNEL.S.CORE.txt @@ -117,21 +117,7 @@ CORE.Events jsr CORE.GetEvents lda CORE.EvtCount bne .1 *-------------------------------------- -.4 lda A2osX.ASCREEN - cmp #2 is SYS active? - bne .6 - - ldx CORE.CPULoadI - lda CORE.CPULoadC,x - sta SYS.BASL0+38 - dex - bpl .5 - - ldx #3 - -.5 stx CORE.CPULoadI - -.6 bit OPENAPPLE +.4 bit OPENAPPLE bpl .8 lda KBD @@ -429,28 +415,6 @@ CORE.PSSelect0 >LDYAI CORE.S.PS0 Select PS0 >LDYA CORE.S.PS0+S.PS.ZP+4 >STYA pStack rts -*/-------------------------------------- -* # Sleep -* Make current process suspend until next RUN -* ## In : -* (none) -* ## Out : -* (none) -*\-------------------------------------- -K.Sleep pla get PC LO - sec - sbc pCode - ldy #S.PS.PC - sta (pPs),y - - pla get PC HI - sbc pCode+1 - iny - sta (pPs),y - - lda (pPs) - ora #S.PS.F.SLEEP - sta (pPs) *-------------------------------------- CORE.PSLeave ldy #S.PS.ZP+23 ldx #23 @@ -505,8 +469,6 @@ CORE.TickPer10t .BS 1 CORE.TickSec .BS 1 CORE.Tick10t .BS 1 *-------------------------------------- -CORE.CPULoadI .BS 1 -CORE.CPULoadC .AS -"/-\|" CORE.Counter .BS 1 CORE.PSCount .DA #0 CORE.LastPSID .DA #0 diff --git a/SYS/KERNEL.S.GP.txt b/SYS/KERNEL.S.GP.txt index 34cd5aac..5ecfb0b6 100644 --- a/SYS/KERNEL.S.GP.txt +++ b/SYS/KERNEL.S.GP.txt @@ -43,6 +43,23 @@ AUTO 6 rts *-------------------------------------- jmp (pDev) pDevJmp +*-------------------------------------- + pla get PC LO + sec + sbc pCode + ldy #S.PS.PC + sta (pPs),y + + pla get PC HI + sbc pCode+1 + iny + sta (pPs),y + + lda (pPs) + ora #S.PS.F.SLEEP + sta (pPs) + clc + rts *-------------------------------------- * *** MUST BE REINTRANT *** *-------------------------------------- diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index d77464e0..b7493e54 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -147,7 +147,7 @@ K.SYSCALL.JMP .DA 0 $00 .DA K.NewStr.YA .DA K.GetMemStat.YA *-------------------------------------- - .DA K.Sleep $F0 + .DA 0 $F0 .DA 0 .DA 0 .DA 0