1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2025-08-09 01:25:00 +00:00

Fix UDP header len for UTHERNET

This commit is contained in:
David Schmenk
2018-04-22 14:26:12 -07:00
parent 8c0e66daf8
commit fb1f08bcc9
3 changed files with 119 additions and 82 deletions

View File

@@ -37,130 +37,128 @@ byte[6] utherMAC = $00,$0A,$99,$1E,$02,$A0
// Defines for ASM routines // Defines for ASM routines
// //
asm equates asm equates
!SOURCE "vmsrc/plvmzp.inc" !SOURCE "vmsrc/plvmzp.inc"
end end
// //
// Uthernet I/O functions // Uthernet I/O functions
// //
asm _pokeiow(val)#0 asm _pokeiow(val)#0
LDA ESTKL,X LDA ESTKL,X
end end
asm _pokeiowl asm _pokeiowl
STA $C000 STA $C000
LDA ESTKH,X LDA ESTKH,X
end end
asm _pokeiowh asm _pokeiowh
STA $C000 STA $C000
INX INX
RTS RTS
end end
// //
// PEEK BYTE FROM I/O SPACE // PEEK BYTE FROM I/O SPACE
// _peekio() // _peekio()
// //
asm _peekio#1 asm _peekio#1
DEX DEX
end end
asm _peekiol asm _peekiol
LDA $C000 LDA $C000
STA ESTKL,X STA ESTKL,X
LDA #$00 LDA #$00
STA ESTKH,X STA ESTKH,X
RTS RTS
end end
// //
// PEEK WORD FROM I/O SPACE // PEEK WORD FROM I/O SPACE
// _peekiow() // _peekiow()
// //
asm _peekiow#1 asm _peekiow#1
DEX DEX
end end
asm _peekiowl asm _peekiowl
LDA $C000 LDA $C000
STA ESTKL,X STA ESTKL,X
end end
asm _peekiowh asm _peekiowh
LDA $C000 LDA $C000
STA ESTKH,X STA ESTKH,X
RTS RTS
end end
// //
// WRITE FRAME DATA INTO I/O SPACE // WRITE FRAME DATA INTO I/O SPACE
// pokefrm(BUF, LEN) // pokefrm(BUF, LEN)
// //
asm pokefrm(buf, len)#1 asm pokefrm(buf, len)#1
LDY #$00 LDY #$00
LDA ESTKL+1,X LDA ESTKL+1,X
STA SRCL STA SRCL
LDA ESTKH+1,X LDA ESTKH+1,X
STA SRCH STA SRCH
LSR ESTKH,X ; CONVERT BYTE LEN TO WORD LEN LSR ESTKH,X ; CONVERT BYTE LEN TO WORD LEN
LDA ESTKL,X LDA ESTKL,X
ROR ROR
ADC #$00 ADC #$00
STA ESTKL,X STA ESTKL,X
BEQ + BEQ +
!BYTE $A9 INC ESTKH,X
- CLC + BCC POKELP
INC ESTKH,X INC ESTKH,X
+ BCS - POKELP LDA (SRC),Y
POKELP LDA (SRC),Y
end end
asm _pokefrml asm _pokefrml
STA $C000 STA $C000
INY INY
LDA (SRC),Y LDA (SRC),Y
end end
asm _pokefrmh asm _pokefrmh
STA $C000 STA $C000
INY INY
BNE + BNE +
INC SRCH INC SRCH
+ DEC ESTKL,X + DEC ESTKL,X
BNE POKELP BNE POKELP
DEC ESTKH,X DEC ESTKH,X
BNE POKELP BNE POKELP
INX INX
RTS RTS
end end
// //
// READ FRAME DATA FROM I/O SPACE // READ FRAME DATA FROM I/O SPACE
// peekfrm(BUF, LEN) // peekfrm(BUF, LEN)
// //
asm peekfrm(buf, len)#1 asm peekfrm(buf, len)#1
LDY #$00 LDY #$00
LDA ESTKL+1,X LDA ESTKL+1,X
STA DSTL STA DSTL
LDA ESTKH+1,X LDA ESTKH+1,X
STA DSTH STA DSTH
LSR ESTKH,X ; CONVERT BYTE LEN TO WORD LEN LSR ESTKH,X ; CONVERT BYTE LEN TO WORD LEN
LDA ESTKL,X LDA ESTKL,X
ROR ROR
ADC #$00 ADC #$00
STA ESTKL,X STA ESTKL,X
BEQ + BEQ +
!BYTE $A9 INC ESTKH,X
- CLC + BCC PEEKLP
INC ESTKH,X INC ESTKH,X
+ BCS -
end end
asm _peekfrml asm _peekfrml
PEEKLP LDA $C000 PEEKLP LDA $C000
STA (DST),Y STA (DST),Y
INY INY
end end
asm _peekfrmh asm _peekfrmh
LDA $C000 LDA $C000
STA (DST),Y STA (DST),Y
INY INY
BNE + BNE +
INC DSTH INC DSTH
+ DEC ESTKL,X + DEC ESTKL,X
BNE PEEKLP BNE PEEKLP
DEC ESTKH,X DEC ESTKH,X
BNE PEEKLP BNE PEEKLP
EXPSW INX EXPSW INX
RTS RTS
end end
def pokeiow(io, data)#0 def pokeiow(io, data)#0
_pokeiowl.1 = io _pokeiowl.1 = io
@@ -232,10 +230,10 @@ for slot = $90 to $F0 step $10
pokepreg($0158, utherMAC:0) // MAC addr pokepreg($0158, utherMAC:0) // MAC addr
pokepreg($015A, utherMAC:2) // MAC addr pokepreg($015A, utherMAC:2) // MAC addr
pokepreg($015C, utherMAC:4) // MAC addr pokepreg($015C, utherMAC:4) // MAC addr
pokepreg($0102, $0100) // Recv cfg pokepreg($0102, $0100) // Recv cfg
pokepreg($0104, $0D00) // Recv ctrl pokepreg($0104, $0D00) // Recv ctrl
pokepreg($0106, $8200) // Xmit cfg pokepreg($0106, $8200) // Xmit cfg
pokepreg($0112, $00C0) // Line ctrl pokepreg($0112, $00C0) // Line ctrl
// //
// Install etherip driver // Install etherip driver
// //

