Another Bunch of fixes:

-Loader is now working (todo:rename to A2osX.system,tSYS)
-most of BINs working
-CR->CR/LF
This commit is contained in:
Rémy GIBERT 2015-03-14 22:47:37 +01:00
parent 36e174bbf2
commit f34e2b5f7c
22 changed files with 3330 additions and 3293 deletions

View File

@ -1,219 +1,219 @@
PR#3 PR#3
PREFIX /DATA/A2OSX PREFIX /DATA/A2OSX
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF BIN/ARP .TF BIN/ARP
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/KERNEL.I .INB INC/KERNEL.I
.INB INC/LIBSTR.I .INB INC/LIBSTR.I
.INB INC/LIBTCPIP.I .INB INC/LIBTCPIP.I
*-------------------------------------- *--------------------------------------
ARP.TIMEOUT .EQ 50 50*100ms = 5 sec. ARP.TIMEOUT .EQ 50 50*100ms = 5 sec.
*-------------------------------------- *--------------------------------------
ZPPTR1 .EQ ZPBIN ZPPTR1 .EQ ZPBIN
*-------------------------------------- *--------------------------------------
* Main entry point * Main entry point
*-------------------------------------- *--------------------------------------
* Code signature and INIT table * Code signature and INIT table
*-------------------------------------- *--------------------------------------
* CLD $D8 * CLD $D8
* JMP (*,x) $7C * JMP (*,x) $7C
* #JMPTABLE * #JMPTABLE
* /JMPTABLE * /JMPTABLE
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp (.1,x)
.1 .DA CS.INIT .1 .DA CS.INIT
.DA CS.RUN .DA CS.RUN
.DA CS.EVENT .DA CS.EVENT
.DA CS.QUIT .DA CS.QUIT
L.LIBSTR .DA LIBSTR L.LIBSTR .DA LIBSTR
L.LIBTCPIP .DA LIBTCPIP L.LIBTCPIP .DA LIBTCPIP
L.SSCANF.IP .DA SSCANF.IP L.SSCANF.IP .DA SSCANF.IP
L.DST.IP .DA DST.IP L.DST.IP .DA DST.IP
L.DST.MAC .DA DST.MAC L.DST.MAC .DA DST.MAC
L.MSG0 .DA MSG0 L.MSG0 .DA MSG0
L.MSG1 .DA MSG1 L.MSG1 .DA MSG1
L.MSG2 .DA MSG2 L.MSG2 .DA MSG2
.DA 0 .DA 0
.DA CS.END-CS.START Code Length To Relocate .DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate .DA DS.END-DS.START Data Segment to Allocate
*-------------------------------------- *--------------------------------------
CS.INIT >LIBLOADP L.LIBSTR CS.INIT >LIBLOADP L.LIBSTR
sta hLIBSTR sta hLIBSTR
>LIBLOADP L.LIBTCPIP >LIBLOADP L.LIBTCPIP
sta hLIBTCPIP sta hLIBTCPIP
ldy #S.PS.hARGS ldy #S.PS.hARGS
lda (pPsContext),y lda (pPsContext),y
beq CS.INIT.CACHE beq CS.INIT.CACHE
pha pha
>PUSHW L.DST.IP >PUSHW L.DST.IP
>PUSHW L.SSCANF.IP >PUSHW L.SSCANF.IP
pla pla
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>PUSHYA >PUSHYA
>LIBCALL hLIBSTR,LIBSTR.SSCANF >LIBCALL hLIBSTR,LIBSTR.SSCANF
bcs .9 bcs .9
stz bCTRLC stz bCTRLC
lda (pPsContext) lda (pPsContext)
ora #S.PS.F.EVENT Now accept events ora #S.PS.F.EVENT Now accept events
sta (pPsContext) sta (pPsContext)
rts CC,Give back control to CS.RUN rts CC,Give back control to CS.RUN
.9 lda #SYSMGR.ERRSYN .9 lda #SYSMGR.ERRSYN
sec sec
rts rts
CS.INIT.CACHE >LIBCALL hLIBTCPIP,LIBTCPIP.ARP.GETCACHE CS.INIT.CACHE >LIBCALL hLIBTCPIP,LIBTCPIP.ARP.GETCACHE
>STYA ZPPTR1 >STYA ZPPTR1
>PUSHW L.MSG0 >PUSHW L.MSG0
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
ldx #K.ARPCACHE.SIZE ldx #K.ARPCACHE.SIZE
.1 lda (ZPPTR1) .1 lda (ZPPTR1)
* beq .8 * beq .8
ldy #S.ARPCACHE.IP+4 ldy #S.ARPCACHE.IP+4
.2 dey .2 dey
lda (ZPPTR1),y lda (ZPPTR1),y
>PUSHA >PUSHA
cpy #S.ARPCACHE.IP cpy #S.ARPCACHE.IP
bne .2 bne .2
ldy #S.ARPCACHE.MAC+6 ldy #S.ARPCACHE.MAC+6
.3 dey .3 dey
lda (ZPPTR1),y lda (ZPPTR1),y
>PUSHA >PUSHA
cpy #S.ARPCACHE.MAC cpy #S.ARPCACHE.MAC
bne .3 bne .3
ldy #S.ARPCACHE.RETRYCNT ldy #S.ARPCACHE.RETRYCNT
lda (ZPPTR1),y lda (ZPPTR1),y
>PUSHA >PUSHA
>PUSHB (ZPPTR1) >PUSHB (ZPPTR1)
>PUSHW L.MSG1 >PUSHW L.MSG1
phx phx
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
plx plx
lda ZPPTR1 lda ZPPTR1
clc clc
adc #S.ARPCACHE adc #S.ARPCACHE
sta ZPPTR1 sta ZPPTR1
bcc .4 bcc .4
inc ZPPTR1+1 inc ZPPTR1+1
.4 dex .4 dex
bne .1 bne .1
.8 lda #0 tell TSKMGR that all done ok, but .8 lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory sec we do not want to stay in memory
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN lda #ARP.TIMEOUT CS.RUN lda #ARP.TIMEOUT
sta TimeOut sta TimeOut
.1 lda bCTRLC .1 lda bCTRLC
bne .9 bne .9
>PUSHW L.DST.MAC >PUSHW L.DST.MAC
>PUSHW L.DST.IP >PUSHW L.DST.IP
>LIBCALL hLIBTCPIP,LIBTCPIP.ARP.QUERY >LIBCALL hLIBTCPIP,LIBTCPIP.ARP.QUERY
bcc .2 success, print & exit bcc .2 success, print & exit
lda TimeOut lda TimeOut
beq .9 beq .9
jsr A2osX.SLEEP jsr A2osX.SLEEP
bra .1 bra .1
.2 ldx #5 .2 ldx #5
.3 >PUSHB DST.MAC,x .3 >PUSHB DST.MAC,x
dex dex
bpl .3 bpl .3
ldx #3 ldx #3
.4 >PUSHB DST.IP,x .4 >PUSHB DST.IP,x
dex dex
bpl .4 bpl .4
>PUSHW L.MSG2 >PUSHW L.MSG2
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
CS.EVENT >PULLW pEvent CS.EVENT >PULLW pEvent
lda (pEvent) lda (pEvent)
and #S.EVT.F.TIMER is it a TIMER event? and #S.EVT.F.TIMER is it a TIMER event?
beq .1 no.... beq .1 no....
lda TimeOut lda TimeOut
beq .9 beq .9
dec TimeOut dec TimeOut
bra .9 bra .9
.1 lda (pEvent) .1 lda (pEvent)
and #S.EVT.F.KEY is it a KEY event? and #S.EVT.F.KEY is it a KEY event?
beq .9 beq .9
ldy #S.EVT.hDEV is Event from active IN device? ldy #S.EVT.hDEV is Event from active IN device?
lda (pEvent),y lda (pEvent),y
ldy #S.PS.hINDEV ldy #S.PS.hINDEV
cmp (pPsContext),y cmp (pPsContext),y
bne .9 bne .9
ldy #S.EVT.DATAHI is it an O or SAPPLE key ? ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
lda (pEvent),y lda (pEvent),y
bne .9 bne .9
ldy #S.EVT.DATALO ldy #S.EVT.DATALO
lda (pEvent),y lda (pEvent),y
cmp #$03 Ctrl-C cmp #$03 Ctrl-C
bne .9 bne .9
lda #$FF lda #$FF
sta bCTRLC sta bCTRLC
clc clc
rts rts
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
CS.QUIT lda hLIBTCPIP CS.QUIT lda hLIBTCPIP
>SYSCALL SYS.UnloadLibA >SYSCALL SYS.UnloadLibA
lda hLIBSTR lda hLIBSTR
>SYSCALL SYS.UnloadLibA >SYSCALL SYS.UnloadLibA
clc clc
rts rts
*-------------------------------------- *--------------------------------------
CS.END CS.END
LIBSTR >PSTRING "libstr.o" LIBSTR >PSTRING "libstr.o"
LIBTCPIP >PSTRING "libtcpip.o" LIBTCPIP >PSTRING "libtcpip.o"
SSCANF.IP >PSTRING "%d.%d.%d.%d" SSCANF.IP >PSTRING "%d.%d.%d.%d"
MSG0 >CSTRING "STS RET MAC Address IP Address\n" MSG0 >CSTRING "STS RET MAC Address IP Address\n"
MSG1 >CSTRING "$%h %03d %h:%h:%h:%h:%h:%h %d.%d.%d.%d\n" MSG1 >CSTRING "$%h %03d %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" MSG2 >CSTRING "%d.%d.%d.%d is at %h:%h:%h:%h:%h:%h\n"
*-------------------------------------- *--------------------------------------
DS.START DS.START
hLIBSTR .BS 1 hLIBSTR .BS 1
hLIBTCPIP .BS 1 hLIBTCPIP .BS 1
DST.IP .BS 4 DST.IP .BS 4
DST.MAC .BS 6 DST.MAC .BS 6
TimeOut .BS 1 TimeOut .BS 1
bCTRLC .BS 1 bCTRLC .BS 1
DS.END DS.END
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE BIN/ARP.S SAVE BIN/ARP.S
ASM ASM

View File

