LBTCPIP:ARP/DNS debugging session #1

This commit is contained in:
Rémy GIBERT 2016-03-17 08:31:11 +01:00
parent bb490f0347
commit cf685a7b5b
7 changed files with 216 additions and 160 deletions

Binary file not shown.

Binary file not shown.

View File

@ -218,7 +218,7 @@ LIBSTR >PSTRING "libstr.o"
LIBTCPIP >PSTRING "libtcpip.o"
SSCANF.IP >PSTRING "%d.%d.%d.%d"
MSG0 >CSTRING "STS TTL MAC Address IP Address\n"
MSG1 >CSTRING "$%h %5d %h:%h:%h:%h:%h:%h %d.%d.%d.%d\n"
MSG1 >CSTRING "$%h %5D %h:%h:%h:%h:%h:%h %d.%d.%d.%d\n"
MSG2 >CSTRING "%d.%d.%d.%d is at %h:%h:%h:%h:%h:%h\n"
*--------------------------------------
DS.START

View File

@ -40,7 +40,6 @@ L.SSCANF.IP .DA SSCANF.IP
L.IP .DA IP
L.MSG0 .DA MSG0
L.MSG1 .DA MSG1
L.DNSNAME .DA DNSNAME
.DA 0
*--------------------------------------
CS.INIT stz hHostName
@ -103,19 +102,12 @@ CS.INIT.DUMP >LIBCALL hLIBTCPIP,LIBTCPIP.DNS.GETCACHE
>PUSHW L.MSG0
>LIBCALL hLIBSTR,LIBSTR.PRINTF
ldx #K.DNSCACHE.SIZE
lda #K.DNSCACHE.SIZE
sta EntryCount
.1 phx
lda (ZPPTR1)
.1 lda (ZPPTR1)
beq .2
ldy #S.DNSCACHE.RDATA+4
.5 dey
lda (ZPPTR1),y
>PUSHA
cpy #S.DNSCACHE.RDATA
bne .5
ldy #S.DNSCACHE.TTL+4
.6 dey
lda (ZPPTR1),y
@ -123,31 +115,18 @@ CS.INIT.DUMP >LIBCALL hLIBTCPIP,LIBTCPIP.DNS.GETCACHE
cpy #S.DNSCACHE.TTL
bne .6
ldy #S.DNSCACHE.IP+4
.5 dey
lda (ZPPTR1),y
>PUSHA
cpy #S.DNSCACHE.IP
bne .5
ldy #S.DNSCACHE.hNAME
lda (ZPPTR1),y
>SYSCALL SYS.GetMemPtrA
>STYA ZPPTR2
>PUSHYA
ldy #0 convert DNS-style string to PSTR
.10 lda (ZPPTR2),y
tax
beq .12
lda #'.'
sta DNSNAME,y
.11 iny
lda (ZPPTR2),y
sta DNSNAME,y
dex
bne .11
iny
bne .10
.12 dey
sty DNSNAME
>PUSHW L.DNSNAME
>PUSHB (ZPPTR1) Entry Status
>PUSHW L.MSG1
@ -160,10 +139,8 @@ CS.INIT.DUMP >LIBCALL hLIBTCPIP,LIBTCPIP.DNS.GETCACHE
bcc .3
inc ZPPTR1+1
.3 plx
dex
beq .8
jmp .1
.3 dec EntryCount
bne .1
.8 lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory
@ -190,14 +167,14 @@ CS.END
LIBSTR >PSTRING "libstr.o"
LIBTCPIP >PSTRING "libtcpip.o"
SSCANF.IP >PSTRING "%d.%d.%d.%d"
MSG0 >CSTRING "STS Hostname TTL IP Address\n"
MSG1 >CSTRING "$%h %32S %h%h%h%h %d.%d.%d.%d\n"
MSG0 >CSTRING "STS Hostname IP Address TTL\n"
MSG1 >CSTRING "$%h %32S %03d.%03d.%03d.%03d %L\n"
hLIBSTR .BS 1
hLIBTCPIP .BS 1
hHostName .BS 1
hIP .BS 1
IP .BS 4
DNSNAME .BS K.DNS.MAXLEN+1
EntryCount .BS 1
MAN
SAVE BIN/DNSINFO.S
ASM

View File

@ -31,27 +31,27 @@ CS.START cld
*--------------------------------------
.1 .DA LIB.LOAD
.DA LIB.UNLOAD
.DA PRINTF
.DA PRINTC
.DA PRINTP
.DA PrintF
.DA PrintC
.DA PrintP
.DA STRMATCHP
.DA STRCPYP
.DA STRCATP
.DA UCASEP
.DA LCASEP
.DA PRINTDATE
.DA PRINTTIME
.DA PrintDATE
.DA PrintTIME
.DA SSCANF
*--------------------------------------
PRINTFJMP1 .DA PRINTFA
.DA PRINTFB,PRINTFBB
.DA PRINTFD,PRINTFDD,PRINTFL
.DA PRINTFE,PRINTFEE
.DA PRINTFH,PRINTFHH
.DA PRINTFI,PRINTFII
.DA PRINTFSC,PRINTFSP
.DA PRINTFT,PRINTFTT
PRINTFJMP2 .DA PRINTFESC,PRINTFCR,PRINTFBKSLH,PRINTFPERCENT
PrintFJMP1 .DA PrintFA
.DA PrintFB,PrintFBB
.DA PrintFD,PrintFDD,PrintFL
.DA PrintFE,PrintFEE
.DA PrintFH,PrintFHH
.DA PrintFI,PrintFII
.DA PrintFSC,PrintFSP
.DA PrintFT,PrintFTT
PrintFJMP2 .DA PrintFESC,PrintFCR,PrintFBKSLH,PrintFPERCENT
*--------------------------------------
.DA 0
*--------------------------------------
@ -59,28 +59,27 @@ LIB.LOAD
LIB.UNLOAD clc
rts
*--------------------------------------
* PRINTF :
* PrintF :
* Prints C-Style String
* PULLW Pointer to Sting,Last Byte negative
* %a pull 1 byte to print ATTRIB String
* %b pull 1 byte to print BIN
* %B pull 2 byte to print BIN
* %d pull 1 byte to print unsigned DEC
* %D pull 2 bytes to print unsigned DEC
* %L pull 4 bytes to print unsigned DEC
* %n pull 1 byte to print low Nibble HEX
* %N pull 1 byte to print high Nibble HEX
* %h pull 1 byte to print HEX
* %H pull 2 bytes to print HEX
* %i pull 1 byte to print signed DEC
* %I pull 2 bytes to print signed DEC
* %a pull 1 byte to Print ATTRIB String
* %b pull 1 byte to Print BIN
* %B pull 2 byte to Print BIN
* %d pull 1 byte to Print unsigned DEC
* %D pull 2 bytes to Print unsigned DEC
* %L pull 4 bytes to Print unsigned DEC
* %n pull 1 byte to Print low Nibble HEX
* %N pull 1 byte to Print high Nibble HEX
* %h pull 1 byte to Print HEX
* %H pull 2 bytes to Print HEX
* %i pull 1 byte to Print signed DEC
* %I pull 2 bytes to Print signed DEC
* %s pull 2 bytes ptr to C-Style String
* %S pull 2 bytes ptr to P-Style String
* \e print 'ESC' ($1B,27)
* \n print CR=13
* \\ print \
* \% print %
* \e Print 'ESC' ($1B,27)
* \n Print CR=13
* \\ Print \
* \% Print %
* padding :
* %d '9' '12'
* %2d ' 9' '12'
@ -88,31 +87,31 @@ LIB.UNLOAD clc
* %16s 'ABCDEFGHIjkl '
* %011s 'ABCDEFGH000'
*--------------------------------------
PRINTF >PULLW ZPTmpPtr1
PrintF >PULLW ZPTmpPtr1
ldy #0
PRINTFCOUT lda (ZPTmpPtr1),y
PrintFCOUT lda (ZPTmpPtr1),y
beq .1
cmp #'%'
beq PRINTFESC1
beq PrintFESC1
cmp #'\'
beq PRINTFESC2
beq PrintFESC2
jsr COUT
iny
bne PRINTFCOUT
bne PrintFCOUT
.1 rts
PRINTFEXIT ply
PrintFEXIT ply
iny
bne PRINTFCOUT
bne PrintFCOUT
rts
*--------------------------------------
PRINTFESC1 stz PADLEN
PrintFESC1 stz PADLEN
lda #' '
sta PADCHAR
.1 ldx #PRINTFTBL1.END-PRINTFTBL1-1
.1 ldx #PrintFTBL1.END-PrintFTBL1-1
iny
lda (ZPTmpPtr1),y
beq .9
.2 cmp PRINTFTBL1,x do we have a %x command?
.2 cmp PrintFTBL1,x do we have a %x command?
beq .8 yes, jmp to it!
dex
bpl .2 no valid letter...
@ -146,14 +145,14 @@ PRINTFESC1 stz PADLEN
txa
asl
tax
jmp (PRINTFJMP1,x)
jmp (PrintFJMP1,x)
.9 rts
*--------------------------------------
PRINTFESC2 ldx #PRINTFTBL2.END-PRINTFTBL2-1
PrintFESC2 ldx #PrintFTBL2.END-PrintFTBL2-1
iny
lda (ZPTmpPtr1),y
beq .9
.2 cmp PRINTFTBL2,x
.2 cmp PrintFTBL2,x
beq .3
dex
bpl .2
@ -162,23 +161,23 @@ PRINTFESC2 ldx #PRINTFTBL2.END-PRINTFTBL2-1
txa
asl
tax
jmp (PRINTFJMP2,x)
jmp (PrintFJMP2,x)
.9 rts
*--------------------------------------
PRINTFA >PULLA
PrintFA >PULLA
ldx #0
.1 asl
pha
lda #'-'
bcc .2
lda PRINTF.ATTRIB,x
lda PrintF.ATTRIB,x
.2 jsr COUT
pla
inx
cpx #8
bne .1
jmp PRINTFEXIT
PRINTFB ldx #8
jmp PrintFEXIT
PrintFB ldx #8
>PULLA
.1 asl
pha
@ -189,26 +188,26 @@ PRINTFB ldx #8
pla
dex
bne .1
jmp PRINTFEXIT
PRINTFBB >PULLA
jmp PrintFEXIT
PrintFBB >PULLA
>PULLA
jmp PRINTFEXIT
PRINTFD >PULLA
jmp PrintFEXIT
PrintFD >PULLA
sta HEXBUF
stz HEXBUF+1
stz HEXBUF+2
stz HEXBUF+3
jsr HEX2DEC
jmp PRINTFEXIT
PRINTFDD >PULLA
jmp PrintFEXIT
PrintFDD >PULLA
sta HEXBUF
>PULLA
sta HEXBUF+1
stz HEXBUF+2
stz HEXBUF+3
jsr HEX2DEC
jmp PRINTFEXIT
PRINTFL >PULLA
jmp PrintFEXIT
PrintFL >PULLA
sta HEXBUF
>PULLA
sta HEXBUF+1
@ -217,56 +216,56 @@ PRINTFL >PULLA
>PULLA
sta HEXBUF+3
jsr HEX2DEC
jmp PRINTFEXIT
PRINTFE >PULLA
jmp PrintFEXIT
PrintFE >PULLA
jsr PRHEX
jmp PRINTFEXIT
PRINTFEE >PULLA
jmp PrintFEXIT
PrintFEE >PULLA
lsr
lsr
lsr
lsr
jsr PRHEX
jmp PRINTFEXIT
PRINTFH >PULLA
jmp PrintFEXIT
PrintFH >PULLA
jsr PRBYTE
jmp PRINTFEXIT
PRINTFHH >PULLA
jmp PrintFEXIT
PrintFHH >PULLA
pha
>PULLA
jsr PRBYTE
pla
jsr PRBYTE
jmp PRINTFEXIT
PRINTFI >PULLA
jmp PRINTFEXIT
PRINTFII >PULLA
jmp PrintFEXIT
PrintFI >PULLA
jmp PrintFEXIT
PrintFII >PULLA
>PULLA
jmp PRINTFEXIT
PRINTFSC >PULLYA
jsr PRINTYA
jmp PRINTFEXIT
PRINTFSP >PULLYA
jsr PRINTYAP
jmp PRINTFEXIT
PRINTFT jsr PRINTTIME
jmp PRINTFEXIT
PRINTFTT jsr PRINTDATE
jmp PRINTFEXIT
jmp PrintFEXIT
PrintFSC >PULLYA
jsr PrintYA
jmp PrintFEXIT
PrintFSP >PULLYA
jsr PrintYAP
jmp PrintFEXIT
PrintFT jsr PrintTIME
jmp PrintFEXIT
PrintFTT jsr PrintDATE
jmp PrintFEXIT
*--------------------------------------
PRINTFESC lda #$1B ESC
PrintFESC lda #$1B ESC
jsr COUT
jmp PRINTFEXIT
PRINTFCR jsr CROUT
jmp PRINTFEXIT
PRINTFBKSLH lda #'\'
jmp PrintFEXIT
PrintFCR jsr CROUT
jmp PrintFEXIT
PrintFBKSLH lda #'\'
jsr COUT
jmp PRINTFEXIT
PRINTFPERCENT lda #'%'
jmp PrintFEXIT
PrintFPERCENT lda #'%'
jsr COUT
jmp PRINTFEXIT
jmp PrintFEXIT
*--------------------------------------
PRINTC >PULLW ZPTmpPtr2
PrintC >PULLW ZPTmpPtr2
ldy #0
.1 lda (ZPTmpPtr2),y
beq .8
@ -275,7 +274,7 @@ PRINTC >PULLW ZPTmpPtr2
bne .1
.8 rts
*--------------------------------------
PRINTP >PULLW ZPTmpPtr2
PrintP >PULLW ZPTmpPtr2
ldy #0
lda (ZPTmpPtr2),y
tax
@ -386,7 +385,7 @@ LCASEP phx
* PULLW = DATE in ProDOS Format
* A = year, Y = month/day
*--------------------------------------
PRINTDATE stz HEXBUF+1
PrintDATE stz HEXBUF+1
stz HEXBUF+2
stz HEXBUF+3
ldx #'0'
@ -437,7 +436,7 @@ PRINTDATE stz HEXBUF+1
* PULLW = TIME in ProDOS Format
* A = hours, Y = minutes
*--------------------------------------
PRINTTIME stz HEXBUF+1
PrintTIME stz HEXBUF+1
stz HEXBUF+2
stz HEXBUF+3
ldx #'0'
@ -553,11 +552,11 @@ SSCANF.IsDigit cmp #'0'
*--------------------------------------
********** PRIVATE FUNCTIONS **********
*--------------------------------------
* PRINTYAC :
* PrintYAC :
* Prints C-Style String
* Y,A=Pointer to Sting, Last Byte 0
*--------------------------------------
PRINTYA >STYA ZPTmpPtr2
PrintYA >STYA ZPTmpPtr2
ldy #0
.1 lda (ZPTmpPtr2),y
beq .2
@ -566,11 +565,11 @@ PRINTYA >STYA ZPTmpPtr2
bne .1
.2 rts
*--------------------------------------
* PRINTYAP :
* PrintYAP :
* Prints Pascal-Style String
* Y,A=Pointer to Sting, LEN=1st Byte
*--------------------------------------
PRINTYAP phx
PrintYAP phx
>STYA ZPTmpPtr2
ldy #0
lda (ZPTmpPtr2),y
@ -644,19 +643,19 @@ HEX2DEC phx
lda PADLEN any Len format ?
beq .5 no
lda #10
sec yes, print only digits starting at pos 10-padlen
sec yes, Print only digits starting at pos 10-padlen
sbc PADLEN
.5 tax x=0 if no padlen, or x=10-padlen
.6 lda ASCBUF,x
cmp #'0' a zero?
beq .7
inc PADLEN found a non zero, print all digits, even if 0, next time
inc PADLEN found a non zero, Print all digits, even if 0, next time
ldy #'0'
sty PADCHAR
bra .8
.7 cpx #9 last digit ?
beq .8 print always
ldy PADLEN no pad to fill, do not print 0
beq .8 Print always
ldy PADLEN no pad to fill, do not Print 0
beq .9
lda PADCHAR fill with PADCHAR
.8 jsr COUT
@ -768,11 +767,11 @@ COUT phx
.9 rts
*--------------------------------------
CS.END
PRINTFTBL1 .AS "abBdDLnNhHiIsStT"
PRINTFTBL1.END
PRINTFTBL2 .AS "en\%"
PRINTFTBL2.END
PRINTF.ATTRIB .AS "dnb+++wr"
PrintFTBL1 .AS "abBdDLnNhHiIsStT"
PrintFTBL1.END
PrintFTBL2 .AS "en\%"
PrintFTBL2.END
PrintF.ATTRIB .AS "dnb+++wr"
*--------------------------------------
PADCHAR .BS 1
PADLEN .BS 1

View File

@ -105,7 +105,7 @@ ARP.QUERY.I jsr ARP.FIND.BY.IP
lda ZPCachePtr
clc
adc S.ARPCACHE.MAC
adc #S.ARPCACHE.MAC
sta ZPCachePtr
bcc .1
inc ZPCachePtr+1
@ -246,49 +246,49 @@ ARP.RESOLVE ldy #S.IP.DST
lda ZPFrameBase1+1
adc /S.ETH.DSTMAC
sta ZPPtrMAC+1
jmp ARP.QUERY.I
*--------------------------------------
ARP.FIND.BY.IP >LDYA L.ARP.CACHE
>STYA ZPCachePtr
lda #K.ARPCACHE.SIZE
sta TmpOffset
ldx #K.ARPCACHE.SIZE
.1 lda (ZPCachePtr)
beq .7
beq .2
ldy #S.ARPCACHE.IP+3
ldx #3
ldy #S.ARPCACHE.IP
lda (ZPCachePtr),y
cmp (ZPPtrIP)
bne .7
bne .2
ldy #S.ARPCACHE.IP+1
lda (ZPCachePtr),y
ldy #1
cmp (ZPPtrIP),y
bne .7
bne .2
ldy #S.ARPCACHE.IP+2
lda (ZPCachePtr),y
ldy #2
cmp (ZPPtrIP),y
bne .7
bne .2
ldy #S.ARPCACHE.IP+3
lda (ZPCachePtr),y
ldy #3
cmp (ZPPtrIP),y
bne .7
bne .2
clc
rts
.7 lda ZPCachePtr
.2 lda ZPCachePtr
clc
adc #S.ARPCACHE
sta ZPCachePtr
bcc .8
inc ZPCachePtr+1
.8 dec TmpOffset
.8 dex
bne .1
sec
rts

View File

@ -227,6 +227,48 @@ DNS.FIND.BY.NAME
sec
rts
*--------------------------------------
DNS.UPDATE.BY.ID
>LDYA L.DNS.CACHE
>STYA ZPCachePtr
ldx #K.DNSCACHE.SIZE
.1 lda (ZPCachePtr)
beq .6 empty DNS cache entry?
ldy #S.DNSCACHE.ID
lda (ZPCachePtr),y
cmp DNS.TmpCache+S.DNSCACHE.ID
bne .6
iny
lda (ZPCachePtr),y
cmp DNS.TmpCache+S.DNSCACHE.ID+1
bne .6
ldy #S.DNSCACHE-1
.2 lda DNS.TmpCache,y
sta (ZPCachePtr),y
dey
cpy #S.DNSCACHE.hNAME
bne .2
lda #S.DNSCACHE.STATUS.RESOLVED
sta (ZPCachePtr)
clc
rts
.6 lda ZPCachePtr
clc
adc #S.DNSCACHE
sta ZPCachePtr
bcc .7
inc ZPCachePtr+1
.7 dex
bne .1
sec
rts
*--------------------------------------
DNS.FIND.FREE >LDYA L.DNS.CACHE
>STYA ZPCachePtr
@ -339,11 +381,20 @@ DNS.DecodeMsg sta hFrame1
>SYSCALL SYS.GetMemPtrA
>STYA ZPFrameBase1
>DEBUG
ldy #S.DNS.F+1
lda (ZPFrameBase1),y
and /S.DNS.F.QR
beq .9
ldy #S.DNS.ID
lda (ZPFrameBase1),y
sta DNS.TmpCache+S.DNSCACHE.ID+1
iny
lda (ZPFrameBase1),y
sta DNS.TmpCache+S.DNSCACHE.ID
ldy #S.DNS.ANCOUNT+1
lda (ZPFrameBase1),y
beq .9
@ -366,8 +417,37 @@ DNS.DecodeMsg sta hFrame1
dex skip another QUERY ?
bne .1
.3 iny skip high byte of offset
iny skip lo byte of offset
.3 iny Skip Pointer or labels....
lda (ZPFrameBase1),y
bne .3
iny skip S.DNS.QTYPE HIGH
iny
lda (ZPFrameBase1),y
cmp #S.DNS.QTYPE.A
bne .9
iny skip QCLASS
iny
ldx #3
.4 iny
lda (ZPFrameBase1),y
sta DNS.TmpCache+S.DNSCACHE.TTL,x
dex
bpl .4
iny skip DATALEN
iny
ldx #0
.5 iny
lda (ZPFrameBase1),y
sta DNS.TmpCache+S.DNSCACHE.IP,x
inx
cpx #4
bne .5
jsr DNS.UPDATE.BY.ID
.9 lda hFrame1
>SYSCALL SYS.FreeMemA