mirror of https://github.com/A2osX/A2osX.git
Kernel 0.94+
This commit is contained in:
parent
f862d6303b
commit
3c125ff09f
Binary file not shown.
Binary file not shown.
Binary file not shown.
113
BIN/FORMAT.S.txt
113
BIN/FORMAT.S.txt
|
@ -14,34 +14,35 @@ NEW
|
|||
.OR ZPBIN
|
||||
ZS.START
|
||||
ZPPtr1 .BS 2
|
||||
ZPPtr2 .BS 2
|
||||
ZPPtrFD .BS 2
|
||||
ZPPtrDevName .BS 2
|
||||
|
||||
Index .BS 1
|
||||
hDevID .BS 1
|
||||
hCatBuf .BS 1
|
||||
|
||||
ArgIndex .BS 1
|
||||
hTrackBuf .BS 1
|
||||
DSSS0000 .BS 1
|
||||
CurTrack .BS 1
|
||||
CurQTrack .BS 1
|
||||
Counter .BS 1
|
||||
TCounter .BS 1
|
||||
CurHead .BS 1
|
||||
HCounter .BS 1
|
||||
|
||||
BlkCnt .BS 2
|
||||
TrkCnt .BS 1
|
||||
Stepping .BS 1
|
||||
VolNum .BS 1
|
||||
AltBB .BS 1
|
||||
|
||||
HeadCnt .BS 1
|
||||
.BS 1
|
||||
|
||||
CatSize .BS 1
|
||||
CatBlkCnt .BS 1
|
||||
|
||||
bLL .BS 1
|
||||
bCustomBlkSize .BS 1
|
||||
bHighDensity .BS 1
|
||||
bExtraTrack .BS 1
|
||||
bVerify .BS 1
|
||||
|
||||
TimeOut .BS 1
|
||||
ZS.END
|
||||
.ED
|
||||
|
@ -56,7 +57,7 @@ CS.START cld
|
|||
.DA #0
|
||||
.DA CS.END-CS.START Code Size (without Constants)
|
||||
.DA DS.END-DS.START Data SegmentSize
|
||||
.DA #32 Stack Size
|
||||
.DA #64 Stack Size
|
||||
.DA #ZS.END-ZS.START Zero Page Size
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
|
@ -92,8 +93,8 @@ CS.RUN ldy #S.PS.ARGC
|
|||
lda (pPS),y
|
||||
beq .99
|
||||
|
||||
.1 inc Index
|
||||
lda Index
|
||||
.1 inc ArgIndex
|
||||
lda ArgIndex
|
||||
>SYSCALL ArgV
|
||||
bcc .11
|
||||
|
||||
|
@ -122,8 +123,8 @@ CS.RUN ldy #S.PS.ARGC
|
|||
cpy #bCustomBlkSize
|
||||
bne .1
|
||||
|
||||
inc Index
|
||||
lda Index
|
||||
inc ArgIndex
|
||||
lda ArgIndex
|
||||
>SYSCALL ArgV
|
||||
bcs .99
|
||||
|
||||
|
@ -293,7 +294,7 @@ CS.RUN.LL >LDA.G DIB+S.DIB.T
|
|||
sta BlkCnt,x
|
||||
iny
|
||||
inx
|
||||
cpx #6
|
||||
cpx #7
|
||||
bne .12
|
||||
|
||||
.1 >PUSHW L.MSG.LL
|
||||
|
@ -334,28 +335,39 @@ CS.RUN.LL.DISKII
|
|||
stz CurQTrack
|
||||
|
||||
lda TrkCnt
|
||||
sta Counter
|
||||
sta TCounter
|
||||
|
||||
.1 jsr CS.RUN.CheckCtrlC
|
||||
.1 lda HeadCnt
|
||||
sta HCounter
|
||||
|
||||
stz CurHead
|
||||
|
||||
.2 jsr CS.RUN.CheckCtrlC
|
||||
bcs .9
|
||||
|
||||
>PUSHW L.MSG.LLDISK2
|
||||
>PUSHB CurHead
|
||||
>PUSHB CurTrack
|
||||
inc
|
||||
>PUSHA
|
||||
>PUSHB TrkCnt
|
||||
>PUSHBI 3
|
||||
>PUSHBI 4
|
||||
>SYSCALL PrintF
|
||||
bcs .9
|
||||
|
||||
>PUSHB DSSS0000
|
||||
>PUSHB VolNum
|
||||
>PUSHB CurHead
|
||||
>PUSHB CurTrack
|
||||
>PUSHWI 0 Empty track
|
||||
>LIBCALL hLIBBLKDEV,LIBBLKDEV.D2TrkWrite16s
|
||||
bcs .9
|
||||
|
||||
dec Counter
|
||||
inc CurHead
|
||||
dec HCounter
|
||||
bne .2
|
||||
|
||||
dec TCounter
|
||||
beq .8
|
||||
|
||||
inc CurTrack
|
||||
|
@ -366,13 +378,13 @@ CS.RUN.LL.DISKII
|
|||
tax
|
||||
|
||||
jsr CS.RUN.SeekToX
|
||||
bra .1
|
||||
jmp .1
|
||||
|
||||
.9 pha
|
||||
jsr CS.RUN.MotorOff
|
||||
pla
|
||||
sec
|
||||
rts
|
||||
.99 rts
|
||||
|
||||
.8 ldx #0
|
||||
jsr CS.RUN.SeekToX
|
||||
|
@ -404,7 +416,7 @@ CS.RUN.LL.DISKII
|
|||
jsr CS.RUN.Wait
|
||||
|
||||
clc
|
||||
.99 rts
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RUN.LL.DISKII.V
|
||||
lda hTrackBuf
|
||||
|
@ -430,7 +442,12 @@ CS.RUN.LL.DISKII.V
|
|||
stz CurTrack
|
||||
|
||||
lda TrkCnt
|
||||
sta Counter
|
||||
sta TCounter
|
||||
|
||||
.12 lda HeadCnt
|
||||
sta HCounter
|
||||
|
||||
stz CurHead
|
||||
|
||||
.1 ldx #0
|
||||
|
||||
|
@ -446,12 +463,21 @@ CS.RUN.LL.DISKII.V
|
|||
cpx #8
|
||||
bne .2
|
||||
|
||||
inc CurTrack
|
||||
dec Counter
|
||||
inc CurHead
|
||||
dec HCounter
|
||||
bne .1
|
||||
|
||||
inc CurTrack
|
||||
dec TCounter
|
||||
bne .12
|
||||
|
||||
lda TrkCnt
|
||||
sta Counter
|
||||
sta TCounter
|
||||
|
||||
.13 lda HeadCnt
|
||||
sta HCounter
|
||||
|
||||
stz CurHead
|
||||
|
||||
.3 ldx #7
|
||||
|
||||
|
@ -468,8 +494,12 @@ CS.RUN.LL.DISKII.V
|
|||
dex
|
||||
bpl .4
|
||||
|
||||
dec Counter
|
||||
inc CurHead
|
||||
dec HCounter
|
||||
bne .3
|
||||
|
||||
dec TCounter
|
||||
bne .13
|
||||
|
||||
>LDYA L.MSG.OK
|
||||
>SYSCALL PutS
|
||||
|
@ -479,12 +509,14 @@ CS.RUN.LL.DISKII.V
|
|||
CS.RUN.LL.DISKII.VBLK
|
||||
phx
|
||||
>PUSHW L.MSG.VERIFY
|
||||
>PUSHB CurHead
|
||||
>PUSHB CurTrack
|
||||
pla
|
||||
pha
|
||||
>PUSHA
|
||||
|
||||
>PUSHW.G IOCTL+S.IOCTL.BLKNUM
|
||||
>PUSHBI 4
|
||||
>PUSHBI 5
|
||||
>SYSCALL PrintF
|
||||
|
||||
>PUSHB hDevID
|
||||
|
@ -667,6 +699,7 @@ CS.RUN.CheckOpt ldy #1
|
|||
|
||||
.2 cmp OptionList,x
|
||||
beq .3
|
||||
|
||||
dex
|
||||
bpl .2
|
||||
|
||||
|
@ -735,8 +768,8 @@ MSG.CRLF .AZ "\r\n"
|
|||
MSG.NOSIZE .AZ "Unable to get media size."
|
||||
MSG.INIT .AZ "Formatting %s, Volname:%s\r\n"
|
||||
MSG.LL .AZ "Low Level Format %D Blks\r\n"
|
||||
MSG.LLDISK2 .AZ "\rWriting Track %02d (%02d/%02d)..."
|
||||
MSG.VERIFY .AZ "\rVerifying Track %02d/%02d, Block %05D..."
|
||||
MSG.LLDISK2 .AZ "\rWriting Head %d/Track %02d (%02d/%02d)..."
|
||||
MSG.VERIFY .AZ "\rVerifying Head %d/Track %02d/Block %d (%05D)..."
|
||||
MSG.WRITECAT .AZ "Writing Catalog..."
|
||||
FMT.BLANK .AZ "BLANK%H%H"
|
||||
*--------------------------------------
|
||||
|
@ -750,7 +783,7 @@ Disk2.Default .DA 280 BlkCnt
|
|||
.DA #4 Stepping
|
||||
.DA #1 VolNum
|
||||
.DA #0 AltBB
|
||||
.DA #0 HeadCnt
|
||||
.DA #1 HeadCnt
|
||||
.BS 1
|
||||
*--------------------------------------
|
||||
Disk2.X .DA 320 BlkCnt
|
||||
|
@ -758,7 +791,7 @@ Disk2.X .DA 320 BlkCnt
|
|||
.DA #4 Stepping
|
||||
.DA #2 VolNum
|
||||
.DA #0 AltBB
|
||||
.DA #0 HeadCnt
|
||||
.DA #1 HeadCnt
|
||||
.BS 1
|
||||
*--------------------------------------
|
||||
Disk2.H .DA 384 BlkCnt
|
||||
|
@ -766,7 +799,7 @@ Disk2.H .DA 384 BlkCnt
|
|||
.DA #3 Stepping
|
||||
.DA #129 VolNum
|
||||
.DA #$80 AltBB
|
||||
.DA #0 HeadCnt
|
||||
.DA #1 HeadCnt
|
||||
.BS 1
|
||||
*--------------------------------------
|
||||
Disk2.HX .DA 432 BlkCnt
|
||||
|
@ -774,39 +807,39 @@ Disk2.HX .DA 432 BlkCnt
|
|||
.DA #3 Stepping
|
||||
.DA #130 VolNum
|
||||
.DA #$80 AltBB
|
||||
.DA #0 HeadCnt
|
||||
.DA #1 HeadCnt
|
||||
.BS 1
|
||||
*-------------------------------------- RANA Elite 2
|
||||
Disk2.DefaultD .DA 640 BlkCnt
|
||||
.DA #40 TrkCnt
|
||||
.DA #4 Stepping
|
||||
.DA #193 VolNum
|
||||
.DA #192 VolNum
|
||||
.DA #$80 AltBB
|
||||
.DA #1 HeadCnt
|
||||
.DA #2 HeadCnt
|
||||
.BS 1
|
||||
*--------------------------------------
|
||||
Disk2.XD .DA 640 BlkCnt
|
||||
.DA #40 TrkCnt
|
||||
.DA #4 Stepping
|
||||
.DA #193 VolNum
|
||||
.DA #192 VolNum
|
||||
.DA #$80 AltBB
|
||||
.DA #1 HeadCnt
|
||||
.DA #2 HeadCnt
|
||||
.BS 1
|
||||
*-------------------------------------- RANA Elite 3
|
||||
Disk2.HD .DA 1280 BlkCnt
|
||||
.DA #80 TrkCnt
|
||||
.DA #2 Stepping
|
||||
.DA #194 VolNum
|
||||
.DA #193 VolNum
|
||||
.DA #$80 AltBB
|
||||
.DA #1 HeadCnt
|
||||
.DA #2 HeadCnt
|
||||
.BS 1
|
||||
*--------------------------------------
|
||||
Disk2.HXD .DA 1280 BlkCnt
|
||||
.DA #80 TrkCnt
|
||||
.DA #2 Stepping
|
||||
.DA #194 VolNum
|
||||
.DA #193 VolNum
|
||||
.DA #$80 AltBB
|
||||
.DA #1 HeadCnt
|
||||
.DA #2 HeadCnt
|
||||
.BS 1
|
||||
*--------------------------------------
|
||||
.DUMMY
|
||||
|
|
|
@ -44,10 +44,9 @@ L.OSD .DA OSD
|
|||
*--------------------------------------
|
||||
Dev.Detect >LDYA L.MSG.DETECT
|
||||
>SYSCALL PutS
|
||||
lda MACHID
|
||||
and #MACHID.T
|
||||
cmp #MACHID.T.IIc
|
||||
bne .1
|
||||
lda A2osX.HWType
|
||||
cmp #A2osX.HWType.IIc
|
||||
bcc .1
|
||||
|
||||
* stz DCB+S.DCB.GFX.S //c : 80c Mode
|
||||
>LDYA L.MSG.DETECT.IIC
|
||||
|
@ -270,7 +269,7 @@ ClrScr lda #$55
|
|||
*--------------------------------------
|
||||
CS.END
|
||||
MSG.DETECT .AZ "Apple IIe/IIc DHGR Driver."
|
||||
MSG.DETECT.IIC .AZ "Apple //c : 'LCM Feline/80c' Mode."
|
||||
MSG.DETECT.IIC .AZ "Apple //c,IIgs : 'LCM Feline/80c' Mode."
|
||||
MSG.DETECT.EVE .AZ "Apple //e : 'LCM Eve' Board Detected."
|
||||
MSG.DETECT.80C .AZ "No Specific H/W Found, 'Video7 80c' Mode."
|
||||
*--------------------------------------
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------------
|
||||
IO.D2.SeekTimeR .EQ 35 LIBBLKDEV Recalibration
|
||||
IO.D2.SeekTimeF .EQ 45 LIBBLKDEV Track Formatter
|
||||
IO.D2.SeekTimeR .EQ 55 LIBBLKDEV Recalibration
|
||||
IO.D2.SeekTimeF .EQ 55 LIBBLKDEV Track Formatter
|
||||
IO.D2.SeekTimeB .EQ 45 LIBBLKDEV Boot Block
|
||||
IO.D2.SeekTimeP .EQ 15 ProDOS.FX initial
|
||||
IO.D2.SeekTimeP .EQ 28 ProDOS.FX initial
|
||||
IO.D2.SeekTimeI .EQ 5 ProDOS.FX increment -> until > 128
|
||||
*--------------------------------------
|
||||
IO.D2.Ph0Off .EQ $C080
|
||||
|
|
|
@ -2,23 +2,23 @@ NEW
|
|||
AUTO 3,1
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
LIBCRYPT.MD5 .EQ 4
|
||||
LIBCRYPT.MD5Init .EQ 6
|
||||
LIBCRYPT.MD5Update .EQ 8
|
||||
LIBCRYPT.MD5Finalize .EQ 10
|
||||
LIBCRYPT.MD4 .EQ 4
|
||||
LIBCRYPT.MD4Init .EQ 6
|
||||
LIBCRYPT.MD4Update .EQ 8
|
||||
LIBCRYPT.MD4Finalize .EQ 10
|
||||
*--------------------------------------
|
||||
* S.MD5 STRUCT
|
||||
* S.MD4 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.MD4.ABCD0 .EQ 0
|
||||
S.MD4.A0 .EQ 0
|
||||
S.MD4.B0 .EQ 4
|
||||
S.MD4.C0 .EQ 8
|
||||
S.MD4.D0 .EQ 12
|
||||
S.MD4.BITCOUNT .EQ 16
|
||||
S.MD4.EXTRABIT .EQ 24
|
||||
S.MD4.FINALIZED .EQ 25
|
||||
|
||||
S.MD5 .EQ 26
|
||||
S.MD4 .EQ 26
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE inc/libcrypt.i
|
||||
|
|
|
@ -290,7 +290,7 @@ BB.ReadBlock lda blok figure out track & sector.
|
|||
.9 ldy IO.D2.DrvOff,x
|
||||
rts return error status in carry.
|
||||
*--------------------------------------
|
||||
BB.Wait phx (3)
|
||||
BB.Wait100usecA phx (3)
|
||||
|
||||
.1 ldx #20 (2)
|
||||
|
||||
|
@ -314,7 +314,8 @@ BB.Trk2Qtrk asl x2
|
|||
lsr x3
|
||||
|
||||
.1 adc #$ff SELF MODIFIED
|
||||
BB.Trk2Qtrk.RTS rts
|
||||
|
||||
BB.Trk2Qtrk.RTS rts
|
||||
*--------------------------------------
|
||||
BB.Seek lda BB.HdrTrk get track we're on
|
||||
jsr BB.Trk2Qtrk
|
||||
|
@ -328,63 +329,78 @@ BB.Seek lda BB.HdrTrk get track we're on
|
|||
cmp BB.TargetQTrack
|
||||
beq BB.Read
|
||||
|
||||
tay
|
||||
bit #1
|
||||
bne .1
|
||||
|
||||
and #6
|
||||
ora BB.Slotn0
|
||||
tax
|
||||
|
||||
tya
|
||||
inc
|
||||
bra .3
|
||||
|
||||
.1 pha
|
||||
|
||||
bit IO.D2.Ph0Off,x
|
||||
ldx IO.D2.Ph0Off,y
|
||||
tay
|
||||
lda IO.D2.Ph0On,y we are on 0/4 or 2/4 track
|
||||
|
||||
bcs .2
|
||||
* lda #1
|
||||
* bra .9 no wait, next operation will be phy/plx/Ph0On,y
|
||||
|
||||
bra .90
|
||||
|
||||
* Current < Target, must move in
|
||||
|
||||
inc
|
||||
.1
|
||||
* cmp BB.TargetQTrack we are on 1/4 or 3/4
|
||||
|
||||
bcs .2 if CS, C > T, must move out
|
||||
|
||||
inc CC: C < T, ON next PH
|
||||
|
||||
.HS B0 BCS
|
||||
|
||||
* Current > Target, must move out
|
||||
|
||||
.2 dec
|
||||
.2 dec CS: C > T, ON prev PH
|
||||
|
||||
sta BB.CurrentQTrack
|
||||
|
||||
and #6
|
||||
ora BB.Slotn0
|
||||
tax
|
||||
|
||||
pla
|
||||
|
||||
bcs .3
|
||||
bra .7 Ph ON to go to 0/4 or 2/4, then wait
|
||||
*--------------------------------------
|
||||
.3 bcs .4 if CS, C > T, must move out
|
||||
|
||||
* Current < Target, must move in
|
||||
inc CC: C < T, ON next PH
|
||||
|
||||
.HS B0 BCS
|
||||
|
||||
.4 dec CS: C > T, ON prev PH
|
||||
|
||||
sta BB.CurrentQTrack
|
||||
|
||||
bit #1
|
||||
bne .5 we must go to 1/4 or 3/4
|
||||
|
||||
lda IO.D2.Ph0Off,x we must go to 0/4 or 2/4 : Off Prev Ph
|
||||
bra .8 go wait....
|
||||
|
||||
inc
|
||||
inc
|
||||
.5 phy we must go on 1/4 or 3/4
|
||||
plx Y already ON, -> X for Ph0Off,x
|
||||
|
||||
.3 and #6
|
||||
bcs .6 if CS, C > T, must move out
|
||||
|
||||
inc CC: C < T, ON next PH
|
||||
|
||||
* .HS B0 BCS
|
||||
|
||||
*.6 dec CS: C > T, ON prev PH
|
||||
|
||||
.6
|
||||
|
||||
.7 and #6
|
||||
ora BB.Slotn0
|
||||
tay
|
||||
lda IO.D2.Ph0On,y now X and Y on
|
||||
|
||||
lda IO.D2.Ph0On,x
|
||||
lda IO.D2.Ph0On,y
|
||||
lda #IO.D2.SeekTimeB
|
||||
jsr BB.Wait
|
||||
.8 lda #IO.D2.SeekTimeB
|
||||
|
||||
lda BB.CurrentQTrack
|
||||
.9 jsr BB.Wait100usecA ...wait...
|
||||
|
||||
.90 lda BB.CurrentQTrack
|
||||
cmp BB.TargetQTrack
|
||||
bne .1
|
||||
bne .3
|
||||
|
||||
lda #0
|
||||
jsr BB.Wait
|
||||
jsr BB.Wait100usecA
|
||||
|
||||
lda IO.D2.Ph0Off,x
|
||||
lda IO.D2.Ph0Off,y
|
||||
|
|
|
@ -2,16 +2,16 @@ NEW
|
|||
AUTO 3,1
|
||||
*/--------------------------------------
|
||||
*\--------------------------------------
|
||||
D2MotorControl >PULLB MotorOn
|
||||
>PULLB DrvSlt
|
||||
jsr CheckDiskII
|
||||
D2.MotorControl >PULLB D2.MotorOn
|
||||
>PULLB D2.DrvSlt
|
||||
jsr D2.CheckDiskII
|
||||
bcs .9
|
||||
|
||||
lda MotorOn
|
||||
lda D2.MotorOn
|
||||
asl
|
||||
|
||||
lda #IO.D2.DrvOff
|
||||
adc Slotn0
|
||||
adc D2.Slotn0
|
||||
tax
|
||||
lda $C000,x
|
||||
|
||||
|
@ -20,13 +20,13 @@ D2MotorControl >PULLB MotorOn
|
|||
.9 rts
|
||||
*/--------------------------------------
|
||||
*\--------------------------------------
|
||||
D2Recalibrate >PULLB DrvSlt
|
||||
jsr CheckDiskII
|
||||
D2.Recalibrate >PULLB D2.DrvSlt
|
||||
jsr D2.CheckDiskII
|
||||
bcs .9
|
||||
|
||||
lda #168
|
||||
|
||||
ldy Slotn0
|
||||
ldy D2.Slotn0
|
||||
lda IO.D2.Ph0On,y
|
||||
|
||||
lda #IO.D2.SeekTimeR
|
||||
|
@ -38,7 +38,7 @@ D2Recalibrate >PULLB DrvSlt
|
|||
pha
|
||||
|
||||
and #6
|
||||
ora Slotn0
|
||||
ora D2.Slotn0
|
||||
phy
|
||||
plx
|
||||
tay
|
||||
|
@ -63,102 +63,94 @@ D2Recalibrate >PULLB DrvSlt
|
|||
.9 rts
|
||||
*/--------------------------------------
|
||||
*\--------------------------------------
|
||||
D2MoveHead >PULLB MoveTo
|
||||
>PULLB MoveFrom
|
||||
>PULLB DrvSlt
|
||||
jsr CheckDiskII
|
||||
D2.MoveHead >PULLB D2.TargetQTrack
|
||||
>PULLB D2.CurrentQTrack
|
||||
>PULLB D2.DrvSlt
|
||||
jsr D2.CheckDiskII
|
||||
bcs .9
|
||||
|
||||
php
|
||||
sei
|
||||
jsr D2MoveHead.SEI
|
||||
jsr D2.MoveHead.SEI
|
||||
plp
|
||||
clc
|
||||
.9 rts
|
||||
|
||||
D2MoveHead.SEI lda Slotn0
|
||||
ora #IO.D2.RData
|
||||
sta .4+1
|
||||
sta .5+1
|
||||
sta .6+1
|
||||
sta .7+1
|
||||
D2.MoveHead.SEI lda D2.CurrentQTrack
|
||||
|
||||
lda MoveFrom
|
||||
tay
|
||||
bit #1
|
||||
bne .1
|
||||
|
||||
and #6
|
||||
ora Slotn0
|
||||
tax
|
||||
jsr .10 we are on 0/4 or 2/4 track
|
||||
|
||||
tya
|
||||
inc
|
||||
bra .3
|
||||
* lda #1
|
||||
* bra .9 no wait, next operation will be phy/plx/Ph0On,y
|
||||
|
||||
.1 pha
|
||||
|
||||
jsr .8
|
||||
pla
|
||||
pha
|
||||
bcs .2
|
||||
|
||||
* Current < Target, must move in
|
||||
|
||||
inc
|
||||
bra .90
|
||||
|
||||
.1 cmp D2.TargetQTrack we are on 1/4 or 3/4
|
||||
|
||||
bcs .2 if CS, C > T, must move out
|
||||
|
||||
inc CC: C < T, ON next PH
|
||||
|
||||
.HS B0 BCS
|
||||
|
||||
* Current > Target, must move out
|
||||
.2 dec CS: C > T, ON prev PH
|
||||
|
||||
.2 dec
|
||||
sta D2.CurrentQTrack
|
||||
|
||||
sta MoveFrom
|
||||
bra .7 Ph ON to go to 0/4 or 2/4, then wait
|
||||
*--------------------------------------
|
||||
.3 bcs .4 if CS, C > T, must move out
|
||||
|
||||
and #6
|
||||
ora Slotn0
|
||||
tax
|
||||
inc CC: C < T, ON next PH
|
||||
|
||||
pla
|
||||
.HS B0 BCS
|
||||
|
||||
bcs .3
|
||||
.4 dec CS: C > T, ON prev PH
|
||||
|
||||
* Current < Target, must move in
|
||||
sta D2.CurrentQTrack
|
||||
|
||||
inc
|
||||
inc
|
||||
bit #1
|
||||
bne .5 we must go to 1/4 or 3/4
|
||||
|
||||
.3 and #6
|
||||
ora Slotn0
|
||||
|
||||
bcs .30
|
||||
lda IO.D2.Ph0Off,x we must go to 0/4 or 2/4 : Off Prev Ph
|
||||
bra .8 go wait....
|
||||
|
||||
phx
|
||||
tax
|
||||
pla
|
||||
.5 phy we must go on 1/4 or 3/4
|
||||
plx Y already ON, -> X for Ph0Off,x
|
||||
|
||||
bcs .6 if CS, C > T, must move out
|
||||
|
||||
.30
|
||||
tay
|
||||
inc CC: C < T, ON next PH
|
||||
|
||||
lda IO.D2.Ph0On,x
|
||||
.4 lda IO.D2.RData SELF MODIFIED
|
||||
* .HS B0 BCS
|
||||
|
||||
lda IO.D2.Ph0On,y
|
||||
.5 lda IO.D2.RData SELF MODIFIED
|
||||
*.6 dec CS: C > T, ON prev PH
|
||||
|
||||
lda #IO.D2.SeekTimeF
|
||||
jsr D2.Wait100usecA
|
||||
.6
|
||||
|
||||
lda MoveFrom
|
||||
cmp MoveTo
|
||||
bne .1
|
||||
.7 jsr .10 now X and Y on
|
||||
|
||||
.8 lda #IO.D2.SeekTimeF
|
||||
|
||||
.9 jsr D2.Wait100usecA ...wait...
|
||||
|
||||
.90 lda D2.CurrentQTrack
|
||||
cmp D2.TargetQTrack
|
||||
bne .3
|
||||
|
||||
jsr D2.Wait25600usec
|
||||
|
||||
.8 lda IO.D2.Ph0Off,x
|
||||
.6 lda IO.D2.RData SELF MODIFIED
|
||||
|
||||
lda IO.D2.Ph0Off,x
|
||||
lda IO.D2.Ph0Off,y
|
||||
.7 lda IO.D2.RData SELF MODIFIED
|
||||
|
||||
rts
|
||||
|
||||
.10 and #6
|
||||
ora D2.Slotn0
|
||||
tay
|
||||
lda IO.D2.Ph0On,y
|
||||
rts
|
||||
*/--------------------------------------
|
||||
* # D2TrkRead16s
|
||||
|
@ -170,96 +162,71 @@ D2MoveHead.SEI lda Slotn0
|
|||
* CC : success, A = VolNum
|
||||
* CS : A = Error
|
||||
*\--------------------------------------
|
||||
D2TrkRead16s >PULLW ZPPtr1
|
||||
>PULLB TrkNum
|
||||
>PULLB DrvSlt
|
||||
D2.TrkRead16s >PULLW ZPPtr1
|
||||
>PULLB D2.TrkNum
|
||||
>PULLB D2.DrvSlt
|
||||
|
||||
jsr CheckDiskII
|
||||
jsr D2.CheckDiskII
|
||||
bcs .9
|
||||
|
||||
lda VolNum
|
||||
lda D2.VolNum
|
||||
clc
|
||||
.9
|
||||
D2TrkRead16s.RTS
|
||||
D2.TrkRead16s.RTS
|
||||
rts
|
||||
*/--------------------------------------
|
||||
* # D2TrkWrite16s
|
||||
* Write a track (16 sectors)
|
||||
* PUSHB = DSSS0000
|
||||
* PUSHB = VolNum
|
||||
* PUSHB = HeadNum (0,1)
|
||||
* PUSHB = TrackNum * 4 : 0->136+
|
||||
* PUSHW = Ptr to 16*256 buffer
|
||||
* ## RETURN VALUE
|
||||
* CC : success
|
||||
* CS : A = Error
|
||||
*\--------------------------------------
|
||||
D2TrkWrite16s >PULLW ZPPtr1
|
||||
>PULLB TrkNum
|
||||
>PULLB VolNum
|
||||
>PULLB DrvSlt
|
||||
D2.TrkWrite16s >PULLW ZPPtr1
|
||||
>PULLB D2.TrkNum
|
||||
>PULLB D2.HeadNum
|
||||
>PULLB D2.VolNum
|
||||
>PULLB D2.DrvSlt
|
||||
|
||||
jsr CheckDiskII
|
||||
bcs D2TrkRead16s.RTS
|
||||
jsr D2.CheckDiskII
|
||||
bcs D2.TrkRead16s.RTS
|
||||
|
||||
>LDYAI TRACK16.LEN+256+1
|
||||
>SYSCALL2 GetMem
|
||||
bcs D2TrkRead16s.RTS
|
||||
bcs D2.TrkRead16s.RTS
|
||||
|
||||
>STYA ZPPtr2
|
||||
stx hTrkBuf
|
||||
stx D2.hTrkBuf
|
||||
|
||||
* lda TrkNum
|
||||
* jsr D2.Trk2Qtrk
|
||||
* tay
|
||||
|
||||
* and #6
|
||||
* ora Slotn0
|
||||
* tax
|
||||
|
||||
* tya
|
||||
* inc
|
||||
* and #6
|
||||
* ora Slotn0
|
||||
* tay
|
||||
|
||||
* stx PhX
|
||||
* sty PhY
|
||||
* lda Slotn0
|
||||
* ora #IO.D2.RData
|
||||
* sta .10+1
|
||||
* sta .11+1
|
||||
* sta .12+1
|
||||
* sta .13+1
|
||||
|
||||
* lda IO.D2.Ph0On,x
|
||||
*.10 lda IO.D2.RData SELF MODIFIED
|
||||
* lda IO.D2.Ph0On,y
|
||||
*.11 lda IO.D2.RData SELF MODIFIED
|
||||
*
|
||||
stz SectNum
|
||||
stz D2.SectNum
|
||||
|
||||
ldy #0 put 256 FF sync bytes for slooooow drives
|
||||
jsr PutSyncBytePtr2
|
||||
jsr D2.PutSyncBytePtr2
|
||||
|
||||
ldy #TRACK16.GAP1
|
||||
jsr PutSyncBytePtr2
|
||||
jsr D2.PutSyncBytePtr2
|
||||
|
||||
.1 jsr PutAddrHeadPtr2
|
||||
.1 jsr D2.PutAddrHeadPtr2
|
||||
|
||||
jsr HeaderCheckSum
|
||||
jsr D2.HeaderCheckSum
|
||||
|
||||
ldy #3
|
||||
|
||||
.2 lda Checksum,y
|
||||
jsr PutByte44Ptr2
|
||||
.2 lda D2.Checksum,y
|
||||
jsr D2.PutByte44Ptr2
|
||||
dey
|
||||
bpl .2
|
||||
|
||||
jsr PutTailPtr2
|
||||
jsr D2.PutTailPtr2
|
||||
|
||||
ldy #TRACK16.GAP2
|
||||
jsr PutSyncBytePtr2
|
||||
jsr D2.PutSyncBytePtr2
|
||||
|
||||
jsr PutDataHeadPtr2
|
||||
jsr D2.PutDataHeadPtr2
|
||||
|
||||
lda ZPPtr1+1
|
||||
bne .7
|
||||
|
@ -280,36 +247,31 @@ D2TrkWrite16s >PULLW ZPPtr1
|
|||
|
||||
bra .8
|
||||
|
||||
.7 jsr PutData
|
||||
.7 jsr D2.PutData
|
||||
inc ZPPtr1+1
|
||||
|
||||
.8 jsr PutTailPtr2
|
||||
.8 jsr D2.PutTailPtr2
|
||||
ldy #TRACK16.GAP3
|
||||
jsr PutSyncBytePtr2
|
||||
jsr D2.PutSyncBytePtr2
|
||||
|
||||
inc SectNum
|
||||
lda SectNum
|
||||
inc D2.SectNum
|
||||
lda D2.SectNum
|
||||
cmp #16
|
||||
bne .1
|
||||
|
||||
lda #0
|
||||
sta (ZPPtr2)
|
||||
|
||||
* ldx PhX
|
||||
* ldy PhY
|
||||
|
||||
* lda IO.D2.Ph0Off,x
|
||||
*.12 lda IO.D2.RData SELF MODIFIED
|
||||
* lda IO.D2.Ph0Off,y
|
||||
*.13 lda IO.D2.RData SELF MODIFIED
|
||||
bit D2.VolNum
|
||||
bvc .80
|
||||
|
||||
* jsr D2.Wait25600usec
|
||||
jsr D2.HeadSelect
|
||||
|
||||
jsr D2WriteTrackPtr2
|
||||
.80 jsr D2.WriteTrackPtr2
|
||||
|
||||
php
|
||||
pha
|
||||
lda hTrkBuf
|
||||
lda D2.hTrkBuf
|
||||
>SYSCALL2 FreeMem
|
||||
pla
|
||||
plp
|
||||
|
@ -317,7 +279,7 @@ D2TrkWrite16s >PULLW ZPPtr1
|
|||
rts
|
||||
*/--------------------------------------
|
||||
*\--------------------------------------
|
||||
D2TrkReadNIB
|
||||
D2.TrkReadNIB
|
||||
*/--------------------------------------
|
||||
* # D2TrkWriteNIB
|
||||
* Write a track (NIBBLE)
|
||||
|
@ -329,19 +291,19 @@ D2TrkReadNIB
|
|||
* CS : A = Error
|
||||
* A=0, currently starting/seeking...
|
||||
*\--------------------------------------
|
||||
D2TrkWriteNIB >PULLW ZPPtr1
|
||||
>PULLB DrvSlt
|
||||
D2.TrkWriteNIB >PULLW ZPPtr1
|
||||
>PULLB D2.DrvSlt
|
||||
|
||||
jsr CheckDiskII was it a DISK II ?
|
||||
jsr D2.CheckDiskII was it a DISK II ?
|
||||
bcs .9
|
||||
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* A=DSSS0000
|
||||
*--------------------------------------
|
||||
CheckDiskII pha
|
||||
D2.CheckDiskII pha
|
||||
and #$70 only 0SSS
|
||||
sta Slotn0
|
||||
sta D2.Slotn0
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
|
@ -365,11 +327,11 @@ CheckDiskII pha
|
|||
asl
|
||||
lda #0
|
||||
adc #IO.D2.DrvSel1
|
||||
adc Slotn0
|
||||
adc D2.Slotn0
|
||||
tax
|
||||
lda $C000,x
|
||||
|
||||
ldx Slotn0
|
||||
ldx D2.Slotn0
|
||||
|
||||
lda IO.D2.ReadMode,x
|
||||
lda IO.D2.RData,x
|
||||
|
@ -384,7 +346,7 @@ CheckDiskII pha
|
|||
*--------------------------------------
|
||||
* A=DSSS0000
|
||||
*--------------------------------------
|
||||
DrvSpinCheck ldy #0
|
||||
D2.DrvSpinCheck ldy #0
|
||||
|
||||
lda IO.D2.RData,x
|
||||
|
||||
|
@ -403,16 +365,21 @@ DrvSpinCheck ldy #0
|
|||
.8 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
D2.Trk2Qtrk asl x2
|
||||
sta .1+1
|
||||
D2.HeadSelect lda D2.HeadNum A = 0/1
|
||||
|
||||
bit VolNum
|
||||
bpl .1 x4
|
||||
bvs .1 > $C0 ? (VOL=254)
|
||||
asl A = 0/2
|
||||
|
||||
lsr x3
|
||||
ora D2.Slotn0
|
||||
tax x=n0/n2
|
||||
|
||||
lda IO.D2.Ph0On,x
|
||||
lda IO.D2.Ph0On+4,x
|
||||
|
||||
lda #1
|
||||
jsr D2.Wait100usecA
|
||||
|
||||
.1 adc #$ff SELF MODIFIED
|
||||
lda IO.D2.Ph0Off,x
|
||||
lda IO.D2.Ph0Off+4,x
|
||||
rts
|
||||
*--------------------------------------
|
||||
D2.Wait25600usec
|
||||
|
@ -432,49 +399,53 @@ D2.Wait100usecA phx
|
|||
|
||||
rts (6)
|
||||
*--------------------------------------
|
||||
PutSyncBytePtr2 lda #$7f
|
||||
D2.PutSyncBytePtr2
|
||||
lda #$7f
|
||||
|
||||
.1 jsr PutBytePtr2
|
||||
.1 jsr D2.PutBytePtr2
|
||||
dey
|
||||
bne .1
|
||||
|
||||
rts
|
||||
*--------------------------------------
|
||||
PutAddrHeadPtr2 ldy #2
|
||||
D2.PutAddrHeadPtr2
|
||||
ldy #2
|
||||
|
||||
.1 lda ADDR.Head,y
|
||||
jsr PutBytePtr2
|
||||
jsr D2.PutBytePtr2
|
||||
dey
|
||||
bpl .1
|
||||
|
||||
rts
|
||||
*--------------------------------------
|
||||
PutDataHeadPtr2 ldy #2
|
||||
D2.PutDataHeadPtr2
|
||||
ldy #2
|
||||
|
||||
.1 lda DATA.Head,y
|
||||
jsr PutBytePtr2
|
||||
jsr D2.PutBytePtr2
|
||||
dey
|
||||
bpl .1
|
||||
|
||||
rts
|
||||
*--------------------------------------
|
||||
PutTailPtr2 ldy #2
|
||||
D2.PutTailPtr2 ldy #2
|
||||
|
||||
.1 lda TAIL,y
|
||||
jsr PutBytePtr2
|
||||
jsr D2.PutBytePtr2
|
||||
dey
|
||||
bpl .1
|
||||
|
||||
rts
|
||||
*--------------------------------------
|
||||
HeaderCheckSum lda VolNum
|
||||
eor TrkNum
|
||||
eor SectNum
|
||||
D2.HeaderCheckSum
|
||||
lda D2.VolNum
|
||||
eor D2.TrkNum
|
||||
eor D2.SectNum
|
||||
|
||||
sta Checksum
|
||||
sta D2.Checksum
|
||||
rts
|
||||
*--------------------------------------
|
||||
PutData stz Checksum
|
||||
D2.PutData stz D2.Checksum
|
||||
|
||||
lda ZPPtr1
|
||||
ldy ZPPtr1+1
|
||||
|
@ -520,12 +491,12 @@ PutData stz Checksum
|
|||
|
||||
tax
|
||||
|
||||
eor Checksum
|
||||
sta Checksum
|
||||
eor D2.Checksum
|
||||
sta D2.Checksum
|
||||
|
||||
lda FC2Nib,x
|
||||
|
||||
jsr PutBytePtr2
|
||||
jsr D2.PutBytePtr2
|
||||
dey
|
||||
bpl .3
|
||||
|
||||
|
@ -536,23 +507,24 @@ PutData stz Checksum
|
|||
|
||||
tax
|
||||
|
||||
eor Checksum
|
||||
sta Checksum
|
||||
eor D2.Checksum
|
||||
sta D2.Checksum
|
||||
|
||||
lda FC2Nib,x
|
||||
|
||||
jsr PutBytePtr2
|
||||
jsr D2.PutBytePtr2
|
||||
|
||||
iny
|
||||
bne .4
|
||||
|
||||
ldx Checksum
|
||||
ldx D2.Checksum
|
||||
lda FC2Nib,x
|
||||
jsr PutBytePtr2
|
||||
jsr D2.PutBytePtr2
|
||||
|
||||
rts
|
||||
*--------------------------------------
|
||||
PutByte44Ptr2 pha
|
||||
D2.PutByte44Ptr2
|
||||
pha
|
||||
ror
|
||||
jsr .1
|
||||
|
||||
|
@ -560,28 +532,28 @@ PutByte44Ptr2 pha
|
|||
|
||||
.1 ora #$AA
|
||||
*--------------------------------------
|
||||
PutBytePtr2 sta (ZPPtr2)
|
||||
D2.PutBytePtr2 sta (ZPPtr2)
|
||||
inc ZPPtr2
|
||||
bne .8
|
||||
inc ZPPtr2+1
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
D2WriteTrackPtr2
|
||||
lda hTrkBuf
|
||||
D2.WriteTrackPtr2
|
||||
lda D2.hTrkBuf
|
||||
>SYSCALL2 GetMemPtr
|
||||
>STYA ZPPtr1
|
||||
|
||||
php
|
||||
sei
|
||||
|
||||
ldy #TrkWriter.Size
|
||||
ldy #D2.TrkWriter.Size
|
||||
|
||||
.1 lda TrkWriter-1,y
|
||||
.1 lda D2.TrkWriter-1,y
|
||||
sta $1ff,y
|
||||
dey
|
||||
bne .1
|
||||
|
||||
ldx Slotn0
|
||||
ldx D2.Slotn0
|
||||
|
||||
jsr $200
|
||||
|
||||
|
|
|
@ -59,14 +59,14 @@ CS.START cld
|
|||
.DA LIB.UNLOAD
|
||||
.DA GetProDOSCatSize
|
||||
.DA BuildProDOSCat
|
||||
.DA D2MotorControl
|
||||
.DA D2Recalibrate
|
||||
.DA D2MoveHead
|
||||
.DA D2TrkRead16s
|
||||
.DA D2TrkWrite16s
|
||||
.DA D2TrkReadNIB
|
||||
.DA D2TrkWriteNIB
|
||||
L.TrkWriter .DA TrkWriter
|
||||
.DA D2.MotorControl
|
||||
.DA D2.Recalibrate
|
||||
.DA D2.MoveHead
|
||||
.DA D2.TrkRead16s
|
||||
.DA D2.TrkWrite16s
|
||||
.DA D2.TrkReadNIB
|
||||
.DA D2.TrkWriteNIB
|
||||
L.D2.TrkWriter .DA D2.TrkWriter
|
||||
L.ProDOS.Boot .DA ProDOS.Boot
|
||||
L.ProDOSFX.Boot .DA ProDOSFX.Boot
|
||||
.DA 0
|
||||
|
@ -151,6 +151,7 @@ BuildProDOSCat >PULLW ZPPtr1 DstBuf
|
|||
>LDYA L.ProDOS.Boot
|
||||
bit VolDirHdr.Options
|
||||
bpl .11
|
||||
|
||||
>LDYA L.ProDOSFX.Boot
|
||||
|
||||
.11 >STYA ZPPtr3
|
||||
|
@ -340,9 +341,10 @@ CS.END
|
|||
* X = Slot Cn
|
||||
* ZPPtr1 = Ptr To NibbleBuf
|
||||
*--------------------------------------
|
||||
TrkWriter .PH $200
|
||||
D2.TrkWriter .PH $200
|
||||
|
||||
TrkWriter.Start lda IO.D2.ReadProt,x
|
||||
D2.TrkWriter.Start
|
||||
lda IO.D2.ReadProt,x
|
||||
lda IO.D2.ReadMode,x
|
||||
bmi .9 Write protected
|
||||
|
||||
|
@ -414,7 +416,7 @@ TrkWriter.Start lda IO.D2.ReadProt,x
|
|||
sec
|
||||
rts
|
||||
|
||||
TrkWriter.Size .EQ *-TrkWriter.Start
|
||||
D2.TrkWriter.Size .EQ *-D2.TrkWriter.Start
|
||||
.EP
|
||||
*--------------------------------------
|
||||
ADDR.Head .HS 96AAD5
|
||||
|
@ -616,22 +618,20 @@ VolDirHdr.CatSize .BS 1
|
|||
DiskII.OFS .HS 010305FF
|
||||
DiskII.SIG .HS 20000300
|
||||
*--------------------------------------
|
||||
DrvSlt .BS 1
|
||||
Slotn0 .BS 1
|
||||
hTrkBuf .BS 1
|
||||
D2.hTrkBuf .BS 1
|
||||
|
||||
MoveFrom .BS 1
|
||||
MoveTo .BS 1
|
||||
D2.DrvSlt .BS 1
|
||||
D2.Slotn0 .BS 1
|
||||
D2.MotorOn .BS 1
|
||||
D2.CurrentQTrack .BS 1
|
||||
D2.TargetQTrack .BS 1
|
||||
|
||||
PhX .BS 1
|
||||
PhY .BS 1
|
||||
D2.Checksum .BS 1
|
||||
D2.SectNum .BS 1
|
||||
D2.TrkNum .BS 1
|
||||
D2.VolNum .BS 1
|
||||
|
||||
Checksum .BS 1
|
||||
SectNum .BS 1
|
||||
TrkNum .BS 1
|
||||
VolNum .BS 1
|
||||
|
||||
MotorOn .BS 1
|
||||
D2.HeadNum .BS 1
|
||||
|
||||
Count .BS 2
|
||||
*--------------------------------------
|
||||
|
|
|
@ -20,14 +20,14 @@ ZPHashPtr .BS 2
|
|||
|
||||
ZPChunkLen .BS 2
|
||||
|
||||
MD5.ABCD
|
||||
MD5.A .BS 4 Chunk Level,A,B,C,D
|
||||
MD5.B .BS 4
|
||||
MD5.C .BS 4
|
||||
MD5.D .BS 4
|
||||
MD4.ABCD
|
||||
MD4.A .BS 4 Chunk Level,A,B,C,D
|
||||
MD4.B .BS 4
|
||||
MD4.C .BS 4
|
||||
MD4.D .BS 4
|
||||
|
||||
MD5.F1 .BS 4
|
||||
MD5.F2 .BS 4
|
||||
MD4.F1 .BS 4
|
||||
MD4.F2 .BS 4
|
||||
|
||||
ZS.END .ED
|
||||
*--------------------------------------
|
||||
|
@ -116,169 +116,198 @@ CS.START cld
|
|||
*--------------------------------------
|
||||
.1 .DA LIB.LOAD
|
||||
.DA LIB.UNLOAD
|
||||
.DA MD5
|
||||
.DA MD5Init
|
||||
.DA MD5Update
|
||||
.DA MD5Finalize
|
||||
J.MD5.XXXX .DA MD5.0015
|
||||
.DA MD5.1631
|
||||
.DA MD5.3247
|
||||
.DA MD5.4863
|
||||
.DA MD4
|
||||
.DA MD4Init
|
||||
.DA MD4Update
|
||||
.DA MD4Finalize
|
||||
J.MD4.XXXX .DA MD4.0015
|
||||
.DA MD4.1631
|
||||
.DA MD4.3247
|
||||
.DA MD4.4863
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
LIB.LOAD
|
||||
LIB.UNLOAD clc
|
||||
rts
|
||||
*/--------------------------------------
|
||||
* ## MD5
|
||||
* Return MD5 Hash for input String
|
||||
* ## MD4
|
||||
* Return MD4 Hash for input String
|
||||
* # C
|
||||
* `void md5 (const char* str, char* digest);`
|
||||
* `void MD4 (const char* str, char* digest);`
|
||||
* # ASM
|
||||
* `>PUSHW digest`
|
||||
* `>PUSHW str`
|
||||
* ## RETURN VALUE
|
||||
* CC
|
||||
*\--------------------------------------
|
||||
MD5 >PULLW ZPDataPtr
|
||||
MD4 >PULLW ZPDataPtr
|
||||
>PULLW ZPHashPtr
|
||||
>LDYA ZPDataPtr
|
||||
>SYSCALL2 strlen
|
||||
>STYA ZPDataLen
|
||||
.1 jsr MD5Init
|
||||
.1 jsr MD4Init
|
||||
bcs .9
|
||||
pha save MD5 Context hMem
|
||||
|
||||
jsr MD5Update.I
|
||||
jsr MD5Finalize.I
|
||||
pha save MD4 Context hMem
|
||||
jsr MD4Update.I
|
||||
jsr MD4Finalize.I
|
||||
pla
|
||||
>SYSCALL2 FreeMem Free MD5 Context
|
||||
>SYSCALL2 FreeMem Free MD4 Context
|
||||
clc
|
||||
.9 rts
|
||||
*/--------------------------------------
|
||||
* ## MD5Init
|
||||
* Initialize a MD5 computation
|
||||
* ## MD4Init
|
||||
* Initialize a MD4 computation
|
||||
* # C
|
||||
* `hMD5 md5init ();`
|
||||
* `hMD4 MD4init();`
|
||||
* # ASM
|
||||
* `>LIBCALL hLIBCRYPT,LIBCRYPT.MD5Init`
|
||||
* `>LIBCALL hLIBCRYPT,LIBCRYPT.MD4Init`
|
||||
* ## RETURN VALUE
|
||||
* A = hMem To S.MD5
|
||||
* A = hMem To S.MD4
|
||||
*\--------------------------------------
|
||||
MD5Init >LDYAI S.MD5
|
||||
MD4Init >LDYAI S.MD4
|
||||
>SYSCALL2 getmem
|
||||
bcs .9
|
||||
|
||||
>STYA ZPCtxPtr
|
||||
ldy #0
|
||||
.1 lda MD5.ABCDINIT,y
|
||||
|
||||
.1 lda MD4.ABCDINIT,y
|
||||
sta (ZPCtxPtr),y
|
||||
iny
|
||||
cpy #S.MD5.BITCOUNT
|
||||
cpy #S.MD4.BITCOUNT
|
||||
bne .1
|
||||
|
||||
lda #0
|
||||
|
||||
.2 sta (ZPCtxPtr),y
|
||||
iny
|
||||
cpy #S.MD5 Includes S.MD5.FINALIZED Flag
|
||||
cpy #S.MD4 Includes S.MD4.FINALIZED Flag
|
||||
bne .2
|
||||
|
||||
txa
|
||||
clc
|
||||
.9 rts
|
||||
*/--------------------------------------
|
||||
* ## MD5Update
|
||||
* Add Data to MD5 computation
|
||||
* ## MD4Update
|
||||
* Add Data to MD4 computation
|
||||
* # C
|
||||
* `void md5update (hMD5 md5, char* data, int len);`
|
||||
* `void MD4update (hMD4 MD4, char* data, int len);`
|
||||
* # ASM
|
||||
* `>PUSHW len`
|
||||
* `>PUSHW data`
|
||||
* `>LDA.G md5`
|
||||
* `>hLIBCRYPT,LIBCRYPT.MD5Update`
|
||||
* `>LDA.G MD4`
|
||||
* `>hLIBCRYPT,LIBCRYPT.MD4Update`
|
||||
* ## RETURN VALUE
|
||||
*\--------------------------------------
|
||||
MD5Update >SYSCALL2 GetMemPtr get MD5 Context
|
||||
MD4Update >SYSCALL2 GetMemPtr get MD4 Context
|
||||
>STYA ZPCtxPtr
|
||||
>PULLW ZPDataPtr get DATA
|
||||
>PULLW ZPDataLen get LEN
|
||||
MD5Update.I ldy #S.MD5.FINALIZED
|
||||
|
||||
MD4Update.I ldy #S.MD4.FINALIZED
|
||||
lda (ZPCtxPtr),y
|
||||
beq .1
|
||||
|
||||
sec
|
||||
rts
|
||||
|
||||
.1 lda ZPDataLen+1 More than 256 Bytes remaining to hash ?
|
||||
bne .3 yes
|
||||
|
||||
lda ZPDataLen
|
||||
bne .2 Len = O ?
|
||||
|
||||
clc All data processed
|
||||
rts
|
||||
|
||||
.2 cmp #64 More than 64 Bytes remaining to hash ?
|
||||
bcc .50 yes
|
||||
|
||||
.3 lda #64
|
||||
|
||||
.50 sta ZPChunkLen Save Chunk Len
|
||||
jsr MD5UpdateBitCount
|
||||
jsr MD4UpdateBitCount
|
||||
|
||||
ldy #0
|
||||
|
||||
.51 lda (ZPDataPtr),y Load Buffer with data
|
||||
sta MD5.BUFFER64,y
|
||||
sta MD4.BUFFER64,y
|
||||
iny
|
||||
cpy ZPChunkLen
|
||||
bne .51
|
||||
|
||||
cpy #64 Full 64 Bytes DATA ?
|
||||
beq .58
|
||||
* Append "$80" & Padding & original size
|
||||
|
||||
lda #$80 no, Append $80
|
||||
sta MD5.BUFFER64,y
|
||||
sta MD4.BUFFER64,y
|
||||
|
||||
lda #0
|
||||
|
||||
.52 iny Pad with 0 to 64
|
||||
cpy #64
|
||||
beq .53
|
||||
sta MD5.BUFFER64,y
|
||||
|
||||
sta MD4.BUFFER64,y
|
||||
bra .52
|
||||
.53 ldy #S.MD5.EXTRABIT Mark MD5 Context as Appended
|
||||
|
||||
.53 ldy #S.MD4.EXTRABIT Mark MD4 Context as Appended
|
||||
lda #$80
|
||||
sta (ZPCtxPtr),y
|
||||
lda ZPChunkLen
|
||||
cmp #56 Enough room for BITCOUNT ?
|
||||
bcs .58 no
|
||||
jsr MD5AppendBitCount
|
||||
.58 jsr MD5Transform
|
||||
jsr MD5UpdateABCD0
|
||||
|
||||
jsr MD4AppendBitCount
|
||||
|
||||
.58 jsr MD4Transform
|
||||
jsr MD4UpdateABCD0
|
||||
|
||||
.8 lda ZPDataLen Substract Bytes processed from LEN
|
||||
sec
|
||||
sbc ZPChunkLen get back chunk Len
|
||||
sta ZPDataLen
|
||||
bcs .81
|
||||
|
||||
dec ZPDataLen+1
|
||||
|
||||
.81 lda ZPDataPtr Add Bytes processed to DATA
|
||||
clc
|
||||
adc ZPChunkLen
|
||||
sta ZPDataPtr
|
||||
bcc .1
|
||||
|
||||
inc ZPDataPtr+1
|
||||
bra .1
|
||||
*/--------------------------------------
|
||||
* ## MD5Finalize
|
||||
* ## MD4Finalize
|
||||
* # C
|
||||
* `void md5finalize (hMD5 md5, char* digest);`
|
||||
* `void MD4finalize (hMD4 MD4, char* digest);`
|
||||
* # ASM
|
||||
* `>PUSHW digest`
|
||||
* `>LDA.G md5`
|
||||
* `>LIBCALL hLIBCRYPT,LIBCRYPT.MD5Finalize`
|
||||
* `>LDA.G MD4`
|
||||
* `>LIBCALL hLIBCRYPT,LIBCRYPT.MD4Finalize`
|
||||
* ## RETURN VALUE
|
||||
*\--------------------------------------
|
||||
MD5Finalize pha
|
||||
MD4Finalize pha
|
||||
>SYSCALL2 GetMemPtr
|
||||
>STYA ZPCtxPtr get MD5 Context
|
||||
>STYA ZPCtxPtr get MD4 Context
|
||||
>PULLW ZPHashPtr
|
||||
jsr MD5Finalize.I
|
||||
jsr MD4Finalize.I
|
||||
pla
|
||||
>SYSCALL2 FreeMem
|
||||
rts
|
||||
MD5Finalize.I ldy #S.MD5.FINALIZED
|
||||
|
||||
MD4Finalize.I ldy #S.MD4.FINALIZED
|
||||
|
||||
lda (ZPCtxPtr),y
|
||||
bne .11
|
||||
jsr MD5ExtraChunk
|
||||
.11 ldy #S.MD5.ABCD0
|
||||
|
||||
jsr MD4ExtraChunk
|
||||
|
||||
.11 ldy #S.MD4.ABCD0
|
||||
|
||||
.1 lda (ZPCtxPtr),y
|
||||
lsr
|
||||
|
@ -286,22 +315,27 @@ MD5Finalize.I ldy #S.MD5.FINALIZED
|
|||
lsr
|
||||
lsr
|
||||
tax
|
||||
lda MD5.DIGITS,x
|
||||
lda MD4.DIGITS,x
|
||||
sta (ZPHashPtr)
|
||||
inc ZPHashPtr
|
||||
bne .2
|
||||
|
||||
inc ZPHashPtr+1
|
||||
|
||||
.2 lda (ZPCtxPtr),y
|
||||
and #$0F
|
||||
tax
|
||||
lda MD5.DIGITS,x
|
||||
lda MD4.DIGITS,x
|
||||
sta (ZPHashPtr)
|
||||
inc ZPHashPtr
|
||||
bne .3
|
||||
|
||||
inc ZPHashPtr+1
|
||||
|
||||
.3 iny
|
||||
cpy #S.MD5.ABCD0+16
|
||||
cpy #S.MD4.ABCD0+16
|
||||
bne .1
|
||||
|
||||
lda #0
|
||||
sta (ZPHashPtr)
|
||||
clc
|
||||
|
@ -309,32 +343,32 @@ MD5Finalize.I ldy #S.MD5.FINALIZED
|
|||
*--------------------------------------
|
||||
* PRIVATE
|
||||
*--------------------------------------
|
||||
* MD5AppendBitCount
|
||||
* MD4AppendBitCount
|
||||
* In :
|
||||
* ZPCtxPtr = MD5 Context
|
||||
* ZPCtxPtr = MD4 Context
|
||||
*--------------------------------------
|
||||
MD5AppendBitCount
|
||||
MD4AppendBitCount
|
||||
ldx #56
|
||||
ldy #S.MD5.BITCOUNT Append 8 Bytes of BITCOUNT
|
||||
ldy #S.MD4.BITCOUNT Append 8 Bytes of BITCOUNT
|
||||
|
||||
.1 lda (ZPCtxPtr),y
|
||||
sta MD5.BUFFER64,x
|
||||
sta MD4.BUFFER64,x
|
||||
inx
|
||||
iny
|
||||
cpy #S.MD5.BITCOUNT+8
|
||||
cpy #S.MD4.BITCOUNT+8
|
||||
bne .1
|
||||
|
||||
ldy #S.MD5.FINALIZED Mark MD5 Context as Finalized
|
||||
ldy #S.MD4.FINALIZED Mark MD4 Context as Finalized
|
||||
lda #$80
|
||||
sta (ZPCtxPtr),y
|
||||
rts
|
||||
*--------------------------------------
|
||||
* MD5UpdateBitCount
|
||||
* MD4UpdateBitCount
|
||||
* In :
|
||||
* CL = Size (in bytes) to add to MD5 context
|
||||
* ZPCtxPtr = MD5 Context
|
||||
* CL = Size (in bytes) to add to MD4 context
|
||||
* ZPCtxPtr = MD4 Context
|
||||
*--------------------------------------
|
||||
MD5UpdateBitCount
|
||||
MD4UpdateBitCount
|
||||
stz ZPChunkLen+1
|
||||
lda ZPChunkLen
|
||||
asl
|
||||
|
@ -344,7 +378,7 @@ MD5UpdateBitCount
|
|||
asl
|
||||
rol ZPChunkLen+1
|
||||
clc
|
||||
ldy #S.MD5.BITCOUNT
|
||||
ldy #S.MD4.BITCOUNT
|
||||
adc (ZPCtxPtr),y
|
||||
sta (ZPCtxPtr),y
|
||||
iny
|
||||
|
@ -364,40 +398,40 @@ MD5UpdateBitCount
|
|||
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
* MD5ExtraChunk
|
||||
* MD4ExtraChunk
|
||||
* In :
|
||||
* ZPCtxPtr = MD5 Context
|
||||
* ZPCtxPtr = MD4 Context
|
||||
*--------------------------------------
|
||||
MD5ExtraChunk ldy #S.MD5.FINALIZED
|
||||
MD4ExtraChunk ldy #S.MD4.FINALIZED
|
||||
lda #$80
|
||||
sta (ZPCtxPtr),y Mark MD5 Context as "finalized"
|
||||
sta (ZPCtxPtr),y Mark MD4 Context as "finalized"
|
||||
ldx #0
|
||||
ldy #S.MD5.EXTRABIT Extra Bit already appended ?
|
||||
ldy #S.MD4.EXTRABIT Extra Bit already appended ?
|
||||
lda (ZPCtxPtr),y
|
||||
bne .1
|
||||
|
||||
lda #$80
|
||||
sta MD5.BUFFER64 Add extra bit to buffer
|
||||
sta MD4.BUFFER64 Add extra bit to buffer
|
||||
sta (ZPCtxPtr),y Mark Extrabit added
|
||||
inx
|
||||
|
||||
.1 stz MD5.BUFFER64,x pad with "0"...
|
||||
.1 stz MD4.BUFFER64,x pad with "0"...
|
||||
inx
|
||||
cpx #56
|
||||
bne .1 ...until room for bitcount
|
||||
|
||||
jsr MD5AppendBitCount
|
||||
jsr MD5Transform
|
||||
jsr MD4AppendBitCount
|
||||
jsr MD4Transform
|
||||
*--------------------------------------
|
||||
* MD5UpdateABCD0
|
||||
* MD4UpdateABCD0
|
||||
* In:
|
||||
* ZPCtxPtr = MD5 Context
|
||||
* ZPCtxPtr = MD4 Context
|
||||
*--------------------------------------
|
||||
MD5UpdateABCD0 ldy #0
|
||||
MD4UpdateABCD0 ldy #0
|
||||
|
||||
.1 clc ADC32 A+A0->A0, B, C, D....
|
||||
|
||||
.2 lda MD5.ABCD,y
|
||||
.2 lda MD4.ABCD,y
|
||||
adc (ZPCtxPtr),y
|
||||
sta (ZPCtxPtr),y
|
||||
iny
|
||||
|
@ -410,22 +444,24 @@ MD5UpdateABCD0 ldy #0
|
|||
|
||||
rts
|
||||
*--------------------------------------
|
||||
* MD5Transform
|
||||
* MD4Transform
|
||||
* In:
|
||||
* ZPCtxPtr = MD5 Context
|
||||
* 512 Bits Padded chunk in MD5.BUFFER64
|
||||
* ZPCtxPtr = MD4 Context
|
||||
* 512 Bits Padded chunk in MD4.BUFFER64
|
||||
* Out:
|
||||
* Updated MD5.ABCD
|
||||
* Updated MD4.ABCD
|
||||
* https://tools.ietf.org/html/rfc1320 MD4
|
||||
* https://tools.ietf.org/html/rfc1321 MD5
|
||||
*--------------------------------------
|
||||
MD5Transform ldy #15 init ABCD Chunk with Context ABCD0
|
||||
MD4Transform ldy #15 init ABCD Chunk with Context ABCD0
|
||||
|
||||
.1 lda (ZPCtxPtr),y
|
||||
sta MD5.ABCD,y
|
||||
sta MD4.ABCD,y
|
||||
dey
|
||||
bpl .1
|
||||
|
||||
stz MD5.i Start Proceed 0 to 63 bytes
|
||||
lda #0 lda MD5.i
|
||||
stz MD4.i Start Proceed 0 to 63 bytes
|
||||
lda #0 lda MD4.i
|
||||
|
||||
.2 lsr
|
||||
lsr
|
||||
|
@ -433,94 +469,98 @@ MD5Transform ldy #15 init ABCD Chunk with Context ABCD0
|
|||
and #6
|
||||
tax
|
||||
|
||||
jsr MD5.XXXX
|
||||
jsr MD4.XXXX
|
||||
|
||||
inc MD5.i
|
||||
lda MD5.i
|
||||
inc MD4.i
|
||||
lda MD4.i
|
||||
cmp #64
|
||||
bne .2
|
||||
|
||||
rts
|
||||
*--------------------------------------
|
||||
MD5.XXXX jmp (J.MD5.XXXX,x)
|
||||
MD4.XXXX jmp (J.MD4.XXXX,x)
|
||||
*--------------------------------------
|
||||
MD5.0015 >AND32 MD5.B,MD5.C,MD5.F1
|
||||
>NOT32 MD5.B,MD5.F2
|
||||
>AND32 MD5.F2,MD5.D,MD5.F2
|
||||
>ORA32 MD5.F1,MD5.F2,MD5.F
|
||||
bra MD5.XXXX.END
|
||||
MD4.0015 >AND32 MD4.B,MD4.C,MD4.F1
|
||||
>NOT32 MD4.B,MD4.F2
|
||||
>AND32 MD4.F2,MD4.D,MD4.F2
|
||||
>ORA32 MD4.F1,MD4.F2,MD4.F
|
||||
bra MD4.XXXX.END
|
||||
*--------------------------------------
|
||||
MD5.1631 >AND32 MD5.D,MD5.B,MD5.F1
|
||||
>NOT32 MD5.D,MD5.F2
|
||||
>AND32 MD5.F2,MD5.C,MD5.F2
|
||||
>ORA32 MD5.F1,MD5.F2,MD5.F
|
||||
bra MD5.XXXX.END
|
||||
MD4.1631 >AND32 MD4.D,MD4.B,MD4.F1
|
||||
>NOT32 MD4.D,MD4.F2
|
||||
>AND32 MD4.F2,MD4.C,MD4.F2
|
||||
>ORA32 MD4.F1,MD4.F2,MD4.F
|
||||
bra MD4.XXXX.END
|
||||
*--------------------------------------
|
||||
MD5.3247 >EOR32 MD5.B,MD5.C,MD5.F
|
||||
>EOR32 MD5.F,MD5.D,MD5.F
|
||||
bra MD5.XXXX.END
|
||||
MD4.3247 >EOR32 MD4.B,MD4.C,MD4.F
|
||||
>EOR32 MD4.F,MD4.D,MD4.F
|
||||
bra MD4.XXXX.END
|
||||
*--------------------------------------
|
||||
MD5.4863 >NOT32 MD5.D,MD5.F1
|
||||
>ORA32 MD5.F1,MD5.B,MD5.F2
|
||||
>EOR32 MD5.F2,MD5.C,MD5.F
|
||||
MD4.4863 >NOT32 MD4.D,MD4.F1
|
||||
>ORA32 MD4.F1,MD4.B,MD4.F2
|
||||
>EOR32 MD4.F2,MD4.C,MD4.F
|
||||
*--------------------------------------
|
||||
MD5.XXXX.END >MOV32 MD5.D,MD5.DTemp
|
||||
>MOV32 MD5.C,MD5.D
|
||||
>MOV32 MD5.B,MD5.C
|
||||
>ADC32 MD5.A,MD5.F,MD5.F
|
||||
lda MD5.i
|
||||
MD4.XXXX.END >MOV32 MD4.D,MD4.DTemp
|
||||
>MOV32 MD4.C,MD4.D
|
||||
>MOV32 MD4.B,MD4.C
|
||||
>ADC32 MD4.A,MD4.F,MD4.F
|
||||
lda MD4.i
|
||||
asl
|
||||
asl
|
||||
tay
|
||||
|
||||
ldx #0
|
||||
clc
|
||||
|
||||
.1 lda MD5.K,y ADC32 MD5.K[i],MD5.F,MD5.F
|
||||
adc MD5.F,x
|
||||
sta MD5.F,x
|
||||
.1 lda MD4.K,y ADC32 MD4.K[i],MD4.F,MD4.F
|
||||
adc MD4.F,x
|
||||
sta MD4.F,x
|
||||
iny
|
||||
inx
|
||||
txa
|
||||
eor #4 DO NOT DISTURB carry with cpx !!!
|
||||
bne .1
|
||||
|
||||
ldy MD5.i
|
||||
lda MD5.g,y
|
||||
ldy MD4.i
|
||||
lda MD4.g,y
|
||||
asl
|
||||
asl
|
||||
tay
|
||||
ldx #0
|
||||
|
||||
clc
|
||||
.2 lda MD5.BUFFER64,y ADC32 M[g],MD5.F,MD5.F
|
||||
adc MD5.F,x
|
||||
sta MD5.F,x
|
||||
|
||||
.2 lda MD4.BUFFER64,y ADC32 M[g],MD4.F,MD4.F
|
||||
adc MD4.F,x
|
||||
sta MD4.F,x
|
||||
iny
|
||||
inx
|
||||
txa
|
||||
eor #4 DO NOT DISTURB carry with cpx !!!
|
||||
bne .2
|
||||
|
||||
ldy MD5.i
|
||||
ldx MD5.s,y get s[i] in x
|
||||
ldy MD4.i
|
||||
ldx MD4.s,y get s[i] in x
|
||||
|
||||
>ROL32x MD5.F
|
||||
>ADC32 MD5.B,MD5.F,MD5.B
|
||||
>MOV32 MD5.DTemp,MD5.A
|
||||
>ROL32x MD4.F
|
||||
>ADC32 MD4.B,MD4.F,MD4.B
|
||||
>MOV32 MD4.DTemp,MD4.A
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
MD5.ABCDINIT .HS 01234567.89ABCDEF.FEDCBA98.76543210
|
||||
MD4.ABCDINIT .HS 01234567.89ABCDEF.FEDCBA98.76543210
|
||||
*--------------------------------------
|
||||
MD5.s .DA #7,#12,#17,#22,#7,#12,#17,#22,#7,#12,#17,#22,#7,#12,#17,#22
|
||||
MD4.s .DA #7,#12,#17,#22,#7,#12,#17,#22,#7,#12,#17,#22,#7,#12,#17,#22
|
||||
.DA #5,#9,#14,#20,#5,#9,#14,#20,#5,#9,#14,#20,#5,#9,#14,#20
|
||||
.DA #4,#11,#16,#23,#4,#11,#16,#23,#4,#11,#16,#23,#4,#11,#16,#23
|
||||
.DA #6,#10,#15,#21,#6,#10,#15,#21,#6,#10,#15,#21,#6,#10,#15,#21
|
||||
*--------------------------------------
|
||||
MD5.g .DA #0,#1,#2,#3,#4,#5,#6,#7,#8,#9,#10,#11,#12,#13,#14,#15
|
||||
MD4.g .DA #0,#1,#2,#3,#4,#5,#6,#7,#8,#9,#10,#11,#12,#13,#14,#15
|
||||
.DA #1,#6,#11,#0,#5,#10,#15,#4,#9,#14,#3,#8,#13,#2,#7,#12
|
||||
.DA #5,#8,#11,#14,#1,#4,#7,#10,#13,#0,#3,#6,#9,#12,#15,#2
|
||||
.DA #0,#7,#14,#5,#12,#3,#10,#1,#8,#15,#6,#13,#4,#11,#2,#9
|
||||
*--------------------------------------
|
||||
MD5.K .HS 78A46AD7.56B7C7E8.DB702024.EECEBDC1
|
||||
MD4.K .HS 78A46AD7.56B7C7E8.DB702024.EECEBDC1
|
||||
.HS AF0F7CF5.2AC68747.134630A8.019546FD
|
||||
.HS D8988069.AFF7448B.B15BFFFF.BED75C89
|
||||
.HS 2211906B.937198FD.8E4379A6.2108B449
|
||||
|
@ -537,14 +577,16 @@ MD5.K .HS 78A46AD7.56B7C7E8.DB702024.EECEBDC1
|
|||
.HS 4F7EA86F.E0E62CFE.144301A3.A111084E
|
||||
.HS 827E53F7.35F23ABD.BBD2D72A.91D386EB
|
||||
*--------------------------------------
|
||||
MD5.DIGITS .AS "0123456789ABCDEF"
|
||||
MD4.SQRT2 .HS 5A827999
|
||||
MD4.SQRT3 .HS 6ED9EBA1
|
||||
MD4.DIGITS .AS "0123456789ABCDEF"
|
||||
*--------------------------------------
|
||||
ZPDataLen .BS 2
|
||||
|
||||
MD5.DTemp .BS 4
|
||||
MD5.F .BS 4
|
||||
MD5.i .BS 1
|
||||
MD5.BUFFER64 .BS 64
|
||||
MD4.DTemp .BS 4
|
||||
MD4.F .BS 4
|
||||
MD4.i .BS 1
|
||||
MD4.BUFFER64 .BS 64
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE usr/src/lib/libcrypt.s
|
||||
|
|
|
@ -743,8 +743,12 @@ XDOS.SPParams.B .HS 0000 data buffer
|
|||
.HS 000000 block number (3 bytes)
|
||||
*--------------------------------------
|
||||
.DO XRWDBG=1
|
||||
|
||||
XRW.DEBUG sta CLRPAGE2
|
||||
|
||||
lda #" "
|
||||
sta $722
|
||||
|
||||
lda #"R"
|
||||
bit XRW.bWrite
|
||||
bpl .1
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue