MOUSE.DRV working,DHGR.DRV color mode with bugs

This commit is contained in:
Rémy GIBERT 2015-03-23 08:28:03 +01:00
parent 87bb6efe1f
commit 2192ead073
14 changed files with 596 additions and 221 deletions

Binary file not shown.

View File

@ -19,5 +19,6 @@ EXEC DHCPCLNT
*MOUNT TFTP 192.168.1.5:/AO2SX /TFTP
LOAD DHGR.DRV
LOAD MOUSE.DRV
EXEC GUI
MAN
TEXT A2OSX.STARTUP

View File

@ -63,6 +63,9 @@ OPEN stz CURON
.8 lda A2osX.SCREENS
ora #A2osX.SCREENS.C
sta A2osX.SCREENS
lda #A2osX.SCREENS.C
>SYSCALL SYS.ScreenSelectA
clc
rts
@ -298,7 +301,11 @@ SetCharAtXY pha
.4 sta CLRPAGE2
rts
*--------------------------------------
GetCharAtXY sta SET80STORE
GetCharAtXY lda RDPAGE2
pha
lda RD80STORE
pha
sta SET80STORE
txa
lsr
@ -314,7 +321,19 @@ GetCharAtXY sta SET80STORE
sta ZPBASL1+1
lda (ZPBASL1)
plx
bmi .3
sta CLR80STORE
.3 plx
bpl .4
sta SETPAGE2
rts
.4 sta CLRPAGE2
rts
*--------------------------------------
CS.END
DEVNAME >PSTRING "CON"

View File

