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

View File

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

View File

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

View File

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

View File

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

View File

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

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

View File

@ -1,183 +1,183 @@
PR#3
PREFIX /DATA/A2OSX
NEW
INC 1
AUTO 6
.LIST ON
.OP 65C02
.OR $2000
.TF BIN/DNS
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/KERNEL.I
.INB INC/LIBSTR.I
.INB INC/LIBTCPIP.I
*--------------------------------------
ZPPTR1 .EQ ZPBIN
*--------------------------------------
* Main entry point
*--------------------------------------
* Code signature and INIT table
*--------------------------------------
* CLD $D8
* JMP (*,x) $7C
* #JMPTABLE
* /JMPTABLE
*--------------------------------------
CS.START cld
jmp (.1,x)
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.EVENT
.DA CS.QUIT
L.LIBSTR .DA LIBSTR
L.LIBTCPIP .DA LIBTCPIP
L.SSCANF.IP .DA SSCANF.IP
L.IP .DA IP
L.MSG0 .DA MSG0
L.MSG1 .DA MSG1
.DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
*--------------------------------------
CS.INIT stz hHostName
stz hIP
>LIBLOADP L.LIBSTR
sta hLIBSTR
>LIBLOADP L.LIBTCPIP
sta hLIBTCPIP
ldy #S.PS.hARGS
lda (pPsContext),y
bne CS.INIT.ADD
jmp CS.INIT.DUMP
CS.INIT.ADD >PUSHA
>PUSHBI $20 Push SEP=' '
>PUSHBI 1 Push 1 for getting hostname
>SYSCALL SYS.PStrGetTkn
bcs .91
sta hHostName
ldy #S.PS.hARGS
lda (pPsContext),y
>PUSHA
>PUSHBI $20 Push SEP=' '
>PUSHBI 2 Push 2 for getting IP
>SYSCALL SYS.PStrGetTkn
.91 bcs .9
sta hIP
>PUSHW L.IP
>PUSHW L.SSCANF.IP
lda hIP
>SYSCALL SYS.GetMemPtrA
>PUSHYA
>LIBCALL hLIBSTR,LIBSTR.SSCANF
bcs .9
>PUSHWI 1800 default TTL
>PUSHW L.IP
>PUSHB hHostName
>LIBCALL hLIBTCPIP,LIBTCPIP.DNS.ADD
bcs .99
lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory
rts
.9 lda #SYSMGR.ERRSYN
sec
.99 rts
CS.INIT.DUMP >LIBCALL hLIBTCPIP,LIBTCPIP.DNS.GETCACHE
>STYA ZPPTR1
>PUSHW L.MSG0
>LIBCALL hLIBSTR,LIBSTR.PRINTF
ldx #K.DNSCACHE.SIZE
.1 phx
lda (ZPPTR1)
beq .2
ldy #S.DNSCACHE.IP+3
lda (ZPPTR1),y
>PUSHA
dey
lda (ZPPTR1),y
>PUSHA
dey
lda (ZPPTR1),y
>PUSHA
dey
lda (ZPPTR1),y
>PUSHA
ldy #S.DNSCACHE.TTL
lda (ZPPTR1),y
pha
iny
lda (ZPPTR1),y
ply
>PUSHYA
ldy #S.DNSCACHE.hNAME
lda (ZPPTR1),y
>SYSCALL SYS.GetMemPtrA
>PUSHYA
>PUSHB (ZPPTR1)
>PUSHW L.MSG1
>LIBCALL hLIBSTR,LIBSTR.PRINTF
.2 lda ZPPTR1
clc
adc #S.DNSCACHE
sta ZPPTR1
bcc .3
inc ZPPTR1+1
.3 plx
dex
bne .1
lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory
rts
*--------------------------------------
CS.RUN
CS.EVENT clc
rts
*--------------------------------------
CS.QUIT lda hHostName
beq .1
>SYSCALL SYS.FreeMemA
.1 lda hIP
beq .2
>SYSCALL SYS.FreeMemA
.2 lda hLIBTCPIP
>SYSCALL SYS.UnloadLibA
lda hLIBSTR
>SYSCALL SYS.UnloadLibA
clc
rts
*--------------------------------------
CS.END
LIBSTR >PSTRING "libstr.o"
LIBTCPIP >PSTRING "libtcpip.o"
SSCANF.IP >PSTRING "%d.%d.%d.%d"
MSG0 >CSTRING "STS Hostname TTL IP Address\n"
MSG1 >CSTRING "$%h %32S %05D %d.%d.%d.%d\n"
DS.START
hLIBSTR .BS 1
hLIBTCPIP .BS 1
hHostName .BS 1
hIP .BS 1
IP .BS 4
DS.END
MAN
SAVE BIN/DNS.S
ASM
PR#3
PREFIX /DATA/A2OSX
NEW
INC 1
AUTO 6
.LIST ON
.OP 65C02
.OR $2000
.TF BIN/DNS
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/KERNEL.I
.INB INC/LIBSTR.I
.INB INC/LIBTCPIP.I
*--------------------------------------
ZPPTR1 .EQ ZPBIN
*--------------------------------------
* Main entry point
*--------------------------------------
* Code signature and INIT table
*--------------------------------------
* CLD $D8
* JMP (*,x) $7C
* #JMPTABLE
* /JMPTABLE
*--------------------------------------
CS.START cld
jmp (.1,x)
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.EVENT
.DA CS.QUIT
L.LIBSTR .DA LIBSTR
L.LIBTCPIP .DA LIBTCPIP
L.SSCANF.IP .DA SSCANF.IP
L.IP .DA IP
L.MSG0 .DA MSG0
L.MSG1 .DA MSG1
.DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
*--------------------------------------
CS.INIT stz hHostName
stz hIP
>LIBLOADP L.LIBSTR
sta hLIBSTR
>LIBLOADP L.LIBTCPIP
sta hLIBTCPIP
ldy #S.PS.hARGS
lda (pPsContext),y
bne CS.INIT.ADD
jmp CS.INIT.DUMP
CS.INIT.ADD >PUSHA
>PUSHBI $20 Push SEP=' '
>PUSHBI 1 Push 1 for getting hostname
>SYSCALL SYS.PStrGetTkn
bcs .91
sta hHostName
ldy #S.PS.hARGS
lda (pPsContext),y
>PUSHA
>PUSHBI $20 Push SEP=' '
>PUSHBI 2 Push 2 for getting IP
>SYSCALL SYS.PStrGetTkn
.91 bcs .9
sta hIP
>PUSHW L.IP
>PUSHW L.SSCANF.IP
lda hIP
>SYSCALL SYS.GetMemPtrA
>PUSHYA
>LIBCALL hLIBSTR,LIBSTR.SSCANF
bcs .9
>PUSHWI 1800 default TTL
>PUSHW L.IP
>PUSHB hHostName
>LIBCALL hLIBTCPIP,LIBTCPIP.DNS.ADD
bcs .99
lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory
rts
.9 lda #SYSMGR.ERRSYN
sec
.99 rts
CS.INIT.DUMP >LIBCALL hLIBTCPIP,LIBTCPIP.DNS.GETCACHE
>STYA ZPPTR1
>PUSHW L.MSG0
>LIBCALL hLIBSTR,LIBSTR.PRINTF
ldx #K.DNSCACHE.SIZE
.1 phx
lda (ZPPTR1)
beq .2
ldy #S.DNSCACHE.IP+3
lda (ZPPTR1),y
>PUSHA
dey
lda (ZPPTR1),y
>PUSHA
dey
lda (ZPPTR1),y
>PUSHA
dey
lda (ZPPTR1),y
>PUSHA
ldy #S.DNSCACHE.TTL
lda (ZPPTR1),y
pha
iny
lda (ZPPTR1),y
ply
>PUSHYA
ldy #S.DNSCACHE.hNAME
lda (ZPPTR1),y
>SYSCALL SYS.GetMemPtrA
>PUSHYA
>PUSHB (ZPPTR1)
>PUSHW L.MSG1
>LIBCALL hLIBSTR,LIBSTR.PRINTF
.2 lda ZPPTR1
clc
adc #S.DNSCACHE
sta ZPPTR1
bcc .3
inc ZPPTR1+1
.3 plx
dex
bne .1
lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory
rts
*--------------------------------------
CS.RUN
CS.EVENT clc
rts
*--------------------------------------
CS.QUIT lda hHostName
beq .1
>SYSCALL SYS.FreeMemA
.1 lda hIP
beq .2
>SYSCALL SYS.FreeMemA
.2 lda hLIBTCPIP
>SYSCALL SYS.UnloadLibA
lda hLIBSTR
>SYSCALL SYS.UnloadLibA
clc
rts
*--------------------------------------
CS.END
LIBSTR >PSTRING "libstr.o"
LIBTCPIP >PSTRING "libtcpip.o"
SSCANF.IP >PSTRING "%d.%d.%d.%d"
MSG0 >CSTRING "STS Hostname TTL IP Address\n"
MSG1 >CSTRING "$%h %32S %05D %d.%d.%d.%d\n"
DS.START
hLIBSTR .BS 1
hLIBTCPIP .BS 1
hHostName .BS 1
hIP .BS 1
IP .BS 4
DS.END
MAN
SAVE BIN/DNS.S
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
PREFIX /DATA/A2OSX
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
.OR $2000
.TF BIN/LS
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/LIBSTR.I
*--------------------------------------
* Main entry point
*--------------------------------------
* Code signature and INIT table
*--------------------------------------
* CLD $D8
* JMP (*,x) $7C
* #JMPTABLE
* /JMPTABLE
*--------------------------------------
CS.START cld
jmp (.1,x)
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.LIB.LIBSTR .DA LIB.LIBSTR
L.MSG.VOL.HEADER .DA MSG.VOL.HEADER
L.MSG.DIR.HEADER .DA MSG.DIR.HEADER
L.MSG.VOL .DA MSG.VOL
L.MSG.DIR .DA MSG.DIR
L.MSG.FILE .DA MSG.FILE
L.MSG.VOL.END .DA MSG.VOL.END
L.MSG.DIR.END .DA MSG.DIR.END
L.PRODOS.FT.TXT .DA PRODOS.FT.TXT
.DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
*--------------------------------------
CS.INIT >LIBLOADP L.LIB.LIBSTR
sta hLIBSTR
stz hDIRPATH
stz hS.LISTDIR
stz hVOLHEADER
stz hDIRHEADER
stz bSTOP
stz bCANCEL
ldy #S.PS.hARGS
lda (pPsContext),y
beq .1
>SYSCALL SYS.GetMemPtrA
>STYA ZPQuickPtr1
lda (ZPQuickPtr1)
beq .1
ldy #1
lda (ZPQuickPtr1),y
cmp #'/'
bne .10
ldy #S.PS.hARGS
bra .2
.10 ldy #S.PS.hARGS
lda (pPsContext),y
>PUSHA
ldy #S.PS.hPREFIX
lda (pPsContext),y
>PUSHA
>SYSCALL SYS.PStrCat
sta hDIRPATH
bra .3
.1 ldy #S.PS.hPREFIX
.2 lda (pPsContext),y
.3 >SYSCALL SYS.ListDirInitA
bcs .98
sta hS.LISTDIR
lda (pPsContext)
ora #S.PS.F.EVENT Now accept events
sta (pPsContext)
clc
rts
.98 pha
lda hLIBSTR
>SYSCALL SYS.FreeMemA
pla
sec
rts
*--------------------------------------
CS.RUN lda bCANCEL
beq .1
sec
rts
.1 lda bSTOP
beq .2
clc
rts
.2 lda hS.LISTDIR
>SYSCALL SYS.ListDirNextA
bcc .3
jmp Push.Footer
.3 pha
>SYSCALL SYS.GetMemPtrA
>STYA ZPQuickPtr1
lda (ZPQuickPtr1)
pha
and #$0F
sta (ZPQuickPtr1) Adjust Filename len
pla
and #$F0
cmp #$F0 Volume ($F) HEADER ?
bne .31
pla
sta hVOLHEADER
>PUSHW ZPQuickPtr1
>PUSHW L.MSG.VOL.HEADER
>LIBCALL hLIBSTR,LIBSTR.PRINTF
clc
rts
.31 cmp #$E0 Dir ($E) HEADER ?
bne .4
pla
sta hDIRHEADER
>PUSHW ZPQuickPtr1
>PUSHW L.MSG.DIR.HEADER
>LIBCALL hLIBSTR,LIBSTR.PRINTF
clc
rts
.4 cmp #$D0 Directory ?
bne .5
jsr Push.Dates
jsr Push.Dir
>PUSHW L.MSG.DIR
bra .8
.5 cmp #$C0 Volume Name ?
bne .6
>PUSHW ZPQuickPtr1
>PUSHW L.MSG.VOL
bra .8
.6 jsr Push.Dates File
jsr Push.File
>PUSHW L.MSG.FILE
.8 >LIBCALL hLIBSTR,LIBSTR.PRINTF
.9 pla
>SYSCALL SYS.FreeMemA
clc
rts
*--------------------------------------
Push.Dir ldy #$1E get access mask
lda (ZPQuickPtr1),y
>PUSHA
>PUSHW ZPQuickPtr1
rts
*--------------------------------------
Push.File >PUSHBI 0 4th byte of file len=0
ldy #$17 get file len (3 bytes)
lda (ZPQuickPtr1),y
>PUSHA
dey
lda (ZPQuickPtr1),y
>PUSHA
dey
lda (ZPQuickPtr1),y
>PUSHA
ldy #$1E get access mask
lda (ZPQuickPtr1),y
>PUSHA
ldy #$20 get aux type
lda (ZPQuickPtr1),y
>PUSHA
dey
lda (ZPQuickPtr1),y
>PUSHA
ldy #$10 get filetype
lda L.PRODOS.FT.TXT
sta ZPQuickPtr2
lda L.PRODOS.FT.TXT+1
sta ZPQuickPtr2+1
ldx #0
.1 lda (ZPQuickPtr1),y
cmp PRODOS.FT.ID,x
beq .3
lda ZPQuickPtr2
clc
adc #4
sta ZPQuickPtr2
bcc .2
inc ZPQuickPtr2+1
.2 inx
cpx PRODOS.FT.COUNT
bne .1
lda (ZPQuickPtr1),y
lsr
lsr
lsr
lsr
tax
lda HEXDIGIT,x
sta PRODOS.FT.DFLT+2
lda (ZPQuickPtr1),y
and #$0F
tax
lda HEXDIGIT,x
sta PRODOS.FT.DFLT+3
.3 >PUSHW ZPQuickPtr2
>PUSHW ZPQuickPtr1
>LIBCALL hLIBSTR,LIBSTR.LCASEP
>PUSHW ZPQuickPtr1
rts
*--------------------------------------
Push.Dates ldy #$24 get modification time
lda (ZPQuickPtr1),y
>PUSHA
dey
lda (ZPQuickPtr1),y
>PUSHA
ldy #$22
lda (ZPQuickPtr1),y
>PUSHA
dey
lda (ZPQuickPtr1),y
>PUSHA
ldy #$1B get creation time
lda (ZPQuickPtr1),y
>PUSHA
dey
lda (ZPQuickPtr1),y
>PUSHA
ldy #$19
lda (ZPQuickPtr1),y
>PUSHA
dey
lda (ZPQuickPtr1),y
>PUSHA
rts
*--------------------------------------
Push.Footer lda hVOLHEADER
beq .20
>SYSCALL SYS.GetMemPtrA
>STYA ZPQuickPtr1
ldy #22 file_count
lda (ZPQuickPtr1),y
>PUSHA
dey
lda (ZPQuickPtr1),y
>PUSHA
>PUSHW L.MSG.VOL.END
>LIBCALL hLIBSTR,LIBSTR.PRINTF
.20 lda hDIRHEADER
beq .21
>SYSCALL SYS.GetMemPtrA
>STYA ZPQuickPtr1
ldy #22 file_count
lda (ZPQuickPtr1),y
>PUSHA
dey
lda (ZPQuickPtr1),y
>PUSHA
>PUSHW L.MSG.DIR.END
>LIBCALL hLIBSTR,LIBSTR.PRINTF
.21 sec
rts
*--------------------------------------
CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device?
lda (pEvent),y
ldy #S.PS.hINDEV
cmp (pPsContext),y
bne .9
lda (pEvent)
and #S.EVT.F.KEY is it a KEY event?
beq .9
ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
lda (pEvent),y
bne .9
ldy #S.EVT.DATALO
lda (pEvent),y
cmp #$03 Ctrl-C
bne .1
lda #$FF
sta bCANCEL
bra .8
.1 cmp #$13 Ctrl-S
bne .8
lda bSTOP
eor #$FF
sta bSTOP
.8 >SYSCALL SYS.DestroyEvent
clc
rts
.9 sec
rts
*--------------------------------------
CS.QUIT lda hVOLHEADER
beq .1
>SYSCALL SYS.FreeMemA
.1 lda hDIRHEADER
beq .2
>SYSCALL SYS.FreeMemA
.2 lda hS.LISTDIR
>SYSCALL SYS.ListDirCloseA
lda hDIRPATH
beq .3
>SYSCALL SYS.FreeMemA
.3 lda hLIBSTR
>SYSCALL SYS.UnloadLibA
clc
rts
*--------------------------------------
CS.END
LIB.LIBSTR >PSTRING "libstr.o"
MSG.VOL.HEADER >CSTRING "Volume Listing Of %S\n"
MSG.DIR.HEADER >CSTRING "Directory Listing Of %S\n"
MSG.VOL >CSTRING "/%S\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.VOL.END >CSTRING "%D Files In Volume.\n"
MSG.DIR.END >CSTRING "%D Files In Directory.\n"
*--------------------------------------
PRODOS.FT.COUNT .HS 07
PRODOS.FT.ID .HS 0406FAFCFDE2FF
PRODOS.FT.TXT
T04 >PSTRING "TXT"
T06 >PSTRING "BIN"
TFA >PSTRING "S-C"
TFC >PSTRING "BAS"
TFD >PSTRING "VAR"
TE2 >PSTRING "ATK"
TFF >PSTRING "SYS"
PRODOS.FT.DFLT >PSTRING "$ "
HEXDIGIT .AS '0123456789ABCDEF'
*--------------------------------------
DS.START
hLIBSTR .BS 1
hDIRPATH .BS 1
hS.LISTDIR .BS 1
hVOLHEADER .BS 1
hDIRHEADER .BS 1
bSTOP .BS 1
bCANCEL .BS 1
DS.END
*--------------------------------------
MAN
SAVE BIN/LS.S
ASM
PR#3
PREFIX /DATA/A2OSX
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
.OR $2000
.TF BIN/LS
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/LIBSTR.I
*--------------------------------------
* Main entry point
*--------------------------------------
* Code signature and INIT table
*--------------------------------------
* CLD $D8
* JMP (*,x) $7C
* #JMPTABLE
* /JMPTABLE
*--------------------------------------
CS.START cld
jmp (.1,x)
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.LIB.LIBSTR .DA LIB.LIBSTR
L.MSG.VOL.HEADER .DA MSG.VOL.HEADER
L.MSG.DIR.HEADER .DA MSG.DIR.HEADER
L.MSG.VOL .DA MSG.VOL
L.MSG.DIR .DA MSG.DIR
L.MSG.FILE .DA MSG.FILE
L.MSG.VOL.END .DA MSG.VOL.END
L.MSG.DIR.END .DA MSG.DIR.END
L.PRODOS.FT.TXT .DA PRODOS.FT.TXT
.DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
*--------------------------------------
CS.INIT >LIBLOADP L.LIB.LIBSTR
sta hLIBSTR
stz hDIRPATH
stz hS.LISTDIR
stz hVOLHEADER
stz hDIRHEADER
stz bSTOP
stz bCANCEL
ldy #S.PS.hARGS
lda (pPsContext),y
beq .1
>SYSCALL SYS.GetMemPtrA
>STYA ZPQuickPtr1
lda (ZPQuickPtr1)
beq .1
ldy #1
lda (ZPQuickPtr1),y
cmp #'/'
bne .10
ldy #S.PS.hARGS
bra .2
.10 ldy #S.PS.hARGS
lda (pPsContext),y
>PUSHA
ldy #S.PS.hPREFIX
lda (pPsContext),y
>PUSHA
>SYSCALL SYS.PStrCat
sta hDIRPATH
bra .3
.1 ldy #S.PS.hPREFIX
.2 lda (pPsContext),y
.3 >SYSCALL SYS.ListDirInitA
bcs .98
sta hS.LISTDIR
lda (pPsContext)
ora #S.PS.F.EVENT Now accept events
sta (pPsContext)
clc
rts
.98 pha
lda hLIBSTR
>SYSCALL SYS.FreeMemA
pla
sec
rts
*--------------------------------------
CS.RUN lda bCANCEL
beq .1
sec
rts
.1 lda bSTOP
beq .2
clc
rts
.2 lda hS.LISTDIR
>SYSCALL SYS.ListDirNextA
bcc .3
jmp Push.Footer
.3 pha
>SYSCALL SYS.GetMemPtrA
>STYA ZPQuickPtr1
lda (ZPQuickPtr1)
pha
and #$0F
sta (ZPQuickPtr1) Adjust Filename len
pla
and #$F0
cmp #$F0 Volume ($F) HEADER ?
bne .31
pla
sta hVOLHEADER
>PUSHW ZPQuickPtr1
>PUSHW L.MSG.VOL.HEADER
>LIBCALL hLIBSTR,LIBSTR.PRINTF
clc
rts
.31 cmp #$E0 Dir ($E) HEADER ?
bne .4
pla
sta hDIRHEADER
>PUSHW ZPQuickPtr1
>PUSHW L.MSG.DIR.HEADER
>LIBCALL hLIBSTR,LIBSTR.PRINTF
clc
rts
.4 cmp #$D0 Directory ?
bne .5
jsr Push.Dates
jsr Push.Dir
>PUSHW L.MSG.DIR
bra .8
.5 cmp #$C0 Volume Name ?
bne .6
>PUSHW ZPQuickPtr1
>PUSHW L.MSG.VOL
bra .8
.6 jsr Push.Dates File
jsr Push.File
>PUSHW L.MSG.FILE
.8 >LIBCALL hLIBSTR,LIBSTR.PRINTF
.9 pla
>SYSCALL SYS.FreeMemA
clc
rts
*--------------------------------------
Push.Dir ldy #$1E get access mask
lda (ZPQuickPtr1),y
>PUSHA
>PUSHW ZPQuickPtr1
rts
*--------------------------------------
Push.File >PUSHBI 0 4th byte of file len=0
ldy #$17 get file len (3 bytes)
lda (ZPQuickPtr1),y
>PUSHA
dey
lda (ZPQuickPtr1),y
>PUSHA
dey
lda (ZPQuickPtr1),y
>PUSHA
ldy #$1E get access mask
lda (ZPQuickPtr1),y
>PUSHA
ldy #$20 get aux type
lda (ZPQuickPtr1),y
>PUSHA
dey
lda (ZPQuickPtr1),y
>PUSHA
ldy #$10 get filetype
lda L.PRODOS.FT.TXT
sta ZPQuickPtr2
lda L.PRODOS.FT.TXT+1
sta ZPQuickPtr2+1
ldx #0
.1 lda (ZPQuickPtr1),y
cmp PRODOS.FT.ID,x
beq .3
lda ZPQuickPtr2
clc
adc #4
sta ZPQuickPtr2
bcc .2
inc ZPQuickPtr2+1
.2 inx
cpx PRODOS.FT.COUNT
bne .1
lda (ZPQuickPtr1),y
lsr
lsr
lsr
lsr
tax
lda HEXDIGIT,x
sta PRODOS.FT.DFLT+2
lda (ZPQuickPtr1),y
and #$0F
tax
lda HEXDIGIT,x
sta PRODOS.FT.DFLT+3
.3 >PUSHW ZPQuickPtr2
>PUSHW ZPQuickPtr1
>LIBCALL hLIBSTR,LIBSTR.LCASEP
>PUSHW ZPQuickPtr1
rts
*--------------------------------------
Push.Dates ldy #$24 get modification time
lda (ZPQuickPtr1),y
>PUSHA
dey
lda (ZPQuickPtr1),y
>PUSHA
ldy #$22
lda (ZPQuickPtr1),y
>PUSHA
dey
lda (ZPQuickPtr1),y
>PUSHA
ldy #$1B get creation time
lda (ZPQuickPtr1),y
>PUSHA
dey
lda (ZPQuickPtr1),y
>PUSHA
ldy #$19
lda (ZPQuickPtr1),y
>PUSHA
dey
lda (ZPQuickPtr1),y
>PUSHA
rts
*--------------------------------------
Push.Footer lda hVOLHEADER
beq .20
>SYSCALL SYS.GetMemPtrA
>STYA ZPQuickPtr1
ldy #22 file_count
lda (ZPQuickPtr1),y
>PUSHA
dey
lda (ZPQuickPtr1),y
>PUSHA
>PUSHW L.MSG.VOL.END
>LIBCALL hLIBSTR,LIBSTR.PRINTF
.20 lda hDIRHEADER
beq .21
>SYSCALL SYS.GetMemPtrA
>STYA ZPQuickPtr1
ldy #22 file_count
lda (ZPQuickPtr1),y
>PUSHA
dey
lda (ZPQuickPtr1),y
>PUSHA
>PUSHW L.MSG.DIR.END
>LIBCALL hLIBSTR,LIBSTR.PRINTF
.21 sec
rts
*--------------------------------------
CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device?
lda (pEvent),y
ldy #S.PS.hINDEV
cmp (pPsContext),y
bne .9
lda (pEvent)
and #S.EVT.F.KEY is it a KEY event?
beq .9
ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
lda (pEvent),y
bne .9
ldy #S.EVT.DATALO
lda (pEvent),y
cmp #$03 Ctrl-C
bne .1
lda #$FF
sta bCANCEL
bra .8
.1 cmp #$13 Ctrl-S
bne .8
lda bSTOP
eor #$FF
sta bSTOP
.8 >SYSCALL SYS.DestroyEvent
clc
rts
.9 sec
rts
*--------------------------------------
CS.QUIT lda hVOLHEADER
beq .1
>SYSCALL SYS.FreeMemA
.1 lda hDIRHEADER
beq .2
>SYSCALL SYS.FreeMemA
.2 lda hS.LISTDIR
>SYSCALL SYS.ListDirCloseA
lda hDIRPATH
beq .3
>SYSCALL SYS.FreeMemA
.3 lda hLIBSTR
>SYSCALL SYS.UnloadLibA
clc
rts
*--------------------------------------
CS.END
LIB.LIBSTR >PSTRING "libstr.o"
MSG.VOL.HEADER >CSTRING "Volume Listing Of %S\n"
MSG.DIR.HEADER >CSTRING "Directory Listing Of %S\n"
MSG.VOL >CSTRING "/%S\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.VOL.END >CSTRING "%D Files In Volume.\n"
MSG.DIR.END >CSTRING "%D Files In Directory.\n"
*--------------------------------------
PRODOS.FT.COUNT .HS 07
PRODOS.FT.ID .HS 0406FAFCFDE2FF
PRODOS.FT.TXT
T04 >PSTRING "TXT"
T06 >PSTRING "BIN"
TFA >PSTRING "S-C"
TFC >PSTRING "BAS"
TFD >PSTRING "VAR"
TE2 >PSTRING "ATK"
TFF >PSTRING "SYS"
PRODOS.FT.DFLT >PSTRING "$ "
HEXDIGIT .AS '0123456789ABCDEF'
*--------------------------------------
DS.START
hLIBSTR .BS 1
hDIRPATH .BS 1
hS.LISTDIR .BS 1
hVOLHEADER .BS 1
hDIRHEADER .BS 1
bSTOP .BS 1
bCANCEL .BS 1
DS.END
*--------------------------------------
MAN
SAVE BIN/LS.S
ASM