@ -1,382 +1,382 @@
PR#3 PR#3
PREFIX /DATA/A2OS PREFIX /DATA/A2OSX
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF /DATA/A2OS/BIN/ASM .TF BIN/ASM
*--------------------------------------- *---------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OS.I .INB INC/A2OSX.I
.INB INC/LIBSTR.I .INB INC/LIBSTR.I
*--------------------------------------- *---------------------------------------
SYM.BLOCK.SIZE .EQ 4096 SYM.BLOCK.SIZE .EQ 4096
SYM.BLOCK.MAX .EQ 8 SYM.BLOCK.MAX .EQ 8
*--------------------------------------- *---------------------------------------
ERR.INV.ARGS .EQ 1 ERR.INV.ARGS .EQ 1
ERR.SRC.INV.TYPE .EQ 2 ERR.SRC.INV.TYPE .EQ 2
ERR.SRC.TOO.LONG .EQ 3 ERR.SRC.TOO.LONG .EQ 3
ERR.SYM.TOO.LARGE .EQ 10 ERR.SYM.TOO.LARGE .EQ 10
*--------------------------------------- *---------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp (.1,x)
.1 .DA CS.INIT .1 .DA CS.INIT
.DA CS.RUN .DA CS.RUN
.DA CS.EVENT .DA CS.DOEVENT
.DA CS.QUIT .DA CS.QUIT
L.LIBSTR .DA LIBSTR L.LIBSTR .DA LIBSTR
L.MSG.HELP1 .DA MSG.HELP1 L.MSG.HELP1 .DA MSG.HELP1
L.MSG.HELP2 .DA MSG.HELP2 L.MSG.HELP2 .DA MSG.HELP2
L.MSG.SRCLINE .DA MSG.SRCLINE L.MSG.SRCLINE .DA MSG.SRCLINE
L.READ.BUFFER .DA READ.BUFFER L.READ.BUFFER .DA READ.BUFFER
.DA 0 .DA 0
.DA CS.END-CS.START Code Length To Relocate .DA CS.END-CS.START Code Length To Relocate
.DA 0 Data Segment to Allocate .DA 0 Data Segment to Allocate
*--------------------------------------- *---------------------------------------
CS.INIT >LIBLOADP L.LIBSTR CS.INIT >LIBLOADP L.LIBSTR
sta hLIBSTR sta hLIBSTR
ldx #VAR.INIT.END-VAR.INIT ldx #VAR.INIT.END-VAR.INIT
.1 stz VAR.INIT-1,x .1 stz VAR.INIT-1,x
dex dex
bne .1 bne .1
ldy #S.PS.hARGS ldy #S.PS.hARGS
lda (TSKMGR.TSKPTR),y lda (pPsContext),y
bne CS.INIT.ARGS bne CS.INIT.ARGS
>PUSHW L.MSG.HELP1 >PUSHW L.MSG.HELP1
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
>PUSHW L.MSG.HELP2 >PUSHW L.MSG.HELP2
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
lda #ERR.INV.ARGS lda #ERR.INV.ARGS
sec sec
rts rts
CS.INIT.ARGS >SYSCALL SYS.GetMemPtrA CS.INIT.ARGS >SYSCALL SYS.GetMemPtrA
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
lda (ZPQuickPtr1) lda (ZPQuickPtr1)
bne .1 bne .1
lda #ERR.INV.ARGS lda #ERR.INV.ARGS
sec sec
rts rts
.1 ldy #1 .1 ldy #1
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
cmp #'/' cmp #'/'
bne .2 bne .2
ldy #S.PS.hARGS ldy #S.PS.hARGS
lda (TSKMGR.TSKPTR),y lda (pPsContext),y
>SYSCALL SYS.PStrCpyA >SYSCALL SYS.PStrCpyA
bra CS.INIT.ARGS.OK bra CS.INIT.ARGS.OK
.2 ldy #S.PS.hARGS .2 ldy #S.PS.hARGS
lda (TSKMGR.TSKPTR),y lda (pPsContext),y
>PUSHA >PUSHA
ldy #S.PS.hPREFIX ldy #S.PS.hPREFIX
lda (TSKMGR.TSKPTR),y lda (pPsContext),y
>PUSHA >PUSHA
>SYSCALL SYS.PStrCat >SYSCALL SYS.PStrCat
CS.INIT.ARGS.OK sta SRC.hFILENAMES CS.INIT.ARGS.OK sta SRC.hFILENAMES
>SYSCALL SYS.OpenFileA >SYSCALL SYS.MLIOpenA
bcc CS.INIT.OPEN bcc CS.INIT.OPEN
sec sec
rts rts
CS.INIT.OPEN sta SRC.hREFNUMS CS.INIT.OPEN sta SRC.hREFNUMS
stx SRC.hBUFFERS stx SRC.hBUFFERS
inc SRC.COUNT inc SRC.COUNT
lda SRC.hFILENAMES lda SRC.hFILENAMES
>SYSCALL SYS.GetFileInfoA >SYSCALL SYS.MLIGetFileInfoA
bcs .99 bcs .99
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
ldy #1 ldy #1
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
sta SRC.hFILETYPES sta SRC.hFILETYPES
cmp #$04 TXT? cmp #$04 TXT?
bne .1 bne .1
>PUSHBI $0D >PUSHBI $0D
>PUSHBI $FF >PUSHBI $FF
>PUSHB SRC.hREFNUMS >PUSHB SRC.hREFNUMS
>SYSCALL SYS.NewLine >SYSCALL SYS.MLINewLine
bcs .99 bcs .99
.1 cmp #$FA BAS? .1 cmp #$FA BAS?
bne .98 bne .98
stz bSTOP stz bSTOP
stz bCANCEL stz bCANCEL
lda (TSKMGR.TSKPTR) lda (pPsContext)
ora #S.PS.F.EVENT Now accept events ora #S.PS.F.EVENT Now accept events
sta (TSKMGR.TSKPTR) sta (pPsContext)
clc clc
rts rts
.98 lda #ERR.SRC.INV.TYPE .98 lda #ERR.SRC.INV.TYPE
sec sec
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
CS.RUN lda bCANCEL CS.RUN lda bCANCEL
beq .1 beq .1
sec sec
rts rts
.1 lda bSTOP .1 lda bSTOP
beq .2 beq .2
clc clc
rts rts
.2 jsr CS.RUN.READLINE .2 jsr CS.RUN.READLINE
bcs .9 bcs .9
>PUSHWI TmpBuffer256 >PUSHWI TmpBuffer256
>PUSHW SRC.LINENUM >PUSHW SRC.LINENUM
>PUSHW L.MSG.SRCLINE >PUSHW L.MSG.SRCLINE
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
clc clc
.9 rts .9 rts
*--------------------------------------- *---------------------------------------
CS.RUN.READLINE ldx SRC.COUNT CS.RUN.READLINE ldx SRC.COUNT
lda SRC.hFILETYPES-1,x lda SRC.hFILETYPES-1,x
bmi CS.RUN.READLINE.BIN bmi CS.RUN.READLINE.BIN
jmp CS.RUN.READLINE.TXT jmp CS.RUN.READLINE.TXT
*--------------------------------------- *---------------------------------------
CS.RUN.READLINE.BIN >LDYAI 3 LEN + LINENUM CS.RUN.READLINE.BIN >LDYAI 3 LEN + LINENUM
jsr CS.RUN.READLINE.YA jsr CS.RUN.READLINE.YA
bcs .9 bcs .9
lda READ.BUFFER+1 lda READ.BUFFER+1
sta SRC.LINENUM sta SRC.LINENUM
lda READ.BUFFER+2 lda READ.BUFFER+2
sta SRC.LINENUM+1 sta SRC.LINENUM+1
lda READ.BUFFER lda READ.BUFFER
dec dec
dec dec
dec dec
beq .8 beq .8
tay tay
lda #0 lda #0
jsr CS.RUN.READLINE.YA jsr CS.RUN.READLINE.YA
bcs .9 bcs .9
ldy #0 ldy #0
ldx #0 ldx #0
.1 lda READ.BUFFER,y .1 lda READ.BUFFER,y
bmi .2 bmi .2
sta TmpBuffer256,x sta TmpBuffer256,x
beq .8 Ending 00 beq .8 Ending 00
inx inx
beq .99 beq .99
iny iny
bne .1 bne .1
bra .99 bra .99
.2 cmp #$C0 REPEAT char? .2 cmp #$C0 REPEAT char?
bne .5 bne .5
iny iny
beq .99 beq .99
lda READ.BUFFER,y lda READ.BUFFER,y
iny iny
beq .99 beq .99
.3 pha .3 pha
lda READ.BUFFER,y lda READ.BUFFER,y
sta TmpBuffer256,x sta TmpBuffer256,x
pla pla
inx inx
beq .99 beq .99
dec dec
bne .3 bne .3
iny iny
bne .1 bne .1
bra .99 bra .99
.5 and #$3F Compute blank count .5 and #$3F Compute blank count
.6 pha .6 pha
lda #$20 lda #$20
sta TmpBuffer256,x sta TmpBuffer256,x
pla pla
inx inx
beq .99 beq .99
dec dec
bne .6 bne .6
iny iny
bne .1 bne .1
bra .99 bra .99
.8 clc .8 clc
.9 rts .9 rts
.99 lda #ERR.SRC.TOO.LONG .99 lda #ERR.SRC.TOO.LONG
sec sec
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN.READLINE.TXT >LDYAI 256 newline = $0D CS.RUN.READLINE.TXT >LDYAI 256 newline = $0D
jsr CS.RUN.READLINE.YA jsr CS.RUN.READLINE.YA
bcs .9 bcs .9
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CS.RUN.READLINE.YA >PUSHYA CS.RUN.READLINE.YA >PUSHYA
>PUSHW L.READ.BUFFER >PUSHW L.READ.BUFFER
ldx SRC.COUNT ldx SRC.COUNT
lda SRC.hREFNUMS-1,x lda SRC.hREFNUMS-1,x
>PUSHA >PUSHA
>SYSCALL SYS.ReadFile >SYSCALL SYS.MLIRead
rts rts
*-------------------------------------- *--------------------------------------
CS.EVENT ldy #S.EVT.hDEV is Event from active IN device? CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device?
lda (EVTMGR.EVTPTR),y lda (pEvent),y
ldy #S.PS.hINDEV ldy #S.PS.hINDEV
cmp (TSKMGR.TSKPTR),y cmp (pPsContext),y
bne .9 bne .9
lda (EVTMGR.EVTPTR) lda (pEvent)
and #S.EVT.F.KEY is it a KEY event? and #S.EVT.F.KEY is it a KEY event?
beq .9 beq .9
ldy #S.EVT.DATAHI is it an O or SAPPLE key ? ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
lda (EVTMGR.EVTPTR),y lda (pEvent),y
bne .9 bne .9
ldy #S.EVT.DATALO ldy #S.EVT.DATALO
lda (EVTMGR.EVTPTR),y lda (pEvent),y
cmp #$03 Ctrl-C cmp #$03 Ctrl-C
bne .1 bne .1
lda #$FF lda #$FF
sta bCANCEL sta bCANCEL
bra .8 bra .8
.1 cmp #$13 Ctrl-S .1 cmp #$13 Ctrl-S
bne .8 bne .8
lda bSTOP lda bSTOP
eor #$FF eor #$FF
sta bSTOP sta bSTOP
.8 >SYSCALL SYS.DestroyEvent .8 >SYSCALL SYS.DestroyEvent
clc clc
rts rts
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
CS.QUIT ldx SRC.COUNT CS.QUIT ldx SRC.COUNT
beq .1 beq .1
lda SRC.hREFNUMS-1,x lda SRC.hREFNUMS-1,x
>SYSCALL SYS.CloseFileA >SYSCALL SYS.MLICloseA
ldx SRC.COUNT ldx SRC.COUNT
lda SRC.hFILENAMES-1,x lda SRC.hFILENAMES-1,x
>SYSCALL SYS.FreeMemA >SYSCALL SYS.FreeMemA
ldx SRC.COUNT ldx SRC.COUNT
lda SRC.hBUFFERS-1,x lda SRC.hBUFFERS-1,x
>SYSCALL SYS.FreeMemA >SYSCALL SYS.FreeMemA
dec SRC.COUNT dec SRC.COUNT
bne CS.QUIT bne CS.QUIT
.1 lda hLIBSTR .1 lda hLIBSTR
>SYSCALL SYS.UnloadLibA >SYSCALL SYS.UnloadLibA
clc clc
rts rts
*--------------------------------------- *---------------------------------------
LOAD.ASM.T LOAD.ASM.T
clc clc
rts rts
*--------------------------------------- *---------------------------------------
SYM.ADD SYM.ADD
clc clc
rts rts
*--------------------------------------- *---------------------------------------
SYM.LOOKUP SYM.LOOKUP
clc clc
rts rts
*--------------------------------------- *---------------------------------------
SYM.BLOCK.ALLOC ldx #0 SYM.BLOCK.ALLOC ldx #0
.1 lda SYM.BLOCKS,x .1 lda SYM.BLOCKS,x
beq .2 beq .2
inx inx
cpx #SYM.BLOCK.MAX cpx #SYM.BLOCK.MAX
bne .1 bne .1
lda #ERR.SYM.TOO.LARGE lda #ERR.SYM.TOO.LARGE
sec Out of block error sec Out of block error
rts rts
.2 phx Save next free block .2 phx Save next free block
>LDYA SYM.BLOCK.SIZE >LDYA SYM.BLOCK.SIZE
>SYSCALL SYS.GetMem >SYSCALL SYS.GetMem
bcs .9 bcs .9
txa txa
plx plx
sta SYM.BLOCKS,x sta SYM.BLOCKS,x
clc clc
.9 rts .9 rts
*--------------------------------------- *---------------------------------------
CS.END CS.END
T.DIRECTIVES .AS "AS" T.DIRECTIVES .AS "AS"
.AS "AT" .AS "AT"
.AS "AZ" .AS "AZ"
.AS "BS" .AS "BS"
.AS "DA" .AS "DA"
.AS "DO" .AS "DO"
.AS "DU" .AS "DU"
.AS "ED" .AS "ED"
.AS "EL" .AS "EL"
.AS "EN" .AS "EN"
.AS "EP" .AS "EP"
.AS "EQ" .AS "EQ"
.AS "FI" .AS "FI"
.AS "HS" .AS "HS"
.AS "IN" .AS "IN"
.AS "LI" .AS "LI"
.AS "MA" .AS "MA"
.AS "OP" .AS "OP"
.AS "OR" .AS "OR"
.AS "PG" .AS "PG"
.AS "PH" .AS "PH"
.AS "TA" .AS "TA"
.AS "TF" .AS "TF"
.AS "TI" .AS "TI"
.AS "US" .AS "US"
*--------------------------------------- *---------------------------------------
LIBSTR >PSTRING "libstr.o" LIBSTR >PSTRING "libstr.o"
MSG.HELP1 >CSTRING "A2OS-Macro Assembler (S-C MASM 2.0 Based)\n" MSG.HELP1 >CSTRING "A2OS-Macro Assembler (S-C MASM 2.0 Based)\n"
MSG.HELP2 >CSTRING "Usage : ASM <src file> [type TXT ($04) or S-C/BAS ($FA)]\n" MSG.HELP2 >CSTRING "Usage : ASM <src file> [type TXT ($04) or S-C/BAS ($FA)]\n"
MSG.SRCLINE >CSTRING "%05D-%s\n" MSG.SRCLINE >CSTRING "%05D-%s\n"
*--------------------------------------- *---------------------------------------
DS.START DS.START
*--------------------------------------- *---------------------------------------
hLIBSTR .BS 1 hLIBSTR .BS 1
bSTOP .BS 1 bSTOP .BS 1
bCANCEL .BS 1 bCANCEL .BS 1
*--------------------------------------- *---------------------------------------
VAR.INIT VAR.INIT
SRC.COUNT .BS 1 SRC.COUNT .BS 1
SRC.hFILENAMES .BS 8 Store full path to opened SRC files SRC.hFILENAMES .BS 8 Store full path to opened SRC files
SRC.hFILETYPES .BS 8 Store file type of opened SRC files SRC.hFILETYPES .BS 8 Store file type of opened SRC files
SRC.hREFNUMS .BS 8 Store ref_num of opened files (Main, .INs & .INBs) SRC.hREFNUMS .BS 8 Store ref_num of opened files (Main, .INs & .INBs)
SRC.hBUFFERS .BS 8 Store hMem to allocated buffers SRC.hBUFFERS .BS 8 Store hMem to allocated buffers
SRC.LINENUM .BS 2 SRC.LINENUM .BS 2
ASM.T.hFILENAME .BS 1 ASM.T.hFILENAME .BS 1
ASM.T.hFILE .BS 1 handle to loaded ASM.T.xxxxx ASM.T.hFILE .BS 1 handle to loaded ASM.T.xxxxx
DST.hFILENAME .BS 1 DST.hFILENAME .BS 1
DST.hFILE .BS 1 DST.hFILE .BS 1
DST.hBUFFER .BS 1 DST.hBUFFER .BS 1
VAR.INIT.END VAR.INIT.END
*--------------------------------------- *---------------------------------------
ASM.T.FILENAME .BS 65 PStr ProDOS Max Path Len +1 ASM.T.FILENAME .BS 65 PStr ProDOS Max Path Len +1
TARGET.FILENAME .BS 65 PStr ProDOS Max Path Len +1 TARGET.FILENAME .BS 65 PStr ProDOS Max Path Len +1
TARGET.FILETYPE .BS 1 TARGET.FILETYPE .BS 1
READ.BUFFER .BS 256 READ.BUFFER .BS 256
*--------------------------------------- *---------------------------------------
PASS .BS 1 PASS .BS 1
ORIGIN .BS 4 32Bits Origin ORIGIN .BS 4 32Bits Origin
SYM.BLOCKS .BS SYM.BLOCK.MAX SYM.BLOCKS .BS SYM.BLOCK.MAX
DS.END DS.END
*--------------------------------------- *---------------------------------------
MAN MAN
SAVE /DATA/A2OS/BIN/ASM.S SAVE BIN/ASM.S
ASM ASM

View File

@ -1,264 +1,264 @@
PR#3 PR#3
PREFIX /DATA/A2OS PREFIX /DATA/A2OS
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.TF /DATA/A2OS/BIN/ASM.T.6502 .TF /DATA/A2OS/BIN/ASM.T.6502
.OR $2000 .OR $2000
*--------------------------------------- *---------------------------------------
.MA AMS AMSID,"Syntax",0,"Operand",0,"Range",0 .MA AMS AMSID,"Syntax",0,"Operand",0,"Range",0
.DA #]1 .DA #]1
.AS ]2 .AS ]2
.DA #0 .DA #0
.AS ]3 .AS ]3
.DA #0 .DA #0
.AS ]4 .AS ]4
.DA #0 .DA #0
.EM .EM
*--------------------------------------- *---------------------------------------
.DA T.ADDR.MODES.SYNTAX .DA T.ADDR.MODES.SYNTAX
.DA T.OPCODES .DA T.OPCODES
*--------------------------------------- *---------------------------------------
T.ADDR.MODES.SYNTAX >AMS 1,"","","" Implicit T.ADDR.MODES.SYNTAX >AMS 1,"","","" Implicit
>AMS 2,"#$1",$1","" Immediate >AMS 2,"#$1",$1","" Immediate
>AMS 3,"$2","$1=$2-@+1","-127,128" rel >AMS 3,"$2","$1=$2-@+1","-127,128" rel
>AMS 4,"$1","$1","" zp >AMS 4,"$1","$1","" zp
>AMS 5,"$1,X","$1","" zp,x >AMS 5,"$1,X","$1","" zp,x
>AMS 6,"$2","$2","" abs >AMS 6,"$2","$2","" abs
>AMS 7,"$2,X","$2","" abs,x >AMS 7,"$2,X","$2","" abs,x
>AMS 8,"$2,Y","$2","" abs,y >AMS 8,"$2,Y","$2","" abs,y
>AMS 9,"($2)","$2","" (abs) >AMS 9,"($2)","$2","" (abs)
>AMS 10,"($1)","$1","" (zp) >AMS 10,"($1)","$1","" (zp)
>AMS 11,"($1,X)","$1","" (zp,x) >AMS 11,"($1,X)","$1","" (zp,x)
>AMS 12,"($1),Y","$1","" (zp),x >AMS 12,"($1),Y","$1","" (zp),x
.HS 0 .HS 0
*--------------------------------------- *---------------------------------------
T.OPCODES .AS "ADC" T.OPCODES .AS "ADC"
.HS 0 .HS 0
.HS 2,$69,4,$65,5,$75,6,$6D,7,$7D,8,$79,11,$61,12,$71 .HS 2,$69,4,$65,5,$75,6,$6D,7,$7D,8,$79,11,$61,12,$71
.HS 0 .HS 0
.AS "AND" .AS "AND"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "ASL" .AS "ASL"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "BCC" .AS "BCC"
.HS 0 .HS 0
.HS 3,$90 .HS 3,$90
.HS 0 .HS 0
.AS "BCS" .AS "BCS"
.HS 0 .HS 0
.HS 3,$B0 .HS 3,$B0
.HS 0 .HS 0
.AS "BEQ" .AS "BEQ"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "BIT" .AS "BIT"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "BMI" .AS "BMI"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "BNE" .AS "BNE"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "BPL" .AS "BPL"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "BRK" .AS "BRK"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "BVC" .AS "BVC"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "BVS" .AS "BVS"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "CLC" .AS "CLC"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "CLD" .AS "CLD"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "CLI" .AS "CLI"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "CLV" .AS "CLV"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "CMP" .AS "CMP"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "CPX" .AS "CPX"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "CPY" .AS "CPY"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "DEC" .AS "DEC"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "DEX" .AS "DEX"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "DEY" .AS "DEY"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "EOR" .AS "EOR"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "INC" .AS "INC"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "INX" .AS "INX"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "INY" .AS "INY"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "JMP" .AS "JMP"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "JSR" .AS "JSR"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "LDA" .AS "LDA"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "LDX" .AS "LDX"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "LDY" .AS "LDY"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "LSR" .AS "LSR"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "NOP" .AS "NOP"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "NOP" .AS "NOP"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "ORA" .AS "ORA"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "PHA" .AS "PHA"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "PHP" .AS "PHP"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "PLA" .AS "PLA"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "ROL" .AS "ROL"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "ROR" .AS "ROR"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "RTI" .AS "RTI"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "RTS" .AS "RTS"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "SBC" .AS "SBC"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "SEC" .AS "SEC"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "SED" .AS "SED"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "SEI" .AS "SEI"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "STA" .AS "STA"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "STX" .AS "STX"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "STY" .AS "STY"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "TAX" .AS "TAX"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "TAY" .AS "TAY"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "TSX" .AS "TSX"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "TXA" .AS "TXA"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "TXS" .AS "TXS"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
.AS "TYA" .AS "TYA"
.HS 0 .HS 0
.HS .HS
.HS 0 .HS 0
*--------------------------------------- *---------------------------------------
.HS 0 .HS 0
MAN MAN
SAVE /DATA/A2OS/BIN/ASM.T.6502.S SAVE /DATA/A2OS/BIN/ASM.T.6502.S
ASM ASM

View File

@ -1,100 +1,100 @@
PR#3 PR#3
NEW NEW
AUTO 6 AUTO 6
.TF /DATA/A2OS/BIN/ASM.T.65C02 .TF /DATA/A2OS/BIN/ASM.T.65C02
.OR $2000 .OR $2000
*--------------------------------------- *---------------------------------------
.MA AMS AMSID,"Syntax",0,"Operand",0,"Rule",0 .MA AMS AMSID,"Syntax",0,"Operand",0,"Rule",0
.DA #]1 .DA #]1
.AS ]2 .AS ]2
.DA #0 .DA #0
.AS ]3 .AS ]3
.DA #0 .DA #0
.AS ]4 .AS ]4
.DA #0 .DA #0
.EM .EM
*--------------------------------------- *---------------------------------------
T.ADDR.MODES.SYNTAX >AMS 1,"","","" Implicit T.ADDR.MODES.SYNTAX >AMS 1,"","","" Implicit
>AMS 2,"#$1",$1","" Immediate >AMS 2,"#$1",$1","" Immediate
>AMS 3,"$2","$1=$2-@+1","-127<$1<128" rel >AMS 3,"$2","$1=$2-@+1","-127<$1<128" rel
>AMS 4,"$1","$1","" zp >AMS 4,"$1","$1","" zp
>AMS 5,"$1,X","$1","" zp,x >AMS 5,"$1,X","$1","" zp,x
>AMS 6,"$2","$2","" abs >AMS 6,"$2","$2","" abs
>AMS 7,"$2,X","$2","" abs,x >AMS 7,"$2,X","$2","" abs,x
>AMS 8,"$2,Y","$2","" abs,y >AMS 8,"$2,Y","$2","" abs,y
>AMS 9,"($2)","$2","" (abs) >AMS 9,"($2)","$2","" (abs)
>AMS 10,"($1)","$1","" (zp) >AMS 10,"($1)","$1","" (zp)
>AMS 11,"($1,X)","$1","" (zp,x) >AMS 11,"($1,X)","$1","" (zp,x)
>AMS 12,"($1),Y","$1","" (zp),x >AMS 12,"($1),Y","$1","" (zp),x
T.OPCODES .AS "ADC" T.OPCODES .AS "ADC"
.HS 0 .HS 0
.HS 2,$69,4,$65,5,$75,6,$6D,7,$7D,8,$79,11,$61,12,$71 .HS 2,$69,4,$65,5,$75,6,$6D,7,$7D,8,$79,11,$61,12,$71
.HS 0 .HS 0
.AS "AND" .AS "AND"
.AS "ASL" .AS "ASL"
.AS "BCC" .AS "BCC"
.HS 0 .HS 0
.HS 3,$90 .HS 3,$90
.HS 0 .HS 0
.AS "BCS" .AS "BCS"
.HS 0 .HS 0
.HS 3,$B0 .HS 3,$B0
.HS 0 .HS 0
.AS "BEQ" .AS "BEQ"
.AS "BIT" .AS "BIT"
.AS "BMI" .AS "BMI"
.AS "BNE" .AS "BNE"
.AS "BPL" .AS "BPL"
.AS "BRK" .AS "BRK"
.AS "BVC" .AS "BVC"
.AS "BVS" .AS "BVS"
.AS "CLC" .AS "CLC"
.AS "CLD" .AS "CLD"
.AS "CLI" .AS "CLI"
.AS "CLV" .AS "CLV"
.AS "CMP" .AS "CMP"
.AS "CPX" .AS "CPX"
.AS "CPY" .AS "CPY"
.AS "DEC" .AS "DEC"
.AS "DEX" .AS "DEX"
.AS "DEY" .AS "DEY"
.AS "EOR" .AS "EOR"
.AS "INC" .AS "INC"
.AS "INX" .AS "INX"
.AS "INY" .AS "INY"
.AS "JMP" .AS "JMP"
.AS "JSR" .AS "JSR"
.AS "LDA" .AS "LDA"
.AS "LDX" .AS "LDX"
.AS "LDY" .AS "LDY"
.AS "LSR" .AS "LSR"
.AS "NOP" .AS "NOP"
.AS "NOP" .AS "NOP"
.AS "ORA" .AS "ORA"
.AS "PHA" .AS "PHA"
.AS "PHP" .AS "PHP"
.AS "PLA" .AS "PLA"
.AS "ROL" .AS "ROL"
.AS "ROR" .AS "ROR"
.AS "RTI" .AS "RTI"
.AS "RTS" .AS "RTS"
.AS "SBC" .AS "SBC"
.AS "SEC" .AS "SEC"
.AS "SED" .AS "SED"
.AS "SEI" .AS "SEI"
.AS "STA" .AS "STA"
.AS "STX" .AS "STX"
.AS "STY" .AS "STY"
.AS "TAX" .AS "TAX"
.AS "TAY" .AS "TAY"
.AS "TSX" .AS "TSX"
.AS "TXA" .AS "TXA"
.AS "TXS" .AS "TXS"
.AS "TYA" .AS "TYA"
*--------------------------------------- *---------------------------------------
.HS 0 .HS 0
MAN MAN
SAVE /DATA/A2OS/BIN/ASM.T.65C02.S SAVE /DATA/A2OS/BIN/ASM.T.65C02.S
ASM ASM

View File

@ -1,36 +1,36 @@
PR#3 PR#3
NEW NEW
AUTO 6 AUTO 6
.TF /DATA/A2OS/BIN/ASM.T.Z80 .TF /DATA/A2OS/BIN/ASM.T.Z80
.OR $2000 .OR $2000
*--------------------------------------- *---------------------------------------
.MA AMS AMSID,"Syntax",0,"Operand",0,"Rule",0 .MA AMS AMSID,"Syntax",0,"Operand",0,"Rule",0
.DA #]1 .DA #]1
.AS ]2 .AS ]2
.DA #0 .DA #0
.AS ]3 .AS ]3
.DA #0 .DA #0
.AS ]4 .AS ]4
.DA #0 .DA #0
.EM .EM
.DA T.ADDR.MODES.SYNTAX .DA T.ADDR.MODES.SYNTAX
.DA T.OPCODES .DA T.OPCODES
*--------------------------------------- *---------------------------------------
T.ADDR.MODES.SYNTAX >AMS 1,"","","" Implicit T.ADDR.MODES.SYNTAX >AMS 1,"","","" Implicit
>AMS 2,"#$1",$1","" Immediate8 >AMS 2,"#$1",$1","" Immediate8
>AMS 3,"#$2",$2","" Immediate16 >AMS 3,"#$2",$2","" Immediate16
>AMS 4, Modified zp >AMS 4, Modified zp
>AMS 3,"$2","$1=$2-@+1","-127<$1<128" rel >AMS 3,"$2","$1=$2-@+1","-127<$1<128" rel
>AMS 6,"$2","$2","" abs >AMS 6,"$2","$2","" abs
*--------------------------------------- *---------------------------------------
T.OPCODES .AS "ADC" T.OPCODES .AS "ADC"
.HS 0 .HS 0
.HS 2,$69,4,$65,5,$75,6,$6D,7,$7D,8,$79,11,$61,12,$71 .HS 2,$69,4,$65,5,$75,6,$6D,7,$7D,8,$79,11,$61,12,$71
.HS 0 .HS 0
*--------------------------------------- *---------------------------------------
.HS 0 .HS 0
MAN MAN
SAVE /DATA/A2OS/BIN/ASM.T.Z80.S SAVE /DATA/A2OS/BIN/ASM.T.Z80.S
ASM ASM

View File

@ -1,401 +1,401 @@
PR#3 PR#3
PREFIX /DATA/A2OSX PREFIX /DATA/A2OSX
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF BIN/CHTYP .TF BIN/CHTYP
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/LIBSTR.I .INB INC/LIBSTR.I
*-------------------------------------- *--------------------------------------
* Main entry point * Main entry point
*-------------------------------------- *--------------------------------------
* Code signature and INIT table * Code signature and INIT table
*-------------------------------------- *--------------------------------------
* CLD $D8 * CLD $D8
* JMP (*,x) $7C * JMP (*,x) $7C
* #JMPTABLE * #JMPTABLE
* /JMPTABLE * /JMPTABLE
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp (.1,x)
.1 .DA CS.INIT .1 .DA CS.INIT
.DA CS.RUN .DA CS.RUN
.DA CS.DOEVENT .DA CS.DOEVENT
.DA CS.QUIT .DA CS.QUIT
L.LIB.LIBSTR .DA LIB.LIBSTR L.LIB.LIBSTR .DA LIB.LIBSTR
L.MSG.VOL.HEADER .DA MSG.VOL.HEADER L.MSG.VOL.HEADER .DA MSG.VOL.HEADER
L.MSG.DIR.HEADER .DA MSG.DIR.HEADER L.MSG.DIR.HEADER .DA MSG.DIR.HEADER
L.MSG.VOL .DA MSG.VOL L.MSG.VOL .DA MSG.VOL
L.MSG.DIR .DA MSG.DIR L.MSG.DIR .DA MSG.DIR
L.MSG.FILE .DA MSG.FILE L.MSG.FILE .DA MSG.FILE
L.MSG.VOL.END .DA MSG.VOL.END L.MSG.VOL.END .DA MSG.VOL.END
L.MSG.DIR.END .DA MSG.DIR.END L.MSG.DIR.END .DA MSG.DIR.END
L.PRODOS.FT.TXT .DA PRODOS.FT.TXT L.PRODOS.FT.TXT .DA PRODOS.FT.TXT
.DA 0 .DA 0
.DA CS.END-CS.START Code Length To Relocate .DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate .DA DS.END-DS.START Data Segment to Allocate
*-------------------------------------- *--------------------------------------
CS.INIT >LIBLOADP L.LIB.LIBSTR CS.INIT >LIBLOADP L.LIB.LIBSTR
sta hLIBSTR sta hLIBSTR
stz hDIRPATH stz hDIRPATH
stz hS.LISTDIR stz hS.LISTDIR
stz hVOLHEADER stz hVOLHEADER
stz hDIRHEADER stz hDIRHEADER
stz bSTOP stz bSTOP
stz bCANCEL stz bCANCEL
ldy #S.PS.hARGS ldy #S.PS.hARGS
lda (pPsContext),y lda (pPsContext),y
beq .99 no arg, exit with err=0 beq .99 no arg, exit with err=0
>PUSHA >PUSHA
>PUSHBI $20 Push SEP=' ' >PUSHBI $20 Push SEP=' '
>PUSHBI 1 Push 1 for getting First arg >PUSHBI 1 Push 1 for getting First arg
>SYSCALL SYS.PStrGetTkn >SYSCALL SYS.PStrGetTkn
bcs .99 error, exit with error code bcs .99 error, exit with error code
sta hArg sta hArg
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
lda (ZPQuickPtr1) lda (ZPQuickPtr1)
beq .99 beq .99
ldy #1 ldy #1
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
cmp #'$' is it a TYPE ? cmp #'$' is it a TYPE ?
bne .11 bne .11
.11 cmp #'/' .11 cmp #'/'
bne .10 bne .10
ldy #S.PS.hARGS ldy #S.PS.hARGS
bra .2 bra .2
.10 ldy #S.PS.hARGS .10 ldy #S.PS.hARGS
lda (pPsContext),y lda (pPsContext),y
>PUSHA >PUSHA
ldy #S.PS.hPREFIX ldy #S.PS.hPREFIX
lda (pPsContext),y lda (pPsContext),y
>PUSHA >PUSHA
>SYSCALL SYS.PStrCat >SYSCALL SYS.PStrCat
sta hDIRPATH sta hDIRPATH
bra .3 bra .3
.1 ldy #S.PS.hPREFIX .1 ldy #S.PS.hPREFIX
.2 lda (pPsContext),y .2 lda (pPsContext),y
.3 >SYSCALL SYS.ListDirInitA .3 >SYSCALL SYS.ListDirInitA
bcs .98 bcs .98
sta hS.LISTDIR sta hS.LISTDIR
lda (pPsContext) lda (pPsContext)
ora #S.PS.F.EVENT Now accept events ora #S.PS.F.EVENT Now accept events
sta (pPsContext) sta (pPsContext)
clc clc
rts rts
.98 pha .98 pha
lda hLIBSTR lda hLIBSTR
>SYSCALL SYS.FreeMemA >SYSCALL SYS.FreeMemA
pla pla
.99 sec .99 sec
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN lda bCANCEL CS.RUN lda bCANCEL
beq .1 beq .1
sec sec
rts rts
.1 lda bSTOP .1 lda bSTOP
beq .2 beq .2
clc clc
rts rts
.2 lda hS.LISTDIR .2 lda hS.LISTDIR
>SYSCALL SYS.ListDirNextA >SYSCALL SYS.ListDirNextA
bcc .3 bcc .3
jmp Push.Footer jmp Push.Footer
.3 pha .3 pha
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
lda (ZPQuickPtr1) lda (ZPQuickPtr1)
pha pha
and #$0F and #$0F
sta (ZPQuickPtr1) Adjust Filename len sta (ZPQuickPtr1) Adjust Filename len
pla pla
and #$F0 and #$F0
cmp #$F0 Volume ($F) HEADER ? cmp #$F0 Volume ($F) HEADER ?
bne .31 bne .31
pla pla
sta hVOLHEADER sta hVOLHEADER
>PUSHW ZPQuickPtr1 >PUSHW ZPQuickPtr1
>PUSHW L.MSG.VOL.HEADER >PUSHW L.MSG.VOL.HEADER
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
clc clc
rts rts
.31 cmp #$E0 Dir ($E) HEADER ? .31 cmp #$E0 Dir ($E) HEADER ?
bne .4 bne .4
pla pla
sta hDIRHEADER sta hDIRHEADER
>PUSHW ZPQuickPtr1 >PUSHW ZPQuickPtr1
>PUSHW L.MSG.DIR.HEADER >PUSHW L.MSG.DIR.HEADER
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
clc clc
rts rts
.4 cmp #$D0 Directory ? .4 cmp #$D0 Directory ?
bne .5 bne .5
jsr Push.Dates jsr Push.Dates
jsr Push.Dir jsr Push.Dir
>PUSHW L.MSG.DIR >PUSHW L.MSG.DIR
bra .8 bra .8
.5 cmp #$C0 Volume Name ? .5 cmp #$C0 Volume Name ?
bne .6 bne .6
>PUSHW ZPQuickPtr1 >PUSHW ZPQuickPtr1
>PUSHW L.MSG.VOL >PUSHW L.MSG.VOL
bra .8 bra .8
.6 jsr Push.Dates File .6 jsr Push.Dates File
jsr Push.File jsr Push.File
>PUSHW L.MSG.FILE >PUSHW L.MSG.FILE
.8 >LIBCALL hLIBSTR,LIBSTR.PRINTF .8 >LIBCALL hLIBSTR,LIBSTR.PRINTF
.9 pla .9 pla
>SYSCALL SYS.FreeMemA >SYSCALL SYS.FreeMemA
clc clc
rts rts
*-------------------------------------- *--------------------------------------
Push.Dir ldy #$1E get access mask Push.Dir ldy #$1E get access mask
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
>PUSHW ZPQuickPtr1 >PUSHW ZPQuickPtr1
rts rts
*-------------------------------------- *--------------------------------------
Push.File >PUSHBI 0 4th byte of file len=0 Push.File >PUSHBI 0 4th byte of file len=0
ldy #$17 get file len (3 bytes) ldy #$17 get file len (3 bytes)
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
dey dey
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
dey dey
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
ldy #$1E get access mask ldy #$1E get access mask
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
ldy #$20 get aux type ldy #$20 get aux type
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
dey dey
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
ldy #$10 get filetype ldy #$10 get filetype
lda L.PRODOS.FT.TXT lda L.PRODOS.FT.TXT
sta ZPQuickPtr2 sta ZPQuickPtr2
lda L.PRODOS.FT.TXT+1 lda L.PRODOS.FT.TXT+1
sta ZPQuickPtr2+1 sta ZPQuickPtr2+1
ldx #0 ldx #0
.1 lda (ZPQuickPtr1),y .1 lda (ZPQuickPtr1),y
cmp PRODOS.FT.ID,x cmp PRODOS.FT.ID,x
beq .3 beq .3
lda ZPQuickPtr2 lda ZPQuickPtr2
clc clc
adc #4 adc #4
sta ZPQuickPtr2 sta ZPQuickPtr2
bcc .2 bcc .2
inc ZPQuickPtr2+1 inc ZPQuickPtr2+1
.2 inx .2 inx
cpx PRODOS.FT.COUNT cpx PRODOS.FT.COUNT
bne .1 bne .1
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
lsr lsr
lsr lsr
lsr lsr
lsr lsr
tax tax
lda HEXDIGIT,x lda HEXDIGIT,x
sta PRODOS.FT.DFLT+2 sta PRODOS.FT.DFLT+2
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
and #$0F and #$0F
tax tax
lda HEXDIGIT,x lda HEXDIGIT,x
sta PRODOS.FT.DFLT+3 sta PRODOS.FT.DFLT+3
.3 >PUSHW ZPQuickPtr2 .3 >PUSHW ZPQuickPtr2
>PUSHW ZPQuickPtr1 >PUSHW ZPQuickPtr1
>LIBCALL hLIBSTR,LIBSTR.LCASEP >LIBCALL hLIBSTR,LIBSTR.LCASEP
>PUSHW ZPQuickPtr1 >PUSHW ZPQuickPtr1
rts rts
*-------------------------------------- *--------------------------------------
Push.Dates ldy #$24 get modification time Push.Dates ldy #$24 get modification time
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
dey dey
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
ldy #$22 ldy #$22
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
dey dey
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
ldy #$1B get creation time ldy #$1B get creation time
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
dey dey
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
ldy #$19 ldy #$19
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
dey dey
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
rts rts
*-------------------------------------- *--------------------------------------
Push.Footer lda hVOLHEADER Push.Footer lda hVOLHEADER
beq .20 beq .20
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
ldy #22 file_count ldy #22 file_count
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
dey dey
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
>PUSHW L.MSG.VOL.END >PUSHW L.MSG.VOL.END
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
.20 lda hDIRHEADER .20 lda hDIRHEADER
beq .21 beq .21
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
ldy #22 file_count ldy #22 file_count
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
dey dey
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
>PUSHW L.MSG.DIR.END >PUSHW L.MSG.DIR.END
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
.21 sec .21 sec
rts rts
*-------------------------------------- *--------------------------------------
CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device? CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device?
lda (pEvent),y lda (pEvent),y
ldy #S.PS.hINDEV ldy #S.PS.hINDEV
cmp (pPsContext),y cmp (pPsContext),y
bne .9 bne .9
lda (pEvent) lda (pEvent)
and #S.EVT.F.KEY is it a KEY event? and #S.EVT.F.KEY is it a KEY event?
beq .9 beq .9
ldy #S.EVT.DATAHI is it an O or SAPPLE key ? ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
lda (pEvent),y lda (pEvent),y
bne .9 bne .9
ldy #S.EVT.DATALO ldy #S.EVT.DATALO
lda (pEvent),y lda (pEvent),y
cmp #$03 Ctrl-C cmp #$03 Ctrl-C
bne .1 bne .1
lda #$FF lda #$FF
sta bCANCEL sta bCANCEL
bra .8 bra .8
.1 cmp #$13 Ctrl-S .1 cmp #$13 Ctrl-S
bne .8 bne .8
lda bSTOP lda bSTOP
eor #$FF eor #$FF
sta bSTOP sta bSTOP
.8 >SYSCALL SYS.DestroyEvent .8 >SYSCALL SYS.DestroyEvent
clc clc
rts rts
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
CS.QUIT lda hVOLHEADER CS.QUIT lda hVOLHEADER
beq .1 beq .1
>SYSCALL SYS.FreeMemA >SYSCALL SYS.FreeMemA
.1 lda hDIRHEADER .1 lda hDIRHEADER
beq .2 beq .2
>SYSCALL SYS.FreeMemA >SYSCALL SYS.FreeMemA
.2 lda hS.LISTDIR .2 lda hS.LISTDIR
>SYSCALL SYS.ListDirCloseA >SYSCALL SYS.ListDirCloseA
lda hDIRPATH lda hDIRPATH
beq .3 beq .3
>SYSCALL SYS.FreeMemA >SYSCALL SYS.FreeMemA
.3 lda hLIBSTR .3 lda hLIBSTR
>SYSCALL SYS.UnloadLibA >SYSCALL SYS.UnloadLibA
clc clc
rts rts
*-------------------------------------- *--------------------------------------
CS.END CS.END
LIB.LIBSTR >PSTRING "libstr.o" LIB.LIBSTR >PSTRING "libstr.o"
MSG.VOL.HEADER >CSTRING "Volume Listing Of %S\n" MSG.VOL.HEADER >CSTRING "Volume Listing Of %S\n"
MSG.DIR.HEADER >CSTRING "Directory Listing Of %S\n" MSG.DIR.HEADER >CSTRING "Directory Listing Of %S\n"
MSG.VOL >CSTRING "/%S\n" MSG.VOL >CSTRING "/%S\n"
MSG.DIR >CSTRING "/%15S <dir> %a %T %t %T %t\n" MSG.DIR >CSTRING "/%15S <dir> %a %T %t %T %t\n"
MSG.FILE >CSTRING "%15S %S $%H %a %8L %T %t %T %t\n" MSG.FILE >CSTRING "%15S %S $%H %a %8L %T %t %T %t\n"
MSG.VOL.END >CSTRING "%D Files In Volume.\n" MSG.VOL.END >CSTRING "%D Files In Volume.\n"
MSG.DIR.END >CSTRING "%D Files In Directory.\n" MSG.DIR.END >CSTRING "%D Files In Directory.\n"
*-------------------------------------- *--------------------------------------
PRODOS.FT.COUNT .HS 07 PRODOS.FT.COUNT .HS 07
PRODOS.FT.ID .HS 0406FAFCFDE2FF PRODOS.FT.ID .HS 0406FAFCFDE2FF
PRODOS.FT.TXT PRODOS.FT.TXT
T04 >PSTRING "TXT" T04 >PSTRING "TXT"
T06 >PSTRING "BIN" T06 >PSTRING "BIN"
TFA >PSTRING "S-C" TFA >PSTRING "S-C"
TFC >PSTRING "BAS" TFC >PSTRING "BAS"
TFD >PSTRING "VAR" TFD >PSTRING "VAR"
TE2 >PSTRING "ATK" TE2 >PSTRING "ATK"
TFF >PSTRING "SYS" TFF >PSTRING "SYS"
PRODOS.FT.DFLT >PSTRING "$ " PRODOS.FT.DFLT >PSTRING "$ "
HEXDIGIT .AS '0123456789ABCDEF' HEXDIGIT .AS '0123456789ABCDEF'
*-------------------------------------- *--------------------------------------
DS.START DS.START
hLIBSTR .BS 1 hLIBSTR .BS 1
hDIRPATH .BS 1 hDIRPATH .BS 1
hS.LISTDIR .BS 1 hS.LISTDIR .BS 1
hVOLHEADER .BS 1 hVOLHEADER .BS 1
hDIRHEADER .BS 1 hDIRHEADER .BS 1
bSTOP .BS 1 bSTOP .BS 1
bCANCEL .BS 1 bCANCEL .BS 1
DS.END DS.END
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE BIN/CHTYP.S SAVE BIN/CHTYP.S
ASM ASM

0
BIN/CP.S.txt Normal file
View File

View File

@ -1,183 +1,183 @@
PR#3 PR#3
PREFIX /DATA/A2OSX PREFIX /DATA/A2OSX
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST ON .LIST ON
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF BIN/DNS .TF BIN/DNS
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/KERNEL.I .INB INC/KERNEL.I
.INB INC/LIBSTR.I .INB INC/LIBSTR.I
.INB INC/LIBTCPIP.I .INB INC/LIBTCPIP.I
*-------------------------------------- *--------------------------------------
ZPPTR1 .EQ ZPBIN ZPPTR1 .EQ ZPBIN
*-------------------------------------- *--------------------------------------
* Main entry point * Main entry point
*-------------------------------------- *--------------------------------------
* Code signature and INIT table * Code signature and INIT table
*-------------------------------------- *--------------------------------------
* CLD $D8 * CLD $D8
* JMP (*,x) $7C * JMP (*,x) $7C
* #JMPTABLE * #JMPTABLE
* /JMPTABLE * /JMPTABLE
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp (.1,x)
.1 .DA CS.INIT .1 .DA CS.INIT
.DA CS.RUN .DA CS.RUN
.DA CS.EVENT .DA CS.EVENT
.DA CS.QUIT .DA CS.QUIT
L.LIBSTR .DA LIBSTR L.LIBSTR .DA LIBSTR
L.LIBTCPIP .DA LIBTCPIP L.LIBTCPIP .DA LIBTCPIP
L.SSCANF.IP .DA SSCANF.IP L.SSCANF.IP .DA SSCANF.IP
L.IP .DA IP L.IP .DA IP
L.MSG0 .DA MSG0 L.MSG0 .DA MSG0
L.MSG1 .DA MSG1 L.MSG1 .DA MSG1
.DA 0 .DA 0
.DA CS.END-CS.START Code Length To Relocate .DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate .DA DS.END-DS.START Data Segment to Allocate
*-------------------------------------- *--------------------------------------
CS.INIT stz hHostName CS.INIT stz hHostName
stz hIP stz hIP
>LIBLOADP L.LIBSTR >LIBLOADP L.LIBSTR
sta hLIBSTR sta hLIBSTR
>LIBLOADP L.LIBTCPIP >LIBLOADP L.LIBTCPIP
sta hLIBTCPIP sta hLIBTCPIP
ldy #S.PS.hARGS ldy #S.PS.hARGS
lda (pPsContext),y lda (pPsContext),y
bne CS.INIT.ADD bne CS.INIT.ADD
jmp CS.INIT.DUMP jmp CS.INIT.DUMP
CS.INIT.ADD >PUSHA CS.INIT.ADD >PUSHA
>PUSHBI $20 Push SEP=' ' >PUSHBI $20 Push SEP=' '
>PUSHBI 1 Push 1 for getting hostname >PUSHBI 1 Push 1 for getting hostname
>SYSCALL SYS.PStrGetTkn >SYSCALL SYS.PStrGetTkn
bcs .91 bcs .91
sta hHostName sta hHostName
ldy #S.PS.hARGS ldy #S.PS.hARGS
lda (pPsContext),y lda (pPsContext),y
>PUSHA >PUSHA
>PUSHBI $20 Push SEP=' ' >PUSHBI $20 Push SEP=' '
>PUSHBI 2 Push 2 for getting IP >PUSHBI 2 Push 2 for getting IP
>SYSCALL SYS.PStrGetTkn >SYSCALL SYS.PStrGetTkn
.91 bcs .9 .91 bcs .9
sta hIP sta hIP
>PUSHW L.IP >PUSHW L.IP
>PUSHW L.SSCANF.IP >PUSHW L.SSCANF.IP
lda hIP lda hIP
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>PUSHYA >PUSHYA
>LIBCALL hLIBSTR,LIBSTR.SSCANF >LIBCALL hLIBSTR,LIBSTR.SSCANF
bcs .9 bcs .9
>PUSHWI 1800 default TTL >PUSHWI 1800 default TTL
>PUSHW L.IP >PUSHW L.IP
>PUSHB hHostName >PUSHB hHostName
>LIBCALL hLIBTCPIP,LIBTCPIP.DNS.ADD >LIBCALL hLIBTCPIP,LIBTCPIP.DNS.ADD
bcs .99 bcs .99
lda #0 tell TSKMGR that all done ok, but lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory sec we do not want to stay in memory
rts rts
.9 lda #SYSMGR.ERRSYN .9 lda #SYSMGR.ERRSYN
sec sec
.99 rts .99 rts
CS.INIT.DUMP >LIBCALL hLIBTCPIP,LIBTCPIP.DNS.GETCACHE CS.INIT.DUMP >LIBCALL hLIBTCPIP,LIBTCPIP.DNS.GETCACHE
>STYA ZPPTR1 >STYA ZPPTR1
>PUSHW L.MSG0 >PUSHW L.MSG0
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
ldx #K.DNSCACHE.SIZE ldx #K.DNSCACHE.SIZE
.1 phx .1 phx
lda (ZPPTR1) lda (ZPPTR1)
beq .2 beq .2
ldy #S.DNSCACHE.IP+3 ldy #S.DNSCACHE.IP+3
lda (ZPPTR1),y lda (ZPPTR1),y
>PUSHA >PUSHA
dey dey
lda (ZPPTR1),y lda (ZPPTR1),y
>PUSHA >PUSHA
dey dey
lda (ZPPTR1),y lda (ZPPTR1),y
>PUSHA >PUSHA
dey dey
lda (ZPPTR1),y lda (ZPPTR1),y
>PUSHA >PUSHA
ldy #S.DNSCACHE.TTL ldy #S.DNSCACHE.TTL
lda (ZPPTR1),y lda (ZPPTR1),y
pha pha
iny iny
lda (ZPPTR1),y lda (ZPPTR1),y
ply ply
>PUSHYA >PUSHYA
ldy #S.DNSCACHE.hNAME ldy #S.DNSCACHE.hNAME
lda (ZPPTR1),y lda (ZPPTR1),y
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>PUSHYA >PUSHYA
>PUSHB (ZPPTR1) >PUSHB (ZPPTR1)
>PUSHW L.MSG1 >PUSHW L.MSG1
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
.2 lda ZPPTR1 .2 lda ZPPTR1
clc clc
adc #S.DNSCACHE adc #S.DNSCACHE
sta ZPPTR1 sta ZPPTR1
bcc .3 bcc .3
inc ZPPTR1+1 inc ZPPTR1+1
.3 plx .3 plx
dex dex
bne .1 bne .1
lda #0 tell TSKMGR that all done ok, but lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory sec we do not want to stay in memory
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN CS.RUN
CS.EVENT clc CS.EVENT clc
rts rts
*-------------------------------------- *--------------------------------------
CS.QUIT lda hHostName CS.QUIT lda hHostName
beq .1 beq .1
>SYSCALL SYS.FreeMemA >SYSCALL SYS.FreeMemA
.1 lda hIP .1 lda hIP
beq .2 beq .2
>SYSCALL SYS.FreeMemA >SYSCALL SYS.FreeMemA
.2 lda hLIBTCPIP .2 lda hLIBTCPIP
>SYSCALL SYS.UnloadLibA >SYSCALL SYS.UnloadLibA
lda hLIBSTR lda hLIBSTR
>SYSCALL SYS.UnloadLibA >SYSCALL SYS.UnloadLibA
clc clc
rts rts
*-------------------------------------- *--------------------------------------
CS.END CS.END
LIBSTR >PSTRING "libstr.o" LIBSTR >PSTRING "libstr.o"
LIBTCPIP >PSTRING "libtcpip.o" LIBTCPIP >PSTRING "libtcpip.o"
SSCANF.IP >PSTRING "%d.%d.%d.%d" SSCANF.IP >PSTRING "%d.%d.%d.%d"
MSG0 >CSTRING "STS Hostname TTL IP Address\n" MSG0 >CSTRING "STS Hostname TTL IP Address\n"
MSG1 >CSTRING "$%h %32S %05D %d.%d.%d.%d\n" MSG1 >CSTRING "$%h %32S %05D %d.%d.%d.%d\n"
DS.START DS.START
hLIBSTR .BS 1 hLIBSTR .BS 1
hLIBTCPIP .BS 1 hLIBTCPIP .BS 1
hHostName .BS 1 hHostName .BS 1
hIP .BS 1 hIP .BS 1
IP .BS 4 IP .BS 4
DS.END DS.END
MAN MAN
SAVE BIN/DNS.S SAVE BIN/DNS.S
ASM ASM

0
BIN/FORMAT.S.txt Normal file
View File

0
BIN/HWINFO.S.txt Normal file
View File

View File