@ -46,8 +46,7 @@ L.DEVINFO .DA DEVINFO
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
*--------------------------------------
OPEN
lda #S.DEV.F.GFX
OPEN lda #S.DEV.F.GFX
sta (pDevContext)
ldy #S.DEV.NAME
@ -60,10 +59,68 @@ OPEN
iny
bne .1
.8 lda A2osX.SCREENS
ora #A2osX.SCREENS.G
sta A2osX.SCREENS
lda #A2osX.SCREENS.G
>SYSCALL SYS.ScreenSelectA
sta SET80STORE
ldx #192
.81 dex
lda BASEL,x
sta ZPBASE
lda BASEH,x
sta ZPBASE+1
lda #$D5
ldy #39
sta SETPAGE2
.82 sta (ZPBASE),y
dey
bpl .82
lda #$AA
ldy #39
sta CLRPAGE2
.83 sta (ZPBASE),y
dey
bpl .83
dex
lda BASEL,x
sta ZPBASE
lda BASEH,x
sta ZPBASE+1
lda #$2A
ldy #39
sta SETPAGE2
.84 sta (ZPBASE),y
dey
bpl .84
lda #$55
ldy #39
sta CLRPAGE2
.85 sta (ZPBASE),y
dey
bpl .85
txa
bne .81
>DEBUG
clc
rts
*--------------------------------------
@ -87,9 +144,9 @@ GETINFO >LDYA L.DEVINFO
* PULLB = X.HI
* PULLB = Y
* PULLB = Mode
* 00000000=mono
* 00000001=xor (mono on 1 bit)
* 10000000=color
* 00000001=mono
* 00000010=16 colors
* 1000000=xor (mono on 1 bit)
* PULLB = Color (if not xor)
*--------------------------------------
SETPIXEL >PULLA X.LO
@ -99,18 +156,15 @@ SETPIXEL >PULLA X.LO
bcs .1
lsr
bcs .2 if 512 < x
lda DIV7.0,x
tay
ldy DIV7.0,x
lda MOD7.0,x
bra .3
.1 lda DIV7.256,x
tay
.1 ldy DIV7.256,x
lda MOD7.256,x
bra .3
.2 lda DIV7.512,x
tay
.2 ldy DIV7.512,x
lda MOD7.512,x
.3 pha save MOD,y=DIV
@ -123,15 +177,29 @@ SETPIXEL >PULLA X.LO
sta ZPBASE+1
sta SET80STORE and prepare for page switching
sta SETHIRES
plx get back MOD in x
>PULLA Pull Mode
bmi SETPIXEL.COLOR
and #$FF
bpl SETPIXEL.SOLID
SETPIXEL.XOR tya
lsr
tay
bcs .1 odd=main ram
sta SETPAGE2
bra .2
.1 sta CLRPAGE2
.2 lda (ZPBASE),y
eor Mono.Masks,x
sta (ZPBASE),y
rts
*--------------------------------------
* X=MOD,Y=DIV
* A=Mode,X=MOD,Y=DIV
*--------------------------------------
SETPIXEL.MONO pha
SETPIXEL.SOLID dec
bne SETPIXEL.COLOR
tya
lsr
tay
@ -139,29 +207,21 @@ SETPIXEL.MONO pha
sta SETPAGE2
bra .2
.1 sta CLRPAGE2
.2 pla
lsr CS=xor
bcs SETPIXEL.MONOX
>PULLA get COLOR
.2 >PULLA get COLOR
lsr
bcs SETPIXEL.MONOW
bcs .3 set white pixel
lda (ZPBASE),y
and Mono.NMasks,x
and Mono.NMasks,x includes And $7F for mono
sta (ZPBASE),y
rts
SETPIXEL.MONOW lda (ZPBASE),y
and #$7F switch back ths byte to mono
.3 lda (ZPBASE),y
and #$7F switch back this byte to mono
ora Mono.Masks,x
sta (ZPBASE),y
rts
SETPIXEL.MONOX lda (ZPBASE),y
eor Mono.Masks,x
sta (ZPBASE),y
rts
*--------------------------------------
* X=MOD,Y=DIV
*--------------------------------------
@ -245,8 +305,7 @@ FILLREC
BITBLT
rts
*--------------------------------------
* PRIVATE
*--------------------------------------
CS.END
DIV7.0 .HS 0000000000000001010101010101
.HS 0202020202020203030303030303
.HS 0404040404040405050505050505
@ -383,71 +442,71 @@ BASEH .HS 20.24.28.2C.30.34.38.3C
.HS 23.27.2B.2F.33.37.3B.3F
.HS 23.27.2B.2F.33.37.3B.3F
*--------------------------------------
Mono.NMasks .DA %01111110
.DA %01111101
.DA %01111011
.DA %01110111
.DA %01101111
.DA %01011111
.DA %00111111
Mono.NMasks .DA #%01111110
.DA #%01111101
.DA #%01111011
.DA #%01110111
.DA #%01101111
.DA #%01011111
.DA #%00111111
*--------------------------------------
Mono.Masks .DA %00000001
.DA %00000010
.DA %00000100
.DA %00001000
.DA %00010000
.DA %00100000
.DA %01000000
Mono.Masks .DA #%00000001
.DA #%00000010
.DA #%00000100
.DA #%00001000
.DA #%00010000
.DA #%00100000
.DA #%01000000
*--------------------------------------
* bits to "and" to reset color of pixel (0 means nothing to do)
*--------------------------------------
Color.NMasks .DA %01110000.00000000.00000000.00000000
.DA %00001111.01111110.00000000.00000000
.DA %00000000.01100001.00000000.00000000
.DA %00000000.00011111.01111100.00000000
.DA %00000000.00000000.01000011.00000000
.DA %00000000.00000000.00111111.01111000
.DA %00000000.00000000.00000000.00000111
Color.NMasks .DA #%01110000,#%00000000,#%00000000,#%00000000
.DA #%00001111,#%01111110,#%00000000,#%00000000
.DA #%00000000,#%01100001,#%00000000,#%00000000
.DA #%00000000,#%00011111,#%01111100,#%00000000
.DA #%00000000,#%00000000,#%01000011,#%00000000
.DA #%00000000,#%00000000,#%00111111,#%01111000
.DA #%00000000,#%00000000,#%00000000,#%00000111
*--------------------------------------
* bits to "and" to Get color of pixel (0 means nothing to do)
* 4 bytes * 7 mods
*--------------------------------------
Color.Masks .DA %00001111.00000000.00000000.00000000 (nothing to do)
.DA %01110000.00000001.00000000.00000000 asl0,asl0,rol1,asl0,rol1,asl0,rol1
.DA %00000000.00011110.00000000.00000000 lsr1
.DA %00000000.01100000.00000011.00000000 asl1,asl1,rol2,asl1,rol2
.DA %00000000.00000000.00111100.00000000 lsr2,lsr2
.DA %00000000.00000000.01000000.00000111 asl2,asl2,rol3
.DA %00000000.00000000.00000000.01111000 lsr3,lsr3,lsr3
Color.Masks .DA #%00001111,#%00000000,#%00000000,#%00000000 (nothing to do)
.DA #%01110000,#%00000001,#%00000000,#%00000000 asl0,asl0,rol1,asl0,rol1,asl0,rol1
.DA #%00000000,#%00011110,#%00000000,#%00000000 lsr1
.DA #%00000000,#%01100000,#%00000011,#%00000000 asl1,asl1,rol2,asl1,rol2
.DA #%00000000,#%00000000,#%00111100,#%00000000 lsr2,lsr2
.DA #%00000000,#%00000000,#%01000000,#%00000111 asl2,asl2,rol3
.DA #%00000000,#%00000000,#%00000000,#%01111000 lsr3,lsr3,lsr3
*--------------------------------------
Color.Enable .DA %10001111.00000000.00000000.00000000
.DA %11110000.00000001.00000000.00000000
.DA %00000000.10011110.00000000.00000000
.DA %00000000.11100000.00000011.00000000
.DA %00000000.00000000.10111100.00000000
.DA %00000000.00000000.11000000.00000111
.DA %00000000.00000000.00000000.11111000
Color.Enable .DA #%10001111,#%00000000,#%00000000,#%00000000
.DA #%11110000,#%00000001,#%00000000,#%00000000
.DA #%00000000,#%10011110,#%00000000,#%00000000
.DA #%00000000,#%11100000,#%00000011,#%00000000
.DA #%00000000,#%00000000,#%10111100,#%00000000
.DA #%00000000,#%00000000,#%11000000,#%00000111
.DA #%00000000,#%00000000,#%00000000,#%11111000
*--------------------------------------
* bits to "ora" to set color of pixel (including "color bit set " for byte hosting bit0)
* 4 bytes * 16 Colors
* pixel masks c1110000.c3322221.c5444433.c6666555
*--------------------------------------
Color.Pixels .DA %00000000.00000000.00000000.00000000 0000,Black (color bit disable)
.DA %10010001.10100010.11000100.10001000 0001,Magenta
.DA %10100010.11000100.10001000.10010001 0010,Brown
.DA %10110011.11100110.11001100.10011001 0011,Orange
.DA %11000100.10001000.10010001.10100010 0100,Dark Green
.DA %11010101.10101010.11010101.10101010 0101,Grey1
.DA %11100110.11001100.10011001.10110011 0110,Green
.DA %11110111.11101110.11011101.10111011 0111,Yellow
.DA %10001000.10010001.10100010.11000100 1000,Dark Blue
.DA %10011001.10110011.11100110.11001100 1001,Violet
.DA %10101010.11010101.10101010.11010101 1010,Grey2
.DA %10111011.11110111.11101111.11011101 1011,Pink
.DA %11001100.10011001.10110011.11100110 1100,Medium Blue
.DA %11011101.10111011.11110111.11101110 1101,Light Blue
.DA %11101110.11011101.10111011.11110111 1110,Aqua
.DA %01111111.01111111.01111111.01111111 1111,White (color bit disable)
Color.Pixels .DA #%00000000,#%00000000,#%00000000,#%00000000 (color bit disable)
.DA #%10010001,#%10100010,#%11000100,#%10001000
.DA #%10100010,#%11000100,#%10001000,#%10010001
.DA #%10110011,#%11100110,#%11001100,#%10011001
.DA #%11000100,#%10001000,#%10010001,#%10100010
.DA #%11010101,#%10101010,#%11010101,#%10101010
.DA #%11100110,#%11001100,#%10011001,#%10110011
.DA #%11110111,#%11101110,#%11011101,#%10111011
.DA #%10001000,#%10010001,#%10100010,#%11000100
.DA #%10011001,#%10110011,#%11100110,#%11001100
.DA #%10101010,#%11010101,#%10101010,#%11010101
.DA #%10111011,#%11110111,#%11101111,#%11011101
.DA #%11001100,#%10011001,#%10110011,#%11100110
.DA #%11011101,#%10111011,#%11110111,#%11101110
.DA #%11101110,#%11011101,#%10111011,#%11110111
.DA #%01111111,#%01111111,#%01111111,#%01111111 (color bit disable)
*Black 00 00 00 00 0000
*Magenta 08 11 22 44 0001
@ -465,15 +524,12 @@ Color.Pixels .DA %00000000.00000000.00000000.00000000 0000,Black (color bit disa
*Light Blue 3B 77 6E 5D 1101
*Aqua 77 6E 5D 3B 1110
*White 7F 7F 7F 7F 1111
*--------------------------------------
CS.END
DEVNAME >PSTRING "GFX"
*--------------------------------------
DS.START
*--------------------------------------
DEVINFO .DA #S.DEV.F.GFX type of DEVINFO STRUCT
DEVINFO.MODES .DA #%10000011 XOR,16 & B/W
DEVINFO.W .DA 560 X.SIZE
DEVINFO.H .DA 192 Y.SIZE
DS.END

View File

@ -9,11 +9,19 @@ AUTO 6
.TF DRV/MOUSE.DRV
*--------------------------------------
.INB INC/MACROS.I
.INB INC/IO.I
.INB INC/A2OSX.I
*--------------------------------------
ZPGoMouse .EQ ZPDRV
ZPTmpPtr1 .EQ ZPDRV+2
*--------------------------------------
EVENT.MOUSEUP .EQ %00000001
EVENT.MOUSEDOWN .EQ %00000010
EVENT.MOUSEMOVE .EQ %00000100
EVENT.MOUSEDRAG .EQ %00001000
EVENT.MOUSECLK .EQ %00010000
EVENT.MOUSEDCLK .EQ %00100000
*--------------------------------------
SETMOUSE .EQ $12 Sets mouse mode
SERVEMOUSE .EQ $13 Services mouse interrupt
READMOUSE .EQ $14 Reads mouse position
@ -22,10 +30,18 @@ POSMOUSE .EQ $16 Sets mouse position to a user-defined pos
CLAMPMOUSE .EQ $17 Sets mouse bounds in a window
HOMEMOUSE .EQ $18 Sets mouse to upper-left corner of clamp win
INITMOUSE .EQ $19 Resets mouse clamps to default values,sets mouse position to 0,0
XCLAMPLO .EQ $0478 low byte of low clamp.
XCLAMPHI .EQ $04F8 low byte of high clamp.
YCLAMPLO .EQ $0578 high byte of low clamp.
YCLAMPHI .EQ $05F8 high byte of high clamp.
LOCLAMPLO .EQ $0478 low byte of low clamp.
HICLAMPLO .EQ $04F8 low byte of high clamp.
LOCLAMPHI .EQ $0578 high byte of low clamp.
HICLAMPHI .EQ $05F8 high byte of high clamp.
MOUSEXLOx .EQ $0478
MOUSEYLOx .EQ $04F8
MOUSEXHIx .EQ $0578
MOUSEYHIx .EQ $05F8
MOUSESTSx .EQ $0778
MOUSESTSx.DOWN .EQ %10000000
MOUSESTSx.LDOWN .EQ %01000000
MOUSESTSx.MOVED .EQ %00100000
*--------------------------------------
* Main DRV entry point
* input :
@ -58,19 +74,23 @@ OPEN stz ZPTmpPtr1
.2 ldy DEVSIG.Offset,x
lda (ZPTmpPtr1),y
cmp DEVSIG.Value,x
beq .3
bne .3
dex
bpl .2
bra .10
inc ZPTmpPtr1+1 no match, try next slot....
.3 inc ZPTmpPtr1+1 no match, try next slot....
lda ZPTmpPtr1+1
cmp #$C8
bne .1
beq .99 Not Found in any slot, exiting
.3 dex
bpl .2
lda ZPTmpPtr1+1
lda #DEVMGR.ERRNOHW Not Found in any slot, exiting
sec
rts
.10 lda ZPTmpPtr1+1
and #$0F
sta DEVSLOT0n
pha
ora #$30
sta DEVNAME+4
@ -86,13 +106,22 @@ OPEN stz ZPTmpPtr1
ldx #0
ldy #S.DEV.NAME
.7 lda DEVNAME,x
.4 lda DEVNAME,x
sta (pDevContext),y
cpx DEVNAME
beq .8
beq .5
inx
iny
bne .7
bne .4
.5 bit RROMBNK2 Renable ROM to allow MOUSE II firmware
php to read IIe ROM ID bytes
sei
lda RD80STORE
pha
sta CLR80STORE
lda #1 Enable, Polling mode
ldy #SETMOUSE
@ -100,41 +129,131 @@ OPEN stz ZPTmpPtr1
ldy #INITMOUSE Reset
jsr GOMOUSE
* lda #0 set X
* ldy #CLAMPMOUSE
* jsr GOMOUSE
* lda #1 set Y
* ldy #CLAMPMOUSE
* jsr GOMOUSE
stz LOCLAMPLO
stz LOCLAMPHI
lda #559
sta HICLAMPLO
lda /559
sta HICLAMPHI
.8 lda #S.DEV.F.MOUSE+S.DEV.F.EVENT
lda #0 set X
ldy #CLAMPMOUSE
jsr GOMOUSE
stz LOCLAMPLO
stz LOCLAMPHI
lda #191
sta HICLAMPLO
lda /191
sta HICLAMPHI
lda #1 set Y
ldy #CLAMPMOUSE
jsr GOMOUSE
ldy #HOMEMOUSE
jsr GOMOUSE
pla
bpl .6
sta SET80STORE
.6 plp
lda #S.DEV.F.MOUSE+S.DEV.F.EVENT
sta (pDevContext)
clc
rts
.99 lda #DEVMGR.ERRNOHW
sec
rts
*--------------------------------------
GETEVENT >PULLW pEvent
lda #0
sec
php
sei
lda RD80STORE
pha
sta CLR80STORE
ldy #READMOUSE
jsr GOMOUSE
ldx DEVSLOT0n
ldy #S.EVT.DATALO
lda MOUSESTSx,x
and #MOUSESTSx.DOWN+MOUSESTSx.LDOWN
beq .3 no button state change:up & previously up
cmp #MOUSESTSx.DOWN+MOUSESTSx.LDOWN
beq .3 no button state change:down & previously down
asl if CS, down & previoulsy up
bcc .1
lda #EVENT.MOUSEUP
bra .2
.1 lda #EVENT.MOUSEDOWN
.2 sta (pEvent),y
.3 lda MOUSESTSx,x
and #MOUSESTSx.MOVED
beq .4
lda (pEvent),y
ora #EVENT.MOUSEMOVE
sta (pEvent),y
ldy #S.EVT.DATAW1
lda MOUSEXLOx,x
sta (pEvent),y
iny
lda MOUSEXHIx,x
sta (pEvent),y
iny
lda MOUSEYLOx,x
sta (pEvent),y
iny
lda MOUSEYHIx,x
sta (pEvent),y
.4 pla
bpl .5
sta SET80STORE
.5 plp
ldy #S.EVT.DATALO
lda (pEvent),y
beq .9
lda #S.EVT.F.MOUSE
sta (pEvent)
clc
rts
.9 sec A=0 : no event
rts
*--------------------------------------
OUT clc
rts
*--------------------------------------
CLOSE clc
CLOSE php
sei
lda #0 Disable
ldy #SETMOUSE
jsr GOMOUSE
plp
clc
rts
*--------------------------------------
GOMOUSE pha
stz ZPGoMouse
lda DEVSLOTCn
sta ZPGoMouse+1
ldx DEVSLOTCn
stx ZPGoMouse+1
lda (ZPGoMouse),y
sta ZPGoMouse
ldy DEVSLOTn0
pla
jmp (ZPGoMouse)
*--------------------------------------
@ -143,6 +262,7 @@ DEVSIG.Offset .HS 05070B0CFB
DEVSIG.Value .HS 38180120D6
DEVSIG.Length .EQ DEVSIG.Value-DEVSIG.Offset
DEVNAME >PSTRING "MOU0"
DEVSLOT0n .BS 1
DEVSLOTCn .BS 1
DEVSLOTn0 .BS 1
*--------------------------------------

View File

@ -83,6 +83,7 @@ SYS.GetDevTable .EQ $74
SYS.GetDevInfoA .EQ $76
SYS.DevOutA .EQ $78
SYS.GetDevByNameYA .EQ $7A
*--------------------------------------
SYS.GetEvent .EQ $80
SYS.DestroyEvent .EQ $82
@ -105,6 +106,8 @@ SYS.SetNetCfg .EQ $B2
SYS.GetNetCfgA .EQ $B4
SYS.ClrNetCfgA .EQ $B6
*--------------------------------------
SYS.ScreenSelectA .EQ $C0
*--------------------------------------
A2osX.SaveSM .EQ $100 Main
A2osX.SaveSX .EQ $101 Aux
*--------------------------------------
@ -178,8 +181,6 @@ S.MEM.F.NOMOV .EQ %00100000
S.MEM.F.ALIGN .EQ %00010000
S.MEM.F.SPARE .EQ %00001000
S.MEM.F.AUX .EQ %00000100
S.MEM.F.LC1 .EQ %00000010
S.MEM.F.LC2 .EQ %00000001
S.MEM.REFCNT .EQ 1
S.MEM.PTR .EQ 2
S.MEM.LEN .EQ 4
@ -212,7 +213,7 @@ S.DEV.hOWNERPS .EQ 11
*
S.DEV.SIZE .EQ 12
*--------------------------------------
* Driver Function Indexes
* Generic Driver Functions
*--------------------------------------
DEVMGR.OPEN .EQ 0
DEVMGR.GETEVENT .EQ 2
@ -220,6 +221,11 @@ DEVMGR.OUT .EQ 4
DEVMGR.CLOSE .EQ 6
DEVMGR.GETINFO .EQ 8
*--------------------------------------
* 'GFX' Class Driver Functions
*--------------------------------------
DEVMGR.GFX.SETPIXEL .EQ 10
DEVMGR.GFX.GETPIXEL .EQ 12
*--------------------------------------
DEVMGR.ERRNICL .EQ $EB Invalid Command Line
DEVMGR.ERRNOHW .EQ $EC No Hardware
DEVMGR.ERRDNF .EQ $ED Device Not Found Error

29
INC/LIBCRYPT.I.txt Normal file
View File

@ -0,0 +1,29 @@
PR#3
PREFIX /A2OSX.BUILD
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
*--------------------------------------
LIBCRYPT.MD5PStrA .EQ 4
LIBCRYPT.MD5Init .EQ 6
LIBCRYPT.MD5Update .EQ 8
LIBCRYPT.MD5FinalizeA .EQ 10
*--------------------------------------
* S.MD5 STRUCT
*--------------------------------------
S.MD5.ABCD0 .EQ 0
S.MD5.A0 .EQ 0
S.MD5.B0 .EQ 4
S.MD5.C0 .EQ 8
S.MD5.D0 .EQ 12
S.MD5.BITCOUNT .EQ 16
S.MD5.EXTRABIT .EQ 24
S.MD5.FINALIZED .EQ 25
*
S.MD5.SIZE .EQ 26
*--------------------------------------
MAN
SAVE INC/LIBCRYPT.I

13
INC/LIBGFX.I.txt Normal file
View File

@ -0,0 +1,13 @@
PR#3
PREFIX /A2OSX.BUILD
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
*--------------------------------------
LIBGFX.test .EQ 4
*--------------------------------------
MAN
SAVE INC/LIBGFX.I

41
LIB/LIBGFX.S.txt Normal file
View File

@ -0,0 +1,41 @@
PR#3
PREFIX /A2OSX.BUILD
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
.OR $2000
.TF LIB/LIBGFX.O
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/LIBGFX.I
*--------------------------------------
* Main entry point
* input :
* X = Function
*--------------------------------------
* Code signature and relocation table
*--------------------------------------
* CLD $D8
* JMP (*,x) $7C
* #JMPTABLE
* /JMPTABLE
*--------------------------------------
CS.START cld
jmp (.1,x)
.1 .DA LIB.LOAD
.DA LIB.UNLOAD
*--------------------------------------
.DA 0
.DA CS.END-CS.START
.DA 0
*--------------------------------------
LIB.LOAD
LIB.UNLOAD clc
rts
MAN
SAVE LIB/LIBGFX.S
ASM

114
SBIN/GUI.S.txt Normal file
View File

@ -0,0 +1,114 @@
PR#3
PREFIX /A2OSX.BUILD
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
.OR $2000
.TF SBIN/GUI
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
*--------------------------------------
* Main entry point
*--------------------------------------
* Code signature and INIT table
*--------------------------------------
* CLD $D8
* JMP (*,x) $7C
* #JMPTABLE
* /JMPTABLE
*--------------------------------------
CS.START cld
jmp (.1,x)
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.DEVNAME.GFX .DA DEVNAME.GFX
.DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
*--------------------------------------
CS.INIT >LDYA L.DEVNAME.GFX
>SYSCALL SYS.GetDevByNameYA
bcc .10
rts
.10 sta hDevGFX
>SYSCALL SYS.GetDevByIDA
>STYA ZPQuickPtr1
ldy #S.DEV.hCS
lda (ZPQuickPtr1),y
>SYSCALL SYS.GetMemPtrA
>STYA DevJMP
stz C
stz X
stz X+1
.1 stz Y
>DEBUG
.2
>PUSHBI C Color
>PUSHBI 2 Mode:1=B/W,2=16 colors,...,128=XOR
>PUSHB Y
>PUSHW X
jsr SetPixel
inc Y
lda Y
cmp #192
bne .2
inc C
lda C
cmp #16
bne .3
stz C
.3 lda X
clc
adc #4
sta X
bcc .4
inc X+1
.4 lda X
sec
sbc #560
lda X+1
sbc /560
bcc .1
clc
.9 rts
*--------------------------------------
CS.RUN clc
rts
*--------------------------------------
CS.DOEVENT clc
rts
*--------------------------------------
CS.QUIT clc
rts
*--------------------------------------
SetPixel ldx #DEVMGR.GFX.SETPIXEL
jmp (DevJMP)
*--------------------------------------
CS.END
DEVNAME.GFX >PSTRING "GFX"
DEVNAME.MOU0 >PSTRING "MOU0"
DS.START
hDevGFX .BS 1
DevJMP .BS 2
X .BS 2
Y .BS 1
C .BS 1
DS.END
MAN
SAVE SBIN/GUI.S
ASM

View File

@ -49,7 +49,7 @@ S.GetDevByIDA sta ZPQuickPtr1
>STYA ZPQuickPtr2
.1 lda (ZPQuickPtr2) get S.DEV.F
bpl .3 In use ?
bpl .2 In use ?
ldy #S.DEV.ID
lda (ZPQuickPtr2),y
cmp ZPQuickPtr1
@ -80,6 +80,7 @@ S.GetDevByIDA sta ZPQuickPtr1
* set DEVMGR.DEVPTR to devslot
*--------------------------------------
S.GetDevByNameA jsr S.GetMemPtrA
S.GetDevByNameYA
>STYA ZPQuickPtr1
>LDYAI DEVMGR.TABLE
>STYA DEVMGR.DEVPTR
@ -126,7 +127,6 @@ S.GetDevByNameA jsr S.GetMemPtrA
* X = LASTID
*--------------------------------------
S.GetDevTable >LDYAI DEVMGR.TABLE
ldx DEVMGR.LASTID
rts
*--------------------------------------
@ -142,28 +142,7 @@ S.DevOutA ldx #DEVMGR.OUT
S.GetDevInfoA ldx #DEVMGR.GETINFO
jmp S.DevCallFunc
*--------------------------------------
* PRIVATE
*--------------------------------------
* S.DevOpenA
* IN :
* A = hDev
* OUT CC = OK, CS = ERROR
*--------------------------------------
S.DevOpenA ldx #DEVMGR.OPEN
bra S.DevCallFunc
*--------------------------------------
* S.DevGetEventA
* IN :
* A = hDev
* OUT CC = OK, CS = ERROR
*--------------------------------------
S.DevGetEventA ldx #DEVMGR.GETEVENT
bra S.DevCallFunc
*--------------------------------------
* S.DevCloseA
*--------------------------------------
S.DevCloseA ldx #DEVMGR.CLOSE
bra S.DevCallFunc
* PRIVATE
*--------------------------------------
S.DevCallFunc jsr S.GetDevByIDA
bcs .9
@ -180,7 +159,6 @@ S.DevCallFunc jsr S.GetDevByIDA
* IN : none
* OUT : A = DevID
* set DEVMGR.DEVPTR to freeslot
* init (DEVMGR.DEVPTR),S.DEV.ID with Dev.ID
*--------------------------------------
S.CreateDevice >LDYAI DEVMGR.TABLE
>STYA DEVMGR.DEVPTR

View File

@ -315,6 +315,28 @@ S.SetEnvVar plp
*--------------------------------------
* PRIVATE
*--------------------------------------
S.SetSysEnvA >PUSHA Push Cmd Line
>PUSHBI $3D Push SEP='='
>PUSHBI 0 Push Token IDX
jsr S.PStrGetTkn
bcs *
phx save X,A for discard
pha
pha
txa
>PUSHA
pla
>PUSHA
ldy #S.PS.hENV
lda TSKMGR.TABLE,y
>PUSHA
jsr S.SetEnvVarH
pla disard NAME
jsr S.FreeMemA
pla discard VALUE
jmp S.FreeMemA
*--------------------------------------
* S.SelectEnvH
* In:
* PULLB = hENV

View File

@ -47,6 +47,54 @@ S.SysScrInit stz SYSSCR.CPULOADI
clc
rts
*--------------------------------------
* S.ScreenSelectA
* IN :
* A = Screen to display
*--------------------------------------
S.ScreenSelectA and A2osX.SCREENS Screen is available ?
beq .9 ...not setup up
cmp #A2osX.SCREENS.S
bne .1
sta SETTEXT
sta SET80DISP
sta CLR80STORE
sta SETPAGE2
sta SETALTCHAR
lda #A2osX.SCREENS.S
bra .8
.1 cmp #A2osX.SCREENS.C
bne .2
sta SETTEXT
sta SET80DISP
sta CLRPAGE2
sta SET80STORE
sta SETALTCHAR
lda #A2osX.SCREENS.C
bra .8
.2 cmp #A2osX.SCREENS.G
bne .9
sta CLRTEXT
sta CLRMIXED
sta SETHIRES
sta CLRPAGE2
sta SET80DISP
sta SETIOUDIS
sta SETDHIRES
sta CLRDHIRES
sta SETDHIRES
sta CLRDHIRES
sta SETDHIRES
lda #A2osX.SCREENS.G
.8 sta A2osX.ACTIVESCRN
.9 rts
*--------------------------------------
S.SysScrCPULoad ldx SYSSCR.CPULOADI
lda SYSSCR.CPULOADC,x
sta SYSSCR.BASL0+38
@ -268,58 +316,6 @@ S.SysScrSetCharAtYX
ply
rts
*--------------------------------------
* S.ScreenSelectA
* IN :
* A = Screen to display
*--------------------------------------
S.ScreenSelectA and A2osX.SCREENS Screen is available ?
beq .9 ...not setup up
cmp #A2osX.SCREENS.S
bne .1
sta SETTEXT
sta SET80DISP
sta CLR80STORE
sta SETPAGE2
sta SETALTCHAR
lda #A2osX.SCREENS.S
bra .8
.1 cmp #A2osX.SCREENS.C
bne .2
sta SETTEXT
sta SET80DISP
sta SET80STORE
sta CLRPAGE2
sta SETALTCHAR
lda #A2osX.SCREENS.C
bra .8
.2 cmp #A2osX.SCREENS.G
bne .9
sta CLRTEXT
sta CLRMIXED
sta SETHIRES
sta CLRPAGE2
sta SETIOUDIS
sta CLR80DISP
sta SETDHIRES
sta CLRDHIRES
sta SETDHIRES
sta CLRDHIRES
sta SET80DISP
sta SETDHIRES
sta CLRDHIRES
sta SETDHIRES
lda #A2osX.SCREENS.G
.8 sta A2osX.ACTIVESCRN
.9 rts
*--------------------------------------
SYSSCR.CH .BS 1
SYSSCR.CV .BS 1
SYSSCR.CPULOADI .BS 1

View File

@ -94,7 +94,7 @@ KERNEL.SYSCALL jmp (.1,x)
.DA S.GetDevInfoA
.DA S.DevOutA
.DA 0
.DA S.GetDevByNameYA
.DA 0
.DA 0
*--------------------------------------
@ -137,6 +137,8 @@ KERNEL.SYSCALL jmp (.1,x)
.DA 0
.DA 0
.DA 0
*--------------------------------------
.DA S.ScreenSelectA $C0
*--------------------------------------
S.Kernel jsr S.KernelInit
jsr S.KernelRun
@ -411,28 +413,6 @@ S.ExecCmdLine jmp (.1,x)
.DA S.LoadDrvA VCPU!!!!
.DA S.CreateProcessA VCPU!!!!
*--------------------------------------
S.SetSysEnvA >PUSHA Push Cmd Line
>PUSHBI $3D Push SEP='='
>PUSHBI 0 Push Token IDX
jsr S.PStrGetTkn
bcs *
phx save X,A for discard
pha
pha
txa
>PUSHA
pla
>PUSHA
ldy #S.PS.hENV
lda TSKMGR.TABLE,y
>PUSHA
jsr S.SetEnvVarH
pla disard NAME
jsr S.FreeMemA
pla discard VALUE
jmp S.FreeMemA
*--------------------------------------
S.PrintSysEnv ldy #S.PS.hENV
lda TSKMGR.TABLE,y Get PS #0 ENV
jsr S.GetMemPtrA