A2osX/SYS/KERNEL.S.DRV.txt

643 lines
13 KiB
Plaintext
Raw Normal View History

2017-12-22 21:24:30 +00:00
NEW
PREFIX /A2OSX.BUILD
2017-12-22 21:24:30 +00:00
AUTO 4,1
*--------------------------------------
2018-06-20 15:02:09 +00:00
* DRV.DiskII
2018-06-19 05:55:12 +00:00
* X = IOCTL
2018-06-20 15:02:09 +00:00
* Y,A = PTR to S.IOCTL
* pDev -> Dev Header AUX!!!
* $42 Command Number
* $43 Unit Number
* $44-$45 Buffer Pointer
* $46-$47 Block Number
*--------------------------------------
2018-06-20 15:02:09 +00:00
DRV.DiskII cld
jmp (.1,x)
.1 .DA DRV.DiskII.S status
.DA DRV.DiskII.RW Read
.DA DRV.DiskII.RW Write
.DA A2osX.BadCall Format
.DA A2osX.BadCall
.DA A2osX.BadCall
.DA A2osX.BadCall
.DA A2osX.BadCall
.DA A2osX.BadCall
.DA A2osX.BadCall
2018-07-05 15:39:36 +00:00
.DA A2osX.BadCall IRQ
*--------------------------------------
2018-06-22 06:24:35 +00:00
DRV.DiskII.S >LDYAI DRV.DiskII.Stat
clc
rts
*--------------------------------------
2018-06-20 15:02:09 +00:00
DRV.DiskII.RW >STYA A2osX.RW.SrcDst+1
2018-06-22 06:24:35 +00:00
jsr DRV.BlkDevice.GetCmdAndDevAX
*--------------------------------------
ldy #$D0
.HS 2C bit abs
A2osX.RamDrv.RW1
ldy #$FF
sty A2osX.RW.Drv+2
jsr GO.ProDOS
stx $42
sta $43
ldy #3
A2osX.RW.SrcDst lda $ffff,y Self Modified
sta $44,y
dey
bpl A2osX.RW.SrcDst
A2osX.RW.Drv jsr $0000
cli
jsr GO.A2osX
rts
*--------------------------------------
2018-06-20 15:02:09 +00:00
DRV.DiskII.Stat .DA #S.DSTAT.S.BLOCK+S.DSTAT.S.WRITE+S.DSTAT.S.READ
.DA 280
.DA #0
>PSTR "Disk II 5.25"
.BS 4
.DA #S.DSTAT.T.DISKII
.DA #0
2018-06-20 15:02:09 +00:00
.DA KVER
*--------------------------------------
2018-06-20 15:02:09 +00:00
* DRV.RamDrive
2018-06-19 05:55:12 +00:00
* X = IOCTL
2018-06-20 15:02:09 +00:00
* Y,A = PTR to S.IOCTL
* pDev -> Dev Header AUX!!!
* $42 Command Number
* $43 Unit Number
* $44-$45 Buffer Pointer
* $46-$47 Block Number
*--------------------------------------
2018-06-20 15:02:09 +00:00
DRV.RamDrive cld
jmp (.1,x)
.1 .DA DRV.RamDrive.S status
.DA DRV.RamDrive.RW Read
.DA DRV.RamDrive.RW Write
.DA A2osX.BadCall Format
.DA A2osX.BadCall
.DA A2osX.BadCall
.DA A2osX.BadCall
.DA A2osX.BadCall
.DA A2osX.BadCall
.DA A2osX.BadCall
2018-07-05 15:39:36 +00:00
.DA A2osX.BadCall IRQ
*--------------------------------------
2018-06-22 06:24:35 +00:00
DRV.RamDrive.S jsr DRV.BlkDevice.GetCmdAndDevAX
jsr GO.ProDOS
stx $42
sta $43
jsr $FF00
jsr GO.A2osX
bcs .9
2018-06-20 15:02:09 +00:00
stx DRV.RamDrive.Stat+S.DSTAT.SIZE
sty DRV.RamDrive.Stat+S.DSTAT.SIZE+1
2018-06-22 06:24:35 +00:00
>LDYAI DRV.RamDrive.Stat
clc
.9 rts
*--------------------------------------
2018-06-20 15:02:09 +00:00
DRV.RamDrive.RW >STYA A2osX.RW.SrcDst+1
2018-06-22 06:24:35 +00:00
jsr DRV.BlkDevice.GetCmdAndDevAX
bra A2osX.RamDrv.RW1
*--------------------------------------
2018-06-20 15:02:09 +00:00
DRV.RamDrive.Stat
.DA #S.DSTAT.S.BLOCK+S.DSTAT.S.WRITE+S.DSTAT.S.READ
.BS 3
>PSTR "ProDOS /RAM Disk"
.DA #S.DSTAT.T.RAM
.DA #0
2018-06-25 05:59:43 +00:00
.DA KVER
*--------------------------------------
2018-06-20 15:02:09 +00:00
* DRV.BlkDevice
2018-06-19 05:55:12 +00:00
* X = IOCTL
2018-06-20 15:02:09 +00:00
* Y,A = PTR to S.IOCTL
* pDev -> Dev Header
* $42 Command Number
* $43 Unit Number
* $44-$45 Buffer Pointer
* $46-$47 Block Number
*--------------------------------------
2018-06-20 15:02:09 +00:00
DRV.BlkDevice cld
jmp (.1,x)
.1 .DA DRV.BlkDevice.S status
.DA DRV.BlkDevice.RW
.DA DRV.BlkDevice.RW
.DA DRV.BlkDevice.F
.DA A2osX.BadCall
.DA A2osX.BadCall
.DA A2osX.BadCall
.DA A2osX.BadCall
.DA A2osX.BadCall
.DA A2osX.BadCall
2018-07-05 15:39:36 +00:00
.DA A2osX.BadCall IRQ
*--------------------------------------
2018-06-22 06:24:35 +00:00
DRV.BlkDevice.S jsr DRV.BlkDevice.GetCmdAndDev
2018-06-22 06:24:35 +00:00
jsr DRV.BlkDevice.Go
bcs .9
2018-06-22 06:24:35 +00:00
stx DRV.BlkDevice.Stat+S.DSTAT.SIZE
sty DRV.BlkDevice.Stat+S.DSTAT.SIZE+1
2018-06-22 06:24:35 +00:00
>LDYAI DRV.BlkDevice.Stat
clc
.9 rts
*--------------------------------------
2018-06-20 15:02:09 +00:00
DRV.BlkDevice.RW
2018-06-22 06:24:35 +00:00
>STYA DRV.BlkDevice.GetParam.1+1
2018-06-22 06:24:35 +00:00
jsrDRV.BlkDevice.GetCmdAndDev
2018-06-22 06:24:35 +00:00
jsr DRV.BlkDevice.GetParam
bra DRV.BlkDevice.Go
*--------------------------------------
2018-06-22 06:24:35 +00:00
DRV.BlkDevice.F jsr DRV.BlkDevice.GetCmdAndDev
2018-06-20 15:02:09 +00:00
DRV.BlkDevice.Go
2018-07-05 15:39:36 +00:00
ldy #S.NODE.DEV.BUSPTR
lda (pDev),y
sta .8+1
iny
lda (pDev),y
sta .8+2
.8 jmp $ffff
*--------------------------------------
2018-06-20 15:02:09 +00:00
DRV.BlkDevice.GetParam
ldy #3
2018-06-20 15:02:09 +00:00
DRV.BlkDevice.GetParam.1
lda $ffff,y Self Modified
sta $44,y
dey
2018-06-22 06:24:35 +00:00
bpl DRV.BlkDevice.GetParam.1
rts
*--------------------------------------
2018-06-20 15:02:09 +00:00
DRV.BlkDevice.GetCmdAndDev
2018-06-22 06:24:35 +00:00
jsr DRV.BlkDevice.GetCmdAndDevAX
stx $42
sta $43
rts
2018-06-20 15:02:09 +00:00
DRV.BlkDevice.GetCmdAndDevAX
txa
lsr
tax CMD
2018-06-22 06:24:35 +00:00
ldy #S.NODE.DEV.DEVID Drive 1, or 2
lda (pDev),y
dec O or 1
lsr in Carry
php
2018-06-22 06:24:35 +00:00
ldy #S.NODE.DEV.BUSID
lda (pDev),y
asl
asl
asl
asl
asl
plp
ror DSSS0000
rts
*--------------------------------------
2018-06-20 15:02:09 +00:00
DRV.BlkDevice.Stat
.DA #S.DSTAT.S.BLOCK+S.DSTAT.S.WRITE+S.DSTAT.S.READ
.BS 3
>PSTR "ProDOS Block Dev"
.DA #S.DSTAT.T.PRODOS
.DA #0
2018-06-25 05:59:43 +00:00
.DA KVER
*--------------------------------------
* Smartport Driver
*--------------------------------------
2018-06-20 15:02:09 +00:00
DRV.SmartPort cld
jmp (.1,x)
.1 .DA DRV.SmartPort.S STATUS
.DA DRV.SmartPort.P BR
.DA DRV.SmartPort.P BW
.DA DRV.SmartPort.NP FORMAT
.DA DRV.SmartPort.P CONTROL
.DA DRV.SmartPort.NP INIT
.DA DRV.SmartPort.NP OPEN
.DA DRV.SmartPort.NP CLOSE
.DA DRV.SmartPort.P R
.DA DRV.SmartPort.P W
2018-07-05 15:39:36 +00:00
.DA A2osX.BADCALL IRQ
2018-06-20 15:02:09 +00:00
*--------------------------------------
2018-06-22 06:24:35 +00:00
DRV.SmartPort.S jsr DRV.SmartPort.GetDev
>LDYAI K.S.DSTAT
2018-06-22 14:59:24 +00:00
>STYA K.S.IOCTL+S.IOCTL.BUFPTR
lda #S.IOCTL.STATCODE.GETDIB
sta K.S.IOCTL+S.IOCTL.CTRLCODE
2018-06-22 06:24:35 +00:00
jsr DRV.SmartPort.Go
bcs .9
>LDYAI K.S.DSTAT
.9 rts
*--------------------------------------
2018-06-22 06:24:35 +00:00
DRV.SmartPort.P jsr DRV.SmartPort.GetParam
bra DRV.SmartPort.Go
2018-06-20 15:02:09 +00:00
DRV.SmartPort.NP
2018-06-22 06:24:35 +00:00
jsr DRV.SmartPort.GetDev
*--------------------------------------
2018-06-20 15:02:09 +00:00
DRV.SmartPort.Go
2018-07-05 15:39:36 +00:00
ldy #S.NODE.DEV.BUSPTR
lda (pDev),y
sta .8+1
iny
lda (pDev),y
sta .8+2
.8 jsr $ffff
2018-06-20 15:02:09 +00:00
DRV.SmartPort.Go.Cmd
.BS 1
2018-06-22 06:24:35 +00:00
.DA K.S.IOCTL
rts
*--------------------------------------
2018-06-20 15:02:09 +00:00
DRV.SmartPort.GetParam
>STYA ZPDRV Get Ptr To ParamList
2018-06-22 06:24:35 +00:00
jsr DRV.BlkDevice.GetCmdAndDev
ldy #7
.1 lda (ZPDRV),y
2018-06-22 06:24:35 +00:00
sta K.S.IOCTL+2,y
dey
bpl .1
rts
*--------------------------------------
2018-06-20 15:02:09 +00:00
DRV.SmartPort.GetDev
txa
lsr
2018-06-22 06:24:35 +00:00
sta DRV.SmartPort.Go.Cmd
tax
2018-06-22 06:24:35 +00:00
lda DRV.SmartPort.Cnt,x
2018-06-22 14:59:24 +00:00
sta K.S.IOCTL+S.IOCTL.CNT
rts
2018-06-20 15:02:09 +00:00
DRV.SmartPort.Cnt
.HS 03030301030101010404
*--------------------------------------
2018-07-05 15:39:36 +00:00
* NULL DEVICE
* - OPEN,WRITE,CLOSE always succeed.
* - READ returns EOF.
*--------------------------------------
2018-06-21 15:12:10 +00:00
DRV.NULL cld
2018-06-20 15:02:09 +00:00
jmp (.1,x)
*--------------------------------------
2018-07-05 15:39:36 +00:00
.1 .DA DRV.NULL.STATUS
.DA A2osX.BADCALL READBLOCK
.DA A2osX.BADCALL WRITEBLOCK
.DA A2osX.BADCALL FORMAT
.DA A2osX.BADCALL CONTROL
.DA A2osX.BADCALL INIT
2018-07-05 15:39:36 +00:00
.DA DRV.NULL.OPEN
.DA DRV.NULL.CLOSE
.DA DRV.NULL.READ
.DA DRV.NULL.WRITE
.DA A2osX.BADCALL IRQ
*--------------------------------------
2018-07-05 15:39:36 +00:00
DRV.NULL.STATUS >STYA pIOCTL
ldy #S.IOCTL.STATCODE
lda (pIOCTL),y
beq .1
cmp #S.IOCTL.STATCODE.GETDIB
bne .9
ldx #15
.HS 2C bit abs
.1 ldx #3
ldy #S.IOCTL.BUFPTR
lda (pIOCTL),y
sta .3+1
iny
lda (pIOCTL),y
sta .3+2
.2 lda DRV.NULL.DSTAT,x
.3 sta $ffff,x SELF MODIFIED
dex
bpl .2
clc
rts
.9 lda #MLI.E.BADCTL
sec
rts
DRV.NULL.READ >STYA pIOCTL
ldx #C.EOF
jmp DRV.READ.X
DRV.NULL.OPEN
DRV.NULL.WRITE
DRV.NULL.CLOSE clc
rts
*--------------------------------------
2018-07-05 15:39:36 +00:00
DRV.NULL.DSTAT .DA #S.DSTAT.S.WRITE+S.DSTAT.S.READ+S.DSTAT.S.OPENED
.DA #0,#0,#0
2018-06-18 06:22:50 +00:00
>PSTR "NULL DEVICE"
.BS 5
.DA #S.DSTAT.T.CHAR
.DA #0
2018-06-14 15:31:36 +00:00
.DA KVER
*--------------------------------------
* SYS DEVICE
*--------------------------------------
2018-06-21 15:12:10 +00:00
DRV.SYS cld
2018-06-20 15:02:09 +00:00
jmp (.1,x)
.1 .DA .2 STATUS
.DA A2osX.BADCALL READBLOCK
.DA A2osX.BADCALL WRITEBLOCK
.DA A2osX.BADCALL FORMAT
2018-06-20 15:02:09 +00:00
.DA DRV.SYS.Control
.DA A2osX.BADCALL INIT
2018-07-05 15:39:36 +00:00
.DA DRV.SYS.OPEN
.DA DRV.SYS.CLOSE
2018-06-20 15:02:09 +00:00
.DA DRV.SYS.Read
.DA DRV.SYS.Write
2018-07-05 15:39:36 +00:00
.DA A2osX.BADCALL IRQ
*--------------------------------------
2018-06-20 15:02:09 +00:00
.2 >LDYAI .3
2017-01-12 17:43:45 +00:00
clc
rts
*--------------------------------------
2018-07-05 15:39:36 +00:00
.3 .DA #S.DSTAT.S.WRITE+S.DSTAT.S.READ+S.DSTAT.S.OPENED
2017-01-12 17:43:45 +00:00
.DA #0,#0,#0
>PSTR "A2osX SYS Screen"
.DA #S.DSTAT.T.CHAR
2017-01-12 17:43:45 +00:00
.DA #0
2018-06-14 15:31:36 +00:00
.DA KVER
2017-01-12 17:43:45 +00:00
*--------------------------------------
2018-07-05 15:39:36 +00:00
DRV.SYS.Open lda #DEVID.SYS
2018-06-20 15:02:09 +00:00
sta A2osX.SCRNDEVS+1
jsr DRV.SYS.Home
*--------------------------------------
2018-06-20 15:02:09 +00:00
DRV.SYS.Control sta SETTEXT
sta SETALTCHAR
sta SET80DISP
sta CLR80STORE
2018-06-20 15:02:09 +00:00
sta SETPAGE2
lda #2
sta A2osX.ASCREEN
2018-07-05 15:39:36 +00:00
DRV.SYS.CLOSE
clc
rts
*--------------------------------------
2018-07-05 15:39:36 +00:00
DRV.SYS.Read >STYA pIOCTL
lda A2osX.ASCREEN
2018-06-20 15:02:09 +00:00
cmp #2 is SYS active?
bne .9
lda OPENAPPLE
bmi .9 Open apple key, not for us...
lda KBD
bpl .9
sta KBDSTROBE
and #$7F
2018-07-05 15:39:36 +00:00
tax
jmp DRV.READ.X
.9 lda #0 Error = no event
sec
rts
*--------------------------------------
2018-07-05 15:39:36 +00:00
DRV.SYS.WRITE >STYA pIOCTL
ldy #S.IOCTL.BUFPTR
lda (pIOCTL),y
sta ZPDRV+4
iny
lda (pIOCTL),y
sta ZPDRV+5
ldy #S.IOCTL.BYTECNT
lda (pIOCTL),y
eor #$ff
tax
iny
lda (pIOCTL),y
eor #$ff
tay
.2 inx
bne .3
iny
bne .3
clc
rts
.3 lda (ZPDRV)
inc ZPDRV+4
bne .4
inc ZPDRV+5
.4 jsr DRV.SYS.COUT
.5 bra .2
*--------------------------------------
DRV.SYS.COUT phx
phy
cmp #' '
bcs .7
cmp #10
bne .1
2018-06-20 15:02:09 +00:00
jsr DRV.SYS.LF
bra .8
.1 cmp #13
bne .2
2018-06-20 15:02:09 +00:00
jsr DRV.SYS.CR
bra .8
.2 ora #$20
.HS 2C BIT ABS
.7 ora #$80
2018-06-20 15:02:09 +00:00
ldy DRV.SYS.CH
ldx DRV.SYS.CV
jsr DRV.SYS.SetCharAtYX
jsr DRV.SYS.FSOut
.8 ply
plx
clc
rts
*--------------------------------------
2018-06-20 15:02:09 +00:00
DRV.SYS.FSOut lda DRV.SYS.CH
cmp #79
bne .1
2018-06-20 15:02:09 +00:00
stz DRV.SYS.CH
bra DRV.SYS.LF
2018-06-20 15:02:09 +00:00
.1 inc DRV.SYS.CH
rts
*--------------------------------------
2018-06-20 15:02:09 +00:00
DRV.SYS.CR jsr DRV.SYS.ClrEOL
stz DRV.SYS.CH
rts
*--------------------------------------
2018-06-20 15:02:09 +00:00
DRV.SYS.LF ldx DRV.SYS.CV
cpx #23
2018-06-20 15:02:09 +00:00
beq DRV.SYS.Scroll
inc DRV.SYS.CV
rts
*--------------------------------------
2018-06-20 15:02:09 +00:00
DRV.SYS.ClrEOL ldx DRV.SYS.CV
lda #$A0
2018-06-20 15:02:09 +00:00
ldy DRV.SYS.CH
.1 cpy #79
beq .2
2018-06-20 15:02:09 +00:00
jsr DRV.SYS.SetCharAtYX
iny
bne .1
.2 rts
*--------------------------------------
2018-06-20 15:02:09 +00:00
DRV.SYS.ScrollAux
2017-11-23 16:51:52 +00:00
sta SETREADAUX
.1 lda (ZPDRV+2),y
sta (ZPDRV),y
dey
bpl .1
sta CLRREADAUX
rts
*--------------------------------------
2018-06-20 15:02:09 +00:00
DRV.SYS.Scroll ldx #1
.1 jsr DRV.SYS.SetBaseX
inx
2018-06-20 15:02:09 +00:00
lda DRV.SYS.BASEL,x
sta ZPDRV+2
2018-06-20 15:02:09 +00:00
lda DRV.SYS.BASEH,x
sta ZPDRV+3
2018-06-20 15:02:09 +00:00
ldx #DRV.SYS.Scroll-DRV.SYS.ScrollAux-1
2017-11-23 16:51:52 +00:00
2018-06-20 15:02:09 +00:00
.2 lda DRV.SYS.ScrollAux,x
2017-11-23 16:51:52 +00:00
sta $102,x
dex
bpl .2
ldy #39
sta SETWRITEAUX
2017-11-23 16:51:52 +00:00
jsr $102
sta CLRWRITEAUX
ldy #39
.3 lda (ZPDRV+2),y
sta (ZPDRV),y
dey
bpl .3
cpx #23
bne .1 Fall in ClrLineAtX for last line
*--------------------------------------
2018-06-20 15:02:09 +00:00
DRV.SYS.ClrLineAtX
jsr DRV.SYS.SetBaseX
lda #$A0
ldy #39
.1 sta SETWRITEAUX
sta (ZPDRV),y
sta CLRWRITEAUX
sta (ZPDRV),y
dey
bpl .1
rts
*--------------------------------------
2018-06-20 15:02:09 +00:00
DRV.SYS.Home ldx #23
2018-06-20 15:02:09 +00:00
.1 jsr DRV.SYS.ClrLineAtX
dex
bne .1
2018-06-20 15:02:09 +00:00
stz DRV.SYS.CH
lda #1
2018-06-20 15:02:09 +00:00
sta DRV.SYS.CV
rts
*--------------------------------------
2018-06-20 15:02:09 +00:00
DRV.SYS.SetCharAtYX
cmp #$40
bcc .1
cmp #$5F
bcs .1
and #$3F
.1 phy
pha
2018-06-20 15:02:09 +00:00
jsr DRV.SYS.SetBaseX
tya
lsr
tay
pla
bcs .2
sta SETWRITEAUX
sta (ZPDRV),y
sta CLRWRITEAUX
2018-06-25 05:59:43 +00:00
ply
rts
.2 sta (ZPDRV),y
ply
rts
*--------------------------------------
2018-06-20 15:02:09 +00:00
DRV.SYS.SetBaseX
lda DRV.SYS.BASEL,x
sta ZPDRV
2018-06-20 15:02:09 +00:00
lda DRV.SYS.BASEH,x
sta ZPDRV+1
rts
*--------------------------------------
2018-06-20 15:02:09 +00:00
DRV.SYS.CH .BS 1
DRV.SYS.CV .BS 1
*--------------------------------------
2018-06-20 15:02:09 +00:00
DRV.SYS.BASEL .HS 00.80.00.80.00.80.00.80.28.A8.28.A8.28.A8.28.A8.50.D0.50.D0.50.D0.50.D0
DRV.SYS.BASEH .HS 08.08.09.09.0A.0A.0B.0B.08.08.09.09.0A.0A.0B.0B.08.08.09.09.0A.0A.0B.0B
*--------------------------------------
2018-07-05 15:39:36 +00:00
DRV.READ.X ldy #S.IOCTL.BYTECNT
lda #1
sta (pIOCTL),y
iny
dec
sta (pIOCTL),y
ldy #S.IOCTL.BUFPTR
lda (pIOCTL),y
sta .1+1
iny
lda (pIOCTL),y
sta .1+2
.1 stx $ffff SELF MODIFIED
clc
rts
*--------------------------------------
MAN
2018-06-18 15:48:00 +00:00
SAVE /A2OSX.SRC/SYS/KERNEL.S.DRV
LOAD /A2OSX.SRC/SYS/KERNEL.S
ASM