mirror of https://github.com/A2osX/A2osX.git
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:
parent
36e174bbf2
commit
f34e2b5f7c
438
BIN/ARP.S.txt
438
BIN/ARP.S.txt
|
@ -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
|
||||
|
|
764
BIN/ASM.S.txt
764
BIN/ASM.S.txt
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
802
BIN/CHTYP.S.txt
802
BIN/CHTYP.S.txt
|
@ -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
|
||||
|
|
366
BIN/DNS.S.txt
366
BIN/DNS.S.txt
|
@ -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
|
||||
|
|
778
BIN/LS.S.txt
778
BIN/LS.S.txt
|
@ -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
|
||||
|
|
278
BIN/LSDEV.S.txt
278
BIN/LSDEV.S.txt
|
@ -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
|
||||
|
|
570
BIN/MEM.S.txt
570
BIN/MEM.S.txt
|
@ -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
|
||||
|
|
412
BIN/NETCFG.S.txt
412
BIN/NETCFG.S.txt
|
@ -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
|
||||
|
|
734
BIN/PING.S.txt
734
BIN/PING.S.txt
|
@ -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
|
||||
|
|
228
BIN/PS.S.txt
228
BIN/PS.S.txt
|
@ -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
|
||||
|
|
343
BIN/TEST.S.txt
343
BIN/TEST.S.txt
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue