1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2025-08-08 09:25:19 +00:00
Files
PLASMA/src/libsrc/dhcp.a
2023-12-15 11:45:50 -08:00

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