A2osX/BIN/CMP.S.txt
2020-08-23 21:46:37 +02:00

317 lines
5.3 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NEW
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
.TF bin/cmp
*--------------------------------------
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/mli.i
.INB inc/mli.e.i
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
ArgIndex .BS 1
ZPPtr1 .BS 2
bPause .BS 1
bAll .BS 1
bVerbose .BS 1
bDiff .BS 1
hFile1 .BS 1
hBuf1 .BS 1
ZPBufPtr1 .BS 2
bSkip1 .BS 1
hFile2 .BS 1
hBuf2 .BS 1
ZPBufPtr2 .BS 2
bSkip2 .BS 1
Offset .BS 2
BufCnt .BS 2
SeekOfs .BS 4
ZS.END .ED
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA #S.PS.F.EVENT S.PS.F
.DA #0
.DA CS.END-CS.START CS
.DA DS.END-DS.START DS
.DA #64 SS
.DA #ZS.END-ZS.START Zero Page Size
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.MSG.USAGE .DA MSG.USAGE
L.MSG.DIFF .DA MSG.DIFF
.DA 0
*--------------------------------------
CS.INIT clc
rts
*--------------------------------------
CS.RUN
.1 inc ArgIndex
lda ArgIndex
>SYSCALL ArgV
bcs .7
>STYA ZPPtr1
lda (ZPPtr1)
cmp #'-'
bne .2
jsr CS.RUN.CheckOpt
bcc .1
.99 >PUSHW L.MSG.USAGE
>PUSHBI 0
>SYSCALL PrintF
lda #E.SYN
sec
.9 rts
.2 lda hFile1
bne .3
jsr CS.RUN.OPEN
bcs .9
sta hFile1
bra .1
.3 lda hFile2
bne .4
jsr CS.RUN.OPEN
bcs .9
sta hFile2
bra .1
.4 bit bSkip1
bmi .5
jsr CS.RUN.SEEK
bcs .9
sec
ror bSkip1
bra .1
.5 bit bSkip2
bmi .99
sta bSkip2
jsr CS.RUN.SEEK
bcs .9
sec
ror bSkip2
jmp .1
.7 lda hFile2
beq .99
lda hFile1
beq .99
.8 >LDYAI 256
>SYSCALL GetMem
bcs .9
>STYA ZPBufPtr1
stx hBuf1
>LDYAI 256
>SYSCALL GetMem
bcs .9
>STYA ZPBufPtr2
stx hBuf2
*--------------------------------------
CS.RUN.LOOP ldy #S.PS.hStdIn
lda (pPS),y
>SYSCALL FEOF
bcs .9 IO error
tay
bne .1 no char
>SYSCALL GetChar
bcs .9 IO error
cmp #$03 Ctrl-C
beq .9 Abort....
cmp #$13 Ctrl-S
bne .1
lda bPause
eor #$ff
sta bPause
bne CS.RUN.LOOP
.1 lda bPause
bne CS.RUN.LOOP Pause...
jsr CS.RUN.READ1
bcc .2
cmp #MLI.E.EOF
bne .9
bra .99
.2 >STYA BufCnt
jsr CS.RUN.READ2
bcc .20
cmp #MLI.E.EOF
bne .9
bra .99
.20 cpy BufCnt
pha
sbc BufCnt+1
pla
bcc .3
>STYA BufCnt
.3 ldy #0
.4 lda (ZPBufPtr1),y
cmp (ZPBufPtr2),y
beq .8
lda #$E0
sta bDiff
bit bVerbose
bpl .5
jsr CS.RUN.Print
bcs .9
.5 bit bAll
bpl .99
.8 iny
cpy BufCnt
bne .4
inc Offset
bne CS.RUN.LOOP
inc Offset+1
bra CS.RUN.LOOP
.99 lda bDiff
.9 sec
rts
*--------------------------------------
CS.RUN.OPEN >PUSHW ZPPtr1
>PUSHBI O.RDONLY
>PUSHBI 0 Type
>PUSHWZ Aux type
>SYSCALL FOpen
rts
*--------------------------------------
CS.RUN.SEEK >LDYA ZPPtr1
>SYSCALL AToL
bcs .9
>PULLL SeekOfs
lda bSkip1
bmi .1
>PUSHBI SEEK.SET
>PUSHL SeekOfs
lda hFile1
>SYSCALL FSeek
bcs .9
.1 >PUSHBI SEEK.SET
>PUSHL SeekOfs
lda hFile2
>SYSCALL FSeek
.9 rts
*--------------------------------------
CS.RUN.READ1 >PUSHWI 256
>PUSHW ZPBufPtr1
lda hFile1
>SYSCALL FRead
rts
*--------------------------------------
CS.RUN.READ2 >PUSHWI 256
>PUSHW ZPBufPtr2
lda hFile2
>SYSCALL FRead
rts
*--------------------------------------
CS.RUN.Print phy
>PUSHW L.MSG.DIFF
>PUSHW Offset
tya
>PUSHA
>PUSHB (ZPBufPtr1),y
>PUSHB (ZPBufPtr2),y
>PUSHBI 5
>SYSCALL PrintF
ply
rts
*--------------------------------------
CS.QUIT lda hFile2
beq .1
>SYSCALL FClose
.1 lda hFile1
beq .2
>SYSCALL FClose
.2 lda hBuf2
beq .3
>SYSCALL FreeMem
.3 lda hBuf1
beq .8
>SYSCALL FreeMem
.8 clc
rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.RUN.CheckOpt ldy #1
lda (ZPPtr1),y
ldy #OptionVars-OptionList-1
.2 cmp OptionList,y
beq .3
dey
bpl .2
sec
rts
.3 ldx OptionVars,y
lda #$ff
sta 0,x
clc
rts
*--------------------------------------
CS.END
*--------------------------------------
OptionList .AS "AaVv"
OptionVars .DA #bAll,#bAll,#bVerbose,#bVerbose
*--------------------------------------
MSG.USAGE .AS "Usage : CMP File1 File2 [SKIP1 [SKIP2]]\r\n"
.AS " -A : Shows All differences\r\n"
.AZ " -V : Verbose Mode\r\n"
MSG.DIFF .AZ "%H%h:%h %h\r\n"
*--------------------------------------
.DUMMY
.OR 0
DS.START
DS.END
.ED
*--------------------------------------
MAN
SAVE usr/src/bin/cmp.s
ASM