View File

@@ -499,7 +499,7 @@ def etherServiceIP
lclport = swab(rxptr=>udp_dst) lclport = swab(rxptr=>udp_dst)
for i = 1 to MAX_UDP_NOTIFIES for i = 1 to MAX_UDP_NOTIFIES
if port=>notify_port == lclport if port=>notify_port == lclport
port=>notify_func(@iphdr=>ip_src,swab(rxptr=>udp_src),rxptr+t_udphdr,swab(rxptr=>udp_len),port=>notify_parm) port=>notify_func(@iphdr=>ip_src,swab(rxptr=>udp_src),rxptr+t_udphdr,swab(rxptr=>udp_len)-t_udphdr,port=>notify_parm)
break break
fin fin
port = port + t_notify port = port + t_notify

39
src/tftprel Executable file
View File

@@ -0,0 +1,39 @@
#!/bin/bash
# Core VM, CMDSYS, JITC files
echo "PLASMA.SYSTEM"; atftp $1 --put -l rel/apple/PLASMA.SYSTEM#FF2000 -r PLASMA.SYSTEM#FF2000
echo "PLVM.128"; atftp $1 --put -l rel/apple/PLVM.128#FF2000 -r PLVM.128#FF2000
echo "PLVM16"; atftp $1 --put -l rel/apple/PLVM16#FF2000 -r PLVM16#FF2000
echo "CMD"; atftp $1 --put -l rel/apple/CMD#061000 -r CMD#061000
echo "CMD128"; atftp $1 --put -l rel/apple/CMD128#061000 -r CMD128#061000
echo "SYS/JIT"; atftp $1 --put -l rel/apple/JIT#FE1000 -r SYS/JIT#FE1000
echo "SYS/JIT16"; atftp $1 --put -l rel/apple/JIT16#FE1000 -r SYS/JIT16#FE1000
echo "SYS/JITUNE"; atftp $1 --put -l rel/apple/JITUNE#FE1000 -r SYS/JITUNE#FE1000
# Core libraries
echo "SYS/ARGS"; atftp $1 --put -l rel/ARGS#FE1000 -r SYS/ARGS#FE1000
echo "SYS/DHCP"; atftp $1 --put -l rel/DHCP#FE1000 -r SYS/DHCP#FE1000
echo "SYS/ED"; atftp $1 --put -l rel/ED#FE1000 -r SYS/ED#FE1000
echo "SYS/ETHERIP"; atftp $1 --put -l rel/ETHERIP#FE1000 -r SYS/ETHERIP#FE1000
echo "SYS/FIBER"; atftp $1 --put -l rel/FIBER#FE1000 -r SYS/FIBER#FE1000
echo "SYS/FPSTR"; atftp $1 --put -l rel/FPSTR#FE1000 -r SYS/FPSTR#FE1000
echo "SYS/FPU"; atftp $1 --put -l rel/FPU#FE1000 -r SYS/FPU#FE1000
echo "SYS/INET"; atftp $1 --put -l rel/INET#FE1000 -r SYS/INET#FE1000
echo "SYS/LONGJUMP"; atftp $1 --put -l rel/LONGJMP#FE1000 -r SYS/LONGJMP#FE1000
echo "SYS/LZ4"; atftp $1 --put -l rel/LZ4#FE1000 -r SYS/LZ4#FE1000
echo "SYS/MEMMGR"; atftp $1 --put -l rel/MEMMGR#FE1000 -r SYS/MEMMGR#FE1000
echo "SYS/SANE"; atftp $1 --put -l rel/SANE#FE1000 -r SYS/SANE#FE1000
echo "SYS/CONIO"; atftp $1 --put -l rel/apple/CONIO#FE1000 -r SYS/CONIO#FE1000
echo "SYS/DGR"; atftp $1 --put -l rel/apple/DGR#FE1000 -r SYS/DGR#FE1000
echo "SYS/FILEIO"; atftp $1 --put -l rel/apple/FILEIO#FE1000 -r SYS/FILEIO#FE1000
echo "SYS/GRAFIX"; atftp $1 --put -l rel/apple/GRAFIX#FE1000 -r SYS/GRAFIX#FE1000
echo "SYS/JOYBUZZ"; atftp $1 --put -l rel/apple/JOYBUZZ#FE1000 -r SYS/JOYBUZZ#FE1000
echo "SYS/MON"; atftp $1 --put -l rel/apple/MON#FE1000 -r SYS/MON#FE1000
echo "SYS/PORTIO"; atftp $1 --put -l rel/apple/PORTIO#FE1000 -r SYS/PORTIO#FE1000
echo "SYS/SPIPORT"; atftp $1 --put -l rel/apple/SPIPORT#FE1000 -r SYS/SPIPORT#FE1000
echo "SYS/UTHERNET2";atftp $1 --put -l rel/apple/UTHERNET2#FE1000 -r SYS/UTHERNET2#FE1000
echo "SYS/UTHERNET"; atftp $1 --put -l rel/apple/UTHERNET#FE1000 -r SYS/UTHERNET#FE1000
# Build tools
echo "BLD/PLASM"; atftp $1 --put -l rel/PLASM#FE1000 -r BLD/PLASM#FE1000
echo "BLD/CODEOPT"; atftp $1 --put -l rel/CODEOPT#FE1000 -r BLD/CODEOPT#FE1000