@ -1,389 +1,389 @@
PR#3 PR#3
PREFIX /DATA/A2OSX PREFIX /DATA/A2OSX
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF BIN/LS .TF BIN/LS
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/LIBSTR.I .INB INC/LIBSTR.I
*-------------------------------------- *--------------------------------------
* Main entry point * Main entry point
*-------------------------------------- *--------------------------------------
* Code signature and INIT table * Code signature and INIT table
*-------------------------------------- *--------------------------------------
* CLD $D8 * CLD $D8
* JMP (*,x) $7C * JMP (*,x) $7C
* #JMPTABLE * #JMPTABLE
* /JMPTABLE * /JMPTABLE
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp (.1,x)
.1 .DA CS.INIT .1 .DA CS.INIT
.DA CS.RUN .DA CS.RUN
.DA CS.DOEVENT .DA CS.DOEVENT
.DA CS.QUIT .DA CS.QUIT
L.LIB.LIBSTR .DA LIB.LIBSTR L.LIB.LIBSTR .DA LIB.LIBSTR
L.MSG.VOL.HEADER .DA MSG.VOL.HEADER L.MSG.VOL.HEADER .DA MSG.VOL.HEADER
L.MSG.DIR.HEADER .DA MSG.DIR.HEADER L.MSG.DIR.HEADER .DA MSG.DIR.HEADER
L.MSG.VOL .DA MSG.VOL L.MSG.VOL .DA MSG.VOL
L.MSG.DIR .DA MSG.DIR L.MSG.DIR .DA MSG.DIR
L.MSG.FILE .DA MSG.FILE L.MSG.FILE .DA MSG.FILE
L.MSG.VOL.END .DA MSG.VOL.END L.MSG.VOL.END .DA MSG.VOL.END
L.MSG.DIR.END .DA MSG.DIR.END L.MSG.DIR.END .DA MSG.DIR.END
L.PRODOS.FT.TXT .DA PRODOS.FT.TXT L.PRODOS.FT.TXT .DA PRODOS.FT.TXT
.DA 0 .DA 0
.DA CS.END-CS.START Code Length To Relocate .DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate .DA DS.END-DS.START Data Segment to Allocate
*-------------------------------------- *--------------------------------------
CS.INIT >LIBLOADP L.LIB.LIBSTR CS.INIT >LIBLOADP L.LIB.LIBSTR
sta hLIBSTR sta hLIBSTR
stz hDIRPATH stz hDIRPATH
stz hS.LISTDIR stz hS.LISTDIR
stz hVOLHEADER stz hVOLHEADER
stz hDIRHEADER stz hDIRHEADER
stz bSTOP stz bSTOP
stz bCANCEL stz bCANCEL
ldy #S.PS.hARGS ldy #S.PS.hARGS
lda (pPsContext),y lda (pPsContext),y
beq .1 beq .1
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
lda (ZPQuickPtr1) lda (ZPQuickPtr1)
beq .1 beq .1
ldy #1 ldy #1
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
cmp #'/' cmp #'/'
bne .10 bne .10
ldy #S.PS.hARGS ldy #S.PS.hARGS
bra .2 bra .2
.10 ldy #S.PS.hARGS .10 ldy #S.PS.hARGS
lda (pPsContext),y lda (pPsContext),y
>PUSHA >PUSHA
ldy #S.PS.hPREFIX ldy #S.PS.hPREFIX
lda (pPsContext),y lda (pPsContext),y
>PUSHA >PUSHA
>SYSCALL SYS.PStrCat >SYSCALL SYS.PStrCat
sta hDIRPATH sta hDIRPATH
bra .3 bra .3
.1 ldy #S.PS.hPREFIX .1 ldy #S.PS.hPREFIX
.2 lda (pPsContext),y .2 lda (pPsContext),y
.3 >SYSCALL SYS.ListDirInitA .3 >SYSCALL SYS.ListDirInitA
bcs .98 bcs .98
sta hS.LISTDIR sta hS.LISTDIR
lda (pPsContext) lda (pPsContext)
ora #S.PS.F.EVENT Now accept events ora #S.PS.F.EVENT Now accept events
sta (pPsContext) sta (pPsContext)
clc clc
rts rts
.98 pha .98 pha
lda hLIBSTR lda hLIBSTR
>SYSCALL SYS.FreeMemA >SYSCALL SYS.FreeMemA
pla pla
sec sec
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN lda bCANCEL CS.RUN lda bCANCEL
beq .1 beq .1
sec sec
rts rts
.1 lda bSTOP .1 lda bSTOP
beq .2 beq .2
clc clc
rts rts
.2 lda hS.LISTDIR .2 lda hS.LISTDIR
>SYSCALL SYS.ListDirNextA >SYSCALL SYS.ListDirNextA
bcc .3 bcc .3
jmp Push.Footer jmp Push.Footer
.3 pha .3 pha
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
lda (ZPQuickPtr1) lda (ZPQuickPtr1)
pha pha
and #$0F and #$0F
sta (ZPQuickPtr1) Adjust Filename len sta (ZPQuickPtr1) Adjust Filename len
pla pla
and #$F0 and #$F0
cmp #$F0 Volume ($F) HEADER ? cmp #$F0 Volume ($F) HEADER ?
bne .31 bne .31
pla pla
sta hVOLHEADER sta hVOLHEADER
>PUSHW ZPQuickPtr1 >PUSHW ZPQuickPtr1
>PUSHW L.MSG.VOL.HEADER >PUSHW L.MSG.VOL.HEADER
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
clc clc
rts rts
.31 cmp #$E0 Dir ($E) HEADER ? .31 cmp #$E0 Dir ($E) HEADER ?
bne .4 bne .4
pla pla
sta hDIRHEADER sta hDIRHEADER
>PUSHW ZPQuickPtr1 >PUSHW ZPQuickPtr1
>PUSHW L.MSG.DIR.HEADER >PUSHW L.MSG.DIR.HEADER
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
clc clc
rts rts
.4 cmp #$D0 Directory ? .4 cmp #$D0 Directory ?
bne .5 bne .5
jsr Push.Dates jsr Push.Dates
jsr Push.Dir jsr Push.Dir
>PUSHW L.MSG.DIR >PUSHW L.MSG.DIR
bra .8 bra .8
.5 cmp #$C0 Volume Name ? .5 cmp #$C0 Volume Name ?
bne .6 bne .6
>PUSHW ZPQuickPtr1 >PUSHW ZPQuickPtr1
>PUSHW L.MSG.VOL >PUSHW L.MSG.VOL
bra .8 bra .8
.6 jsr Push.Dates File .6 jsr Push.Dates File
jsr Push.File jsr Push.File
>PUSHW L.MSG.FILE >PUSHW L.MSG.FILE
.8 >LIBCALL hLIBSTR,LIBSTR.PRINTF .8 >LIBCALL hLIBSTR,LIBSTR.PRINTF
.9 pla .9 pla
>SYSCALL SYS.FreeMemA >SYSCALL SYS.FreeMemA
clc clc
rts rts
*-------------------------------------- *--------------------------------------
Push.Dir ldy #$1E get access mask Push.Dir ldy #$1E get access mask
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
>PUSHW ZPQuickPtr1 >PUSHW ZPQuickPtr1
rts rts
*-------------------------------------- *--------------------------------------
Push.File >PUSHBI 0 4th byte of file len=0 Push.File >PUSHBI 0 4th byte of file len=0
ldy #$17 get file len (3 bytes) ldy #$17 get file len (3 bytes)
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
dey dey
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
dey dey
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
ldy #$1E get access mask ldy #$1E get access mask
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
ldy #$20 get aux type ldy #$20 get aux type
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
dey dey
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
ldy #$10 get filetype ldy #$10 get filetype
lda L.PRODOS.FT.TXT lda L.PRODOS.FT.TXT
sta ZPQuickPtr2 sta ZPQuickPtr2
lda L.PRODOS.FT.TXT+1 lda L.PRODOS.FT.TXT+1
sta ZPQuickPtr2+1 sta ZPQuickPtr2+1
ldx #0 ldx #0
.1 lda (ZPQuickPtr1),y .1 lda (ZPQuickPtr1),y
cmp PRODOS.FT.ID,x cmp PRODOS.FT.ID,x
beq .3 beq .3
lda ZPQuickPtr2 lda ZPQuickPtr2
clc clc
adc #4 adc #4
sta ZPQuickPtr2 sta ZPQuickPtr2
bcc .2 bcc .2
inc ZPQuickPtr2+1 inc ZPQuickPtr2+1
.2 inx .2 inx
cpx PRODOS.FT.COUNT cpx PRODOS.FT.COUNT
bne .1 bne .1
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
lsr lsr
lsr lsr
lsr lsr
lsr lsr
tax tax
lda HEXDIGIT,x lda HEXDIGIT,x
sta PRODOS.FT.DFLT+2 sta PRODOS.FT.DFLT+2
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
and #$0F and #$0F
tax tax
lda HEXDIGIT,x lda HEXDIGIT,x
sta PRODOS.FT.DFLT+3 sta PRODOS.FT.DFLT+3
.3 >PUSHW ZPQuickPtr2 .3 >PUSHW ZPQuickPtr2
>PUSHW ZPQuickPtr1 >PUSHW ZPQuickPtr1
>LIBCALL hLIBSTR,LIBSTR.LCASEP >LIBCALL hLIBSTR,LIBSTR.LCASEP
>PUSHW ZPQuickPtr1 >PUSHW ZPQuickPtr1
rts rts
*-------------------------------------- *--------------------------------------
Push.Dates ldy #$24 get modification time Push.Dates ldy #$24 get modification time
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
dey dey
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
ldy #$22 ldy #$22
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
dey dey
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
ldy #$1B get creation time ldy #$1B get creation time
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
dey dey
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
ldy #$19 ldy #$19
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
dey dey
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
rts rts
*-------------------------------------- *--------------------------------------
Push.Footer lda hVOLHEADER Push.Footer lda hVOLHEADER
beq .20 beq .20
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
ldy #22 file_count ldy #22 file_count
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
dey dey
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
>PUSHW L.MSG.VOL.END >PUSHW L.MSG.VOL.END
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
.20 lda hDIRHEADER .20 lda hDIRHEADER
beq .21 beq .21
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
ldy #22 file_count ldy #22 file_count
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
dey dey
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
>PUSHW L.MSG.DIR.END >PUSHW L.MSG.DIR.END
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
.21 sec .21 sec
rts rts
*-------------------------------------- *--------------------------------------
CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device? CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device?
lda (pEvent),y lda (pEvent),y
ldy #S.PS.hINDEV ldy #S.PS.hINDEV
cmp (pPsContext),y cmp (pPsContext),y
bne .9 bne .9
lda (pEvent) lda (pEvent)
and #S.EVT.F.KEY is it a KEY event? and #S.EVT.F.KEY is it a KEY event?
beq .9 beq .9
ldy #S.EVT.DATAHI is it an O or SAPPLE key ? ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
lda (pEvent),y lda (pEvent),y
bne .9 bne .9
ldy #S.EVT.DATALO ldy #S.EVT.DATALO
lda (pEvent),y lda (pEvent),y
cmp #$03 Ctrl-C cmp #$03 Ctrl-C
bne .1 bne .1
lda #$FF lda #$FF
sta bCANCEL sta bCANCEL
bra .8 bra .8
.1 cmp #$13 Ctrl-S .1 cmp #$13 Ctrl-S
bne .8 bne .8
lda bSTOP lda bSTOP
eor #$FF eor #$FF
sta bSTOP sta bSTOP
.8 >SYSCALL SYS.DestroyEvent .8 >SYSCALL SYS.DestroyEvent
clc clc
rts rts
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
CS.QUIT lda hVOLHEADER CS.QUIT lda hVOLHEADER
beq .1 beq .1
>SYSCALL SYS.FreeMemA >SYSCALL SYS.FreeMemA
.1 lda hDIRHEADER .1 lda hDIRHEADER
beq .2 beq .2
>SYSCALL SYS.FreeMemA >SYSCALL SYS.FreeMemA
.2 lda hS.LISTDIR .2 lda hS.LISTDIR
>SYSCALL SYS.ListDirCloseA >SYSCALL SYS.ListDirCloseA
lda hDIRPATH lda hDIRPATH
beq .3 beq .3
>SYSCALL SYS.FreeMemA >SYSCALL SYS.FreeMemA
.3 lda hLIBSTR .3 lda hLIBSTR
>SYSCALL SYS.UnloadLibA >SYSCALL SYS.UnloadLibA
clc clc
rts rts
*-------------------------------------- *--------------------------------------
CS.END CS.END
LIB.LIBSTR >PSTRING "libstr.o" LIB.LIBSTR >PSTRING "libstr.o"
MSG.VOL.HEADER >CSTRING "Volume Listing Of %S\n" MSG.VOL.HEADER >CSTRING "Volume Listing Of %S\n"
MSG.DIR.HEADER >CSTRING "Directory Listing Of %S\n" MSG.DIR.HEADER >CSTRING "Directory Listing Of %S\n"
MSG.VOL >CSTRING "/%S\n" MSG.VOL >CSTRING "/%S\n"
MSG.DIR >CSTRING "/%15S <dir> %a %T %t %T %t\n" MSG.DIR >CSTRING "/%15S <dir> %a %T %t %T %t\n"
MSG.FILE >CSTRING "%15S %S $%H %a %8L %T %t %T %t\n" MSG.FILE >CSTRING "%15S %S $%H %a %8L %T %t %T %t\n"
MSG.VOL.END >CSTRING "%D Files In Volume.\n" MSG.VOL.END >CSTRING "%D Files In Volume.\n"
MSG.DIR.END >CSTRING "%D Files In Directory.\n" MSG.DIR.END >CSTRING "%D Files In Directory.\n"
*-------------------------------------- *--------------------------------------
PRODOS.FT.COUNT .HS 07 PRODOS.FT.COUNT .HS 07
PRODOS.FT.ID .HS 0406FAFCFDE2FF PRODOS.FT.ID .HS 0406FAFCFDE2FF
PRODOS.FT.TXT PRODOS.FT.TXT
T04 >PSTRING "TXT" T04 >PSTRING "TXT"
T06 >PSTRING "BIN" T06 >PSTRING "BIN"
TFA >PSTRING "S-C" TFA >PSTRING "S-C"
TFC >PSTRING "BAS" TFC >PSTRING "BAS"
TFD >PSTRING "VAR" TFD >PSTRING "VAR"
TE2 >PSTRING "ATK" TE2 >PSTRING "ATK"
TFF >PSTRING "SYS" TFF >PSTRING "SYS"
PRODOS.FT.DFLT >PSTRING "$ " PRODOS.FT.DFLT >PSTRING "$ "
HEXDIGIT .AS '0123456789ABCDEF' HEXDIGIT .AS '0123456789ABCDEF'
*-------------------------------------- *--------------------------------------
DS.START DS.START
hLIBSTR .BS 1 hLIBSTR .BS 1
hDIRPATH .BS 1 hDIRPATH .BS 1
hS.LISTDIR .BS 1 hS.LISTDIR .BS 1
hVOLHEADER .BS 1 hVOLHEADER .BS 1
hDIRHEADER .BS 1 hDIRHEADER .BS 1
bSTOP .BS 1 bSTOP .BS 1
bCANCEL .BS 1 bCANCEL .BS 1
DS.END DS.END
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE BIN/LS.S SAVE BIN/LS.S
ASM ASM

View File

@ -1,139 +1,139 @@
PR#3 PR#3
PREFIX /DATA/A2OSX PREFIX /DATA/A2OSX
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF BIN/LSDEV .TF BIN/LSDEV
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/KERNEL.I .INB INC/KERNEL.I
.INB INC/LIBSTR.I .INB INC/LIBSTR.I
*-------------------------------------- *--------------------------------------
ZPPTR1 .EQ ZPBIN ZPPTR1 .EQ ZPBIN
ZPPTR2 .EQ ZPBIN+2 ZPPTR2 .EQ ZPBIN+2
ZPPTR3 .EQ ZPBIN+4 ZPPTR3 .EQ ZPBIN+4
*-------------------------------------- *--------------------------------------
* Main entry point * Main entry point
*-------------------------------------- *--------------------------------------
* Code signature and INIT table * Code signature and INIT table
*-------------------------------------- *--------------------------------------
* CLD $D8 * CLD $D8
* JMP (*,x) $7C * JMP (*,x) $7C
* #JMPTABLE * #JMPTABLE
* /JMPTABLE * /JMPTABLE
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp (.1,x)
.1 .DA CS.INIT .1 .DA CS.INIT
.DA CS.RUN .DA CS.RUN
.DA CS.EVENT .DA CS.EVENT
.DA CS.QUIT .DA CS.QUIT
L.LIBSTR .DA LIBSTR L.LIBSTR .DA LIBSTR
L.MSG0 .DA MSG0 L.MSG0 .DA MSG0
L.MSG1 .DA MSG1 L.MSG1 .DA MSG1
L.MSG2 .DA MSG2 L.MSG2 .DA MSG2
.DA 0 .DA 0
.DA CS.END-CS.START Code Length To Relocate .DA CS.END-CS.START Code Length To Relocate
.DA 0 Data Segment to Allocate .DA 0 Data Segment to Allocate
*-------------------------------------- *--------------------------------------
CS.INIT >LIBLOADP L.LIBSTR CS.INIT >LIBLOADP L.LIBSTR
* bcs .9 * bcs .9
sta hLIBSTR sta hLIBSTR
>SYSCALL SYS.GetDevTable >SYSCALL SYS.GetDevTable
>STYA ZPPTR1 >STYA ZPPTR1
stz DEV.COUNT stz DEV.COUNT
L0 >PUSHW L.MSG0 L0 >PUSHW L.MSG0
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
lda #22 lda #22
sta LINE.COUNT sta LINE.COUNT
L1 lda (ZPPTR1) L1 lda (ZPPTR1)
bmi .1 bmi .1
jmp L41 jmp L41
.1 ldy #S.DEV.hARGS .1 ldy #S.DEV.hARGS
lda (ZPPTR1),y lda (ZPPTR1),y
beq L10 beq L10
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>PUSHYA >PUSHYA
bra L11 bra L11
L10 >PUSHW L.MSG2 L10 >PUSHW L.MSG2
L11 ldy #S.DEV.hCMD L11 ldy #S.DEV.hCMD
lda (ZPPTR1),y lda (ZPPTR1),y
beq L12 beq L12
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>PUSHYA >PUSHYA
bra L13 bra L13
L12 >PUSHW L.MSG2 L12 >PUSHW L.MSG2
L13 lda ZPPTR1 L13 lda ZPPTR1
clc clc
adc #S.DEV.NAME adc #S.DEV.NAME
sta ZPPTR2 sta ZPPTR2
lda ZPPTR1+1 lda ZPPTR1+1
adc #0 adc #0
sta ZPPTR2+1 sta ZPPTR2+1
>PUSHW ZPPTR2 >PUSHW ZPPTR2
ldy #S.DEV.hOWNERPS ldy #S.DEV.hOWNERPS
lda (ZPPTR1),y lda (ZPPTR1),y
>PUSHA Owner PSID >PUSHA Owner PSID
lda (ZPPTR1) push flags lda (ZPPTR1) push flags
>PUSHA >PUSHA
ldy #S.DEV.ID ldy #S.DEV.ID
lda (ZPPTR1),y lda (ZPPTR1),y
>PUSHA DevID >PUSHA DevID
>PUSHW L.MSG1 >PUSHW L.MSG1
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
L4 dec LINE.COUNT L4 dec LINE.COUNT
L41 lda ZPPTR1 L41 lda ZPPTR1
clc clc
adc #S.DEV.SIZE adc #S.DEV.SIZE
sta ZPPTR1 sta ZPPTR1
bcc L5 bcc L5
inc ZPPTR1+1 inc ZPPTR1+1
L5 inc DEV.COUNT L5 inc DEV.COUNT
lda DEV.COUNT lda DEV.COUNT
cmp #K.DEV.MAX cmp #K.DEV.MAX
beq L8 beq L8
lda LINE.COUNT lda LINE.COUNT
beq L6 beq L6
jmp L1 jmp L1
L6 >DEBUG L6 >DEBUG
jmp L0 jmp L0
L8 lda #0 tell TSKMGR that all done ok, but L8 lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory sec we do not want to stay in memory
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN CS.RUN
CS.EVENT clc CS.EVENT clc
rts rts
*-------------------------------------- *--------------------------------------
CS.QUIT lda hLIBSTR CS.QUIT lda hLIBSTR
bra * bra *
>SYSCALL SYS.UnloadLibA >SYSCALL SYS.UnloadLibA
clc clc
rts rts
*-------------------------------------- *--------------------------------------
CS.END CS.END
hLIBSTR .BS 1 hLIBSTR .BS 1
DEV.COUNT .BS 1 DEV.COUNT .BS 1
LINE.COUNT .BS 1 LINE.COUNT .BS 1
LIBSTR >PSTRING "libstr.o" LIBSTR >PSTRING "libstr.o"
MSG0 >CSTRING "hDev Flags PID NAME CMD ARGS\n" MSG0 >CSTRING "hDev Flags PID NAME CMD ARGS\n"
MSG1 >CSTRING " %03d %b $%h %4S %16S %32S\n" MSG1 >CSTRING " %03d %b $%h %4S %16S %32S\n"
MSG2 >PSTRING "(none)" MSG2 >PSTRING "(none)"
MAN MAN
SAVE BIN/LSDEV.S SAVE BIN/LSDEV.S
ASM ASM

0
BIN/MD.S.txt Normal file
View File

View File

@ -1,285 +1,285 @@
PR#3 PR#3
PREFIX /DATA/A2OSX PREFIX /DATA/A2OSX
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF BIN/MEM .TF BIN/MEM
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/LIBSTR.I .INB INC/LIBSTR.I
*-------------------------------------- *--------------------------------------
ZPPTR1 .EQ ZPBIN ZPPTR1 .EQ ZPBIN
ZPPTR2 .EQ ZPBIN+2 ZPPTR2 .EQ ZPBIN+2
*-------------------------------------- *--------------------------------------
* Main entry point * Main entry point
*-------------------------------------- *--------------------------------------
* Code signature and INIT table * Code signature and INIT table
*-------------------------------------- *--------------------------------------
* CLD $D8 * CLD $D8
* JMP (*,x) $7C * JMP (*,x) $7C
* #JMPTABLE * #JMPTABLE
* /JMPTABLE * /JMPTABLE
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp (.1,x)
.1 .DA CS.INIT .1 .DA CS.INIT
.DA CS.RUN .DA CS.RUN
.DA CS.DOEVENT .DA CS.DOEVENT
.DA CS.QUIT .DA CS.QUIT
L.LIBSTR .DA LIBSTR L.LIBSTR .DA LIBSTR
L.MSG0 .DA MSG0 L.MSG0 .DA MSG0
L.MSG1 .DA MSG1 L.MSG1 .DA MSG1
L.MSG2 .DA MSG2 L.MSG2 .DA MSG2
L.MSG3 .DA MSG3 L.MSG3 .DA MSG3
L.MSG4 .DA MSG4 L.MSG4 .DA MSG4
L.MSG5 .DA MSG5 L.MSG5 .DA MSG5
L.MSG6 .DA MSG6 L.MSG6 .DA MSG6
L.MSG7 .DA MSG7 L.MSG7 .DA MSG7
.DA 0 .DA 0
.DA CS.END-CS.START Code Length To Relocate .DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate .DA DS.END-DS.START Data Segment to Allocate
*-------------------------------------- *--------------------------------------
CS.INIT >LIBLOADP L.LIBSTR CS.INIT >LIBLOADP L.LIBSTR
bcs .9 bcs .9
sta hLIBSTR sta hLIBSTR
stz LINE.COUNT stz LINE.COUNT
stz MEM.COUNT stz MEM.COUNT
stz USED.COUNT stz USED.COUNT
stz bSTOP stz bSTOP
stz bCANCEL stz bCANCEL
lda (pPsContext) lda (pPsContext)
ora #S.PS.F.EVENT Now accept events ora #S.PS.F.EVENT Now accept events
sta (pPsContext) sta (pPsContext)
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CS.RUN lda bCANCEL CS.RUN lda bCANCEL
bne .99 bne .99
lda bSTOP lda bSTOP
bne .8 bne .8
lda LINE.COUNT lda LINE.COUNT
bne .1 bne .1
>PUSHW L.MSG0 >PUSHW L.MSG0
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
.1 lda MEM.COUNT .1 lda MEM.COUNT
>SYSCALL SYS.GetMemByIDA >SYSCALL SYS.GetMemByIDA
>STYA ZPPTR1 >STYA ZPPTR1
lda (ZPPTR1) lda (ZPPTR1)
bpl .2 bpl .2
inc USED.COUNT inc USED.COUNT
.2 jsr CS.RUN.PRINTMEM .2 jsr CS.RUN.PRINTMEM
inc MEM.COUNT inc MEM.COUNT
lda MEM.COUNT lda MEM.COUNT
cmp MEMMGR.TABLESIZE cmp MEMMGR.TABLESIZE
beq .9 beq .9
.8 .8
clc clc
rts rts
.9 jsr CS.RUN.PRINTEND .9 jsr CS.RUN.PRINTEND
.99 sec .99 sec
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN.PRINTMEM ldy #S.MEM.LEN CS.RUN.PRINTMEM ldy #S.MEM.LEN
lda (ZPPTR1),y lda (ZPPTR1),y
pha pha
iny iny
lda (ZPPTR1),y lda (ZPPTR1),y
ply ply
>PUSHYA >PUSHYA
ldy #S.MEM.PTR ldy #S.MEM.PTR
lda (ZPPTR1),y lda (ZPPTR1),y
pha pha
iny iny
lda (ZPPTR1),y lda (ZPPTR1),y
ply ply
>PUSHYA >PUSHYA
ldy #S.MEM.REFCNT ldy #S.MEM.REFCNT
lda (ZPPTR1),y lda (ZPPTR1),y
>PUSHA >PUSHA
ldy #S.MEM.OWNERPID ldy #S.MEM.OWNERPID
lda (ZPPTR1),y lda (ZPPTR1),y
>PUSHA >PUSHA
lda (ZPPTR1) lda (ZPPTR1)
>PUSHA >PUSHA
lda MEM.COUNT lda MEM.COUNT
>PUSHA >PUSHA
>PUSHW L.MSG1 >PUSHW L.MSG1
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
ldy #S.MEM.BIN ldy #S.MEM.BIN
lda (ZPPTR1),y lda (ZPPTR1),y
bne .3 bne .3
ldy #S.MEM.PTR ldy #S.MEM.PTR
lda (ZPPTR1),y lda (ZPPTR1),y
sta ZPPTR2 sta ZPPTR2
iny iny
lda (ZPPTR1),y lda (ZPPTR1),y
sta ZPPTR2+1 sta ZPPTR2+1
lda #"{" lda #"{"
jsr COUT jsr COUT
lda (ZPPTR2) lda (ZPPTR2)
jsr PRBYTE jsr PRBYTE
lda #"|" lda #"|"
jsr COUT jsr COUT
ldy #1 ldy #1
.1 lda (ZPPTR2),y .1 lda (ZPPTR2),y
ora #$80 ora #$80
cmp #$A0 cmp #$A0
bcs .2 bcs .2
ora #$20 ora #$20
.2 jsr COUT .2 jsr COUT
iny iny
cpy #40 cpy #40
bne .1 bne .1
lda #"}" lda #"}"
jsr COUT jsr COUT
bra .4 bra .4
.3 >SYSCALL SYS.GetMemPtrA .3 >SYSCALL SYS.GetMemPtrA
>PUSHYA >PUSHYA
>LIBCALL hLIBSTR,LIBSTR.PRINTP >LIBCALL hLIBSTR,LIBSTR.PRINTP
.4 jsr CROUT .4 jsr CROUT
inc LINE.COUNT inc LINE.COUNT
lda LINE.COUNT lda LINE.COUNT
cmp #22 cmp #22
bne .5 bne .5
lda #$FF lda #$FF
sta bSTOP sta bSTOP
stz LINE.COUNT stz LINE.COUNT
.5 rts .5 rts
*-------------------------------------- *--------------------------------------
CS.RUN.PRINTEND >PUSHB MEM.COUNT CS.RUN.PRINTEND >PUSHB MEM.COUNT
>PUSHB USED.COUNT >PUSHB USED.COUNT
>PUSHW L.MSG2 >PUSHW L.MSG2
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
>PUSHW MEMMGR.LOMEM >PUSHW MEMMGR.LOMEM
>PUSHW L.MSG3 >PUSHW L.MSG3
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
>PUSHW MEMMGR.MLLIMIT >PUSHW MEMMGR.MLLIMIT
>PUSHW L.MSG4 >PUSHW L.MSG4
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
>PUSHW MEMMGR.MHLIMIT >PUSHW MEMMGR.MHLIMIT
>PUSHW L.MSG5 >PUSHW L.MSG5
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
>PUSHW MEMMGR.HIMEM >PUSHW MEMMGR.HIMEM
>PUSHW L.MSG6 >PUSHW L.MSG6
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
>PUSHW MEMMGR.MFREE >PUSHW MEMMGR.MFREE
>PUSHW L.MSG7 >PUSHW L.MSG7
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
rts rts
*-------------------------------------- *--------------------------------------
CS.DOEVENT >PULLW pEvent CS.DOEVENT >PULLW pEvent
ldy #S.EVT.hDEV is Event from active IN device? ldy #S.EVT.hDEV is Event from active IN device?
lda (pEvent),y lda (pEvent),y
ldy #S.PS.hINDEV ldy #S.PS.hINDEV
cmp (pPsContext),y cmp (pPsContext),y
bne .9 bne .9
lda (pEvent) lda (pEvent)
and #S.EVT.F.KEY is it a KEY event? and #S.EVT.F.KEY is it a KEY event?
beq .9 beq .9
ldy #S.EVT.DATAHI is it an O or SAPPLE key ? ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
lda (pEvent),y lda (pEvent),y
bne .9 bne .9
ldy #S.EVT.DATALO ldy #S.EVT.DATALO
lda (pEvent),y lda (pEvent),y
cmp #$03 Ctrl-C cmp #$03 Ctrl-C
bne .1 bne .1
lda #$FF lda #$FF
sta bCANCEL sta bCANCEL
bra .8 bra .8
.1 cmp #$13 Ctrl-S .1 cmp #$13 Ctrl-S
bne .2 bne .2
lda bSTOP lda bSTOP
eor #$FF eor #$FF
sta bSTOP sta bSTOP
bra .8 bra .8
.2 lda bSTOP .2 lda bSTOP
beq .8 beq .8
stz bSTOP stz bSTOP
.8 >SYSCALL SYS.DestroyEvent .8 >SYSCALL SYS.DestroyEvent
clc clc
rts rts
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
CS.QUIT lda hLIBSTR CS.QUIT lda hLIBSTR
>SYSCALL SYS.UnloadLibA >SYSCALL SYS.UnloadLibA
clc clc
rts rts
*-------------------------------------- *--------------------------------------
PRBYTE pha PRBYTE pha
lsr lsr
lsr lsr
lsr lsr
lsr lsr
ora #$B0 ora #$B0
cmp #$BA cmp #$BA
bcc .1 bcc .1
adc #6 adc #6
.1 jsr COUT .1 jsr COUT
pla pla
and #$0F and #$0F
ora #$B0 ora #$B0
cmp #$BA cmp #$BA
bcc COUT bcc COUT
adc #6 adc #6
bra COUT bra COUT
*-------------------------------------- *--------------------------------------
CROUT lda #13 CROUT lda #13
*-------------------------------------- *--------------------------------------
COUT phx COUT phx
phy phy
>PUSHA >PUSHA
ldy #S.PS.hOUTDEV ldy #S.PS.hOUTDEV
lda (pPsContext),y lda (pPsContext),y
>SYSCALL SYS.DevOutA >SYSCALL SYS.DevOutA
ply ply
plx plx
rts rts
*-------------------------------------- *--------------------------------------
CS.END CS.END
DS.START DS.START
*-------------------------------------- *--------------------------------------
hLIBSTR .BS 1 hLIBSTR .BS 1
LINE.COUNT .BS 1 LINE.COUNT .BS 1
MEM.COUNT .BS 1 MEM.COUNT .BS 1
USED.COUNT .BS 1 USED.COUNT .BS 1
bSTOP .BS 1 bSTOP .BS 1
bCANCEL .BS 1 bCANCEL .BS 1
LIBSTR >PSTRING "libstr.o" LIBSTR >PSTRING "libstr.o"
MSG0 >CSTRING "hMem Flags PID REF PTR LEN BINPATH/DATA\n" MSG0 >CSTRING "hMem Flags PID REF PTR LEN BINPATH/DATA\n"
MSG1 >CSTRING " %03d %b $%h $%h $%H $%H " MSG1 >CSTRING " %03d %b $%h $%h $%H $%H "
MSG2 >CSTRING "\nAllocated hMem:%d, Total:%d\n" MSG2 >CSTRING "\nAllocated hMem:%d, Total:%d\n"
MSG3 >CSTRING "Low Memory: $%H\n" MSG3 >CSTRING "Low Memory: $%H\n"
MSG4 >CSTRING "Low Free PTR: $%H\n" MSG4 >CSTRING "Low Free PTR: $%H\n"
MSG5 >CSTRING "High Free PTR: $%H\n" MSG5 >CSTRING "High Free PTR: $%H\n"
MSG6 >CSTRING "High Memory: $%H\n" MSG6 >CSTRING "High Memory: $%H\n"
MSG7 >CSTRING "\nFree Memory: %D Bytes.\n" MSG7 >CSTRING "\nFree Memory: %D Bytes.\n"
DS.END DS.END
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE BIN/MEM.S SAVE BIN/MEM.S
ASM ASM

0
BIN/MV.S.txt Normal file
View File

View File

@ -1,206 +1,206 @@
PR#3 PR#3
PREFIX /DATA/A2OSX PREFIX /DATA/A2OSX
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF BIN/NETCFG .TF BIN/NETCFG
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/KERNEL.I .INB INC/KERNEL.I
.INB INC/LIBSTR.I .INB INC/LIBSTR.I
.INB INC/LIBTCPIP.I .INB INC/LIBTCPIP.I
*-------------------------------------- *--------------------------------------
ZPPTR1 .EQ ZPBIN ZPPTR1 .EQ ZPBIN
ZPPTR2 .EQ ZPBIN+2 ZPPTR2 .EQ ZPBIN+2
*-------------------------------------- *--------------------------------------
* Main entry point * Main entry point
*-------------------------------------- *--------------------------------------
* Code signature and INIT table * Code signature and INIT table
*-------------------------------------- *--------------------------------------
* CLD $D8 * CLD $D8
* JMP (*,x) $7C * JMP (*,x) $7C
* #JMPTABLE * #JMPTABLE
* /JMPTABLE * /JMPTABLE
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp (.1,x)
.1 .DA CS.INIT .1 .DA CS.INIT
.DA CS.RUN .DA CS.RUN
.DA CS.DOEVENT .DA CS.DOEVENT
.DA CS.QUIT .DA CS.QUIT
L.LIBSTR .DA LIBSTR L.LIBSTR .DA LIBSTR
L.MSG0 .DA MSG0 L.MSG0 .DA MSG0
L.MSG0.0 .DA MSG0.0 L.MSG0.0 .DA MSG0.0
L.MSG0.1 .DA MSG0.1 L.MSG0.1 .DA MSG0.1
L.MSG0.2 .DA MSG0.2 L.MSG0.2 .DA MSG0.2
L.MSG0.N .DA MSG0.N L.MSG0.N .DA MSG0.N
L.MSG0.U .DA MSG0.U L.MSG0.U .DA MSG0.U
L.MSG0.C .DA MSG0.C L.MSG0.C .DA MSG0.C
L.MSG1.DEV .DA MSG1.DEV L.MSG1.DEV .DA MSG1.DEV
L.MSG1.DHCPSRVR .DA MSG1.DHCPSRVR L.MSG1.DHCPSRVR .DA MSG1.DHCPSRVR
L.MSG1.IP .DA MSG1.IP L.MSG1.IP .DA MSG1.IP
L.MSG1.GW .DA MSG1.GW L.MSG1.GW .DA MSG1.GW
L.MSG1.DNS .DA MSG1.DNS L.MSG1.DNS .DA MSG1.DNS
L.MSG1.HOSTNAME .DA MSG1.HOSTNAME L.MSG1.HOSTNAME .DA MSG1.HOSTNAME
L.MSG1.DOMAIN .DA MSG1.DOMAIN L.MSG1.DOMAIN .DA MSG1.DOMAIN
L.MSG1.END .DA MSG1.END L.MSG1.END .DA MSG1.END
.DA 0 .DA 0
.DA CS.END-CS.START Code Length To Relocate .DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segemnt to Allocate .DA DS.END-DS.START Data Segemnt to Allocate
*-------------------------------------- *--------------------------------------
CS.INIT >LIBLOADP L.LIBSTR CS.INIT >LIBLOADP L.LIBSTR
sta hLIBSTR sta hLIBSTR
lda #K.PROTOID.IP lda #K.PROTOID.IP
>SYSCALL SYS.GetNetCfgA >SYSCALL SYS.GetNetCfgA
bcc CS.INIT.LOADED bcc CS.INIT.LOADED
>PUSHW L.MSG0.N >PUSHW L.MSG0.N
>PUSHW L.MSG0.2 >PUSHW L.MSG0.2
>PUSHW L.MSG0 >PUSHW L.MSG0
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
jmp CS.INIT.END jmp CS.INIT.END
CS.INIT.LOADED >STYA ZPPTR1 CS.INIT.LOADED >STYA ZPPTR1
ldy #S.IPCFG.STATUS ldy #S.IPCFG.STATUS
lda (ZPPTR1),y lda (ZPPTR1),y
bmi CS.INIT.CONFOK bmi CS.INIT.CONFOK
>PUSHW L.MSG0.U >PUSHW L.MSG0.U
>PUSHW L.MSG0.2 >PUSHW L.MSG0.2
>PUSHW L.MSG0 >PUSHW L.MSG0
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
jsr CS.INIT.DEV.MAC jsr CS.INIT.DEV.MAC
jmp CS.INIT.END jmp CS.INIT.END
CS.INIT.CONFOK >PUSHW L.MSG0.C CS.INIT.CONFOK >PUSHW L.MSG0.C
>PUSHW L.MSG0.2 >PUSHW L.MSG0.2
>PUSHW L.MSG0 >PUSHW L.MSG0
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
jsr CS.INIT.DEV.MAC jsr CS.INIT.DEV.MAC
ldy #S.IPCFG.DHCPSRVR+3 ldy #S.IPCFG.DHCPSRVR+3
ldx #4 ldx #4
L1 >PUSHB (ZPPTR1),y L1 >PUSHB (ZPPTR1),y
dey dey
dex dex
bne L1 bne L1
>PUSHW L.MSG1.DHCPSRVR >PUSHW L.MSG1.DHCPSRVR
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
ldy #S.IPCFG.IP+7 IP/MASK ldy #S.IPCFG.IP+7 IP/MASK
ldx #8 ldx #8
L2 >PUSHB (ZPPTR1),y L2 >PUSHB (ZPPTR1),y
dey dey
dex dex
bne L2 bne L2
>PUSHW L.MSG1.IP >PUSHW L.MSG1.IP
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
ldy #S.IPCFG.GW+3 ldy #S.IPCFG.GW+3
ldx #4 ldx #4
L4 >PUSHB (ZPPTR1),y L4 >PUSHB (ZPPTR1),y
dey dey
dex dex
bne L4 bne L4
>PUSHW L.MSG1.GW >PUSHW L.MSG1.GW
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
ldy #S.IPCFG.DNS+7 ldy #S.IPCFG.DNS+7
ldx #8 ldx #8
L5 >PUSHB (ZPPTR1),y L5 >PUSHB (ZPPTR1),y
dey dey
dex dex
bne L5 bne L5
>PUSHW L.MSG1.DNS >PUSHW L.MSG1.DNS
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
lda ZPPTR1 lda ZPPTR1
clc clc
adc #S.IPCFG.HOSTNAME adc #S.IPCFG.HOSTNAME
tay tay
lda ZPPTR1+1 lda ZPPTR1+1
adc #0 adc #0
>PUSHYA >PUSHYA
>PUSHW L.MSG1.HOSTNAME >PUSHW L.MSG1.HOSTNAME
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
ldy #S.IPCFG.DOMAIN ldy #S.IPCFG.DOMAIN
lda (ZPPTR1),y lda (ZPPTR1),y
beq L6 beq L6
lda ZPPTR1 lda ZPPTR1
clc clc
adc #S.IPCFG.DOMAIN adc #S.IPCFG.DOMAIN
tay tay
lda ZPPTR1+1 lda ZPPTR1+1
adc #0 adc #0
>PUSHYA >PUSHYA
>PUSHW L.MSG1.DOMAIN >PUSHW L.MSG1.DOMAIN
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
L6 >PUSHW L.MSG1.END L6 >PUSHW L.MSG1.END
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
CS.INIT.END lda #0 tell TSKMGR that all done ok, but CS.INIT.END lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory sec we do not want to stay in memory
rts rts
*-------------------------------------- *--------------------------------------
CS.INIT.DEV.MAC ldy #S.IPCFG.MAC+6 CS.INIT.DEV.MAC ldy #S.IPCFG.MAC+6
.1 dey .1 dey
>PUSHB (ZPPTR1),y >PUSHB (ZPPTR1),y
cpy #S.IPCFG.MAC cpy #S.IPCFG.MAC
bne .1 bne .1
ldy #S.IPCFG.hDEV ldy #S.IPCFG.hDEV
>PUSHB (ZPPTR1),y >PUSHB (ZPPTR1),y
>PUSHW L.MSG1.DEV >PUSHW L.MSG1.DEV
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN clc CS.RUN clc
rts rts
*-------------------------------------- *--------------------------------------
CS.DOEVENT clc CS.DOEVENT clc
rts rts
*-------------------------------------- *--------------------------------------
CS.QUIT lda hLIBSTR CS.QUIT lda hLIBSTR
>SYSCALL SYS.FreeMemA >SYSCALL SYS.FreeMemA
clc clc
rts rts
*-------------------------------------- *--------------------------------------
CS.END CS.END
LIBSTR >PSTRING "libstr.o" LIBSTR >PSTRING "libstr.o"
MSG0 >CSTRING "Protocol:%s (%s)\n" MSG0 >CSTRING "Protocol:%s (%s)\n"
MSG0.0 >CSTRING "AppleTalk" MSG0.0 >CSTRING "AppleTalk"
MSG0.1 >CSTRING "EtherTalk" MSG0.1 >CSTRING "EtherTalk"
MSG0.2 >CSTRING "TCP/IP" MSG0.2 >CSTRING "TCP/IP"
MSG0.N >CSTRING "Not Loaded" MSG0.N >CSTRING "Not Loaded"
MSG0.U >CSTRING "Unconfigured" MSG0.U >CSTRING "Unconfigured"
MSG0.C >CSTRING "Configured" MSG0.C >CSTRING "Configured"
MSG1.DEV >CSTRING " DeviceID : %h,MAC=%02h:%02h:%02h:%02h:%02h:%02h\n" MSG1.DEV >CSTRING " DeviceID : %h,MAC=%02h:%02h:%02h:%02h:%02h:%02h\n"
MSG1.DHCPSRVR >CSTRING " DHCP Server : %d.%d.%d.%d\n" MSG1.DHCPSRVR >CSTRING " DHCP Server : %d.%d.%d.%d\n"
MSG1.IP >CSTRING " IP/Mask : %d.%d.%d.%d/%d.%d.%d.%d\n" MSG1.IP >CSTRING " IP/Mask : %d.%d.%d.%d/%d.%d.%d.%d\n"
MSG1.GW >CSTRING " Gateway : %d.%d.%d.%d\n" MSG1.GW >CSTRING " Gateway : %d.%d.%d.%d\n"
MSG1.DNS >CSTRING " DNS : %d.%d.%d.%d,%d.%d.%d.%d\n" MSG1.DNS >CSTRING " DNS : %d.%d.%d.%d,%d.%d.%d.%d\n"
MSG1.HOSTNAME >CSTRING " Hostname : %s" MSG1.HOSTNAME >CSTRING " Hostname : %s"
MSG1.DOMAIN >CSTRING ".%s" MSG1.DOMAIN >CSTRING ".%s"
MSG1.END >CSTRING "\nEnd of network configuration.\n" MSG1.END >CSTRING "\nEnd of network configuration.\n"
*-------------------------------------- *--------------------------------------
DS.START DS.START
*-------------------------------------- *--------------------------------------
hLIBSTR .BS 1 hLIBSTR .BS 1
*-------------------------------------- *--------------------------------------
DS.END DS.END
MAN MAN
SAVE BIN/NETCFG.S SAVE BIN/NETCFG.S
ASM ASM

