mirror of
https://github.com/dschmenk/PLASMA.git
synced 2025-08-08 09:25:19 +00:00
1262 lines
36 KiB
Plaintext
1262 lines
36 KiB
Plaintext
; ACME COMPATIBLE OUTPUT
|
|
!WORD _SEGEND-_SEGBEGIN ; LENGTH OF HEADER + CODE/DATA + BYTECODE SEGMENT
|
|
_SEGBEGIN
|
|
!WORD $6502 ; MAGIC #
|
|
!WORD _SYSFLAGS ; SYSTEM FLAGS
|
|
!WORD _SUBSEG ; BYTECODE SUB-SEGMENT
|
|
!WORD _DEFCNT ; BYTECODE DEF COUNT
|
|
!WORD _INIT ; MODULE INITIALIZATION ROUTINE
|
|
; libsrc/dhcp.pla: 0001: //
|
|
; libsrc/dhcp.pla: 0002: // DHCP
|
|
; libsrc/dhcp.pla: 0003: //
|
|
; libsrc/dhcp.pla: 0004: include "inc/cmdsys.plh"
|
|
; inc/cmdsys.plh: 0001: import cmdsys
|
|
; DCI STRING: CMDSYS
|
|
!BYTE $C3,$CD,$C4,$D3,$D9,$53
|
|
; CMDSYS -> X000
|
|
; inc/cmdsys.plh: 0002: //
|
|
; inc/cmdsys.plh: 0003: // Useful values for everyone
|
|
; inc/cmdsys.plh: 0004: //
|
|
; inc/cmdsys.plh: 0005: const _SYSVER_ = $0200 // Version built against
|
|
; _SYSVER_ = 512
|
|
; inc/cmdsys.plh: 0006: const FALSE = 0
|
|
; FALSE = 0
|
|
; inc/cmdsys.plh: 0007: const TRUE = not FALSE
|
|
; TRUE = -1
|
|
; inc/cmdsys.plh: 0008: const NULL = 0
|
|
; NULL = 0
|
|
; inc/cmdsys.plh: 0009: //
|
|
; inc/cmdsys.plh: 0010: // Machine ID values
|
|
; inc/cmdsys.plh: 0011: //
|
|
; inc/cmdsys.plh: 0012: const MACHID_CLOCK = $01
|
|
; MACHID_CLOCK = 1
|
|
; inc/cmdsys.plh: 0013: const MACHID_80COL = $02
|
|
; MACHID_80COL = 2
|
|
; inc/cmdsys.plh: 0014: const MACHID_MEM = $03
|
|
; MACHID_MEM = 3
|
|
; inc/cmdsys.plh: 0015: const MACHID_64K = $20
|
|
; MACHID_64K = 32
|
|
; inc/cmdsys.plh: 0016: const MACHID_128K = $30
|
|
; MACHID_128K = 48
|
|
; inc/cmdsys.plh: 0017: const MACHID_MODEL = $C8
|
|
; MACHID_MODEL = 200
|
|
; inc/cmdsys.plh: 0018: const MACHID_II = $00
|
|
; MACHID_II = 0
|
|
; inc/cmdsys.plh: 0019: const MACHID_IIPLUS= $40
|
|
; MACHID_IIPLUS = 64
|
|
; inc/cmdsys.plh: 0020: const MACHID_IIE = $80
|
|
; MACHID_IIE = 128
|
|
; inc/cmdsys.plh: 0021: const MACHID_III = $C0
|
|
; MACHID_III = 192
|
|
; inc/cmdsys.plh: 0022: const MACHID_IIC = $88
|
|
; MACHID_IIC = 136
|
|
; inc/cmdsys.plh: 0023: const MACHID_I = $08
|
|
; MACHID_I = 8
|
|
; inc/cmdsys.plh: 0024: byte MACHID
|
|
; MACHID -> X001
|
|
; inc/cmdsys.plh: 0025: //
|
|
; inc/cmdsys.plh: 0026: // System flags: memory allocator screen holes.
|
|
; inc/cmdsys.plh: 0027: //
|
|
; inc/cmdsys.plh: 0028: const restxt1 = $0001
|
|
; restxt1 = 1
|
|
; inc/cmdsys.plh: 0029: const restxt2 = $0002
|
|
; restxt2 = 2
|
|
; inc/cmdsys.plh: 0030: const resxtxt1 = $0004
|
|
; resxtxt1 = 4
|
|
; inc/cmdsys.plh: 0031: const resxtxt2 = $0008
|
|
; resxtxt2 = 8
|
|
; inc/cmdsys.plh: 0032: const reshgr1 = $0010
|
|
; reshgr1 = 16
|
|
; inc/cmdsys.plh: 0033: const reshgr2 = $0020
|
|
; reshgr2 = 32
|
|
; inc/cmdsys.plh: 0034: const resxhgr1 = $0040
|
|
; resxhgr1 = 64
|
|
; inc/cmdsys.plh: 0035: const resxhgr2 = $0080
|
|
; resxhgr2 = 128
|
|
; inc/cmdsys.plh: 0036: const nojitc = $0100
|
|
; nojitc = 256
|
|
; inc/cmdsys.plh: 0037: //
|
|
; inc/cmdsys.plh: 0038: // Module don't free memory
|
|
; inc/cmdsys.plh: 0039: //
|
|
; inc/cmdsys.plh: 0040: const modkeep = $2000
|
|
; modkeep = 8192
|
|
; inc/cmdsys.plh: 0041: const modinitkeep = $4000
|
|
; modinitkeep = 16384
|
|
; inc/cmdsys.plh: 0042: //
|
|
; inc/cmdsys.plh: 0043: // CMD exported interface table
|
|
; inc/cmdsys.plh: 0044: //
|
|
; inc/cmdsys.plh: 0045: struc t_cmdsys
|
|
; inc/cmdsys.plh: 0046: word sysver
|
|
; sysver = 0
|
|
; inc/cmdsys.plh: 0047: word syspath
|
|
; syspath = 2
|
|
; inc/cmdsys.plh: 0048: word cmdline
|
|
; cmdline = 4
|
|
; inc/cmdsys.plh: 0049: word modexec
|
|
; modexec = 6
|
|
; inc/cmdsys.plh: 0050: word sysopen
|
|
; sysopen = 8
|
|
; inc/cmdsys.plh: 0051: word sysclose
|
|
; sysclose = 10
|
|
; inc/cmdsys.plh: 0052: word sysread
|
|
; sysread = 12
|
|
; inc/cmdsys.plh: 0053: word syswrite
|
|
; syswrite = 14
|
|
; inc/cmdsys.plh: 0054: byte syserr
|
|
; syserr = 16
|
|
; inc/cmdsys.plh: 0055: byte jitcount
|
|
; jitcount = 17
|
|
; inc/cmdsys.plh: 0056: byte jitsize
|
|
; jitsize = 18
|
|
; inc/cmdsys.plh: 0057: byte refcons // Apple /// specific
|
|
; refcons = 19
|
|
; inc/cmdsys.plh: 0058: byte devcons // Apple /// specific
|
|
; devcons = 20
|
|
; inc/cmdsys.plh: 0059: end
|
|
; t_cmdsys = 21
|
|
; inc/cmdsys.plh: 0060: //
|
|
; inc/cmdsys.plh: 0061: // CMD exported functions
|
|
; inc/cmdsys.plh: 0062: //
|
|
; inc/cmdsys.plh: 0063: predef putc(c)#0, putln()#0, puts(s)#0, puti(i)#0, getc()#1, gets(p)#1, putb(b)#0, puth(h)#0
|
|
; PUTC -> X002
|
|
; PUTLN -> X003
|
|
; PUTS -> X004
|
|
; PUTI -> X005
|
|
; GETC -> X006
|
|
; GETS -> X007
|
|
; PUTB -> X008
|
|
; PUTH -> X009
|
|
; inc/cmdsys.plh: 0064: predef call(addr,areg,xreg,yreg,status)#1, syscall(cmd,params)#1
|
|
; CALL -> X010
|
|
; SYSCALL -> X011
|
|
; inc/cmdsys.plh: 0065: predef heapmark()#1, heapallocalign(size, pow2, freeaddr)#1
|
|
; HEAPMARK -> X012
|
|
; HEAPALLOCALIGN -> X013
|
|
; inc/cmdsys.plh: 0066: predef heapalloc(size)#1, heaprelease(newheap)#1, heapavail()#1
|
|
; HEAPALLOC -> X014
|
|
; HEAPRELEASE -> X015
|
|
; HEAPAVAIL -> X016
|
|
; inc/cmdsys.plh: 0067: predef memset(addr,value,size)#0, memcpy(dst,src,size)#0, strcpy(dst,src)#1, strcat(dst,src)#1
|
|
; MEMSET -> X017
|
|
; MEMCPY -> X018
|
|
; STRCPY -> X019
|
|
; STRCAT -> X020
|
|
; inc/cmdsys.plh: 0068: predef toupper(c)#1, sext(a)#1, divmod(a,b)#2, isugt(a,b)#1, isuge(a,b)#1, isult(a,b)#1, isule(a,b)#1
|
|
; TOUPPER -> X021
|
|
; SEXT -> X022
|
|
; DIVMOD -> X023
|
|
; ISUGT -> X024
|
|
; ISUGE -> X025
|
|
; ISULT -> X026
|
|
; ISULE -> X027
|
|
; inc/cmdsys.plh: 0069: end
|
|
; libsrc/dhcp.pla: 0004:
|
|
; libsrc/dhcp.pla: 0005: include "inc/inet.plh"
|
|
; inc/inet.plh: 0001: //
|
|
; inc/inet.plh: 0002: // iNet API
|
|
; inc/inet.plh: 0003: //
|
|
; inc/inet.plh: 0004: import iNet
|
|
; DCI STRING: INET
|
|
!BYTE $C9,$CE,$C5,$54
|
|
; INET -> X028
|
|
; inc/inet.plh: 0005: struc t_inet
|
|
; inc/inet.plh: 0006: word initIP
|
|
; initIP = 0
|
|
; inc/inet.plh: 0007: word serviceIP
|
|
; serviceIP = 2
|
|
; inc/inet.plh: 0008: word openUDP
|
|
; openUDP = 4
|
|
; inc/inet.plh: 0009: word sendUDP
|
|
; sendUDP = 6
|
|
; inc/inet.plh: 0010: word closeUDP
|
|
; closeUDP = 8
|
|
; inc/inet.plh: 0011: word listenTCP
|
|
; listenTCP = 10
|
|
; inc/inet.plh: 0012: word connectTCP
|
|
; connectTCP = 12
|
|
; inc/inet.plh: 0013: word sendTCP
|
|
; sendTCP = 14
|
|
; inc/inet.plh: 0014: word closeTCP
|
|
; closeTCP = 16
|
|
; inc/inet.plh: 0015: word setInterfaceIP
|
|
; setInterfaceIP = 18
|
|
; inc/inet.plh: 0016: word getInterfaceHA
|
|
; getInterfaceHA = 20
|
|
; inc/inet.plh: 0017: word setDNS
|
|
; setDNS = 22
|
|
; inc/inet.plh: 0018: word resolveIP
|
|
; resolveIP = 24
|
|
; inc/inet.plh: 0019: word setCallback
|
|
; setCallback = 26
|
|
; inc/inet.plh: 0020: word setParam
|
|
; setParam = 28
|
|
; inc/inet.plh: 0021: end
|
|
; t_inet = 30
|
|
; inc/inet.plh: 0022: end
|
|
; libsrc/dhcp.pla: 0005:
|
|
; libsrc/dhcp.pla: 0006: sysflags nojitc // No need to JITC this temp loaded module
|
|
!BYTE $00 ; END OF MODULE DEPENDENCIES
|
|
_SYSFLAGS = $0100 ; SYSTEM FLAGS
|
|
; libsrc/dhcp.pla: 0007: //
|
|
; libsrc/dhcp.pla: 0008: // Needed to init subnet
|
|
; libsrc/dhcp.pla: 0009: //
|
|
; libsrc/dhcp.pla: 0010: const IP_BROADCAST = $FFFF
|
|
; IP_BROADCAST = 65535
|
|
; libsrc/dhcp.pla: 0011: const IP4ADR_SIZE = 4
|
|
; IP4ADR_SIZE = 4
|
|
; libsrc/dhcp.pla: 0012: //
|
|
; libsrc/dhcp.pla: 0013: // DHCP message
|
|
; libsrc/dhcp.pla: 0014: //
|
|
; libsrc/dhcp.pla: 0015: struc t_dhcp
|
|
; libsrc/dhcp.pla: 0016: byte dhcp_op
|
|
; dhcp_op = 0
|
|
; libsrc/dhcp.pla: 0017: byte dhcp_htype
|
|
; dhcp_htype = 1
|
|
; libsrc/dhcp.pla: 0018: byte dhcp_hlen
|
|
; dhcp_hlen = 2
|
|
; libsrc/dhcp.pla: 0019: byte dhcp_hops
|
|
; dhcp_hops = 3
|
|
; libsrc/dhcp.pla: 0020: byte[4] dhcp_xid
|
|
; dhcp_xid = 4
|
|
; libsrc/dhcp.pla: 0021: word dhcp_secs
|
|
; dhcp_secs = 8
|
|
; libsrc/dhcp.pla: 0022: word dhcp_flags
|
|
; dhcp_flags = 10
|
|
; libsrc/dhcp.pla: 0023: byte[4] dhcp_clientip
|
|
; dhcp_clientip = 12
|
|
; libsrc/dhcp.pla: 0024: byte[4] dhcp_yourip
|
|
; dhcp_yourip = 16
|
|
; libsrc/dhcp.pla: 0025: byte[4] dhcp_serverip
|
|
; dhcp_serverip = 20
|
|
; libsrc/dhcp.pla: 0026: byte[4] dhcp_gatewayip
|
|
; dhcp_gatewayip = 24
|
|
; libsrc/dhcp.pla: 0027: byte[16] dhcp_clientha
|
|
; dhcp_clientha = 28
|
|
; libsrc/dhcp.pla: 0028: byte[192] dhcp_bootp
|
|
; dhcp_bootp = 44
|
|
; libsrc/dhcp.pla: 0029: byte[4] dhcp_magic
|
|
; dhcp_magic = 236
|
|
; libsrc/dhcp.pla: 0030: byte[60] dhcp_opts
|
|
; dhcp_opts = 240
|
|
; libsrc/dhcp.pla: 0031: end
|
|
; t_dhcp = 300
|
|
; libsrc/dhcp.pla: 0032: //
|
|
; libsrc/dhcp.pla: 0033: // DHCP messages
|
|
; libsrc/dhcp.pla: 0034: //
|
|
; libsrc/dhcp.pla: 0035: const DHCP_DISCOVER = $01
|
|
; DHCP_DISCOVER = 1
|
|
; libsrc/dhcp.pla: 0036: const DHCP_OFFER = $02
|
|
; DHCP_OFFER = 2
|
|
; libsrc/dhcp.pla: 0037: const DHCP_REQUEST = $03
|
|
; DHCP_REQUEST = 3
|
|
; libsrc/dhcp.pla: 0038: const DHCP_DECLINE = $04
|
|
; DHCP_DECLINE = 4
|
|
; libsrc/dhcp.pla: 0039: const DHCP_ACK = $05
|
|
; DHCP_ACK = 5
|
|
; libsrc/dhcp.pla: 0040: const DHCP_NACK = $06
|
|
; DHCP_NACK = 6
|
|
; libsrc/dhcp.pla: 0041: const DHCP_RELEASE = $07
|
|
; DHCP_RELEASE = 7
|
|
; libsrc/dhcp.pla: 0042: //
|
|
; libsrc/dhcp.pla: 0043: // Track DHCP progress
|
|
; libsrc/dhcp.pla: 0044: //
|
|
; libsrc/dhcp.pla: 0045: byte retry
|
|
_D029 !FILL 1 ; retry
|
|
; libsrc/dhcp.pla: 0046: word timeout
|
|
_D030 !FILL 2 ; timeout
|
|
; libsrc/dhcp.pla: 0047: //
|
|
; libsrc/dhcp.pla: 0048: // DHCP ports
|
|
; libsrc/dhcp.pla: 0049: //
|
|
; libsrc/dhcp.pla: 0050: const DHCP_CLIENT_PORT = 68
|
|
; DHCP_CLIENT_PORT = 68
|
|
; libsrc/dhcp.pla: 0051: const DHCP_SERVER_PORT = 67
|
|
; DHCP_SERVER_PORT = 67
|
|
; libsrc/dhcp.pla: 0052: word portDHCP
|
|
_D031 !FILL 2 ; portDHCP
|
|
; libsrc/dhcp.pla: 0053: byte[4] zeros
|
|
_D032 !FILL 4 ; zeros
|
|
; libsrc/dhcp.pla: 0054: byte[4] ones = $FF, $FF, $FF, $FF
|
|
_D033 ; ones = $FF, $FF, $FF, $FF
|
|
!BYTE $FF
|
|
!BYTE $FF
|
|
!BYTE $FF
|
|
!BYTE $FF
|
|
; libsrc/dhcp.pla: 0055: //
|
|
; libsrc/dhcp.pla: 0056: // Default static net IP addresses
|
|
; libsrc/dhcp.pla: 0057: //
|
|
; libsrc/dhcp.pla: 0058: byte localdns = 8,8,8,8
|
|
_D034 ; localdns = 8,8,8,8
|
|
!BYTE $08
|
|
!BYTE $08
|
|
!BYTE $08
|
|
!BYTE $08
|
|
; libsrc/dhcp.pla: 0059: byte localgw = 192,168,1,1
|
|
_D035 ; localgw = 192,168,1,1
|
|
!BYTE $C0
|
|
!BYTE $A8
|
|
!BYTE $01
|
|
!BYTE $01
|
|
; libsrc/dhcp.pla: 0060: byte localip = 192,168,1,10
|
|
_D036 ; localip = 192,168,1,10
|
|
!BYTE $C0
|
|
!BYTE $A8
|
|
!BYTE $01
|
|
!BYTE $0A
|
|
; libsrc/dhcp.pla: 0061: byte localnet = 255,255,255,0
|
|
_D037 ; localnet = 255,255,255,0
|
|
!BYTE $FF
|
|
!BYTE $FF
|
|
!BYTE $FF
|
|
!BYTE $00
|
|
; libsrc/dhcp.pla: 0062: //
|
|
; libsrc/dhcp.pla: 0063: // Pre-configured DHCP packet
|
|
; libsrc/dhcp.pla: 0064: //
|
|
; libsrc/dhcp.pla: 0065: byte DHCP = $01// OP = BOOT
|
|
_D038 ; DHCP = $01// OP = BOOT
|
|
!BYTE $01
|
|
; libsrc/dhcp.pla: 0066: byte = $01 // HTYPE = ETHERNET
|
|
!BYTE $01
|
|
; libsrc/dhcp.pla: 0067: byte = $06 // HLEN = 6
|
|
!BYTE $06
|
|
; libsrc/dhcp.pla: 0068: byte = $00 // HOPS
|
|
!BYTE $00
|
|
; libsrc/dhcp.pla: 0069: byte[4] = $01,$02,$03,$04 // TRANSACTION ID
|
|
!BYTE $01
|
|
!BYTE $02
|
|
!BYTE $03
|
|
!BYTE $04
|
|
; libsrc/dhcp.pla: 0070: word = $0000 // SECONDS
|
|
!WORD $0000
|
|
; libsrc/dhcp.pla: 0071: word = 0 // FLAGS
|
|
!WORD $0000
|
|
; libsrc/dhcp.pla: 0072: byte[4] = 0 // CLIENT IP
|
|
!BYTE $00
|
|
!FILL $03
|
|
; libsrc/dhcp.pla: 0073: byte[4] = 0 // YOUR IP
|
|
!BYTE $00
|
|
!FILL $03
|
|
; libsrc/dhcp.pla: 0074: byte[4] = 0 // SERVER IP
|
|
!BYTE $00
|
|
!FILL $03
|
|
; libsrc/dhcp.pla: 0075: byte[4] = 0 // GATEWAY IP
|
|
!BYTE $00
|
|
!FILL $03
|
|
; libsrc/dhcp.pla: 0076: byte[16] = 0 // CLIENT HA
|
|
!BYTE $00
|
|
!FILL $0F
|
|
; libsrc/dhcp.pla: 0077: byte[64] = 0 // SERVER HOST NAME
|
|
!BYTE $00
|
|
!FILL $3F
|
|
; libsrc/dhcp.pla: 0078: byte[128] = 0 // BOOT FILE NAME
|
|
!BYTE $00
|
|
!FILL $7F
|
|
; libsrc/dhcp.pla: 0079: byte[4] = $63,$82,$53,$63 // MAGIC
|
|
!BYTE $63
|
|
!BYTE $82
|
|
!BYTE $53
|
|
!BYTE $63
|
|
; libsrc/dhcp.pla: 0080: byte optsOP = 53,1,1 // DISCOVER
|
|
_D039 ; optsOP = 53,1,1 // DISCOVER
|
|
!BYTE $35
|
|
!BYTE $01
|
|
!BYTE $01
|
|
; libsrc/dhcp.pla: 0081: byte optsCID = 61,7, $01,$00,$00,$00,$00,$00,$00
|
|
_D040 ; optsCID = 61,7, $01,$00,$00,$00,$00,$00,$00
|
|
!BYTE $3D
|
|
!BYTE $07
|
|
!BYTE $01
|
|
!BYTE $00
|
|
!BYTE $00
|
|
!BYTE $00
|
|
!BYTE $00
|
|
!BYTE $00
|
|
!BYTE $00
|
|
; libsrc/dhcp.pla: 0082: byte = 12, "AppleII"
|
|
!BYTE $0C
|
|
!BYTE $07
|
|
!BYTE $41,$70,$70,$6C,$65,$49,$49
|
|
; libsrc/dhcp.pla: 0083: byte optsIP = 50,4, 0,0,0,0 // IP requested
|
|
_D041 ; optsIP = 50,4, 0,0,0,0 // IP requested
|
|
!BYTE $32
|
|
!BYTE $04
|
|
!BYTE $00
|
|
!BYTE $00
|
|
!BYTE $00
|
|
!BYTE $00
|
|
; libsrc/dhcp.pla: 0084: byte = 55,4, 1,3,6,42 // Parameter request list
|
|
!BYTE $37
|
|
!BYTE $04
|
|
!BYTE $01
|
|
!BYTE $03
|
|
!BYTE $06
|
|
!BYTE $2A
|
|
; libsrc/dhcp.pla: 0085: byte optsSRV = 54,4, 0,0,0,0 // DHCP server
|
|
_D042 ; optsSRV = 54,4, 0,0,0,0 // DHCP server
|
|
!BYTE $36
|
|
!BYTE $04
|
|
!BYTE $00
|
|
!BYTE $00
|
|
!BYTE $00
|
|
!BYTE $00
|
|
; libsrc/dhcp.pla: 0086: byte = 255
|
|
!BYTE $FF
|
|
; libsrc/dhcp.pla: 0087: byte[] endDHCP
|
|
_D043 ; endDHCP
|
|
; libsrc/dhcp.pla: 0088: //
|
|
; libsrc/dhcp.pla: 0089: // DEBUG
|
|
; libsrc/dhcp.pla: 0090: //
|
|
; libsrc/dhcp.pla: 0091: def putip(ipptr)#0
|
|
!BYTE $00 ; PAD BYTE
|
|
_SUBSEG ; BYTECODE STARTS
|
|
; ipptr -> [0]
|
|
_C000 ; putip()
|
|
; libsrc/dhcp.pla: 0092: byte i
|
|
; i -> [2]
|
|
; libsrc/dhcp.pla: 0093:
|
|
; libsrc/dhcp.pla: 0094: for i = 0 to 2
|
|
!BYTE $58,$03,$01 ; ENTER 3,1
|
|
!BYTE $04 ; CN 2
|
|
!BYTE $00 ; CN 0
|
|
_B002
|
|
!BYTE $6C,$02 ; DLB [2]
|
|
; libsrc/dhcp.pla: 0095: puti(ipptr->[i]); putc('.')
|
|
; libsrc/dhcp.pla: 0096: next
|
|
!BYTE $66,$00 ; LLW [0]
|
|
!BYTE $B0,$02 ; ADDLB [2]
|
|
!BYTE $60 ; LB
|
|
!BYTE $54 ; CALL _X005
|
|
_F000 !WORD 0
|
|
!BYTE $2A,$2E ; CB 46
|
|
!BYTE $54 ; CALL _X002
|
|
_F001 !WORD 0
|
|
_B003
|
|
!BYTE $A4 ; INCBRLE _B002
|
|
!WORD _B002-*
|
|
_B001
|
|
!BYTE $74,$02 ; SLB [2]
|
|
!BYTE $30 ; DROP
|
|
; libsrc/dhcp.pla: 0097: puti(ipptr->[i])
|
|
; libsrc/dhcp.pla: 0098: end
|
|
!BYTE $66,$00 ; LLW [0]
|
|
!BYTE $B0,$02 ; ADDLB [2]
|
|
!BYTE $60 ; LB
|
|
!BYTE $54 ; CALL _X005
|
|
_F002 !WORD 0
|
|
!BYTE $5A,$03 ; LEAVE 3
|
|
; libsrc/dhcp.pla: 0099: //def dumpbytes(buf, len)
|
|
; libsrc/dhcp.pla: 0100: // word i
|
|
; libsrc/dhcp.pla: 0101: //
|
|
; libsrc/dhcp.pla: 0102: // for i = 0 to len - 1
|
|
; libsrc/dhcp.pla: 0103: // putb(buf->[i])
|
|
; libsrc/dhcp.pla: 0104: // if i & 15 == 15
|
|
; libsrc/dhcp.pla: 0105: // putln
|
|
; libsrc/dhcp.pla: 0106: // else
|
|
; libsrc/dhcp.pla: 0107: // putc(' ')
|
|
; libsrc/dhcp.pla: 0108: // fin
|
|
; libsrc/dhcp.pla: 0109: // next
|
|
; libsrc/dhcp.pla: 0110: //end
|
|
; libsrc/dhcp.pla: 0111: //def dumpdhcp(pkt)
|
|
; libsrc/dhcp.pla: 0112: // putb(pkt->dhcp_op);putln
|
|
; libsrc/dhcp.pla: 0113: // putb(pkt->dhcp_htype);putln
|
|
; libsrc/dhcp.pla: 0114: // putb(pkt->dhcp_hlen);putln
|
|
; libsrc/dhcp.pla: 0115: // putb(pkt->dhcp_hops);putln
|
|
; libsrc/dhcp.pla: 0116: // dumpbytes(@pkt->dhcp_xid, 4);putln
|
|
; libsrc/dhcp.pla: 0117: // putip(@pkt->dhcp_clientip);putln
|
|
; libsrc/dhcp.pla: 0118: // putip(@pkt->dhcp_yourip);putln
|
|
; libsrc/dhcp.pla: 0119: // putip(@pkt->dhcp_serverip);putln
|
|
; libsrc/dhcp.pla: 0120: // putip(@pkt->dhcp_gatewayip);putln
|
|
; libsrc/dhcp.pla: 0121: // dumpbytes(@pkt->dhcp_opts, 48);putln
|
|
; libsrc/dhcp.pla: 0122: //end
|
|
; libsrc/dhcp.pla: 0123: def parseopts(opts, match)
|
|
; opts -> [0]
|
|
; match -> [2]
|
|
_C001 ; parseopts()
|
|
; libsrc/dhcp.pla: 0124: byte i
|
|
; i -> [4]
|
|
; libsrc/dhcp.pla: 0125:
|
|
; libsrc/dhcp.pla: 0126: i = 0
|
|
!BYTE $58,$05,$02 ; ENTER 5,2
|
|
; libsrc/dhcp.pla: 0127: while opts->[i] <> $FF and i < 64
|
|
!BYTE $00 ; CN 0
|
|
!BYTE $74,$04 ; SLB [4]
|
|
!BYTE $50 ; BRNCH _B006
|
|
!WORD _B006-*
|
|
_B004
|
|
; libsrc/dhcp.pla: 0128: while !opts->[i] and i < 64
|
|
!BYTE $50 ; BRNCH _B010
|
|
!WORD _B010-*
|
|
_B008
|
|
; libsrc/dhcp.pla: 0129: i++
|
|
!BYTE $64,$04 ; LLB [4]
|
|
!BYTE $8C ; INCR
|
|
; libsrc/dhcp.pla: 0130: loop
|
|
!BYTE $74,$04 ; SLB [4]
|
|
_B010
|
|
!BYTE $66,$00 ; LLW [0]
|
|
!BYTE $B0,$04 ; ADDLB [4]
|
|
!BYTE $60 ; LB
|
|
!BYTE $80 ; NOT
|
|
!BYTE $AC ; BRAND _B011
|
|
!WORD _B011-*
|
|
!BYTE $64,$04 ; LLB [4]
|
|
!BYTE $2A,$40 ; CB 64
|
|
!BYTE $46 ; ISLT
|
|
_B011
|
|
!BYTE $4E ; BRTRU _B008
|
|
!WORD _B008-*
|
|
_B009
|
|
; libsrc/dhcp.pla: 0131: if opts->[i] == match
|
|
; libsrc/dhcp.pla: 0132: return i
|
|
!BYTE $66,$00 ; LLW [0]
|
|
!BYTE $B0,$04 ; ADDLB [4]
|
|
!BYTE $60 ; LB
|
|
!BYTE $66,$02 ; LLW [2]
|
|
!BYTE $24 ; BRNE _B012
|
|
!WORD _B012-*
|
|
!BYTE $64,$04 ; LLB [4]
|
|
!BYTE $5A,$05 ; LEAVE 5
|
|
; libsrc/dhcp.pla: 0133: fin
|
|
_B012
|
|
_B013
|
|
; libsrc/dhcp.pla: 0134: i = i + opts->[i + 1] + 2
|
|
; libsrc/dhcp.pla: 0135: loop
|
|
!BYTE $64,$04 ; LLB [4]
|
|
!BYTE $66,$00 ; LLW [0]
|
|
!BYTE $64,$04 ; LLB [4]
|
|
!BYTE $8C ; INCR
|
|
!BYTE $82 ; ADD
|
|
!BYTE $60 ; LB
|
|
!BYTE $82 ; ADD
|
|
!BYTE $38,$02 ; ADDI 2
|
|
!BYTE $74,$04 ; SLB [4]
|
|
_B006
|
|
!BYTE $66,$00 ; LLW [0]
|
|
!BYTE $B0,$04 ; ADDLB [4]
|
|
!BYTE $60 ; LB
|
|
!BYTE $2A,$FF ; CB 255
|
|
!BYTE $42 ; ISNE
|
|
!BYTE $AC ; BRAND _B007
|
|
!WORD _B007-*
|
|
!BYTE $64,$04 ; LLB [4]
|
|
!BYTE $2A,$40 ; CB 64
|
|
!BYTE $46 ; ISLT
|
|
_B007
|
|
!BYTE $4E ; BRTRU _B004
|
|
!WORD _B004-*
|
|
_B005
|
|
; libsrc/dhcp.pla: 0136: return -1
|
|
!BYTE $20 ; MINUS ONE
|
|
!BYTE $5A,$05 ; LEAVE 5
|
|
; libsrc/dhcp.pla: 0137: end
|
|
; libsrc/dhcp.pla: 0138: def recvDHCP(remip, remport, pkt, len, param)
|
|
; remip -> [0]
|
|
; remport -> [2]
|
|
; pkt -> [4]
|
|
; len -> [6]
|
|
; param -> [8]
|
|
_C002 ; recvDHCP()
|
|
; libsrc/dhcp.pla: 0139: word servopts, maskopts, gwopts, dnsopts
|
|
; servopts -> [10]
|
|
; maskopts -> [12]
|
|
; gwopts -> [14]
|
|
; dnsopts -> [16]
|
|
; libsrc/dhcp.pla: 0140:
|
|
; libsrc/dhcp.pla: 0141: //puts("recvDHCP: ");putip(remip);putc(':');puti(remport);putln
|
|
; libsrc/dhcp.pla: 0142: //dumpdhcp(pkt)
|
|
; libsrc/dhcp.pla: 0143: if pkt=>dhcp_xid:0 == $0201 and pkt=>dhcp_xid:2 == $0403
|
|
!BYTE $58,$12,$05 ; ENTER 18,5
|
|
; libsrc/dhcp.pla: 0144: when pkt->dhcp_opts.[parseopts(@pkt->dhcp_opts, 53) + 2]
|
|
!BYTE $66,$04 ; LLW [4]
|
|
!BYTE $38,$04 ; ADDI 4
|
|
!BYTE $62 ; LW
|
|
!BYTE $2C,$01,$02 ; CW 513
|
|
!BYTE $40 ; ISEQ
|
|
!BYTE $AC ; BRAND _B014
|
|
!WORD _B014-*
|
|
!BYTE $66,$04 ; LLW [4]
|
|
!BYTE $38,$04 ; ADDI 4
|
|
!BYTE $38,$02 ; ADDI 2
|
|
!BYTE $62 ; LW
|
|
!BYTE $2C,$03,$04 ; CW 1027
|
|
!BYTE $40 ; ISEQ
|
|
_B014
|
|
!BYTE $4C ; BRFLS _B015
|
|
!WORD _B015-*
|
|
!BYTE $66,$04 ; LLW [4]
|
|
!BYTE $38,$F0 ; ADDI 240
|
|
!BYTE $66,$04 ; LLW [4]
|
|
!BYTE $38,$F0 ; ADDI 240
|
|
!BYTE $2A,$35 ; CB 53
|
|
!BYTE $54 ; CALL _C001
|
|
_F003 !WORD _C001
|
|
!BYTE $38,$02 ; ADDI 2
|
|
!BYTE $82 ; ADD
|
|
!BYTE $60 ; LB
|
|
!BYTE $52 ; SEL
|
|
!WORD _B018-*
|
|
; libsrc/dhcp.pla: 0145: is DHCP_OFFER
|
|
_B019
|
|
; libsrc/dhcp.pla: 0146: //
|
|
; libsrc/dhcp.pla: 0147: // Copy offer parameters to request
|
|
; libsrc/dhcp.pla: 0148: //
|
|
; libsrc/dhcp.pla: 0149: optsOP.2 = DHCP_REQUEST
|
|
; libsrc/dhcp.pla: 0150: memcpy(@optsIP.2, @pkt->dhcp_yourip, IP4ADR_SIZE)
|
|
; libsrc/dhcp.pla: 0151: servopts = parseopts(@pkt->dhcp_opts, 54) + 2
|
|
; libsrc/dhcp.pla: 0152: if servopts >= 0
|
|
; libsrc/dhcp.pla: 0153: optsSRV = 54
|
|
; libsrc/dhcp.pla: 0154: memcpy(@optsSRV.2, @pkt->dhcp_opts.[servopts], IP4ADR_SIZE)
|
|
; libsrc/dhcp.pla: 0155: fin
|
|
!BYTE $06 ; CN 3
|
|
!BYTE $78 ; SAB _D039+2
|
|
_F004 !WORD _D039+2
|
|
!BYTE $26 ; LA _D041+2
|
|
_F005 !WORD _D041+2
|
|
!BYTE $66,$04 ; LLW [4]
|
|
!BYTE $38,$10 ; ADDI 16
|
|
!BYTE $08 ; CN 4
|
|
!BYTE $54 ; CALL _X018
|
|
_F006 !WORD 0
|
|
!BYTE $66,$04 ; LLW [4]
|
|
!BYTE $38,$F0 ; ADDI 240
|
|
!BYTE $2A,$36 ; CB 54
|
|
!BYTE $54 ; CALL _C001
|
|
_F007 !WORD _C001
|
|
!BYTE $38,$02 ; ADDI 2
|
|
!BYTE $6E,$0A ; DLW [10]
|
|
!BYTE $00 ; CN 0
|
|
!BYTE $48 ; ISGE
|
|
!BYTE $4C ; BRFLS _B020
|
|
!WORD _B020-*
|
|
!BYTE $2A,$36 ; CB 54
|
|
!BYTE $78 ; SAB _D042+0
|
|
_F008 !WORD _D042+0
|
|
!BYTE $26 ; LA _D042+2
|
|
_F009 !WORD _D042+2
|
|
!BYTE $66,$04 ; LLW [4]
|
|
!BYTE $38,$F0 ; ADDI 240
|
|
!BYTE $B2,$0A ; ADDLW [10]
|
|
!BYTE $08 ; CN 4
|
|
!BYTE $54 ; CALL _X018
|
|
_F010 !WORD 0
|
|
_B020
|
|
_B021
|
|
; libsrc/dhcp.pla: 0156: iNet:sendUDP(portDHCP, 0, DHCP_SERVER_PORT, @DHCP, @endDHCP - @DHCP)
|
|
; libsrc/dhcp.pla: 0157: break
|
|
!BYTE $6A ; LAW _D031+0
|
|
_F011 !WORD _D031+0
|
|
!BYTE $00 ; CN 0
|
|
!BYTE $2A,$43 ; CB 67
|
|
!BYTE $26 ; LA _D038+0
|
|
_F012 !WORD _D038+0
|
|
!BYTE $26 ; LA _D043+0
|
|
_F013 !WORD _D043+0
|
|
!BYTE $26 ; LA _D038+0
|
|
_F014 !WORD _D038+0
|
|
!BYTE $84 ; SUB
|
|
!BYTE $6A ; LAW _X028+6
|
|
_F015 !WORD 0+6
|
|
!BYTE $56 ; ICAL
|
|
!BYTE $30 ; DROP
|
|
!BYTE $50 ; BRNCH _B017
|
|
!WORD _B017-*
|
|
; libsrc/dhcp.pla: 0158: is DHCP_ACK
|
|
_B022
|
|
; libsrc/dhcp.pla: 0159: //
|
|
; libsrc/dhcp.pla: 0160: // Copy parameters to working copy
|
|
; libsrc/dhcp.pla: 0161: //
|
|
; libsrc/dhcp.pla: 0162: optsOP.2 = DHCP_ACK
|
|
; libsrc/dhcp.pla: 0163: memcpy(@localip, @pkt->dhcp_yourip, IP4ADR_SIZE)
|
|
; libsrc/dhcp.pla: 0164: maskopts = parseopts(@pkt->dhcp_opts, 1) + 2
|
|
; libsrc/dhcp.pla: 0165: if maskopts >= 0
|
|
; libsrc/dhcp.pla: 0166: memcpy(@localnet, @pkt->dhcp_opts.[maskopts], IP4ADR_SIZE)
|
|
; libsrc/dhcp.pla: 0167: fin
|
|
!BYTE $0A ; CN 5
|
|
!BYTE $78 ; SAB _D039+2
|
|
_F016 !WORD _D039+2
|
|
!BYTE $26 ; LA _D036+0
|
|
_F017 !WORD _D036+0
|
|
!BYTE $66,$04 ; LLW [4]
|
|
!BYTE $38,$10 ; ADDI 16
|
|
!BYTE $08 ; CN 4
|
|
!BYTE $54 ; CALL _X018
|
|
_F018 !WORD 0
|
|
!BYTE $66,$04 ; LLW [4]
|
|
!BYTE $38,$F0 ; ADDI 240
|
|
!BYTE $02 ; CN 1
|
|
!BYTE $54 ; CALL _C001
|
|
_F019 !WORD _C001
|
|
!BYTE $38,$02 ; ADDI 2
|
|
!BYTE $6E,$0C ; DLW [12]
|
|
!BYTE $00 ; CN 0
|
|
!BYTE $48 ; ISGE
|
|
!BYTE $4C ; BRFLS _B023
|
|
!WORD _B023-*
|
|
!BYTE $26 ; LA _D037+0
|
|
_F020 !WORD _D037+0
|
|
!BYTE $66,$04 ; LLW [4]
|
|
!BYTE $38,$F0 ; ADDI 240
|
|
!BYTE $B2,$0C ; ADDLW [12]
|
|
!BYTE $08 ; CN 4
|
|
!BYTE $54 ; CALL _X018
|
|
_F021 !WORD 0
|
|
_B023
|
|
_B024
|
|
; libsrc/dhcp.pla: 0168: gwopts = parseopts(@pkt->dhcp_opts, 3) + 2
|
|
; libsrc/dhcp.pla: 0169: if gwopts >= 0
|
|
; libsrc/dhcp.pla: 0170: memcpy(@localgw, @pkt->dhcp_opts.[gwopts], IP4ADR_SIZE)
|
|
; libsrc/dhcp.pla: 0171: fin
|
|
!BYTE $66,$04 ; LLW [4]
|
|
!BYTE $38,$F0 ; ADDI 240
|
|
!BYTE $06 ; CN 3
|
|
!BYTE $54 ; CALL _C001
|
|
_F022 !WORD _C001
|
|
!BYTE $38,$02 ; ADDI 2
|
|
!BYTE $6E,$0E ; DLW [14]
|
|
!BYTE $00 ; CN 0
|
|
!BYTE $48 ; ISGE
|
|
!BYTE $4C ; BRFLS _B025
|
|
!WORD _B025-*
|
|
!BYTE $26 ; LA _D035+0
|
|
_F023 !WORD _D035+0
|
|
!BYTE $66,$04 ; LLW [4]
|
|
!BYTE $38,$F0 ; ADDI 240
|
|
!BYTE $B2,$0E ; ADDLW [14]
|
|
!BYTE $08 ; CN 4
|
|
!BYTE $54 ; CALL _X018
|
|
_F024 !WORD 0
|
|
_B025
|
|
_B026
|
|
; libsrc/dhcp.pla: 0172: dnsopts = parseopts(@pkt->dhcp_opts, 6) + 2
|
|
; libsrc/dhcp.pla: 0173: if dnsopts >= 0
|
|
; libsrc/dhcp.pla: 0174: memcpy(@localdns, @pkt->dhcp_opts.[dnsopts], IP4ADR_SIZE)
|
|
; libsrc/dhcp.pla: 0175: fin
|
|
!BYTE $66,$04 ; LLW [4]
|
|
!BYTE $38,$F0 ; ADDI 240
|
|
!BYTE $0C ; CN 6
|
|
!BYTE $54 ; CALL _C001
|
|
_F025 !WORD _C001
|
|
!BYTE $38,$02 ; ADDI 2
|
|
!BYTE $6E,$10 ; DLW [16]
|
|
!BYTE $00 ; CN 0
|
|
!BYTE $48 ; ISGE
|
|
!BYTE $4C ; BRFLS _B027
|
|
!WORD _B027-*
|
|
!BYTE $26 ; LA _D034+0
|
|
_F026 !WORD _D034+0
|
|
!BYTE $66,$04 ; LLW [4]
|
|
!BYTE $38,$F0 ; ADDI 240
|
|
!BYTE $B2,$10 ; ADDLW [16]
|
|
!BYTE $08 ; CN 4
|
|
!BYTE $54 ; CALL _X018
|
|
_F027 !WORD 0
|
|
_B027
|
|
_B028
|
|
; libsrc/dhcp.pla: 0176: break
|
|
!BYTE $50 ; BRNCH _B017
|
|
!WORD _B017-*
|
|
; libsrc/dhcp.pla: 0177: otherwise
|
|
_B018
|
|
!BYTE $02 ; CASEBLOCK
|
|
!WORD $0002
|
|
!WORD _B019-*
|
|
!WORD $0005
|
|
!WORD _B022-*
|
|
; libsrc/dhcp.pla: 0178: //dumpdhcp(pkt)
|
|
; libsrc/dhcp.pla: 0179: wend
|
|
_B017
|
|
; libsrc/dhcp.pla: 0180: fin
|
|
_B015
|
|
_B016
|
|
; libsrc/dhcp.pla: 0181: return 0
|
|
!BYTE $00 ; CN 0
|
|
!BYTE $5A,$12 ; LEAVE 18
|
|
; libsrc/dhcp.pla: 0182: end
|
|
; libsrc/dhcp.pla: 0183: //
|
|
; libsrc/dhcp.pla: 0184: // Get the local hardware address into the DHCP packet
|
|
; libsrc/dhcp.pla: 0185: //
|
|
; libsrc/dhcp.pla: 0186: iNet:getInterfaceHA(@DHCP.dhcp_clientha)
|
|
_INIT
|
|
; libsrc/dhcp.pla: 0187: iNet:getInterfaceHA(@optsCID.3)
|
|
; libsrc/dhcp.pla: 0188: //
|
|
; libsrc/dhcp.pla: 0189: // Clear our local IP address
|
|
; libsrc/dhcp.pla: 0190: //
|
|
; libsrc/dhcp.pla: 0191: iNet:setInterfaceIP(@zeros, @ones, @zeros)
|
|
; libsrc/dhcp.pla: 0192: //
|
|
; libsrc/dhcp.pla: 0193: // Prepare to receive DHCP packets from a server
|
|
; libsrc/dhcp.pla: 0194: //
|
|
; libsrc/dhcp.pla: 0195: portDHCP = iNet:openUDP(DHCP_CLIENT_PORT, @recvDHCP, 0)
|
|
; libsrc/dhcp.pla: 0196: //
|
|
; libsrc/dhcp.pla: 0197: // Service IP
|
|
; libsrc/dhcp.pla: 0198: //
|
|
; libsrc/dhcp.pla: 0199: retry = 0
|
|
; libsrc/dhcp.pla: 0200: repeat
|
|
!BYTE $26 ; LA _D038+28
|
|
_F028 !WORD _D038+28
|
|
!BYTE $6A ; LAW _X028+20
|
|
_F029 !WORD 0+20
|
|
!BYTE $56 ; ICAL
|
|
!BYTE $30 ; DROP
|
|
!BYTE $26 ; LA _D040+3
|
|
_F030 !WORD _D040+3
|
|
!BYTE $6A ; LAW _X028+20
|
|
_F031 !WORD 0+20
|
|
!BYTE $56 ; ICAL
|
|
!BYTE $30 ; DROP
|
|
!BYTE $26 ; LA _D032+0
|
|
_F032 !WORD _D032+0
|
|
!BYTE $26 ; LA _D033+0
|
|
_F033 !WORD _D033+0
|
|
!BYTE $26 ; LA _D032+0
|
|
_F034 !WORD _D032+0
|
|
!BYTE $6A ; LAW _X028+18
|
|
_F035 !WORD 0+18
|
|
!BYTE $56 ; ICAL
|
|
!BYTE $30 ; DROP
|
|
!BYTE $2A,$44 ; CB 68
|
|
!BYTE $26 ; LA _C002+0
|
|
_F036 !WORD _C002+0
|
|
!BYTE $00 ; CN 0
|
|
!BYTE $6A ; LAW _X028+4
|
|
_F037 !WORD 0+4
|
|
!BYTE $56 ; ICAL
|
|
!BYTE $7A ; SAW _D031+0
|
|
_F038 !WORD _D031+0
|
|
!BYTE $00 ; CN 0
|
|
!BYTE $78 ; SAB _D029+0
|
|
_F039 !WORD _D029+0
|
|
_B030
|
|
; libsrc/dhcp.pla: 0201: //
|
|
; libsrc/dhcp.pla: 0202: // Broadcast DHCP DISCOVER message
|
|
; libsrc/dhcp.pla: 0203: //
|
|
; libsrc/dhcp.pla: 0204: optsOP.2 = DHCP_DISCOVER
|
|
; libsrc/dhcp.pla: 0205: optsIP:2 = 0
|
|
; libsrc/dhcp.pla: 0206: optsIP:4 = 0
|
|
; libsrc/dhcp.pla: 0207: optsSRV = 255
|
|
; libsrc/dhcp.pla: 0208: DHCP.dhcp_secs.1 = retry
|
|
; libsrc/dhcp.pla: 0209: iNet:sendUDP(portDHCP, 0, DHCP_SERVER_PORT, @DHCP, @optsSRV - @DHCP + 1)
|
|
; libsrc/dhcp.pla: 0210: for timeout = 0 to 4000
|
|
!BYTE $02 ; CN 1
|
|
!BYTE $78 ; SAB _D039+2
|
|
_F040 !WORD _D039+2
|
|
!BYTE $00 ; CN 0
|
|
!BYTE $7A ; SAW _D041+2
|
|
_F041 !WORD _D041+2
|
|
!BYTE $00 ; CN 0
|
|
!BYTE $7A ; SAW _D041+4
|
|
_F042 !WORD _D041+4
|
|
!BYTE $2A,$FF ; CB 255
|
|
!BYTE $78 ; SAB _D042+0
|
|
_F043 !WORD _D042+0
|
|
!BYTE $68 ; LAB _D029+0
|
|
_F044 !WORD _D029+0
|
|
!BYTE $26 ; LA _D038+8
|
|
_F045 !WORD _D038+8
|
|
!BYTE $8C ; INCR
|
|
!BYTE $70 ; SB
|
|
!BYTE $6A ; LAW _D031+0
|
|
_F046 !WORD _D031+0
|
|
!BYTE $00 ; CN 0
|
|
!BYTE $2A,$43 ; CB 67
|
|
!BYTE $26 ; LA _D038+0
|
|
_F047 !WORD _D038+0
|
|
!BYTE $26 ; LA _D042+0
|
|
_F048 !WORD _D042+0
|
|
!BYTE $26 ; LA _D038+0
|
|
_F049 !WORD _D038+0
|
|
!BYTE $84 ; SUB
|
|
!BYTE $8C ; INCR
|
|
!BYTE $6A ; LAW _X028+6
|
|
_F050 !WORD 0+6
|
|
!BYTE $56 ; ICAL
|
|
!BYTE $30 ; DROP
|
|
!BYTE $2C,$A0,$0F ; CW 4000
|
|
!BYTE $00 ; CN 0
|
|
_B033
|
|
!BYTE $7E ; DAW _D030+0
|
|
_F051 !WORD _D030+0
|
|
; libsrc/dhcp.pla: 0211: iNet:serviceIP()
|
|
; libsrc/dhcp.pla: 0212: if optsOP.2 == DHCP_ACK
|
|
; libsrc/dhcp.pla: 0213: break
|
|
!BYTE $6A ; LAW _X028+2
|
|
_F052 !WORD 0+2
|
|
!BYTE $56 ; ICAL
|
|
!BYTE $30 ; DROP
|
|
!BYTE $68 ; LAB _D039+2
|
|
_F053 !WORD _D039+2
|
|
!BYTE $0A ; CN 5
|
|
!BYTE $24 ; BRNE _B035
|
|
!WORD _B035-*
|
|
!BYTE $50 ; BRNCH _B032
|
|
!WORD _B032-*
|
|
; libsrc/dhcp.pla: 0214: fin
|
|
_B035
|
|
_B036
|
|
; libsrc/dhcp.pla: 0215: next
|
|
_B034
|
|
!BYTE $A4 ; INCBRLE _B033
|
|
!WORD _B033-*
|
|
_B032
|
|
!BYTE $7A ; SAW _D030+0
|
|
_F054 !WORD _D030+0
|
|
!BYTE $30 ; DROP
|
|
; libsrc/dhcp.pla: 0216: retry++
|
|
!BYTE $68 ; LAB _D029+0
|
|
_F055 !WORD _D029+0
|
|
!BYTE $8C ; INCR
|
|
; libsrc/dhcp.pla: 0217: until retry > 4 or optsOP.2 == DHCP_ACK
|
|
!BYTE $78 ; SAB _D029+0
|
|
_F056 !WORD _D029+0
|
|
_B031
|
|
!BYTE $68 ; LAB _D029+0
|
|
_F057 !WORD _D029+0
|
|
!BYTE $08 ; CN 4
|
|
!BYTE $44 ; ISGT
|
|
!BYTE $AE ; BROR _B037
|
|
!WORD _B037-*
|
|
!BYTE $68 ; LAB _D039+2
|
|
_F058 !WORD _D039+2
|
|
!BYTE $0A ; CN 5
|
|
!BYTE $40 ; ISEQ
|
|
_B037
|
|
!BYTE $4C ; BRFLS _B030
|
|
!WORD _B030-*
|
|
_B029
|
|
; libsrc/dhcp.pla: 0218: iNet:closeUDP(portDHCP)
|
|
; libsrc/dhcp.pla: 0219: iNet:setInterfaceIP(@localip, @localnet, @localgw)
|
|
; libsrc/dhcp.pla: 0220: puts("Apple II bound to:\n");putip(@localip);putc('/');putip(@localnet);putln
|
|
!BYTE $6A ; LAW _D031+0
|
|
_F059 !WORD _D031+0
|
|
!BYTE $6A ; LAW _X028+8
|
|
_F060 !WORD 0+8
|
|
!BYTE $56 ; ICAL
|
|
!BYTE $30 ; DROP
|
|
!BYTE $26 ; LA _D036+0
|
|
_F061 !WORD _D036+0
|
|
!BYTE $26 ; LA _D037+0
|
|
_F062 !WORD _D037+0
|
|
!BYTE $26 ; LA _D035+0
|
|
_F063 !WORD _D035+0
|
|
!BYTE $6A ; LAW _X028+18
|
|
_F064 !WORD 0+18
|
|
!BYTE $56 ; ICAL
|
|
!BYTE $30 ; DROP
|
|
!BYTE $2E ; CS
|
|
!BYTE $13
|
|
!BYTE $41,$70,$70,$6C,$65,$20,$49,$49
|
|
!BYTE $20,$62,$6F,$75,$6E,$64,$20,$74
|
|
!BYTE $6F,$3A,$0D
|
|
!BYTE $54 ; CALL _X004
|
|
_F065 !WORD 0
|
|
; libsrc/dhcp.pla: 0221: iNet:setDNS(@localdns)
|
|
; libsrc/dhcp.pla: 0222: puts("DNS:");putip(@localdns);putln
|
|
!BYTE $26 ; LA _D036+0
|
|
_F066 !WORD _D036+0
|
|
!BYTE $54 ; CALL _C000
|
|
_F067 !WORD _C000
|
|
!BYTE $2A,$2F ; CB 47
|
|
!BYTE $54 ; CALL _X002
|
|
_F068 !WORD 0
|
|
!BYTE $26 ; LA _D037+0
|
|
_F069 !WORD _D037+0
|
|
!BYTE $54 ; CALL _C000
|
|
_F070 !WORD _C000
|
|
!BYTE $54 ; CALL _X003
|
|
_F071 !WORD 0
|
|
!BYTE $26 ; LA _D034+0
|
|
_F072 !WORD _D034+0
|
|
!BYTE $6A ; LAW _X028+22
|
|
_F073 !WORD 0+22
|
|
!BYTE $56 ; ICAL
|
|
!BYTE $30 ; DROP
|
|
!BYTE $2E ; CS
|
|
!BYTE $04
|
|
!BYTE $44,$4E,$53,$3A
|
|
!BYTE $54 ; CALL _X004
|
|
_F074 !WORD 0
|
|
; libsrc/dhcp.pla: 0223: done
|
|
!BYTE $26 ; LA _D034+0
|
|
_F075 !WORD _D034+0
|
|
!BYTE $54 ; CALL _C000
|
|
_F076 !WORD _C000
|
|
!BYTE $54 ; CALL _X003
|
|
_F077 !WORD 0
|
|
!BYTE $00 ; CN 0
|
|
!BYTE $5C ; RET
|
|
_DEFCNT = 4
|
|
_SEGEND
|
|
;
|
|
; RE-LOCATEABLE DICTIONARY
|
|
;
|
|
!BYTE $02 ; CODE TABLE FIXUP
|
|
!WORD _C000
|
|
!BYTE $00
|
|
!BYTE $02 ; CODE TABLE FIXUP
|
|
!WORD _C001
|
|
!BYTE $00
|
|
!BYTE $02 ; CODE TABLE FIXUP
|
|
!WORD _C002
|
|
!BYTE $00
|
|
!BYTE $91 ; EXTERNAL FIXUP
|
|
!WORD _F000-_SEGBEGIN
|
|
!BYTE 5 ; ESD INDEX
|
|
!BYTE $91 ; EXTERNAL FIXUP
|
|
!WORD _F001-_SEGBEGIN
|
|
!BYTE 2 ; ESD INDEX
|
|
!BYTE $91 ; EXTERNAL FIXUP
|
|
!WORD _F002-_SEGBEGIN
|
|
!BYTE 5 ; ESD INDEX
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F003-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F004-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F005-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $91 ; EXTERNAL FIXUP
|
|
!WORD _F006-_SEGBEGIN
|
|
!BYTE 18 ; ESD INDEX
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F007-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F008-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F009-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $91 ; EXTERNAL FIXUP
|
|
!WORD _F010-_SEGBEGIN
|
|
!BYTE 18 ; ESD INDEX
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F011-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F012-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F013-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F014-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $91 ; EXTERNAL FIXUP
|
|
!WORD _F015-_SEGBEGIN
|
|
!BYTE 28 ; ESD INDEX
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F016-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F017-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $91 ; EXTERNAL FIXUP
|
|
!WORD _F018-_SEGBEGIN
|
|
!BYTE 18 ; ESD INDEX
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F019-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F020-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $91 ; EXTERNAL FIXUP
|
|
!WORD _F021-_SEGBEGIN
|
|
!BYTE 18 ; ESD INDEX
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F022-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F023-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $91 ; EXTERNAL FIXUP
|
|
!WORD _F024-_SEGBEGIN
|
|
!BYTE 18 ; ESD INDEX
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F025-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F026-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $91 ; EXTERNAL FIXUP
|
|
!WORD _F027-_SEGBEGIN
|
|
!BYTE 18 ; ESD INDEX
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F028-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $91 ; EXTERNAL FIXUP
|
|
!WORD _F029-_SEGBEGIN
|
|
!BYTE 28 ; ESD INDEX
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F030-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $91 ; EXTERNAL FIXUP
|
|
!WORD _F031-_SEGBEGIN
|
|
!BYTE 28 ; ESD INDEX
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F032-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F033-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F034-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $91 ; EXTERNAL FIXUP
|
|
!WORD _F035-_SEGBEGIN
|
|
!BYTE 28 ; ESD INDEX
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F036-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $91 ; EXTERNAL FIXUP
|
|
!WORD _F037-_SEGBEGIN
|
|
!BYTE 28 ; ESD INDEX
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F038-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F039-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F040-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F041-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F042-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F043-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F044-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F045-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F046-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F047-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F048-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F049-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $91 ; EXTERNAL FIXUP
|
|
!WORD _F050-_SEGBEGIN
|
|
!BYTE 28 ; ESD INDEX
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F051-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $91 ; EXTERNAL FIXUP
|
|
!WORD _F052-_SEGBEGIN
|
|
!BYTE 28 ; ESD INDEX
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F053-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F054-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F055-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F056-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F057-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F058-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F059-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $91 ; EXTERNAL FIXUP
|
|
!WORD _F060-_SEGBEGIN
|
|
!BYTE 28 ; ESD INDEX
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F061-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F062-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F063-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $91 ; EXTERNAL FIXUP
|
|
!WORD _F064-_SEGBEGIN
|
|
!BYTE 28 ; ESD INDEX
|
|
!BYTE $91 ; EXTERNAL FIXUP
|
|
!WORD _F065-_SEGBEGIN
|
|
!BYTE 4 ; ESD INDEX
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F066-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F067-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $91 ; EXTERNAL FIXUP
|
|
!WORD _F068-_SEGBEGIN
|
|
!BYTE 2 ; ESD INDEX
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F069-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F070-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $91 ; EXTERNAL FIXUP
|
|
!WORD _F071-_SEGBEGIN
|
|
!BYTE 3 ; ESD INDEX
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F072-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $91 ; EXTERNAL FIXUP
|
|
!WORD _F073-_SEGBEGIN
|
|
!BYTE 28 ; ESD INDEX
|
|
!BYTE $91 ; EXTERNAL FIXUP
|
|
!WORD _F074-_SEGBEGIN
|
|
!BYTE 4 ; ESD INDEX
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F075-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $81 ; INTERNAL FIXUP
|
|
!WORD _F076-_SEGBEGIN
|
|
!BYTE $00
|
|
!BYTE $91 ; EXTERNAL FIXUP
|
|
!WORD _F077-_SEGBEGIN
|
|
!BYTE 3 ; ESD INDEX
|
|
!BYTE $00 ; END OF RLD
|
|
;
|
|
; EXTERNAL/ENTRY SYMBOL DICTIONARY
|
|
;
|
|
; DCI STRING: PUTC
|
|
!BYTE $D0,$D5,$D4,$43
|
|
!BYTE $10 ; EXTERNAL SYMBOL FLAG
|
|
!WORD 2 ; ESD INDEX
|
|
; DCI STRING: PUTLN
|
|
!BYTE $D0,$D5,$D4,$CC,$4E
|
|
!BYTE $10 ; EXTERNAL SYMBOL FLAG
|
|
!WORD 3 ; ESD INDEX
|
|
; DCI STRING: PUTS
|
|
!BYTE $D0,$D5,$D4,$53
|
|
!BYTE $10 ; EXTERNAL SYMBOL FLAG
|
|
!WORD 4 ; ESD INDEX
|
|
; DCI STRING: PUTI
|
|
!BYTE $D0,$D5,$D4,$49
|
|
!BYTE $10 ; EXTERNAL SYMBOL FLAG
|
|
!WORD 5 ; ESD INDEX
|
|
; DCI STRING: MEMCPY
|
|
!BYTE $CD,$C5,$CD,$C3,$D0,$59
|
|
!BYTE $10 ; EXTERNAL SYMBOL FLAG
|
|
!WORD 18 ; ESD INDEX
|
|
; DCI STRING: INET
|
|
!BYTE $C9,$CE,$C5,$54
|
|
!BYTE $10 ; EXTERNAL SYMBOL FLAG
|
|
!WORD 28 ; ESD INDEX
|
|
!BYTE $00 ; END OF ESD
|