View File

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

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

View File

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

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

View File

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

View File

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

View File

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

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

View File

@ -1,153 +1,190 @@
PR#3
PREFIX /DATA/A2OSX
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
.OR $2000
.TF BIN/TEST
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/LIBSTR.I
*--------------------------------------
* Main entry point
*--------------------------------------
* Code signature and INIT table
*--------------------------------------
* CLD $D8
* JMP (*,x) $7C
* #JMPTABLE
* /JMPTABLE
*--------------------------------------
CS.START cld
jmp (.1,x)
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.EVENT
.DA CS.QUIT
L.LIBSTR .DA LIBSTR
L.MSG0 .DA MSG0
L.MSG1 .DA MSG1
L.MSG2 .DA MSG2
L.MSG3 .DA MSG3
L.SSCANF.IP .DA SSCANF.IP
L.DST.IP .DA DST.IP
L.TEST1 .DA TEST1
L.TEST2 .DA TEST2
L.TEST3 .DA TEST3
.DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA 0 Data Segment to Allocate
*--------------------------------------
CS.INIT >LIBLOADP L.LIBSTR
sta hLIBSTR
ldy #S.PS.hOUTDEV
lda (TSKMGR.TSKPTR),y
>SYSCALL SYS.DevSelectA
ldy #S.PS.hPREFIX
lda (TSKMGR.TSKPTR),y
>SYSCALL SYS.GetMemPtrA
>PUSHYA
>PUSHW L.MSG0
>LIBCALL hLIBSTR,LIBSTR.PRINTF
ldy #S.PS.hCS
lda (TSKMGR.TSKPTR),y
>SYSCALL SYS.GetMemByIDA
>STYA ZPQuickPtr1
ldy #S.MEM.BIN
lda (ZPQuickPtr1),y
>SYSCALL SYS.GetMemPtrA
>PUSHYA
>PUSHW L.MSG1
>LIBCALL hLIBSTR,LIBSTR.PRINTF
ldy #S.PS.hARGS
lda (TSKMGR.TSKPTR),y
>SYSCALL SYS.GetMemPtrA
>PUSHYA
ldy #S.PS.hCMD
lda (TSKMGR.TSKPTR),y
>SYSCALL SYS.GetMemPtrA
>PUSHYA
>PUSHW L.MSG2
>LIBCALL hLIBSTR,LIBSTR.PRINTF
ldy #S.PS.hENV
lda (TSKMGR.TSKPTR),y
>SYSCALL SYS.GetMemPtrA
>STYA ZPBIN
.1 lda (ZPBIN)
beq .2
>PUSHW ZPBIN
>PUSHW L.MSG3
>LIBCALL hLIBSTR,LIBSTR.PRINTF
lda (ZPBIN)
sec
adc ZPBIN
sta ZPBIN
bcc .1
inc ZPBIN+1
bra .1
.2 >PUSHW L.DST.IP
>PUSHW L.SSCANF.IP
>PUSHW L.TEST1
>LIBCALL hLIBSTR,LIBSTR.SSCANF
lda DST.IP+3
jsr PRBYTE
jsr CROUT
>PUSHW L.DST.IP
>PUSHW L.SSCANF.IP
>PUSHW L.TEST2
>LIBCALL hLIBSTR,LIBSTR.SSCANF
lda DST.IP+3
jsr PRBYTE
jsr CROUT
>PUSHW L.DST.IP
>PUSHW L.SSCANF.IP
>PUSHW L.TEST3
>LIBCALL hLIBSTR,LIBSTR.SSCANF
lda DST.IP+3
jsr PRBYTE
jsr CROUT
lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory
rts
*--------------------------------------
CS.RUN
CS.EVENT clc
rts
*--------------------------------------
CS.QUIT lda hLIBSTR
>SYSCALL SYS.FreeMemA
clc
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"
DST.IP .BS 4
*--------------------------------------
MAN
SAVE BIN/TEST.S
ASM
PR#3
PREFIX /DATA/A2OSX
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
.OR $2000
.TF BIN/TEST
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/LIBSTR.I
*--------------------------------------
* Main entry point
*--------------------------------------
* Code signature and INIT table
*--------------------------------------
* CLD $D8
* JMP (*,x) $7C
* #JMPTABLE
* /JMPTABLE
*--------------------------------------
CS.START cld
jmp (.1,x)
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.EVENT
.DA CS.QUIT
L.LIBSTR .DA LIBSTR
L.MSG0 .DA MSG0
L.MSG1 .DA MSG1
L.MSG2 .DA MSG2
L.MSG3 .DA MSG3
L.SSCANF.IP .DA SSCANF.IP
L.PRINTF.IP .DA PRINTF.IP
L.DST.IP .DA DST.IP
L.TEST1 .DA TEST1
L.TEST2 .DA TEST2
L.TEST3 .DA TEST3
.DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA 0 Data Segment to Allocate
*--------------------------------------
CS.INIT >LIBLOADP L.LIBSTR
sta hLIBSTR
ldy #S.PS.hPREFIX
lda (pPsContext),y
>SYSCALL SYS.GetMemPtrA
>PUSHYA
>PUSHW L.MSG0
>LIBCALL hLIBSTR,LIBSTR.PRINTF
ldy #S.PS.hCS
lda (pPsContext),y
>SYSCALL SYS.GetMemByIDA
>STYA ZPQuickPtr1
ldy #S.MEM.BIN
lda (ZPQuickPtr1),y
>SYSCALL SYS.GetMemPtrA
>PUSHYA
>PUSHW L.MSG1
>LIBCALL hLIBSTR,LIBSTR.PRINTF
ldy #S.PS.hARGS
lda (pPsContext),y
>SYSCALL SYS.GetMemPtrA
>PUSHYA
ldy #S.PS.hCMD
lda (pPsContext),y
>SYSCALL SYS.GetMemPtrA
>PUSHYA
>PUSHW L.MSG2
>LIBCALL hLIBSTR,LIBSTR.PRINTF
ldy #S.PS.hENV
lda (pPsContext),y
>SYSCALL SYS.GetMemPtrA
>STYA ZPBIN
.1 lda (ZPBIN)
beq .2
>PUSHW ZPBIN
>PUSHW L.MSG3
>LIBCALL hLIBSTR,LIBSTR.PRINTF
lda (ZPBIN)
sec
adc ZPBIN
sta ZPBIN
bcc .1
inc ZPBIN+1
bra .1
.2 >PUSHW L.DST.IP
>PUSHW L.SSCANF.IP
>PUSHW L.TEST1
>LIBCALL hLIBSTR,LIBSTR.SSCANF
>PUSHB DST.IP+3
>PUSHB DST.IP+2
>PUSHB DST.IP+1
>PUSHB DST.IP
>PUSHW L.PRINTF.IP
>LIBCALL hLIBSTR,LIBSTR.PRINTF
>PUSHW L.DST.IP
>PUSHW L.SSCANF.IP
>PUSHW L.TEST2
>LIBCALL hLIBSTR,LIBSTR.SSCANF
>PUSHB DST.IP+3
>PUSHB DST.IP+2
>PUSHB DST.IP+1
>PUSHB DST.IP
>PUSHW L.PRINTF.IP
>LIBCALL hLIBSTR,LIBSTR.PRINTF
>PUSHW L.DST.IP
>PUSHW L.SSCANF.IP
>PUSHW L.TEST3
>LIBCALL hLIBSTR,LIBSTR.SSCANF
>PUSHB DST.IP+3
>PUSHB DST.IP+2
>PUSHB DST.IP+1
>PUSHB DST.IP
>PUSHW L.PRINTF.IP
>LIBCALL hLIBSTR,LIBSTR.PRINTF
lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory
rts
*--------------------------------------
CS.RUN
CS.EVENT clc
rts
*--------------------------------------
CS.QUIT lda hLIBSTR
>SYSCALL SYS.FreeMemA
clc
rts
*--------------------------------------
PRBYTE pha
lsr
lsr
lsr
lsr
ora #$B0
cmp #$BA
bcc .1
adc #6
.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
PREFIX /DATA/A2OSX
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
.OR $2000
.TF
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/MONITOR.I
*--------------------------------------
* Main entry point
*--------------------------------------
* Code signature and INIT table
*--------------------------------------
* CLD $D8
* JMP (*,x) $7C
* #JMPTABLE
* /JMPTABLE
*--------------------------------------
CS.START cld
jmp (.1,x)
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.EVENT
.DA CS.QUIT
.DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segemnt to Allocate
*--------------------------------------
CS.INIT
CS.INIT.EXIT lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory
rts
*--------------------------------------
CS.RUN clc
rts
*--------------------------------------
CS.EVENT clc
rts
*--------------------------------------
CS.QUIT clc
rts
*--------------------------------------
CS.END
DS.START
*--------------------------------------
*--------------------------------------
DS.END
MAN
SAVE SBIN/ .S
ASM
PR#3
PREFIX /DATA/A2OSX
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
.OR $2000
.TF
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/MONITOR.I
*--------------------------------------
* Main entry point
*--------------------------------------
* Code signature and INIT table
*--------------------------------------
* CLD $D8
* JMP (*,x) $7C
* #JMPTABLE
* /JMPTABLE
*--------------------------------------
CS.START cld
jmp (.1,x)
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.EVENT
.DA CS.QUIT
.DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segemnt to Allocate
*--------------------------------------
CS.INIT
CS.INIT.EXIT lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory
rts
*--------------------------------------
CS.RUN clc
rts
*--------------------------------------
CS.EVENT clc
rts
*--------------------------------------
CS.QUIT clc
rts
*--------------------------------------
CS.END
DS.START
*--------------------------------------
*--------------------------------------
DS.END
MAN
SAVE SBIN/ .S
ASM