View File

@ -1,367 +1,367 @@
PR#3 PR#3
PREFIX /DATA/A2OSX PREFIX /DATA/A2OSX
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF BIN/PING .TF BIN/PING
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/KERNEL.I .INB INC/KERNEL.I
.INB INC/LIBSTR.I .INB INC/LIBSTR.I
.INB INC/LIBTCPIP.I .INB INC/LIBTCPIP.I
*-------------------------------------- *--------------------------------------
PING.TIMEOUT .EQ 40 40*100ms = 4 sec. PING.TIMEOUT .EQ 40 40*100ms = 4 sec.
*-------------------------------------- *--------------------------------------
ZPFrameBase1 .EQ ZPBIN ZPFrameBase1 .EQ ZPBIN
ZPFrameLen1 .EQ ZPBIN+2 ZPFrameLen1 .EQ ZPBIN+2
ZPFramePtr1 .EQ ZPBIN+4 ZPFramePtr1 .EQ ZPBIN+4
*-------------------------------------- *--------------------------------------
* Main entry point * Main entry point
*-------------------------------------- *--------------------------------------
* Code signature and INIT table * Code signature and INIT table
*-------------------------------------- *--------------------------------------
* CLD $D8 * CLD $D8
* JMP (*,x) $7C * JMP (*,x) $7C
* #JMPTABLE * #JMPTABLE
* /JMPTABLE * /JMPTABLE
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp (.1,x)
.1 .DA CS.INIT .1 .DA CS.INIT
.DA CS.RUN .DA CS.RUN
.DA CS.EVENT .DA CS.EVENT
.DA CS.QUIT .DA CS.QUIT
L.LIBSTR .DA LIBSTR L.LIBSTR .DA LIBSTR
L.LIBTCPIP .DA LIBTCPIP L.LIBTCPIP .DA LIBTCPIP
L.SSCANF.IP .DA SSCANF.IP L.SSCANF.IP .DA SSCANF.IP
L.DST.IP .DA DST.IP L.DST.IP .DA DST.IP
L.MSG0 .DA MSG0 L.MSG0 .DA MSG0
L.MSG1 .DA MSG1 L.MSG1 .DA MSG1
L.MSG2 .DA MSG2 L.MSG2 .DA MSG2
L.MSG3 .DA MSG3 L.MSG3 .DA MSG3
.DA 0 .DA 0
.DA CS.END-CS.START Code Length To Relocate .DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate .DA DS.END-DS.START Data Segment to Allocate
*-------------------------------------- *--------------------------------------
CS.INIT ldy #S.PS.hARGS CS.INIT ldy #S.PS.hARGS
lda (pPsContext),y lda (pPsContext),y
bne .1 bne .1
lda #SYSMGR.ERRSYN lda #SYSMGR.ERRSYN
sec sec
rts rts
.1 >LIBLOADP L.LIBSTR .1 >LIBLOADP L.LIBSTR
sta hLIBSTR sta hLIBSTR
>LIBLOADP L.LIBTCPIP >LIBLOADP L.LIBTCPIP
sta hLIBTCPIP sta hLIBTCPIP
>LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG is TCPIP loaded ? >LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG is TCPIP loaded ?
bcs .9 bcs .9
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
lda (ZPQuickPtr1) Configured ? lda (ZPQuickPtr1) Configured ?
bpl .9 bpl .9
ldy #S.IPCFG.HDEV ldy #S.IPCFG.HDEV
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
sta hDev sta hDev
lda A2OSX.RANDOM16 lda A2OSX.RANDOM16
sta Identifier sta Identifier
lda A2OSX.RANDOM16+1 lda A2OSX.RANDOM16+1
sta Identifier+1 sta Identifier+1
stz Sequence stz Sequence
stz Sequence+1 stz Sequence+1
lda (pPsContext) lda (pPsContext)
ora #S.PS.F.EVENT Now accept events ora #S.PS.F.EVENT Now accept events
sta (pPsContext) sta (pPsContext)
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CS.RUN >PUSHW L.DST.IP CS.RUN >PUSHW L.DST.IP
>PUSHW L.SSCANF.IP >PUSHW L.SSCANF.IP
ldy #S.PS.hARGS ldy #S.PS.hARGS
lda (pPsContext),y lda (pPsContext),y
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>PUSHYA >PUSHYA
>LIBCALL hLIBSTR,LIBSTR.SSCANF >LIBCALL hLIBSTR,LIBSTR.SSCANF
bcc CS.RUN.IPOK bcc CS.RUN.IPOK
lda #PING.TIMEOUT lda #PING.TIMEOUT
sta TimeOut sta TimeOut
CS.RUN.DNSQUERY >PUSHW L.DST.IP CS.RUN.DNSQUERY >PUSHW L.DST.IP
ldy #S.PS.hARGS ldy #S.PS.hARGS
lda (pPsContext),y lda (pPsContext),y
>PUSHA >PUSHA
>LIBCALL hLIBTCPIP,LIBTCPIP.DNS.QUERY >LIBCALL hLIBTCPIP,LIBTCPIP.DNS.QUERY
bcc CS.RUN.IPOK bcc CS.RUN.IPOK
jsr A2osX.SLEEP jsr A2osX.SLEEP
lda TimeOut lda TimeOut
bne CS.RUN.DNSQUERY bne CS.RUN.DNSQUERY
ldy #S.PS.hARGS ldy #S.PS.hARGS
lda (pPsContext),y lda (pPsContext),y
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>PUSHYA >PUSHYA
>PUSHW L.MSG0 >PUSHW L.MSG0
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
sec sec
CS.RUN.RTS rts CS.RUN.RTS rts
CS.RUN.IPOK ldy #S.PS.hARGS CS.RUN.IPOK ldy #S.PS.hARGS
lda (pPsContext),y lda (pPsContext),y
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>PUSHYA >PUSHYA
>PUSHB DST.IP+3 >PUSHB DST.IP+3
>PUSHB DST.IP+2 >PUSHB DST.IP+2
>PUSHB DST.IP+1 >PUSHB DST.IP+1
>PUSHB DST.IP >PUSHB DST.IP
>PUSHW L.MSG1 >PUSHW L.MSG1
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
CS.RUN.ECHO >LIBCALL hLIBTCPIP,LIBTCPIP.NEW.ICMP.FRAME CS.RUN.ECHO >LIBCALL hLIBTCPIP,LIBTCPIP.NEW.ICMP.FRAME
bcs CS.RUN.RTS bcs CS.RUN.RTS
>STYA ZPFrameBase1 >STYA ZPFrameBase1
stx hFrame stx hFrame
ldx #3 ldx #3
ldy #S.IP.DST+3 ldy #S.IP.DST+3
.1 lda DST.IP,x .1 lda DST.IP,x
sta (ZPFrameBase1),y sta (ZPFrameBase1),y
dey dey
dex dex
bpl .1 bpl .1
ldy #S.ICMP.TYPE ldy #S.ICMP.TYPE
lda #S.ICMP.TYPE.ECHOREQ lda #S.ICMP.TYPE.ECHOREQ
sta (ZPFrameBase1),y sta (ZPFrameBase1),y
ldy #S.ICMP.IDENTIFIER ldy #S.ICMP.IDENTIFIER
lda Identifier lda Identifier
sta (ZPFrameBase1),y sta (ZPFrameBase1),y
iny iny
lda Identifier+1 lda Identifier+1
sta (ZPFrameBase1),y sta (ZPFrameBase1),y
inc Sequence inc Sequence
bne .2 bne .2
inc Sequence+1 inc Sequence+1
.2 ldy #S.ICMP.SEQUENCE .2 ldy #S.ICMP.SEQUENCE
lda Sequence lda Sequence
sta (ZPFrameBase1),y sta (ZPFrameBase1),y
iny iny
lda Sequence+1 lda Sequence+1
sta (ZPFrameBase1),y sta (ZPFrameBase1),y
lda #PING.TIMEOUT lda #PING.TIMEOUT
sta TimeOut sta TimeOut
.3 >PUSHWI S.ICMP+32 .3 >PUSHWI S.ICMP+32
lda hFrame lda hFrame
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>PUSHYA >PUSHYA
>LIBCALL hLIBTCPIP,LIBTCPIP.SEND.ICMP.FRAME >LIBCALL hLIBTCPIP,LIBTCPIP.SEND.ICMP.FRAME
bcc .4 bcc .4
jsr A2osX.SLEEP jsr A2osX.SLEEP
lda TimeOut lda TimeOut
bne .3 bne .3
.4 lda hFrame .4 lda hFrame
>SYSCALL SYS.FreeMemA >SYSCALL SYS.FreeMemA
stz bReply stz bReply
lda #PING.TIMEOUT lda #PING.TIMEOUT
sta TimeOut sta TimeOut
CS.RUN.WAIT jsr A2osX.SLEEP CS.RUN.WAIT jsr A2osX.SLEEP
lda bReply lda bReply
bne .1 bne .1
lda bCTRLC lda bCTRLC
bne CS.RUN.ERROR bne CS.RUN.ERROR
lda TimeOut lda TimeOut
bne CS.RUN.WAIT bne CS.RUN.WAIT
>PUSHB DST.IP+3 >PUSHB DST.IP+3
>PUSHB DST.IP+2 >PUSHB DST.IP+2
>PUSHB DST.IP+1 >PUSHB DST.IP+1
>PUSHB DST.IP >PUSHB DST.IP
>PUSHW L.MSG2 >PUSHW L.MSG2
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
.1 lda bCTRLC .1 lda bCTRLC
bne CS.RUN.ERROR bne CS.RUN.ERROR
lda TimeOut lda TimeOut
beq .2 beq .2
jsr A2osX.SLEEP jsr A2osX.SLEEP
bra .1 bra .1
.2 jmp CS.RUN.ECHO .2 jmp CS.RUN.ECHO
CS.RUN.ERROR sec CS.RUN.ERROR sec
rts rts
*-------------------------------------- *--------------------------------------
CS.EVENT lda (pEvent) CS.EVENT lda (pEvent)
and #S.EVT.F.TIMER is it a TIMER event? and #S.EVT.F.TIMER is it a TIMER event?
beq .1 no.... beq .1 no....
lda TimeOut lda TimeOut
beq .10 beq .10
dec TimeOut dec TimeOut
.10 sec do not discard TIMER event .10 sec do not discard TIMER event
rts rts
.1 lda (pEvent) .1 lda (pEvent)
and #S.EVT.F.KEY is it a KEY event? and #S.EVT.F.KEY is it a KEY event?
beq .2 beq .2
ldy #S.EVT.hDEV is Event from active IN device? ldy #S.EVT.hDEV is Event from active IN device?
lda (pEvent),y lda (pEvent),y
ldy #S.PS.hINDEV ldy #S.PS.hINDEV
cmp (pPsContext),y cmp (pPsContext),y
bne .9 bne .9
ldy #S.EVT.DATAHI is it an O or SAPPLE key ? ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
lda (pEvent),y lda (pEvent),y
bne .9 bne .9
ldy #S.EVT.DATALO ldy #S.EVT.DATALO
lda (pEvent),y lda (pEvent),y
cmp #$03 Ctrl-C cmp #$03 Ctrl-C
bne .8 bne .8
lda #$FF lda #$FF
sta bCTRLC sta bCTRLC
bra .8 bra .8
.2 lda (pEvent) .2 lda (pEvent)
and #S.EVT.F.NET and #S.EVT.F.NET
beq .9 beq .9
ldy #S.EVT.hDEV ldy #S.EVT.hDEV
lda (pEvent),y lda (pEvent),y
cmp hDev cmp hDev
bne .9 bne .9
ldy #S.EVT.DATALO Get Frame hMem ldy #S.EVT.DATALO Get Frame hMem
lda (pEvent),y lda (pEvent),y
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>STYA ZPFrameBase1 >STYA ZPFrameBase1
ldy #S.IP.PROTOCOL ldy #S.IP.PROTOCOL
lda (ZPFrameBase1),y lda (ZPFrameBase1),y
cmp #S.IP.PROTOCOL.ICMP cmp #S.IP.PROTOCOL.ICMP
bne .9 bne .9
ldy #S.ICMP.TYPE ldy #S.ICMP.TYPE
lda (ZPFrameBase1),y lda (ZPFrameBase1),y
cmp #S.ICMP.TYPE.ECHOREP cmp #S.ICMP.TYPE.ECHOREP
bne .9 bne .9
ldy #S.ICMP.IDENTIFIER ldy #S.ICMP.IDENTIFIER
lda (ZPFrameBase1),y lda (ZPFrameBase1),y
cmp Identifier cmp Identifier
bne .9 bne .9
iny iny
lda (ZPFrameBase1),y lda (ZPFrameBase1),y
cmp Identifier+1 cmp Identifier+1
bne .9 bne .9
jsr CS.EVENT.REPLY jsr CS.EVENT.REPLY
.8 >SYSCALL SYS.DestroyEvent .8 >SYSCALL SYS.DestroyEvent
clc clc
rts rts
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
CS.EVENT.REPLY lda #PING.TIMEOUT CS.EVENT.REPLY lda #PING.TIMEOUT
sec sec
sbc TimeOut sbc TimeOut
stz TimeOut.ms stz TimeOut.ms
stz TimeOut.ms+1 stz TimeOut.ms+1
tay tay
beq .3 beq .3
.1 lda TimeOut.ms .1 lda TimeOut.ms
clc clc
adc #K.TIMER16RESOLUTION*20 adc #K.TIMER16RESOLUTION*20
sta TimeOut.ms sta TimeOut.ms
bcc .2 bcc .2
inc TimeOut+1+1 inc TimeOut+1+1
.2 dey .2 dey
bne .1 bne .1
.3 >PUSHW TimeOut.ms .3 >PUSHW TimeOut.ms
ldy #S.IP.TTL ldy #S.IP.TTL
>PUSHB (ZPFrameBase1),y >PUSHB (ZPFrameBase1),y
ldy #S.ICMP.SEQUENCE+1 ldy #S.ICMP.SEQUENCE+1
>PUSHB (ZPFrameBase1),y >PUSHB (ZPFrameBase1),y
dey dey
>PUSHB (ZPFrameBase1),y >PUSHB (ZPFrameBase1),y
ldy #S.IP.SRC+3 ldy #S.IP.SRC+3
>PUSHB (ZPFrameBase1),y >PUSHB (ZPFrameBase1),y
dey dey
>PUSHB (ZPFrameBase1),y >PUSHB (ZPFrameBase1),y
dey dey
>PUSHB (ZPFrameBase1),y >PUSHB (ZPFrameBase1),y
dey dey
>PUSHB (ZPFrameBase1),y >PUSHB (ZPFrameBase1),y
>PUSHW L.MSG3 >PUSHW L.MSG3
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
inc bReply inc bReply
rts rts
*-------------------------------------- *--------------------------------------
CS.QUIT lda hLIBTCPIP CS.QUIT lda hLIBTCPIP
>SYSCALL SYS.UnloadLibA >SYSCALL SYS.UnloadLibA
lda hLIBSTR lda hLIBSTR
>SYSCALL SYS.UnloadLibA >SYSCALL SYS.UnloadLibA
clc clc
rts rts
*-------------------------------------- *--------------------------------------
CS.END CS.END
LIBSTR >PSTRING "libstr.o" LIBSTR >PSTRING "libstr.o"
LIBTCPIP >PSTRING "libtcpip.o" LIBTCPIP >PSTRING "libtcpip.o"
SSCANF.IP >PSTRING "%d.%d.%d.%d" SSCANF.IP >PSTRING "%d.%d.%d.%d"
MSG0 >CSTRING "%S: Unknown host\n" MSG0 >CSTRING "%S: Unknown host\n"
MSG1 >CSTRING "PING %d.%d.%d.%d (%S)\n" MSG1 >CSTRING "PING %d.%d.%d.%d (%S)\n"
MSG2 >CSTRING "%d.%d.%d.%d: TimeOut/Host unreachable\n" MSG2 >CSTRING "%d.%d.%d.%d: TimeOut/Host unreachable\n"
MSG3 >CSTRING "32 bytes from %d.%d.%d.%d, icmp_seq=%D, ttl=%d, time=%D ms\n" MSG3 >CSTRING "32 bytes from %d.%d.%d.%d, icmp_seq=%D, ttl=%d, time=%D ms\n"
*-------------------------------------- *--------------------------------------
DS.START DS.START
hLIBSTR .BS 1 hLIBSTR .BS 1
hLIBTCPIP .BS 1 hLIBTCPIP .BS 1
hDev .BS 1 hDev .BS 1
DST.IP .BS 4 DST.IP .BS 4
hFrame .BS 1 hFrame .BS 1
TimeOut .BS 1 TimeOut .BS 1
TimeOut.ms .BS 2 TimeOut.ms .BS 2
Identifier .BS 2 Identifier .BS 2
Sequence .BS 2 Sequence .BS 2
bCTRLC .BS 1 bCTRLC .BS 1
bReply .BS 1 bReply .BS 1
DS.END DS.END
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE BIN/PING.S SAVE BIN/PING.S
ASM ASM

View File

@ -1,114 +1,114 @@
PR#3 PR#3
PREFIX /DATA/A2OSX PREFIX /DATA/A2OSX
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF BIN/PS .TF BIN/PS
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/KERNEL.I .INB INC/KERNEL.I
.INB INC/LIBSTR.I .INB INC/LIBSTR.I
*-------------------------------------- *--------------------------------------
ZPPTR1 .EQ ZPBIN ZPPTR1 .EQ ZPBIN
ZPPTR2 .EQ ZPBIN+2 ZPPTR2 .EQ ZPBIN+2
ZPPTR3 .EQ ZPBIN+4 ZPPTR3 .EQ ZPBIN+4
*-------------------------------------- *--------------------------------------
* Main entry point * Main entry point
*-------------------------------------- *--------------------------------------
* Code signature and INIT table * Code signature and INIT table
*-------------------------------------- *--------------------------------------
* CLD $D8 * CLD $D8
* JMP (*,x) $7C * JMP (*,x) $7C
* #JMPTABLE * #JMPTABLE
* /JMPTABLE * /JMPTABLE
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp (.1,x)
.1 .DA CS.INIT .1 .DA CS.INIT
.DA CS.RUN .DA CS.RUN
.DA CS.DOEVENT .DA CS.DOEVENT
.DA CS.QUIT .DA CS.QUIT
L.LIBSTR .DA LIBSTR L.LIBSTR .DA LIBSTR
L.MSG0 .DA MSG0 L.MSG0 .DA MSG0
L.MSG1 .DA MSG1 L.MSG1 .DA MSG1
L.MSG2 .DA MSG2 L.MSG2 .DA MSG2
.DA 0 .DA 0
.DA CS.END-CS.START Code Length To Relocate .DA CS.END-CS.START Code Length To Relocate
.DA 0 Data Segment to Allocate .DA 0 Data Segment to Allocate
*-------------------------------------- *--------------------------------------
CS.INIT >LIBLOADP L.LIBSTR CS.INIT >LIBLOADP L.LIBSTR
sta hLibStr sta hLibStr
>LDYAI TSKMGR.TABLE >LDYAI TSKMGR.TABLE
>STYA ZPPTR1 >STYA ZPPTR1
stz PS.COUNT stz PS.COUNT
>PUSHW L.MSG0 >PUSHW L.MSG0
>LIBCALL hLibStr,LIBSTR.PRINTF >LIBCALL hLibStr,LIBSTR.PRINTF
.1 lda (ZPPTR1) .1 lda (ZPPTR1)
bpl .4 bpl .4
ldy #S.PS.hARGS ldy #S.PS.hARGS
lda (ZPPTR1),y lda (ZPPTR1),y
beq .2 beq .2
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>PUSHYA >PUSHYA
bra .3 bra .3
.2 >PUSHW L.MSG2 .2 >PUSHW L.MSG2
.3 ldy #S.PS.hCMD .3 ldy #S.PS.hCMD
lda (ZPPTR1),y lda (ZPPTR1),y
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>PUSHYA >PUSHYA
ldy #S.PS.PID ldy #S.PS.PID
lda (ZPPTR1),y lda (ZPPTR1),y
>PUSHA Parent PID >PUSHA Parent PID
lda (ZPPTR1) push flags lda (ZPPTR1) push flags
>PUSHA >PUSHA
ldy #S.PS.ID ldy #S.PS.ID
lda (ZPPTR1),y lda (ZPPTR1),y
>PUSHA DevID >PUSHA DevID
>PUSHW L.MSG1 >PUSHW L.MSG1
>LIBCALL hLibStr,LIBSTR.PRINTF >LIBCALL hLibStr,LIBSTR.PRINTF
.4 lda ZPPTR1 .4 lda ZPPTR1
clc clc
adc #S.PS.SIZE adc #S.PS.SIZE
sta ZPPTR1 sta ZPPTR1
bcc .5 bcc .5
inc ZPPTR1+1 inc ZPPTR1+1
.5 inc PS.COUNT .5 inc PS.COUNT
lda PS.COUNT lda PS.COUNT
cmp #K.PS.MAX cmp #K.PS.MAX
beq .8 beq .8
jmp .1 jmp .1
.8 lda #0 tell TSKMGR that all done ok, but .8 lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory sec we do not want to stay in memory
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN CS.RUN
CS.DOEVENT clc CS.DOEVENT clc
rts rts
*-------------------------------------- *--------------------------------------
CS.QUIT lda hLibStr CS.QUIT lda hLibStr
>SYSCALL SYS.UnloadLibA >SYSCALL SYS.UnloadLibA
clc clc
rts rts
*-------------------------------------- *--------------------------------------
CS.END CS.END
hLibStr .BS 1 hLibStr .BS 1
PS.COUNT .BS 1 PS.COUNT .BS 1
LIBSTR >PSTRING "libstr.o" LIBSTR >PSTRING "libstr.o"
MSG0 >CSTRING "hPS Flags PID CMD ARGS\n" MSG0 >CSTRING "hPS Flags PID CMD ARGS\n"
MSG1 >CSTRING " %03d %b $%h %16S %32S\n" MSG1 >CSTRING " %03d %b $%h %16S %32S\n"
MSG2 >PSTRING "(none)" MSG2 >PSTRING "(none)"
MAN MAN
SAVE BIN/PS.S SAVE BIN/PS.S
ASM ASM

0
BIN/RM.S.txt Normal file
View File

View File

@ -1,153 +1,190 @@
PR#3 PR#3
PREFIX /DATA/A2OSX PREFIX /DATA/A2OSX
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF BIN/TEST .TF BIN/TEST
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/LIBSTR.I .INB INC/LIBSTR.I
*-------------------------------------- *--------------------------------------
* Main entry point * Main entry point
*-------------------------------------- *--------------------------------------
* Code signature and INIT table * Code signature and INIT table
*-------------------------------------- *--------------------------------------
* CLD $D8 * CLD $D8
* JMP (*,x) $7C * JMP (*,x) $7C
* #JMPTABLE * #JMPTABLE
* /JMPTABLE * /JMPTABLE
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp (.1,x)
.1 .DA CS.INIT .1 .DA CS.INIT
.DA CS.RUN .DA CS.RUN
.DA CS.EVENT .DA CS.EVENT
.DA CS.QUIT .DA CS.QUIT
L.LIBSTR .DA LIBSTR L.LIBSTR .DA LIBSTR
L.MSG0 .DA MSG0 L.MSG0 .DA MSG0
L.MSG1 .DA MSG1 L.MSG1 .DA MSG1
L.MSG2 .DA MSG2 L.MSG2 .DA MSG2
L.MSG3 .DA MSG3 L.MSG3 .DA MSG3
L.SSCANF.IP .DA SSCANF.IP L.SSCANF.IP .DA SSCANF.IP
L.DST.IP .DA DST.IP L.PRINTF.IP .DA PRINTF.IP
L.TEST1 .DA TEST1 L.DST.IP .DA DST.IP
L.TEST2 .DA TEST2 L.TEST1 .DA TEST1
L.TEST3 .DA TEST3 L.TEST2 .DA TEST2
.DA 0 L.TEST3 .DA TEST3
.DA CS.END-CS.START Code Length To Relocate .DA 0
.DA 0 Data Segment to Allocate .DA CS.END-CS.START Code Length To Relocate
*-------------------------------------- .DA 0 Data Segment to Allocate
CS.INIT >LIBLOADP L.LIBSTR *--------------------------------------
sta hLIBSTR CS.INIT >LIBLOADP L.LIBSTR
sta hLIBSTR
ldy #S.PS.hOUTDEV
lda (TSKMGR.TSKPTR),y ldy #S.PS.hPREFIX
>SYSCALL SYS.DevSelectA lda (pPsContext),y
>SYSCALL SYS.GetMemPtrA
ldy #S.PS.hPREFIX >PUSHYA
lda (TSKMGR.TSKPTR),y >PUSHW L.MSG0
>SYSCALL SYS.GetMemPtrA >LIBCALL hLIBSTR,LIBSTR.PRINTF
>PUSHYA
>PUSHW L.MSG0 ldy #S.PS.hCS
>LIBCALL hLIBSTR,LIBSTR.PRINTF lda (pPsContext),y
>SYSCALL SYS.GetMemByIDA
ldy #S.PS.hCS >STYA ZPQuickPtr1
lda (TSKMGR.TSKPTR),y ldy #S.MEM.BIN
>SYSCALL SYS.GetMemByIDA lda (ZPQuickPtr1),y
>STYA ZPQuickPtr1 >SYSCALL SYS.GetMemPtrA
ldy #S.MEM.BIN >PUSHYA
lda (ZPQuickPtr1),y >PUSHW L.MSG1
>SYSCALL SYS.GetMemPtrA >LIBCALL hLIBSTR,LIBSTR.PRINTF
>PUSHYA
>PUSHW L.MSG1 ldy #S.PS.hARGS
>LIBCALL hLIBSTR,LIBSTR.PRINTF lda (pPsContext),y
>SYSCALL SYS.GetMemPtrA
ldy #S.PS.hARGS >PUSHYA
lda (TSKMGR.TSKPTR),y ldy #S.PS.hCMD
>SYSCALL SYS.GetMemPtrA lda (pPsContext),y
>PUSHYA >SYSCALL SYS.GetMemPtrA
ldy #S.PS.hCMD >PUSHYA
lda (TSKMGR.TSKPTR),y >PUSHW L.MSG2
>SYSCALL SYS.GetMemPtrA >LIBCALL hLIBSTR,LIBSTR.PRINTF
>PUSHYA
>PUSHW L.MSG2 ldy #S.PS.hENV
>LIBCALL hLIBSTR,LIBSTR.PRINTF lda (pPsContext),y
>SYSCALL SYS.GetMemPtrA
ldy #S.PS.hENV >STYA ZPBIN
lda (TSKMGR.TSKPTR),y
>SYSCALL SYS.GetMemPtrA .1 lda (ZPBIN)
>STYA ZPBIN beq .2
>PUSHW ZPBIN
.1 lda (ZPBIN) >PUSHW L.MSG3
beq .2 >LIBCALL hLIBSTR,LIBSTR.PRINTF
>PUSHW ZPBIN lda (ZPBIN)
>PUSHW L.MSG3 sec
>LIBCALL hLIBSTR,LIBSTR.PRINTF adc ZPBIN
lda (ZPBIN) sta ZPBIN
sec bcc .1
adc ZPBIN inc ZPBIN+1
sta ZPBIN bra .1
bcc .1
inc ZPBIN+1 .2 >PUSHW L.DST.IP
bra .1 >PUSHW L.SSCANF.IP
>PUSHW L.TEST1
.2 >PUSHW L.DST.IP >LIBCALL hLIBSTR,LIBSTR.SSCANF
>PUSHW L.SSCANF.IP
>PUSHW L.TEST1 >PUSHB DST.IP+3
>LIBCALL hLIBSTR,LIBSTR.SSCANF >PUSHB DST.IP+2
>PUSHB DST.IP+1
lda DST.IP+3 >PUSHB DST.IP
jsr PRBYTE >PUSHW L.PRINTF.IP
jsr CROUT >LIBCALL hLIBSTR,LIBSTR.PRINTF
>PUSHW L.DST.IP >PUSHW L.DST.IP
>PUSHW L.SSCANF.IP >PUSHW L.SSCANF.IP
>PUSHW L.TEST2 >PUSHW L.TEST2
>LIBCALL hLIBSTR,LIBSTR.SSCANF >LIBCALL hLIBSTR,LIBSTR.SSCANF
lda DST.IP+3 >PUSHB DST.IP+3
jsr PRBYTE >PUSHB DST.IP+2
jsr CROUT >PUSHB DST.IP+1
>PUSHB DST.IP
>PUSHW L.DST.IP >PUSHW L.PRINTF.IP
>PUSHW L.SSCANF.IP >LIBCALL hLIBSTR,LIBSTR.PRINTF
>PUSHW L.TEST3
>LIBCALL hLIBSTR,LIBSTR.SSCANF >PUSHW L.DST.IP
>PUSHW L.SSCANF.IP
lda DST.IP+3 >PUSHW L.TEST3
jsr PRBYTE >LIBCALL hLIBSTR,LIBSTR.SSCANF
jsr CROUT
>PUSHB DST.IP+3
lda #0 tell TSKMGR that all done ok, but >PUSHB DST.IP+2
sec we do not want to stay in memory >PUSHB DST.IP+1
rts >PUSHB DST.IP
*-------------------------------------- >PUSHW L.PRINTF.IP
CS.RUN >LIBCALL hLIBSTR,LIBSTR.PRINTF
CS.EVENT clc
rts lda #0 tell TSKMGR that all done ok, but
*-------------------------------------- sec we do not want to stay in memory
CS.QUIT lda hLIBSTR rts
>SYSCALL SYS.FreeMemA *--------------------------------------
clc CS.RUN
rts CS.EVENT clc
*-------------------------------------- rts
CS.END *--------------------------------------
hLIBSTR .BS 1 CS.QUIT lda hLIBSTR
LIBSTR >PSTRING "libstr.o" >SYSCALL SYS.FreeMemA
MSG0 >CSTRING "PREFIX=%S\n" clc
MSG1 >CSTRING "BIN={%S}\n" rts
MSG2 >CSTRING "CMD={%S},ARGS={%S}\nENV:\n" *--------------------------------------
MSG3 >CSTRING " %S\n" PRBYTE pha
TEST1 >PSTRING "198.168.1.1" lsr
TEST2 >PSTRING "198.168.1.23" lsr
TEST3 >PSTRING "198.168.1.4" lsr
SSCANF.IP >PSTRING "%d.%d.%d.%d" lsr
DST.IP .BS 4 ora #$B0
*-------------------------------------- cmp #$BA
MAN bcc .1
SAVE BIN/TEST.S adc #6
ASM .1 jsr COUT
pla
PRHEX and #$0F
ora #$B0
cmp #$BA
bcc COUT
adc #6
bra COUT
*--------------------------------------
CROUT lda #13
*--------------------------------------
COUT phx
phy
>PUSHA
ldy #S.PS.hOUTDEV
lda (pPsContext),y
>SYSCALL SYS.DevOutA
ply
plx
rts
*--------------------------------------
CS.END
hLIBSTR .BS 1
LIBSTR >PSTRING "libstr.o"
MSG0 >CSTRING "PREFIX=%S\n"
MSG1 >CSTRING "BIN={%S}\n"
MSG2 >CSTRING "CMD={%S},ARGS={%S}\nENV:\n"
MSG3 >CSTRING " %S\n"
TEST1 >PSTRING "198.168.1.1"
TEST2 >PSTRING "198.168.1.23"
TEST3 >PSTRING "198.168.1.4"
SSCANF.IP >PSTRING "%d.%d.%d.%d"
PRINTF.IP >CSTRING "IP=%d.%d.%d.%d\n"
DST.IP .BS 4
*--------------------------------------
MAN
SAVE BIN/TEST.S
ASM

0
BIN/UMOUNT.S.txt Normal file
View File

View File

@ -1,57 +1,57 @@
PR#3 PR#3
PREFIX /DATA/A2OSX PREFIX /DATA/A2OSX
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF .TF
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/MONITOR.I .INB INC/MONITOR.I
*-------------------------------------- *--------------------------------------
* Main entry point * Main entry point
*-------------------------------------- *--------------------------------------
* Code signature and INIT table * Code signature and INIT table
*-------------------------------------- *--------------------------------------
* CLD $D8 * CLD $D8
* JMP (*,x) $7C * JMP (*,x) $7C
* #JMPTABLE * #JMPTABLE
* /JMPTABLE * /JMPTABLE
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp (.1,x)
.1 .DA CS.INIT .1 .DA CS.INIT
.DA CS.RUN .DA CS.RUN
.DA CS.EVENT .DA CS.EVENT
.DA CS.QUIT .DA CS.QUIT
.DA 0 .DA 0
.DA CS.END-CS.START Code Length To Relocate .DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segemnt to Allocate .DA DS.END-DS.START Data Segemnt to Allocate
*-------------------------------------- *--------------------------------------
CS.INIT CS.INIT
CS.INIT.EXIT lda #0 tell TSKMGR that all done ok, but CS.INIT.EXIT lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory sec we do not want to stay in memory
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN clc CS.RUN clc
rts rts
*-------------------------------------- *--------------------------------------
CS.EVENT clc CS.EVENT clc
rts rts
*-------------------------------------- *--------------------------------------
CS.QUIT clc CS.QUIT clc
rts rts
*-------------------------------------- *--------------------------------------
CS.END CS.END
DS.START DS.START
*-------------------------------------- *--------------------------------------
*-------------------------------------- *--------------------------------------
DS.END DS.END
MAN MAN
SAVE SBIN/ .S SAVE SBIN/ .S
ASM ASM