mirror of
https://github.com/A2osX/A2osX.git
synced 2024-05-31 16:41:30 +00:00
Initial
This commit is contained in:
parent
037c4d590f
commit
62f272bbf2
185
A2osX.S.GP.txt
Normal file
185
A2osX.S.GP.txt
Normal file
|
@ -0,0 +1,185 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
*--------------------------------------
|
||||
* **** START OF A2osX Global Page ****
|
||||
*--------------------------------------
|
||||
A2osX.GP.start .EQ *
|
||||
*--------------------------------------
|
||||
.PH $300
|
||||
*--------------------------------------
|
||||
A2osX.GP bra A2osX.SYSCALL3
|
||||
bra A2osX.MLICALL3
|
||||
bra A2osX.LIBCALL3
|
||||
bra A2osX.SLEEP3
|
||||
bra Kernel.MLICALL3
|
||||
bra Kernel.DRVCALL3
|
||||
bra Kernel.BINCALL3
|
||||
bra Kernel.LIBCALL3
|
||||
.BS A2osX.300CODE-*
|
||||
*--------------------------------------
|
||||
* A2osX.SYSCALL (MAINLC to AUXLC)
|
||||
* In:
|
||||
* X = SYSfnc.Index
|
||||
* Y,A = free for Inline param
|
||||
*--------------------------------------
|
||||
A2osX.SYSCALL3 jsr GO.AUXLC
|
||||
jsr $E003
|
||||
jsr GO.MAINLC
|
||||
rts
|
||||
*--------------------------------------
|
||||
* A2osX.MLICALL (MAINLC to MAINLC)
|
||||
* In:
|
||||
* X = MLI Function
|
||||
* A = Param Count
|
||||
*--------------------------------------
|
||||
A2osX.MLICALL3 stx .1
|
||||
sta MLICALL.PARAMS
|
||||
jsr MLI
|
||||
.1 .BS 1
|
||||
.DA MLICALL.PARAMS
|
||||
rts
|
||||
*--------------------------------------
|
||||
* LIBCALL (MAINLC to MAINLC)
|
||||
* In:
|
||||
* Y = LIB.ID
|
||||
* X = LIBfnc.Index
|
||||
* A = free for Inline param
|
||||
*--------------------------------------
|
||||
A2osX.LIBCALL3 pha
|
||||
phx
|
||||
tya
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA .1+1
|
||||
plx
|
||||
pla
|
||||
.1 jmp $FFFF
|
||||
*--------------------------------------
|
||||
A2osX.SLEEP3 jmp A2osX.SLEEP31
|
||||
*--------------------------------------
|
||||
* SLEEP (MAINLC to AUXLC)
|
||||
* In:
|
||||
*--------------------------------------
|
||||
* Kernel.MLICALL (AUXLC to MAINLC)
|
||||
* In:
|
||||
* X = MLI Function
|
||||
* A = Param Count
|
||||
*--------------------------------------
|
||||
Kernel.MLICALL3 jsr GO.MAINLC
|
||||
jsr A2osX.MLICALL3
|
||||
jsr GO.AUXLC
|
||||
rts
|
||||
*--------------------------------------
|
||||
* Kernel.DRVCALL (AUXLC to MAINLC)
|
||||
* In:
|
||||
* X = DRV Function Index
|
||||
* Y,A = pDevContext
|
||||
*--------------------------------------
|
||||
Kernel.DRVCALL3 jsr GO.MAINLC
|
||||
>STYA pDevContext
|
||||
jsr Kernel.JMP3
|
||||
jsr GO.AUXLC
|
||||
rts
|
||||
*--------------------------------------
|
||||
* Kernel.BINCALL (AUXLC to MAINLC)
|
||||
* In:
|
||||
* X = BIN Function Index
|
||||
* Y,A = pPsContext
|
||||
*--------------------------------------
|
||||
Kernel.BINCALL3 jsr GO.MAINLC
|
||||
>STYA pPsContext
|
||||
jsr Kernel.JMP3
|
||||
jsr GO.AUXLC
|
||||
rts
|
||||
*--------------------------------------
|
||||
* Kernel.LIBCALL (AUXLC to MAINLC)
|
||||
* In:
|
||||
* X = Lib Function Index
|
||||
*--------------------------------------
|
||||
Kernel.LIBCALL3 jsr GO.MAINLC
|
||||
jsr Kernel.JMP3
|
||||
jsr GO.AUXLC
|
||||
rts
|
||||
*--------------------------------------
|
||||
Kernel.JMP3 jmp (Kernel.JMP)
|
||||
*--------------------------------------
|
||||
GO.MAINLC php
|
||||
clc
|
||||
bra GO.SAVE.REG
|
||||
|
||||
GO.AUXLC php
|
||||
sec
|
||||
|
||||
GO.SAVE.REG sta A2osX.SaveA
|
||||
pla keep P in A for later
|
||||
stx A2osX.SaveX
|
||||
sty A2osX.SaveY
|
||||
plx
|
||||
ply
|
||||
inx
|
||||
bne .1
|
||||
iny
|
||||
.1 stx GO.EXIT.JMP+1
|
||||
sty GO.EXIT.JMP+2
|
||||
sei
|
||||
ldy R.SP
|
||||
tsx
|
||||
stx A2osX.SaveS
|
||||
bcs GO.AUXLC1
|
||||
|
||||
GO.MAINLC1 stx CLRALTZP
|
||||
ldx RROMBNK2
|
||||
ldx A2osX.SaveS
|
||||
txs
|
||||
sty R.SP
|
||||
bra GO.EXIT
|
||||
*--------------------------------------
|
||||
GO.AUXLC1 stx SETALTZP
|
||||
ldx RRAMWRAMBNK2
|
||||
ldx RRAMWRAMBNK2
|
||||
ldx A2osX.SaveS
|
||||
txs
|
||||
sty R.SP
|
||||
*--------------------------------------
|
||||
GO.EXIT pha push P on stack
|
||||
|
||||
ldy A2osX.SaveY
|
||||
ldx A2osX.SaveX
|
||||
lda A2osX.SaveA
|
||||
plp
|
||||
|
||||
GO.EXIT.JMP jmp $FFFF
|
||||
*--------------------------------------
|
||||
A2osX.SLEEP31 ldy #S.PS.hCS
|
||||
lda (pPsContext),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA Kernel.JMP
|
||||
ldy #S.PS.PC
|
||||
pla get PC LO
|
||||
plx get PC HI
|
||||
inc Advance PC one Byte
|
||||
bne .1
|
||||
inx
|
||||
|
||||
.1 sec
|
||||
sbc Kernel.JMP
|
||||
sta (pPsContext),y
|
||||
iny
|
||||
txa
|
||||
sbc Kernel.JMP+1
|
||||
sta (pPsContext),y
|
||||
clc No error,
|
||||
rts back to Kernel
|
||||
*--------------------------------------
|
||||
.EP
|
||||
*--------------------------------------
|
||||
A2osX.GP.End
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE A2OSX.S.GP
|
||||
LOAD A2OSX.S
|
||||
ASM
|
571
A2osX.S.RW.txt
Normal file
571
A2osX.S.RW.txt
Normal file
|
@ -0,0 +1,571 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
*--------------------------------------
|
||||
RWBankSelect .EQ $C073
|
||||
*--------------------------------------
|
||||
RWDetect jsr MLI
|
||||
.DA #MLIONLINE
|
||||
.DA RW.ONLINE
|
||||
rts
|
||||
*--------------------------------------
|
||||
RW.ONLINE .DA #2
|
||||
.DA #$30 Slot 3,Drive 1
|
||||
.DA RW.ONLINEBUFFER
|
||||
RW.ONLINEBUFFER .BS 16
|
||||
*--------------------------------------
|
||||
RWInit php
|
||||
sei
|
||||
sta SETALTZP
|
||||
|
||||
ldx #0 start detection at page $00
|
||||
.1 stx RWBankSelect
|
||||
lda 0
|
||||
sta RW.SAVEZP0,x save Bank 0 $0000 to prevent ALTZP trash
|
||||
lda 1
|
||||
sta RW.SAVEZP1,x
|
||||
inx
|
||||
bne .1
|
||||
|
||||
lda #0
|
||||
.2 sta RWBankSelect
|
||||
sta 0
|
||||
eor #$FF
|
||||
sta 1
|
||||
eor #$FF
|
||||
inc
|
||||
bne .2
|
||||
|
||||
ldx #0
|
||||
.3 txa
|
||||
sta RWBankSelect
|
||||
cmp 0
|
||||
bne .4
|
||||
eor #$FF
|
||||
cmp 1
|
||||
bne .4
|
||||
inx
|
||||
bne .3
|
||||
dex we reached 0,last detected page was 255
|
||||
|
||||
.4 ldy #255 X = detected page count
|
||||
|
||||
.6 sty RWBankSelect
|
||||
lda RW.SAVEZP0,y
|
||||
sta 0
|
||||
lda RW.SAVEZP1,y
|
||||
sta 1
|
||||
dey
|
||||
bne .6
|
||||
|
||||
stz RWBankSelect
|
||||
lda RW.SAVEZP0 Don't forget to restore Bank 0
|
||||
sta 0
|
||||
lda RW.SAVEZP1
|
||||
sta 1
|
||||
|
||||
txa
|
||||
|
||||
stx RW.PGCNT PGCNT = last detected page, as we do -1 for AuxMem
|
||||
|
||||
sta CLRALTZP
|
||||
plp
|
||||
lda RW.PGCNT
|
||||
beq .9
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
*
|
||||
*--------------------------------------
|
||||
RWInstall lda RRAMWRAMBNK1
|
||||
lda RRAMWRAMBNK1
|
||||
|
||||
ldx #RWDRV.SIZE
|
||||
.1 lda RWDRV.B.START-1,x
|
||||
sta RWDRV.START-1,x
|
||||
dex
|
||||
bne .1
|
||||
|
||||
lda RW.PGCNT
|
||||
lsr
|
||||
sta RWDRV.MAXHI+1
|
||||
lda #0
|
||||
ror
|
||||
sta RWDRV.MAXLO+1
|
||||
|
||||
lda RROMBNK1
|
||||
|
||||
sta SETWRITEAUX
|
||||
|
||||
ldx #RWDRVX.SIZE
|
||||
.2 lda RWDRVX.B.START-1,x
|
||||
sta RWDRVX.START-1,x
|
||||
dex
|
||||
bne .2
|
||||
|
||||
sta CLRWRITEAUX
|
||||
|
||||
inc DEVCNT
|
||||
ldx DEVCNT
|
||||
lda #$30 Slot 3,Drive 1
|
||||
sta DEVLST,x
|
||||
|
||||
lda #RWDRV.START
|
||||
sta DEVPTRS3D1
|
||||
lda /RWDRV.START
|
||||
sta DEVPTRS3D1+1
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
*
|
||||
*--------------------------------------
|
||||
RWFormat jsr RW.BLOCK.SET00
|
||||
|
||||
lda RW.PGCNT
|
||||
lsr
|
||||
sta RW.BLOCK2.TB+1
|
||||
lda #0
|
||||
ror
|
||||
sta RW.BLOCK2.TB
|
||||
|
||||
jsr MLI
|
||||
.DA #MLIGETTIME
|
||||
.DA 0
|
||||
|
||||
ldx #3
|
||||
.1 lda DATELO,x
|
||||
sta RW.BLOCK2.CT,x
|
||||
dex
|
||||
bpl .1
|
||||
|
||||
ldx #RW.BLOCK2.END-RW.BLOCK2
|
||||
.2 lda RW.BLOCK2-1,x
|
||||
sta RW.BLOCK-1,x
|
||||
dex
|
||||
bne .2
|
||||
|
||||
jsr MLI Write Block 2,First VOL directory block
|
||||
.DA #MLIWRITEBLOCK
|
||||
.DA RW.MLIWRITEBLOCK
|
||||
bcc .22
|
||||
rts
|
||||
*--------------------------------------
|
||||
.22 jsr RW.BLOCK.SET00
|
||||
|
||||
lda #2
|
||||
sta RW.BLOCK LO byte of previous block pointer
|
||||
|
||||
inc RW.MLIWRITEBLOCK.BLK
|
||||
jsr MLI Write Block 3,Last VOL directory block
|
||||
.DA #MLIWRITEBLOCK
|
||||
.DA RW.MLIWRITEBLOCK
|
||||
bcc .33
|
||||
rts
|
||||
*--------------------------------------
|
||||
.33 lda RW.PGCNT divide RW.PGCNT by 32 to get how many bitmap
|
||||
lsr blocks we need :
|
||||
lsr 1 page = 128 blocks = 16 bytes
|
||||
lsr 32 pages = 512 bytes = 1 Block
|
||||
lsr
|
||||
lsr
|
||||
sta RW.FBITMAPCNT store FULL bitmap block count needed
|
||||
|
||||
tax
|
||||
lda RW.PGCNT
|
||||
and #$1F need an extra incomplete bitmap block?
|
||||
beq .3
|
||||
inx
|
||||
.3 stx RW.BITMAPCNT store TOTAL bitmap block needed
|
||||
|
||||
.4 lda RW.FBITMAPCNT
|
||||
beq .49
|
||||
|
||||
dec RW.FBITMAPCNT
|
||||
jsr RW.BLOCK.SETFF
|
||||
|
||||
bra .5
|
||||
|
||||
.49 jsr RW.BLOCK.SET00
|
||||
|
||||
lda RW.PGCNT
|
||||
and #$1F compute incomplete bitmap block
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl times 16 for byte count
|
||||
tay
|
||||
lda #$FF
|
||||
bcc .42 first half of block only
|
||||
|
||||
ldx #0
|
||||
.40 sta RW.BLOCK,x
|
||||
inx
|
||||
bne .40
|
||||
|
||||
cpy #0
|
||||
beq .5
|
||||
.41 sta RW.BLOCK+$ff,y
|
||||
dey
|
||||
bne .41
|
||||
|
||||
bra .5
|
||||
|
||||
.42 sta RW.BLOCK-1,y
|
||||
dey
|
||||
bne .42
|
||||
|
||||
.5 inc RW.MLIWRITEBLOCK.BLK
|
||||
lda RW.MLIWRITEBLOCK.BLK
|
||||
cmp #4 Are we writing first volume bitmap ?
|
||||
bne .63 no, regular one
|
||||
|
||||
lda #$CF Mark Block 0 & 1 free, 2,3 used (vol hdr)
|
||||
sta RW.BLOCK
|
||||
|
||||
ldy #0
|
||||
lda #$8 Start a BLOCK 4 (%00001000)
|
||||
ldx RW.BITMAPCNT
|
||||
|
||||
.62 pha
|
||||
eor RW.BLOCK,y Mark bitmap blocks as "used"
|
||||
sta RW.BLOCK,y
|
||||
pla
|
||||
dex
|
||||
beq .63
|
||||
lsr
|
||||
bne .62
|
||||
lda #$80
|
||||
iny
|
||||
bra .62
|
||||
|
||||
.63 jsr MLI Write Block 4,5...
|
||||
.DA #MLIWRITEBLOCK
|
||||
.DA RW.MLIWRITEBLOCK
|
||||
bcs .9
|
||||
|
||||
dec RW.BITMAPCNT another bitmap block needed ?
|
||||
bne .4
|
||||
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
RW.BLOCK.SETFF lda #$FF
|
||||
bra RW.BLOCK.SET
|
||||
RW.BLOCK.SET00 lda #$00
|
||||
RW.BLOCK.SET ldx #0
|
||||
.1 sta RW.BLOCK,x
|
||||
sta RW.BLOCK+$100,x
|
||||
inx
|
||||
bne .1
|
||||
rts
|
||||
*--------------------------------------
|
||||
RW.MLIWRITEBLOCK
|
||||
.DA #3
|
||||
.DA #$30 Slot 3,Drive 1
|
||||
.DA RW.BLOCK
|
||||
RW.MLIWRITEBLOCK.BLK
|
||||
.DA 2 Start writing block at #2
|
||||
*--------------------------------------
|
||||
RW.RAM31 .DA #$30
|
||||
.DA #5 len=5 chars
|
||||
.AS 'RAM31'
|
||||
*--------------------------------------
|
||||
RW.PGCNT .BS 1
|
||||
RW.FBITMAPCNT .BS 1
|
||||
RW.BITMAPCNT .BS 1
|
||||
RW.SAVEZP0 .BS 256
|
||||
RW.SAVEZP1 .BS 256
|
||||
*--------------------------------------
|
||||
RW.BLOCK2 .DA 0 pointer to previous block
|
||||
.DA 3 pointer to next block
|
||||
.DA #$F5 $F=Vol Dir Header, 5=name len
|
||||
.AS 'RAM31'
|
||||
.BS 10 (RAM31 len=5, fill to 15)
|
||||
.HS 0000000000000000
|
||||
RW.BLOCK2.CT .BS 4 Creation time
|
||||
.HS 0100C3270D version/min version/access/EL/EPB
|
||||
.DA 0 File Count
|
||||
.DA 4 bitmap pointer (Block 2&3 are Volume directory)
|
||||
RW.BLOCK2.TB .BS 2 Total Blocks
|
||||
RW.BLOCK2.END .EQ *
|
||||
*--------------------------------------
|
||||
RW.BLOCK .BS 512
|
||||
*--------------------------------------
|
||||
* Driver for Ramworks in main LC
|
||||
* $FF00 -> $FF9A (Inclusive)
|
||||
* $FF58 MUST BE $60 (RTS)
|
||||
* DO NOT trash DRV.BLKNUM as ProDOS
|
||||
* reuses it after Block operation
|
||||
*--------------------------------------
|
||||
DRV.COMMAND .EQ $42
|
||||
DRV.BUFF .EQ $44
|
||||
DRV.BLKNUM .EQ $46
|
||||
*--------------------------------------
|
||||
RWDRV.B.START
|
||||
.PH $FF00
|
||||
RWDRV.START cld ProDOS will check that byte!!!
|
||||
ldy DRV.COMMAND 0 = Status ?
|
||||
beq RMDRV.CMDSTATUS
|
||||
|
||||
cpy #3
|
||||
beq RWDRV.EXITOK 3 = Format : nothing to do, exit with no error
|
||||
bcs RWDRV.IOERR > 3 = Invalid OP, IO error
|
||||
|
||||
lda DRV.BLKNUM
|
||||
sec
|
||||
sbc RWDRV.MAXLO+1
|
||||
lda DRV.BLKNUM+1
|
||||
sbc RWDRV.MAXHI+1
|
||||
bcs RWDRV.IOERR DRV.BLKNUM >= RW.DRV.SIZE, IO error
|
||||
|
||||
lda DRV.BLKNUM compute PAGE = blocknumLO *2
|
||||
asl
|
||||
pha
|
||||
lda DRV.BLKNUM+1 compute BANK = blocknumHI *2
|
||||
rol
|
||||
inc +1 for skipping Aux BANK 0
|
||||
plx move page into X
|
||||
beq RWDRV.GOAUX move from/to aux page0/1
|
||||
cpx #$C0
|
||||
bcs RWDRV.GOAUX move from/to aux LC
|
||||
*--------------------------------------
|
||||
* X=Page($02 -> $BF),A=Bank,Y=CMD
|
||||
*--------------------------------------
|
||||
php
|
||||
sei Disable IRQ as no vector set in RW Banks
|
||||
sta RWBankSelect Select RAMWorks Bank
|
||||
sta CLR80STORE make sure SETREADAUX/SETWRITEAUX effective everywhere
|
||||
|
||||
stx DRV.COMMAND+1 Reuse DRV.COMMAND for RAM PTR
|
||||
stz DRV.COMMAND
|
||||
|
||||
dey Y=CMD, zero if read
|
||||
bne RWDRV.W CC, go write
|
||||
|
||||
sta SETREADAUX
|
||||
ldx #DRV.COMMAND READ:copy from RAM to BUFF
|
||||
ldy #DRV.BUFF
|
||||
bra RWDRV.RW
|
||||
|
||||
RWDRV.W sta SETWRITEAUX
|
||||
ldx #DRV.BUFF
|
||||
ldy #DRV.COMMAND WRITE:copy from BUFF to RAM
|
||||
|
||||
RWDRV.RW stx RWDRV.RW.SRC+1
|
||||
sty RWDRV.RW.DST+1
|
||||
|
||||
ldx #2 2 pages to copy
|
||||
|
||||
ldy #0
|
||||
|
||||
RWDRV.RW.SRC lda ($FF),y
|
||||
RWDRV.RW.DST sta ($FF),y
|
||||
iny
|
||||
bne RWDRV.RW.SRC
|
||||
|
||||
.HS 24 BIT Zero Page to skip RTS
|
||||
RWDRV.RTS rts $FF58 Must Be RTS
|
||||
|
||||
inc DRV.BUFF+1
|
||||
inc DRV.COMMAND+1
|
||||
dex
|
||||
bne RWDRV.RW.SRC
|
||||
|
||||
stz RWBankSelect
|
||||
sta CLRREADAUX
|
||||
sta CLRWRITEAUX
|
||||
plp
|
||||
|
||||
RMDRV.CMDSTATUS
|
||||
RWDRV.MAXLO ldx #$FF return device block count in X,Y...
|
||||
RWDRV.MAXHI ldy #$FF
|
||||
|
||||
RWDRV.EXITOK lda #0 make A=0
|
||||
clc
|
||||
rts
|
||||
|
||||
RWDRV.IOERR lda #MLI.ERR.IO Carry already set
|
||||
rts
|
||||
*--------------------------------------
|
||||
* X=Page(0/1 or LC),A=Bank
|
||||
*--------------------------------------
|
||||
RWDRV.GOAUX pha save BANK
|
||||
|
||||
sta SETWRITEAUX
|
||||
|
||||
ldy #RWDRVX.XM.SIZE Backup begining of $300 to generate move code
|
||||
.1 lda RWDRV.XM.RUN-1,y
|
||||
sta RWDRVX.XM.SAVE-1,y
|
||||
dey
|
||||
bne .1
|
||||
|
||||
pla restore BANK
|
||||
|
||||
sta SETREADAUX
|
||||
jsr RWDRVX.START Setup Code in main mem at $300 for data move
|
||||
* returns : CC=WRITE, CS=READ
|
||||
sta CLRREADAUX CLRWRITEAUX already triggered by code copy
|
||||
jsr RWDRV.XM.RUN Now execute generated code in main memory
|
||||
|
||||
sta SETREADAUX
|
||||
jsr RWDRVX.RESTORE
|
||||
sta CLRREADAUX
|
||||
rts A & carry setup properly by RWDRVX.RESTORE
|
||||
|
||||
RWDRV.END .EP
|
||||
RWDRV.B.END
|
||||
RWDRV.SIZE .EQ RWDRV.B.END-RWDRV.B.START
|
||||
*--------------------------------------
|
||||
* Driver for Ramworks in aux memory
|
||||
* $0200 -> $02FF TMP buffer for PAGE copy
|
||||
* $0300 -> $03FD (Inclusive)
|
||||
* do not trash $03FE-$03FF (IRQ Vector)
|
||||
* X=Page(0/1 or LC),A=Bank
|
||||
*--------------------------------------
|
||||
RMDRVX.TMP .EQ $200
|
||||
RWDRV.XM.RUN .EQ $300
|
||||
*--------------------------------------
|
||||
RWDRVX.B.START
|
||||
.PH $0300
|
||||
RWDRVX.START sta RWDRVX.XM.BANK+1 setup BANK
|
||||
txa
|
||||
beq .1 page 0/1, no need to check BANK
|
||||
cmp #$D0 $C0 <= PAGE < $D0 ?
|
||||
bcc .1 no, store in BNK1
|
||||
ora #$10 Remap $C0 page to $D0 BNK2
|
||||
|
||||
.1 ror RWDRVX.XM.RWLC+1 Save Carry to select proper RW bank later
|
||||
|
||||
ldy DRV.BUFF
|
||||
ldx DRV.BUFF+1
|
||||
|
||||
lsr DRV.COMMAND DRV.COMMAND: 1=READ,2=WRITE
|
||||
bcc .2 CC=WRITE, CS=READ
|
||||
stz RWDRVX.XM.SRC+1 READ from src LO = 0
|
||||
sta RWDRVX.XM.SRC+2 READ from src HI = PAGE
|
||||
sty RWDRVX.XM.DST+1 WRITE to DRV.BUFF
|
||||
stx RWDRVX.XM.DST+2
|
||||
bra .3
|
||||
|
||||
.2 sty RWDRVX.XM.SRC+1 READ from DRV.BUFF
|
||||
stx RWDRVX.XM.SRC+2
|
||||
stz RWDRVX.XM.DST+1 WRITE to dst LO = 0
|
||||
sta RWDRVX.XM.DST+2 WRITE to dst HI = PAGE
|
||||
|
||||
.3 sta CLRWRITEAUX
|
||||
|
||||
ldy #RWDRVX.XM.SIZE
|
||||
.4 lda RWDRVX.XM.START-1,y
|
||||
sta RWDRV.XM.RUN-1,y
|
||||
dey
|
||||
bne .4
|
||||
rts
|
||||
*--------------------------------------
|
||||
* Called form Main LC after RWDRVX.XM execution
|
||||
*--------------------------------------
|
||||
RWDRVX.RESTORE ldy #RWDRVX.XM.SIZE Now, restore begining of $300
|
||||
.1 lda RWDRVX.XM.SAVE-1,y
|
||||
sta RWDRV.XM.RUN-1,y
|
||||
dey
|
||||
bne .1
|
||||
tya setup A=0 and CC for exit with non error
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* "auXMove" Code, moved from Aux to main $300
|
||||
* $0200 -> $02FF TMP buffer for 2 steps moving between LCs
|
||||
* CC=WRITE :
|
||||
* CS=READ :
|
||||
*--------------------------------------
|
||||
RWDRVX.XM.START php
|
||||
sei
|
||||
|
||||
ldx #0
|
||||
ldy #2 2 pages to copy
|
||||
|
||||
RWDRVX.XM.COPY jsr RWDRV.XM.RUN+RWDRVX.XM.MNLC-RWDRVX.XM.START WRITE:copy from MAIN to TMP
|
||||
|
||||
bcc RWDRVX.XM.SRC CC=WRITE,CS=READ?
|
||||
|
||||
jsr RWDRV.XM.RUN+RWDRVX.XM.RWLC-RWDRVX.XM.START READ:copy from BANK to TMP
|
||||
sta SETALTZP
|
||||
|
||||
RWDRVX.XM.SRC lda $FFFF,x
|
||||
sta RMDRVX.TMP,x
|
||||
inx
|
||||
bne RWDRVX.XM.SRC
|
||||
|
||||
sta CLRALTZP
|
||||
jsr RWDRV.XM.RUN+RWDRVX.XM.MNLC-RWDRVX.XM.START READ:copy from TMP to MAIN
|
||||
|
||||
bcs RWDRVX.XM.1 CC=WRITE,CS=READ?
|
||||
|
||||
jsr RWDRV.XM.RUN+RWDRVX.XM.RWLC-RWDRVX.XM.START WRITE:copy from TMP to BANK
|
||||
sta SETALTZP
|
||||
|
||||
RWDRVX.XM.1 lda RMDRVX.TMP,x
|
||||
RWDRVX.XM.DST sta $FFFF,x
|
||||
inx
|
||||
bne RWDRVX.XM.1
|
||||
|
||||
sta CLRALTZP
|
||||
|
||||
inc RWDRV.XM.RUN+RWDRVX.XM.SRC+2-RWDRVX.XM.START
|
||||
inc RWDRV.XM.RUN+RWDRVX.XM.DST+2-RWDRVX.XM.START
|
||||
dey
|
||||
bne RWDRVX.XM.COPY
|
||||
|
||||
plp
|
||||
|
||||
RWDRVX.XM.MNLC stz RWBankSelect ProDOS always uses LCBANK1
|
||||
bit RRAMWRAMBNK1
|
||||
bit RRAMWRAMBNK1
|
||||
rts
|
||||
|
||||
RWDRVX.XM.RWLC lda #$FF
|
||||
bpl RWDRVX.XM.BANK
|
||||
bit RRAMWRAMBNK2
|
||||
bit RRAMWRAMBNK2
|
||||
RWDRVX.XM.BANK lda #$FF
|
||||
sta RWBankSelect
|
||||
rts
|
||||
|
||||
RWDRVX.XM.END
|
||||
*--------------------------------------
|
||||
RWDRVX.XM.SIZE .EQ RWDRVX.XM.END-RWDRVX.XM.START
|
||||
*--------------------------------------
|
||||
RWDRVX.XM.SAVE .BS RWDRVX.XM.SIZE
|
||||
*--------------------------------------
|
||||
.EP
|
||||
*--------------------------------------
|
||||
RWDRVX.B.END
|
||||
RWDRVX.SIZE .EQ RWDRVX.B.END-RWDRVX.B.START
|
||||
*--------------------------------------
|
||||
* CONTROL SECTION :
|
||||
*--------------------------------------
|
||||
.DO RWDRV.RTS=$FF58
|
||||
.ELSE
|
||||
ERROR:RWDRV.RTS <> $FF58
|
||||
.FIN
|
||||
.DO RWDRV.SIZE>$9B
|
||||
ERROR:RWDRV.SIZE too big
|
||||
.FIN
|
||||
.DO RWDRVX.SIZE>$FE
|
||||
ERROR:RWDRVX.SIZE too big
|
||||
.FIN
|
||||
.DO RWDRVX.XM.SIZE>$F0
|
||||
ERROR:RWDRVX.XM.SIZE too big
|
||||
.FIN
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE A2OSX.S.RW
|
||||
LOAD A2OSX.S
|
||||
ASM
|
55
A2osX.S.Z80.txt
Normal file
55
A2osX.S.Z80.txt
Normal file
|
@ -0,0 +1,55 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
*--------------------------------------
|
||||
InitZ80 ldx Z80Code.Len
|
||||
.1 lda Z80Code-1,x
|
||||
sta $1000-1,x 00000H for Z80
|
||||
dex
|
||||
bne .1
|
||||
|
||||
stz TmpPtr1
|
||||
lda #$C1
|
||||
sta TmpPtr1+1
|
||||
|
||||
.2 sta (TmpPtr1)
|
||||
lda $100D
|
||||
bmi .8
|
||||
inc TmpPtr1+1
|
||||
lda TmpPtr1+1
|
||||
cmp #$C8
|
||||
beq .9
|
||||
clc
|
||||
adc #$20
|
||||
sta $100A
|
||||
bra .2
|
||||
|
||||
.8 lda TmpPtr1+1
|
||||
and #$0F
|
||||
sta A2osX.Z80Slot
|
||||
clc
|
||||
rts
|
||||
|
||||
.9 stz A2osX.Z80Slot
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* Moved to $1000 (0000H)
|
||||
*--------------------------------------
|
||||
Z80Code .HS 31FFFF START: LD SP,0FFFFH Init Stack
|
||||
.HS 3EFF LD A,0FFH Set Flag
|
||||
.HS 320D00 LD (FLAG),A
|
||||
.HS 3200E1 LD (0E100H),A Back to 6502
|
||||
.HS 18F3 JR START Loop
|
||||
.HS 00 FLAG: .DB 0
|
||||
*31FFFF3EFF320D003200E118F300
|
||||
Z80Code.Len .EQ *-Z80Code
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE A2OSX.S.Z80
|
||||
LOAD A2OSX.S
|
||||
ASM
|
538
A2osX.S.txt
Normal file
538
A2osX.S.txt
Normal file
|
@ -0,0 +1,538 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
* .TF A2osX.SYSTEM
|
||||
.TF A
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/IO.I
|
||||
.INB INC/MONITOR.I
|
||||
.INB INC/PRODOS.I
|
||||
*--------------------------------------
|
||||
TmpPtr1 .EQ $0 main & aux ZP
|
||||
TmpPtr2 .EQ $2 main & aux ZP
|
||||
*--------------------------------------
|
||||
IO.Buffer .EQ $3C00 1k Buffer for MLI open
|
||||
Load.Address .EQ $4000 for loading kernel.bin before relocation
|
||||
*--------------------------------------
|
||||
* A2osX LOADER
|
||||
*--------------------------------------
|
||||
* TODO :
|
||||
* /intercept MLI CALLS with
|
||||
* PREFIX=/MNT/
|
||||
*--------------------------------------
|
||||
START jmp A2osX.INIT
|
||||
.DA $EEEE
|
||||
.DA #$7F
|
||||
.BS $7F
|
||||
*--------------------------------------
|
||||
A2osX.INIT ldx #$FF init 6502 stack to highest
|
||||
* txs
|
||||
|
||||
php
|
||||
sei
|
||||
sta SETALTZP Switch to alt ZP
|
||||
stx A2osX.SaveS make Alt SP to highest too
|
||||
sta CLRALTZP Switch to main ZP
|
||||
plp
|
||||
|
||||
>LDYAI D.STACKSEG
|
||||
>STYA R.SP init Soft Stack
|
||||
|
||||
* >LDYAI WARMBOOT
|
||||
* >STYA POWERUP
|
||||
* jsr SETPWRC
|
||||
|
||||
>LDAXI MSG.SYSMEM
|
||||
jsr PrintCStrAX
|
||||
|
||||
lda MACHID
|
||||
and #MACHIDRAM
|
||||
cmp #MACHIDRAM128
|
||||
beq A2osX.SysMemOK
|
||||
|
||||
>LDAXI MSG.SYSMEM.KO
|
||||
jsr PrintCStrAX
|
||||
bra *
|
||||
*--------------------------------------
|
||||
A2osX.SysMemOK >LDAXI MSG.SYSMEM.OK
|
||||
jsr PrintCStrAX
|
||||
|
||||
>LDAXI MSG.65x
|
||||
jsr PrintCStrAX
|
||||
jsr Init6502
|
||||
ldy A2osX.CPUTYPE
|
||||
lda MSG.CPUTYPEH,y
|
||||
tax
|
||||
lda MSG.CPUTYPEL,y
|
||||
jsr PrintCStrAX
|
||||
|
||||
lda A2osX.CPUTYPE
|
||||
bne A2osX.RamDrv
|
||||
>LDAXI MSG.65x.KO
|
||||
jsr PrintCStrAX
|
||||
bra *
|
||||
*--------------------------------------
|
||||
A2osX.RamDrv >LDAXI MSG.RAMDRV
|
||||
jsr PrintCStrAX
|
||||
jsr DisableRamDRV
|
||||
bcc .2
|
||||
tax
|
||||
beq .1
|
||||
>LDAXI MSG.RAMDRV.KO1
|
||||
jsr PrintCStrAX
|
||||
bra A2osX.RamWorks
|
||||
|
||||
.1 >LDAXI MSG.RAMDRV.KO0
|
||||
jsr PrintCStrAX
|
||||
bra A2osX.RamWorks
|
||||
.2 >LDAXI MSG.RAMDRV.OK
|
||||
jsr PrintCStrAX
|
||||
*--------------------------------------
|
||||
A2osX.RamWorks >LDAXI MSG.RW
|
||||
jsr PrintCStrAX
|
||||
|
||||
jsr RWDetect
|
||||
bcs .10
|
||||
|
||||
>LDAXI MSG.RW.OK
|
||||
jsr PrintCStrAX
|
||||
|
||||
bra A2osX.Z80
|
||||
|
||||
.10 jsr RWInit
|
||||
bcc .1
|
||||
|
||||
>LDAXI MSG.RW.KO1
|
||||
jsr PrintCStrAX
|
||||
bra A2osX.Z80
|
||||
|
||||
.1 pha
|
||||
>LDAXI MSG.RW.OK1
|
||||
jsr PrintCStrAX
|
||||
|
||||
jsr RWInstall
|
||||
bcc .2
|
||||
|
||||
>LDAXI MSG.RW.KO2
|
||||
jsr PrintCStrAX
|
||||
bra A2osX.Z80
|
||||
|
||||
.2 >LDAXI MSG.RW.OK2
|
||||
jsr PrintCStrAX
|
||||
|
||||
jsr RWFormat
|
||||
bcc .3
|
||||
|
||||
>LDAXI MSG.RW.KO3
|
||||
jsr PrintCStrAX
|
||||
bra A2osX.Z80
|
||||
|
||||
.3 >LDAXI MSG.RW.OK3
|
||||
jsr PrintCStrAX
|
||||
*--------------------------------------
|
||||
A2osX.Z80 >LDAXI MSG.Z80
|
||||
jsr PrintCStrAX
|
||||
jsr InitZ80
|
||||
bcs .1
|
||||
pha Push Z80Slot
|
||||
|
||||
>LDAXI MSG.Z80.OK
|
||||
jsr PrintCStrAX
|
||||
bra .8
|
||||
|
||||
.1 >LDAXI MSG.Z80.KO
|
||||
jsr PrintCStrAX
|
||||
|
||||
.8 >LDAXI MSG.LOADING
|
||||
jsr PrintCStrAX
|
||||
|
||||
jsr LoadKernel
|
||||
bcs .9
|
||||
|
||||
phx
|
||||
pha
|
||||
>LDAXI MSG.LOADING.OK
|
||||
jsr PrintCStrAX
|
||||
|
||||
ldx #A2osX.GP.End-A2osX.GP.start
|
||||
|
||||
.81 lda A2osX.GP.start-1,x
|
||||
sta A2osX.GP-1,x
|
||||
dex
|
||||
bne .81
|
||||
|
||||
>DEBUG
|
||||
|
||||
php
|
||||
pla
|
||||
sei
|
||||
tsx
|
||||
stx A2osX.SaveS
|
||||
stx SETALTZP
|
||||
bit RRAMWRAMBNK1
|
||||
bit RRAMWRAMBNK1
|
||||
ldx A2osX.SaveS
|
||||
txs
|
||||
pha
|
||||
plp
|
||||
jmp $E000
|
||||
|
||||
|
||||
.9 pha
|
||||
>LDAXI MSG.LOADING.KO
|
||||
jsr PrintCStrAX
|
||||
|
||||
bra *
|
||||
*--------------------------------------
|
||||
* Out:
|
||||
* A = 0, 6502
|
||||
* A = 1, 65C02
|
||||
* A = 2, R65C02
|
||||
* A = 3, 65C816
|
||||
*--------------------------------------
|
||||
Init6502 ldy #0 Test 6502 BCD bug
|
||||
sed
|
||||
lda #$99
|
||||
clc
|
||||
adc #$01
|
||||
cld
|
||||
bmi .9 BUG!, we have 6502
|
||||
|
||||
ldy #3 test 65C816 TYX Instruction
|
||||
ldx #0
|
||||
.OP 65816
|
||||
tyx TYX: if 65C816, x becomes non-zero
|
||||
.OP 65C02
|
||||
bne .9 worked! 65C816
|
||||
|
||||
dey y=2 -> R65C02
|
||||
ldx $EA save zp $EA
|
||||
stz $EA store 0 in $EA
|
||||
.OP 65R02
|
||||
smb 7,$EA if not Rockwell, assemble as nop nop
|
||||
.OP 65C02
|
||||
asl $EA cs if Rockwell
|
||||
stx $EA restore zp $EA
|
||||
bcs .9
|
||||
|
||||
dey y=1 -> 65C02
|
||||
|
||||
.9 sty A2osX.CPUTYPE
|
||||
rts
|
||||
*--------------------------------------
|
||||
DisableRamDRV php
|
||||
sei
|
||||
lda DEVPTRS3D2
|
||||
cmp DEVPTRS0D1
|
||||
bne .1
|
||||
lda DEVPTRS3D2+1
|
||||
cmp DEVPTRS0D1+1
|
||||
beq .9 S3D2=NODEV, nothing to do
|
||||
|
||||
.1 ldx DEVCNT
|
||||
.2 lda DEVLST,x LOOKING FOR $BF, $BB, $B7, $B3
|
||||
and #$F3
|
||||
cmp #$B3
|
||||
beq .3
|
||||
dex
|
||||
bpl .2
|
||||
plp
|
||||
lda #1 No device found, exit with error
|
||||
sec
|
||||
rts
|
||||
|
||||
.3 ldx #0
|
||||
.4 lda DEVLST+1,x
|
||||
sta DEVLST,x
|
||||
inx
|
||||
cpx DEVCNT
|
||||
bne .4
|
||||
|
||||
stz DEVLST,x
|
||||
dec DEVCNT
|
||||
|
||||
lda DEVPTRS0D1
|
||||
sta DEVPTRS3D2
|
||||
lda DEVPTRS0D1+1
|
||||
sta DEVPTRS3D2+1
|
||||
plp
|
||||
clc Success!!
|
||||
rts
|
||||
|
||||
.9 plp
|
||||
lda #0 Not detected
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
LoadKernel jsr MLI
|
||||
.DA #MLIGETPREFIX
|
||||
.DA MLIGETPREFIX01
|
||||
bcs .9
|
||||
ldy #0
|
||||
ldx Path.Buffer
|
||||
.1 lda SYSKERNEL,y
|
||||
beq .2
|
||||
sta Path.Buffer+1,x
|
||||
inx
|
||||
iny
|
||||
bra .1
|
||||
|
||||
.2 stx Path.Buffer
|
||||
jsr MLI
|
||||
.DA #MLIOPEN
|
||||
.DA MLIOPEN01
|
||||
bcs .9
|
||||
|
||||
lda MLIOPEN01+5
|
||||
sta MLIREAD01+1
|
||||
sta MLICLOSE01+1
|
||||
jsr MLI
|
||||
.DA #MLIREAD
|
||||
.DA MLIREAD01
|
||||
bcs .9
|
||||
|
||||
jsr MLI
|
||||
.DA #MLICLOSE
|
||||
.DA MLICLOSE01
|
||||
bcs .9
|
||||
|
||||
php
|
||||
sei
|
||||
sta SETALTZP
|
||||
lda RRAMWRAMBNK1
|
||||
lda RRAMWRAMBNK1
|
||||
|
||||
>LDYAI Load.Address+$1F00
|
||||
>STYA TmpPtr1
|
||||
>LDYAI $E000+$1F00
|
||||
>STYA TmpPtr2
|
||||
ldy #$F9 do not trash NMI,BRK,IRQ Vectors
|
||||
|
||||
.3 lda (TmpPtr1),y
|
||||
sta (TmpPtr2),y
|
||||
dey
|
||||
cpy #$FF
|
||||
bne .3
|
||||
|
||||
dec TmpPtr1+1
|
||||
dec TmpPtr2+1
|
||||
lda TmpPtr2+1
|
||||
cmp #$DF
|
||||
bne .3
|
||||
|
||||
lda RROMBNK1
|
||||
sta CLRALTZP
|
||||
plp
|
||||
>LDAX MLIREAD01+6
|
||||
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
MLIGETPREFIX01 .DA #1
|
||||
.DA Path.Buffer
|
||||
MLIOPEN01 .DA #3
|
||||
.DA Path.Buffer
|
||||
.DA IO.Buffer
|
||||
.BS 1
|
||||
MLIREAD01 .DA #4
|
||||
.BS 1
|
||||
.DA Load.Address
|
||||
.DA $2000
|
||||
.BS 2
|
||||
MLICLOSE01 .DA #1
|
||||
.BS 1
|
||||
*--------------------------------------
|
||||
Path.Buffer .BS MLI.MAXPATH
|
||||
SYSKERNEL >CSTRING "SYS/KERNEL"
|
||||
*--------------------------------------
|
||||
PrintCStrAX >STAX TmpPtr1
|
||||
pla
|
||||
sta TmpPtr2
|
||||
pla
|
||||
sta TmpPtr2+1
|
||||
|
||||
ldy #0
|
||||
.1 lda (TmpPtr1),y
|
||||
beq .9
|
||||
cmp #'%'
|
||||
bne .4
|
||||
|
||||
iny
|
||||
lda (TmpPtr1),y
|
||||
beq .9
|
||||
cmp #'d'
|
||||
bne .2
|
||||
pla
|
||||
jsr PrintADec
|
||||
bra .8
|
||||
|
||||
.2 cmp #'D'
|
||||
bne .3
|
||||
pla
|
||||
plx
|
||||
jsr PrintAXDec
|
||||
bra .8
|
||||
|
||||
.3 cmp #'h'
|
||||
bne .4
|
||||
pla
|
||||
jsr PRBYTE
|
||||
|
||||
.4 cmp #'\'
|
||||
bne .7
|
||||
iny
|
||||
lda (TmpPtr1),y
|
||||
beq .9
|
||||
cmp #'n'
|
||||
bne .9
|
||||
lda #$0D
|
||||
|
||||
.7 ora #$80
|
||||
jsr COUT
|
||||
.8 iny
|
||||
bne .1
|
||||
|
||||
.9 lda TmpPtr2+1
|
||||
pha
|
||||
lda TmpPtr2
|
||||
pha
|
||||
rts
|
||||
*--------------------------------------
|
||||
PrintADec ldx #0
|
||||
PrintAXDec >STAX HEX
|
||||
PrintDec stz BCD
|
||||
stz BCD+1
|
||||
stz BCD+2
|
||||
|
||||
phy
|
||||
|
||||
ldx #16 let's roll 16 bits
|
||||
sed
|
||||
.2 asl HEX
|
||||
rol HEX+1
|
||||
php cpy will disturb carry while BCD adc
|
||||
ldy #0
|
||||
.3 plp
|
||||
lda BCD,y
|
||||
adc BCD,y
|
||||
sta BCD,y
|
||||
php
|
||||
iny
|
||||
cpy #3 Last byte of BCDBUF?
|
||||
bne .3
|
||||
plp
|
||||
dex
|
||||
bne .2
|
||||
|
||||
cld
|
||||
|
||||
stz bFlag
|
||||
|
||||
ldx #2
|
||||
.4 lda BCD,x
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
bne .5
|
||||
bit bFlag
|
||||
bpl .6
|
||||
.5 sec
|
||||
ror bFlag
|
||||
ora #$B0
|
||||
jsr COUT
|
||||
.6 lda BCD,x
|
||||
and #$0F
|
||||
bne .7
|
||||
bit bFlag
|
||||
bpl .8
|
||||
.7 sec
|
||||
ror bFlag
|
||||
ora #$B0
|
||||
jsr COUT
|
||||
.8 dex
|
||||
bpl .4
|
||||
|
||||
bit bFlag
|
||||
bmi .9
|
||||
lda #$B0
|
||||
jsr COUT
|
||||
|
||||
.9 ply
|
||||
rts
|
||||
*--------------------------------------
|
||||
MSG.SYSMEM >CSTRING "Checking System Memory..."
|
||||
MSG.SYSMEM.OK >CSTRING "128k Detected.\n"
|
||||
MSG.SYSMEM.KO >CSTRING "A2osX Requires At Least 128k Memory.\n"
|
||||
MSG.65x >CSTRING "Checking 65x CPU..."
|
||||
MSG.65x.KO >CSTRING "A2osX Requires At Least A 65C02 CPU.\n"
|
||||
MSG.RAMDRV >CSTRING "Checking ProDOS RamDrive..."
|
||||
MSG.RAMDRV.OK >CSTRING "Successfully Disabled.\n"
|
||||
MSG.RAMDRV.KO0 >CSTRING "Not Detected.\n"
|
||||
MSG.RAMDRV.KO1 >CSTRING "Uninstall Failed !!!\n"
|
||||
MSG.CLOCK.OK1 >CSTRING "Already Installed.\n"
|
||||
MSG.CLOCK.OK2 >CSTRING "Successfully Installed.\n"
|
||||
MSG.CLOCK.KO >CSTRING "Install Failed !!!\n"
|
||||
MSG.RW >CSTRING "Detecting Ramworks Card..."
|
||||
MSG.RW.OK >CSTRING "Already Installed as /RAM31.\n"
|
||||
MSG.RW.OK1 >CSTRING "%d Pages Detected.\n"
|
||||
MSG.RW.OK2 >CSTRING "RamWorks Driver Installed.\n"
|
||||
MSG.RW.OK3 >CSTRING "RamWorks Drive Formatted.\n"
|
||||
MSG.RW.KO1 >CSTRING "Not Detected.\n"
|
||||
MSG.RW.KO2 >CSTRING "RamWorks Driver Install Error.\n"
|
||||
MSG.RW.KO3 >CSTRING "RamWorks Drive Format Error.\n"
|
||||
MSG.Z80 >CSTRING "Detecting Z80 CPU..."
|
||||
MSG.Z80.OK >CSTRING "Detected In Slot %d.\n"
|
||||
MSG.Z80.KO >CSTRING "Not Detected.\n"
|
||||
MSG.LOADING >CSTRING "Loading Kernel..."
|
||||
MSG.LOADING.OK >CSTRING "%D Bytes Read.\n"
|
||||
MSG.LOADING.KO >CSTRING "Error $%h While Loading Kernel.\n"
|
||||
*--------------------------------------
|
||||
MSG.CPUTYPEL .DA #MSG.6502
|
||||
.DA #MSG.65C02
|
||||
.DA #MSG.R65C02
|
||||
.DA #MSG.65C816
|
||||
MSG.CPUTYPEH .DA /MSG.6502
|
||||
.DA /MSG.65C02
|
||||
.DA /MSG.R65C02
|
||||
.DA /MSG.65C816
|
||||
*--------------------------------------
|
||||
MSG.6502 >CSTRING "NMOS 6502.\n"
|
||||
MSG.65C02 >CSTRING "CMOS 65C02.\n"
|
||||
MSG.R65C02 >CSTRING "Rockwell R65C02.\n"
|
||||
MSG.65C816 >CSTRING "16 Bits 65C816.\n"
|
||||
*--------------------------------------
|
||||
HEX .BS 2
|
||||
BCD .BS 3
|
||||
bFlag .BS 1
|
||||
*--------------------------------------
|
||||
.INB A2OSX.S.GP
|
||||
.INB A2OSX.S.RW
|
||||
.INB A2OSX.S.Z80
|
||||
*--------------------------------------
|
||||
* ****** START OF MLI QUIT CODE ******
|
||||
* setup $0300 Global page :
|
||||
* Copy Back from $D010-$D0FF to $300-$3F0
|
||||
* setup $1000 Z80 switch code
|
||||
*--------------------------------------
|
||||
.PH $1000
|
||||
cld
|
||||
rts
|
||||
|
||||
ROOT.PATH .BS MLI.MAXPATH
|
||||
.EP
|
||||
*--------------------------------------
|
||||
* Driver for NoSlotClock
|
||||
* Load at (DATETIME+1)
|
||||
*--------------------------------------
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE A2OSX.S
|
||||
ASM
|
22
A2osX.STARTUP.txt
Normal file
22
A2osX.STARTUP.txt
Normal file
|
@ -0,0 +1,22 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
SET PATH=%A2OSX%SBIN/;%A2OSX%BIN/
|
||||
SET DRV=%A2OSX%DRV/
|
||||
SET ETC=%A2OSX%ETC/
|
||||
SET LIB=%A2OSX%LIB/
|
||||
LOAD CONSOLE.DRV
|
||||
EXEC GETTY KBD CON SHELL
|
||||
*LOAD SSC.DRV 9600 N 8 1
|
||||
*EXEC GETTY COM2 COM2 SHELL
|
||||
*LOAD PPIC.DRV
|
||||
LOAD UTHERNET.DRV 000E3A123456
|
||||
EXEC TCPIP ETH3
|
||||
EXEC DHCPCLNT
|
||||
*EXEC TELNETD
|
||||
*MOUNT TFTP 192.168.1.5:/AO2SX /TFTP
|
||||
LOAD DHGR.DRV
|
||||
MAN
|
||||
TEXT A2OSX.STARTUP
|
219
BIN/ARP.S.txt
Normal file
219
BIN/ARP.S.txt
Normal file
|
@ -0,0 +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
|
382
BIN/ASM.S.txt
Normal file
382
BIN/ASM.S.txt
Normal file
|
@ -0,0 +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
|
264
BIN/ASM.T.6502.S.txt
Normal file
264
BIN/ASM.T.6502.S.txt
Normal file
|
@ -0,0 +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
|
100
BIN/ASM.T.65C02.S.txt
Normal file
100
BIN/ASM.T.65C02.S.txt
Normal file
|
@ -0,0 +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
|
||||
|
36
BIN/ASM.T.Z80.S.txt
Normal file
36
BIN/ASM.T.Z80.S.txt
Normal file
|
@ -0,0 +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
|
||||
|
0
BIN/CHMOD.S.txt
Normal file
0
BIN/CHMOD.S.txt
Normal file
401
BIN/CHTYP.S.txt
Normal file
401
BIN/CHTYP.S.txt
Normal file
|
@ -0,0 +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
|
183
BIN/DNS.S.txt
Normal file
183
BIN/DNS.S.txt
Normal file
|
@ -0,0 +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
|
0
BIN/EDIT.S.txt
Normal file
0
BIN/EDIT.S.txt
Normal file
0
BIN/KILL.S.txt
Normal file
0
BIN/KILL.S.txt
Normal file
389
BIN/LS.S.txt
Normal file
389
BIN/LS.S.txt
Normal file
|
@ -0,0 +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
|
139
BIN/LSDEV.S.txt
Normal file
139
BIN/LSDEV.S.txt
Normal file
|
@ -0,0 +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
|
285
BIN/MEM.S.txt
Normal file
285
BIN/MEM.S.txt
Normal file
|
@ -0,0 +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
|
0
BIN/MOUNT.S.txt
Normal file
0
BIN/MOUNT.S.txt
Normal file
206
BIN/NETCFG.S.txt
Normal file
206
BIN/NETCFG.S.txt
Normal file
|
@ -0,0 +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
|
0
BIN/NTPDATE.S.txt
Normal file
0
BIN/NTPDATE.S.txt
Normal file
367
BIN/PING.S.txt
Normal file
367
BIN/PING.S.txt
Normal file
|
@ -0,0 +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
|
114
BIN/PS.S.txt
Normal file
114
BIN/PS.S.txt
Normal file
|
@ -0,0 +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
|
153
BIN/TEST.S.txt
Normal file
153
BIN/TEST.S.txt
Normal file
|
@ -0,0 +1,153 @@
|
|||
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
|
0
BIN/TOUCH.S.txt
Normal file
0
BIN/TOUCH.S.txt
Normal file
57
BIN/_TEMPLATE.S.txt
Normal file
57
BIN/_TEMPLATE.S.txt
Normal file
|
@ -0,0 +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
|
332
DRV/CONSOLE.DRV.S.txt
Normal file
332
DRV/CONSOLE.DRV.S.txt
Normal file
|
@ -0,0 +1,332 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF DRV/CONSOLE.DRV
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/IO.I
|
||||
*--------------------------------------
|
||||
ZPBASL1 .EQ ZPDRV
|
||||
ZPBASL2 .EQ ZPDRV+2
|
||||
*--------------------------------------
|
||||
* Main DRV entry point
|
||||
* input :
|
||||
* X = CMD
|
||||
* 0 : OPEN
|
||||
* 2 : GETEVENT
|
||||
* 6 : OUT
|
||||
* 8 : CLOSE
|
||||
*--------------------------------------
|
||||
* CLD $D8
|
||||
* JMP (*,x) $7C
|
||||
* #JMPTABLE
|
||||
* /JMPTABLE
|
||||
*--------------------------------------
|
||||
CURSOR.BLINK.SPEED .EQ 2
|
||||
*--------------------------------------
|
||||
CS.START cld
|
||||
jmp (.1,x)
|
||||
.1 .DA OPEN
|
||||
.DA GETEVENT
|
||||
.DA OUT
|
||||
.DA CLOSE
|
||||
.DA GETINFO
|
||||
.DA 0 end or relocation
|
||||
.DA CS.END-CS.START Code Length To Relocate
|
||||
.DA 0 Data Segemnt to Allocate
|
||||
*--------------------------------------
|
||||
OPEN stz CURON
|
||||
lda #$80
|
||||
sta INVFLG
|
||||
|
||||
jsr HOME
|
||||
|
||||
lda #S.DEV.F.CHAR+S.DEV.F.EVENT+S.DEV.F.OUT
|
||||
sta (pDevContext)
|
||||
|
||||
ldy #S.DEV.NAME
|
||||
ldx #0
|
||||
.1 lda DEVNAME,x
|
||||
sta (pDevContext),y
|
||||
cpx DEVNAME
|
||||
beq .8
|
||||
inx
|
||||
iny
|
||||
bne .1
|
||||
|
||||
.8 lda A2osX.SCREENS
|
||||
ora #A2osX.SCREENS.C
|
||||
sta A2osX.SCREENS
|
||||
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
GETEVENT >PULLW pEvent
|
||||
lda A2osX.TIMER16
|
||||
and #CURSOR.BLINK.SPEED
|
||||
eor CURON
|
||||
beq .9
|
||||
jsr CURBLNK
|
||||
|
||||
.9 lda #0 Error = no event
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
OUT >PULLA
|
||||
jsr COUT
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CLOSE lda A2osX.SCREENS
|
||||
and #$FF^A2osX.SCREENS.C
|
||||
sta A2osX.SCREENS
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
GETINFO clc
|
||||
rts
|
||||
|
||||
*--------------------------------------
|
||||
* PRIVATE
|
||||
*--------------------------------------
|
||||
COUT cmp #8
|
||||
bne .2
|
||||
ldx CH
|
||||
beq .10
|
||||
dec CH
|
||||
bra .12
|
||||
|
||||
.10 ldy CV
|
||||
bne .11
|
||||
rts
|
||||
|
||||
.11 lda #79
|
||||
sta CH
|
||||
dec CV
|
||||
|
||||
.12 lda #$A0
|
||||
ldx CH
|
||||
ldy CV
|
||||
jsr SetCharAtXY
|
||||
rts
|
||||
|
||||
.2 cmp #13
|
||||
beq CROUT
|
||||
ldx CH
|
||||
ldy CV
|
||||
jsr SetCharAtXY
|
||||
FSOUT ldx CH
|
||||
cpx #79
|
||||
beq CROUT1
|
||||
inc CH
|
||||
rts
|
||||
*--------------------------------------
|
||||
CROUT jsr CLREOL
|
||||
CROUT1 stz CH
|
||||
ldy CV
|
||||
cpy #23
|
||||
beq SCROLL.UP
|
||||
inc CV
|
||||
rts
|
||||
|
||||
SCROLL.UP ldx #0
|
||||
sta SET80STORE
|
||||
|
||||
.1 lda BASEL,x
|
||||
sta ZPBASL1
|
||||
lda BASEH,x
|
||||
sta ZPBASL1+1
|
||||
inx
|
||||
lda BASEL,x
|
||||
sta ZPBASL2
|
||||
lda BASEH,x
|
||||
sta ZPBASL2+1
|
||||
|
||||
ldy #39
|
||||
sta SETPAGE2
|
||||
|
||||
.2 lda (ZPBASL2),y
|
||||
sta (ZPBASL1),y
|
||||
dey
|
||||
bpl .2
|
||||
|
||||
ldy #39
|
||||
sta CLRPAGE2
|
||||
|
||||
.3 lda (ZPBASL2),y
|
||||
sta (ZPBASL1),y
|
||||
dey
|
||||
bpl .3
|
||||
|
||||
cpx #23
|
||||
bne .1
|
||||
|
||||
|
||||
*--------------------------------------
|
||||
CLREOL ldx CH
|
||||
.1 phx
|
||||
ldy CV
|
||||
lda #$A0
|
||||
jsr SetCharAtXY
|
||||
plx
|
||||
inx
|
||||
cpx #80
|
||||
bne .1
|
||||
rts
|
||||
*--------------------------------------
|
||||
HOME stz CH
|
||||
stz CV
|
||||
|
||||
lda RDPAGE2
|
||||
pha
|
||||
lda RD80STORE
|
||||
pha
|
||||
|
||||
sta SET80STORE
|
||||
|
||||
ldx #23
|
||||
|
||||
.1 lda BASEL,x
|
||||
sta ZPBASL1
|
||||
lda BASEH,x
|
||||
sta ZPBASL1+1
|
||||
|
||||
lda #' '
|
||||
ora INVFLG
|
||||
|
||||
sta CLRPAGE2
|
||||
ldy #39
|
||||
|
||||
.2 sta (ZPBASL1),y
|
||||
dey
|
||||
bpl .2
|
||||
|
||||
sta SETPAGE2
|
||||
ldy #39
|
||||
|
||||
.3 sta (ZPBASL1),y
|
||||
dey
|
||||
bpl .3
|
||||
|
||||
dex
|
||||
bpl .1
|
||||
|
||||
pla
|
||||
bmi .4
|
||||
sta CLR80STORE
|
||||
bra .5
|
||||
.4 sta SET80STORE
|
||||
|
||||
.5 pla
|
||||
bmi .6
|
||||
sta CLRPAGE2
|
||||
bra .8
|
||||
.6 sta SETPAGE2
|
||||
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
CUROFF lda CURON
|
||||
beq CUREXIT.RTS
|
||||
|
||||
CURBLNK lda A2osX.ACTIVESCRN
|
||||
and #A2osX.SCREENS.C
|
||||
bne CURBLNK1
|
||||
|
||||
lda CURON
|
||||
bne CURBLNK.OFF
|
||||
rts do not Light if screen is not active
|
||||
|
||||
CURBLNK1 lda CURON
|
||||
bne CURBLNK.OFF
|
||||
ldx CH
|
||||
ldy CV
|
||||
jsr GetCharAtXY
|
||||
sta CURCHAR
|
||||
ldx CH
|
||||
ldy CV
|
||||
lda #$20
|
||||
jsr SetCharAtXY
|
||||
bra CUREXIT
|
||||
|
||||
CURBLNK.OFF ldx CH
|
||||
ldy CV
|
||||
lda CURCHAR
|
||||
jsr SetCharAtXY
|
||||
|
||||
CUREXIT lda CURON
|
||||
eor #CURSOR.BLINK.SPEED
|
||||
sta CURON
|
||||
CUREXIT.RTS rts
|
||||
*--------------------------------------
|
||||
SetCharAtXY pha
|
||||
lda RDPAGE2
|
||||
pha
|
||||
lda RD80STORE
|
||||
pha
|
||||
sta SET80STORE
|
||||
txa
|
||||
lsr
|
||||
|
||||
bcc .1
|
||||
clc
|
||||
sta CLRPAGE2
|
||||
bra .2
|
||||
.1 sta SETPAGE2
|
||||
|
||||
.2 adc BASEL,y
|
||||
sta ZPBASL1
|
||||
lda BASEH,y
|
||||
sta ZPBASL1+1
|
||||
|
||||
ply
|
||||
plx
|
||||
pla
|
||||
sta (ZPBASL1)
|
||||
tya
|
||||
bmi .3
|
||||
sta CLR80STORE
|
||||
.3 txa
|
||||
bpl .4
|
||||
sta SETPAGE2
|
||||
rts
|
||||
.4 sta CLRPAGE2
|
||||
rts
|
||||
*--------------------------------------
|
||||
GetCharAtXY sta SET80STORE
|
||||
txa
|
||||
lsr
|
||||
|
||||
bcc .1
|
||||
clc
|
||||
sta CLRPAGE2
|
||||
bra .2
|
||||
.1 sta SETPAGE2
|
||||
|
||||
.2 adc BASEL,y
|
||||
sta ZPBASL1
|
||||
lda BASEH,y
|
||||
sta ZPBASL1+1
|
||||
|
||||
lda (ZPBASL1)
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
DEVNAME >PSTRING "CON"
|
||||
CH .BS 1
|
||||
CV .BS 1
|
||||
INVFLG .BS 1
|
||||
CURON .BS 1
|
||||
CURCHAR .BS 1
|
||||
*--------------------------------------
|
||||
BASEL .HS 00.80.00.80.00.80.00.80.28.A8.28.A8.28.A8.28.A8.50.D0.50.D0.50.D0.50.D0
|
||||
BASEH .HS 04.04.05.05.06.06.07.07.04.04.05.05.06.06.07.07.04.04.05.05.06.06.07.07
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE DRV/CONSOLE.DRV.S
|
||||
ASM
|
483
DRV/DHGR.DRV.S.txt
Normal file
483
DRV/DHGR.DRV.S.txt
Normal file
|
@ -0,0 +1,483 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF DRV/DHGR.DRV
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/IO.I
|
||||
*--------------------------------------
|
||||
ZPBASE .EQ ZPDRV
|
||||
ZPCOLOR .EQ ZPDRV+2
|
||||
*--------------------------------------
|
||||
* Main DRV entry point
|
||||
* input :
|
||||
* X = CMD
|
||||
* 0 : OPEN
|
||||
* 2 : GETEVENT
|
||||
* 6 : OUT
|
||||
* 8 : CLOSE
|
||||
*--------------------------------------
|
||||
* CLD $D8
|
||||
* JMP (*,x) $7C
|
||||
* #JMPTABLE
|
||||
* /JMPTABLE
|
||||
*--------------------------------------
|
||||
CS.START cld
|
||||
jmp (.1,x)
|
||||
.1 .DA OPEN
|
||||
.DA GETEVENT
|
||||
.DA OUT
|
||||
.DA CLOSE
|
||||
.DA GETINFO
|
||||
.DA SETPIXEL
|
||||
.DA GETPIXEL
|
||||
.DA HLINE
|
||||
.DA VLINE
|
||||
.DA FILLREC
|
||||
.DA BITBLT
|
||||
L.DEVINFO .DA DEVINFO
|
||||
.DA 0 end or relocation
|
||||
.DA CS.END-CS.START Code Length To Relocate
|
||||
.DA DS.END-DS.START Data Segment to Allocate
|
||||
*--------------------------------------
|
||||
OPEN
|
||||
lda #S.DEV.F.GFX
|
||||
sta (pDevContext)
|
||||
|
||||
ldy #S.DEV.NAME
|
||||
ldx #0
|
||||
.1 lda DEVNAME,x
|
||||
sta (pDevContext),y
|
||||
cpx DEVNAME
|
||||
beq .8
|
||||
inx
|
||||
iny
|
||||
bne .1
|
||||
|
||||
.8 lda A2osX.SCREENS
|
||||
ora #A2osX.SCREENS.G
|
||||
sta A2osX.SCREENS
|
||||
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
GETEVENT
|
||||
OUT clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CLOSE lda A2osX.SCREENS
|
||||
and #$FF^A2osX.SCREENS.G
|
||||
sta A2osX.SCREENS
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
GETINFO >LDYA L.DEVINFO
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* SETPIXEL
|
||||
*--------------------------------------
|
||||
* PULLB = X.LO
|
||||
* PULLB = X.HI
|
||||
* PULLB = Y
|
||||
* PULLB = Mode
|
||||
* 00000000=mono
|
||||
* 00000001=xor (mono on 1 bit)
|
||||
* 10000000=color
|
||||
* PULLB = Color (if not xor)
|
||||
*--------------------------------------
|
||||
SETPIXEL >PULLA X.LO
|
||||
tax
|
||||
>PULLA X.HI
|
||||
lsr if 256 =< x < 511
|
||||
bcs .1
|
||||
lsr
|
||||
bcs .2 if 512 < x
|
||||
lda DIV7.0,x
|
||||
tay
|
||||
lda MOD7.0,x
|
||||
bra .3
|
||||
|
||||
.1 lda DIV7.256,x
|
||||
tay
|
||||
lda MOD7.256,x
|
||||
bra .3
|
||||
|
||||
.2 lda DIV7.512,x
|
||||
tay
|
||||
lda MOD7.512,x
|
||||
|
||||
.3 pha save MOD,y=DIV
|
||||
|
||||
>PULLA Pull Y
|
||||
tax
|
||||
lda BASEL,x setup line Base Ptr
|
||||
sta ZPBASE
|
||||
lda BASEH,x
|
||||
sta ZPBASE+1
|
||||
|
||||
sta SET80STORE and prepare for page switching
|
||||
|
||||
plx get back MOD in x
|
||||
|
||||
>PULLA Pull Mode
|
||||
bmi SETPIXEL.COLOR
|
||||
*--------------------------------------
|
||||
* X=MOD,Y=DIV
|
||||
*--------------------------------------
|
||||
SETPIXEL.MONO pha
|
||||
tya
|
||||
lsr
|
||||
tay
|
||||
bcs .1 odd=main ram
|
||||
sta SETPAGE2
|
||||
bra .2
|
||||
.1 sta CLRPAGE2
|
||||
.2 pla
|
||||
lsr CS=xor
|
||||
bcs SETPIXEL.MONOX
|
||||
|
||||
>PULLA get COLOR
|
||||
lsr
|
||||
bcs SETPIXEL.MONOW
|
||||
|
||||
lda (ZPBASE),y
|
||||
and Mono.NMasks,x
|
||||
sta (ZPBASE),y
|
||||
rts
|
||||
|
||||
SETPIXEL.MONOW lda (ZPBASE),y
|
||||
and #$7F switch back ths byte to mono
|
||||
ora Mono.Masks,x
|
||||
sta (ZPBASE),y
|
||||
rts
|
||||
|
||||
SETPIXEL.MONOX lda (ZPBASE),y
|
||||
eor Mono.Masks,x
|
||||
sta (ZPBASE),y
|
||||
rts
|
||||
*--------------------------------------
|
||||
* X=MOD,Y=DIV
|
||||
*--------------------------------------
|
||||
SETPIXEL.COLOR tya
|
||||
lsr Divide Col by 2 to get in range 0->39
|
||||
and #$FE make it 0->38 as color mask on 4 bytes
|
||||
clc
|
||||
adc ZPBASE ZPBASE now point to first of the 4 columns
|
||||
sta ZPBASE
|
||||
txa get MOD
|
||||
asl times 4 to compute index in color tables
|
||||
asl
|
||||
tax set in X for Masks,NMasks
|
||||
|
||||
>PULLA get COLOR
|
||||
asl
|
||||
asl
|
||||
tay
|
||||
|
||||
lda Color.Masks,x
|
||||
beq .1
|
||||
|
||||
sta SETPAGE2
|
||||
lda (ZPBASE)
|
||||
and Color.NMasks,x reset existing pixel,
|
||||
ora Color.Pixels,y apply color
|
||||
and Color.Enable,x filter 4 color bits color.enable bit
|
||||
sta (ZPBASE)
|
||||
|
||||
.1 inx
|
||||
iny
|
||||
|
||||
lda Color.Masks,x
|
||||
beq .2
|
||||
|
||||
sta CLRPAGE2
|
||||
lda (ZPBASE)
|
||||
and Color.NMasks,x reset existing pixel,
|
||||
ora Color.Pixels,y apply color
|
||||
and Color.Enable,x filter 4 color bits color.enable bit
|
||||
sta (ZPBASE)
|
||||
|
||||
.2 inc ZPBASE
|
||||
inx
|
||||
iny
|
||||
|
||||
lda Color.Masks,x
|
||||
beq .3
|
||||
|
||||
sta SETPAGE2
|
||||
lda (ZPBASE)
|
||||
and Color.NMasks,x reset existing pixel,
|
||||
ora Color.Pixels,y apply color
|
||||
and Color.Enable,x filter 4 color bits color.enable bit
|
||||
sta (ZPBASE)
|
||||
|
||||
.3 inx
|
||||
iny
|
||||
|
||||
lda Color.Masks,x
|
||||
beq .8
|
||||
|
||||
sta CLRPAGE2
|
||||
lda (ZPBASE)
|
||||
and Color.NMasks,x reset existing pixel,
|
||||
ora Color.Pixels,y apply color
|
||||
and Color.Enable,x filter 4 color bits color.enable bit
|
||||
sta (ZPBASE)
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
GETPIXEL
|
||||
*--------------------------------------
|
||||
HLINE
|
||||
*--------------------------------------
|
||||
VLINE
|
||||
*--------------------------------------
|
||||
FILLREC
|
||||
*--------------------------------------
|
||||
* params : X,Y,W,H
|
||||
*--------------------------------------
|
||||
BITBLT
|
||||
rts
|
||||
*--------------------------------------
|
||||
* PRIVATE
|
||||
*--------------------------------------
|
||||
DIV7.0 .HS 0000000000000001010101010101
|
||||
.HS 0202020202020203030303030303
|
||||
.HS 0404040404040405050505050505
|
||||
.HS 0606060606060607070707070707
|
||||
.HS 0808080808080809090909090909
|
||||
.HS 0A0A0A0A0A0A0A0B0B0B0B0B0B0B
|
||||
.HS 0C0C0C0C0C0C0C0D0D0D0D0D0D0D
|
||||
.HS 0E0E0E0E0E0E0E0F0F0F0F0F0F0F
|
||||
.HS 1010101010101011111111111111
|
||||
.HS 1212121212121213131313131313
|
||||
.HS 1414141414141415151515151515
|
||||
.HS 1616161616161617171717171717
|
||||
.HS 1818181818181819191919191919
|
||||
.HS 1A1A1A1A1A1A1A1B1B1B1B1B1B1B
|
||||
.HS 1C1C1C1C1C1C1C1D1D1D1D1D1D1D
|
||||
.HS 1E1E1E1E1E1E1E1F1F1F1F1F1F1F
|
||||
.HS 2020202020202021212121212121
|
||||
.HS 2222222222222223232323232323
|
||||
.HS 24242424
|
||||
DIV7.256 .HS 24242425252525252525
|
||||
.HS 2626262626262627272727272727
|
||||
.HS 2828282828282829292929292929
|
||||
.HS 2A2A2A2A2A2A2A2B2B2B2B2B2B2B
|
||||
.HS 2C2C2C2C2C2C2C2D2D2D2D2D2D2D
|
||||
.HS 2E2E2E2E2E2E2E2F2F2F2F2F2F2F
|
||||
.HS 3030303030303031313131313131
|
||||
.HS 3232323232323233333333333333
|
||||
.HS 3434343434343435353535353535
|
||||
.HS 3636363636363637373737373737
|
||||
.HS 3838383838383839393939393939
|
||||
.HS 3A3A3A3A3A3A3A3B3B3B3B3B3B3B
|
||||
.HS 3C3C3C3C3C3C3C3D3D3D3D3D3D3D
|
||||
.HS 3E3E3E3E3E3E3E3F3F3F3F3F3F3F
|
||||
.HS 4040404040404041414141414141
|
||||
.HS 4242424242424243434343434343
|
||||
.HS 4444444444444445454545454545
|
||||
.HS 4646464646464647474747474747
|
||||
.HS 4848484848484849
|
||||
DIV7.512 .HS 494949494949
|
||||
.HS 4A4A4A4A4A4A4A4B4B4B4B4B4B4B
|
||||
.HS 4C4C4C4C4C4C4C4D4D4D4D4D4D4D
|
||||
.HS 4E4E4E4E4E4E4E4F4F4F4F4F4F4F
|
||||
*--------------------------------------
|
||||
MOD7.0 .HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 00010203
|
||||
MOD7.256 .HS 04050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600
|
||||
MOD7.512 .HS 010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
.HS 0001020304050600010203040506
|
||||
*--------------------------------------
|
||||
BASEL .HS 00.00.00.00.00.00.00.00
|
||||
.HS 80.80.80.80.80.80.80.80
|
||||
.HS 00.00.00.00.00.00.00.00
|
||||
.HS 80.80.80.80.80.80.80.80
|
||||
.HS 00.00.00.00.00.00.00.00
|
||||
.HS 80.80.80.80.80.80.80.80
|
||||
.HS 00.00.00.00.00.00.00.00
|
||||
.HS 80.80.80.80.80.80.80.80
|
||||
.HS 28.28.28.28.28.28.28.28
|
||||
.HS A8.A8.A8.A8.A8.A8.A8.A8
|
||||
.HS 28.28.28.28.28.28.28.28
|
||||
.HS A8.A8.A8.A8.A8.A8.A8.A8
|
||||
.HS 28.28.28.28.28.28.28.28
|
||||
.HS A8.A8.A8.A8.A8.A8.A8.A8
|
||||
.HS 28.28.28.28.28.28.28.28
|
||||
.HS A8.A8.A8.A8.A8.A8.A8.A8
|
||||
.HS 50.50.50.50.50.50.50.50
|
||||
.HS D0.D0.D0.D0.D0.D0.D0.D0
|
||||
.HS 50.50.50.50.50.50.50.50
|
||||
.HS D0.D0.D0.D0.D0.D0.D0.D0
|
||||
.HS 50.50.50.50.50.50.50.50
|
||||
.HS D0.D0.D0.D0.D0.D0.D0.D0
|
||||
.HS 50.50.50.50.50.50.50.50
|
||||
.HS D0.D0.D0.D0.D0.D0.D0.D0
|
||||
*--------------------------------------
|
||||
BASEH .HS 20.24.28.2C.30.34.38.3C
|
||||
.HS 20.24.28.2C.30.34.38.3C
|
||||
.HS 21.25.29.2D.31.35.39.3D
|
||||
.HS 21.25.29.2D.31.35.39.3D
|
||||
.HS 22.26.2A.2E.32.36.3A.3E
|
||||
.HS 22.26.2A.2E.32.36.3A.3E
|
||||
.HS 23.27.2B.2F.33.37.3B.3F
|
||||
.HS 23.27.2B.2F.33.37.3B.3F
|
||||
.HS 20.24.28.2C.30.34.38.3C
|
||||
.HS 20.24.28.2C.30.34.38.3C
|
||||
.HS 21.25.29.2D.31.35.39.3D
|
||||
.HS 21.25.29.2D.31.35.39.3D
|
||||
.HS 22.26.2A.2E.32.36.3A.3E
|
||||
.HS 22.26.2A.2E.32.36.3A.3E
|
||||
.HS 23.27.2B.2F.33.37.3B.3F
|
||||
.HS 23.27.2B.2F.33.37.3B.3F
|
||||
.HS 20.24.28.2C.30.34.38.3C
|
||||
.HS 20.24.28.2C.30.34.38.3C
|
||||
.HS 21.25.29.2D.31.35.39.3D
|
||||
.HS 21.25.29.2D.31.35.39.3D
|
||||
.HS 22.26.2A.2E.32.36.3A.3E
|
||||
.HS 22.26.2A.2E.32.36.3A.3E
|
||||
.HS 23.27.2B.2F.33.37.3B.3F
|
||||
.HS 23.27.2B.2F.33.37.3B.3F
|
||||
*--------------------------------------
|
||||
Mono.NMasks .DA %01111110
|
||||
.DA %01111101
|
||||
.DA %01111011
|
||||
.DA %01110111
|
||||
.DA %01101111
|
||||
.DA %01011111
|
||||
.DA %00111111
|
||||
*--------------------------------------
|
||||
Mono.Masks .DA %00000001
|
||||
.DA %00000010
|
||||
.DA %00000100
|
||||
.DA %00001000
|
||||
.DA %00010000
|
||||
.DA %00100000
|
||||
.DA %01000000
|
||||
*--------------------------------------
|
||||
* bits to "and" to reset color of pixel (0 means nothing to do)
|
||||
*--------------------------------------
|
||||
Color.NMasks .DA %01110000.00000000.00000000.00000000
|
||||
.DA %00001111.01111110.00000000.00000000
|
||||
.DA %00000000.01100001.00000000.00000000
|
||||
.DA %00000000.00011111.01111100.00000000
|
||||
.DA %00000000.00000000.01000011.00000000
|
||||
.DA %00000000.00000000.00111111.01111000
|
||||
.DA %00000000.00000000.00000000.00000111
|
||||
*--------------------------------------
|
||||
* bits to "and" to Get color of pixel (0 means nothing to do)
|
||||
* 4 bytes * 7 mods
|
||||
*--------------------------------------
|
||||
Color.Masks .DA %00001111.00000000.00000000.00000000 (nothing to do)
|
||||
.DA %01110000.00000001.00000000.00000000 asl0,asl0,rol1,asl0,rol1,asl0,rol1
|
||||
.DA %00000000.00011110.00000000.00000000 lsr1
|
||||
.DA %00000000.01100000.00000011.00000000 asl1,asl1,rol2,asl1,rol2
|
||||
.DA %00000000.00000000.00111100.00000000 lsr2,lsr2
|
||||
.DA %00000000.00000000.01000000.00000111 asl2,asl2,rol3
|
||||
.DA %00000000.00000000.00000000.01111000 lsr3,lsr3,lsr3
|
||||
*--------------------------------------
|
||||
Color.Enable .DA %10001111.00000000.00000000.00000000
|
||||
.DA %11110000.00000001.00000000.00000000
|
||||
.DA %00000000.10011110.00000000.00000000
|
||||
.DA %00000000.11100000.00000011.00000000
|
||||
.DA %00000000.00000000.10111100.00000000
|
||||
.DA %00000000.00000000.11000000.00000111
|
||||
.DA %00000000.00000000.00000000.11111000
|
||||
*--------------------------------------
|
||||
* bits to "ora" to set color of pixel (including "color bit set " for byte hosting bit0)
|
||||
* 4 bytes * 16 Colors
|
||||
* pixel masks c1110000.c3322221.c5444433.c6666555
|
||||
*--------------------------------------
|
||||
Color.Pixels .DA %00000000.00000000.00000000.00000000 0000,Black (color bit disable)
|
||||
.DA %10010001.10100010.11000100.10001000 0001,Magenta
|
||||
.DA %10100010.11000100.10001000.10010001 0010,Brown
|
||||
.DA %10110011.11100110.11001100.10011001 0011,Orange
|
||||
.DA %11000100.10001000.10010001.10100010 0100,Dark Green
|
||||
.DA %11010101.10101010.11010101.10101010 0101,Grey1
|
||||
.DA %11100110.11001100.10011001.10110011 0110,Green
|
||||
.DA %11110111.11101110.11011101.10111011 0111,Yellow
|
||||
.DA %10001000.10010001.10100010.11000100 1000,Dark Blue
|
||||
.DA %10011001.10110011.11100110.11001100 1001,Violet
|
||||
.DA %10101010.11010101.10101010.11010101 1010,Grey2
|
||||
.DA %10111011.11110111.11101111.11011101 1011,Pink
|
||||
.DA %11001100.10011001.10110011.11100110 1100,Medium Blue
|
||||
.DA %11011101.10111011.11110111.11101110 1101,Light Blue
|
||||
.DA %11101110.11011101.10111011.11110111 1110,Aqua
|
||||
.DA %01111111.01111111.01111111.01111111 1111,White (color bit disable)
|
||||
|
||||
*Black 00 00 00 00 0000
|
||||
*Magenta 08 11 22 44 0001
|
||||
*Brown 44 08 11 22 0010
|
||||
*Orange 4C 19 33 66 0011
|
||||
*Dark Green 22 44 08 11 0100
|
||||
*Grey1 2A 55 2A 55 0101
|
||||
*Green 66 4C 19 33 0110
|
||||
*Yellow 6E 5D 3B 77 0111
|
||||
*Dark Blue 11 22 44 08 1000
|
||||
*Violet 19 33 66 4C 1001
|
||||
*Grey2 55 2A 55 2A 1010
|
||||
*Pink 5D 3B 77 6E 1011
|
||||
*Medium Blue 33 66 4C 19 1100
|
||||
*Light Blue 3B 77 6E 5D 1101
|
||||
*Aqua 77 6E 5D 3B 1110
|
||||
*White 7F 7F 7F 7F 1111
|
||||
|
||||
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
DEVNAME >PSTRING "GFX"
|
||||
*--------------------------------------
|
||||
DS.START
|
||||
*--------------------------------------
|
||||
DEVINFO .DA #S.DEV.F.GFX type of DEVINFO STRUCT
|
||||
DEVINFO.W .DA 560 X.SIZE
|
||||
DEVINFO.H .DA 192 Y.SIZE
|
||||
DS.END
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE DRV/DHGR.DRV.S
|
||||
ASM
|
108
DRV/PPIC.DRV.S.txt
Normal file
108
DRV/PPIC.DRV.S.txt
Normal file
|
@ -0,0 +1,108 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF DRV/PPIC.DRV
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/ZP.I
|
||||
*--------------------------------------
|
||||
ZPTmpPtr1 .EQ ZPDRV
|
||||
*--------------------------------------
|
||||
SIG.05 .EQ $48
|
||||
SIG.07 .EQ $48
|
||||
*--------------------------------------
|
||||
* Main DRV entry point
|
||||
* input :
|
||||
* X = CMD
|
||||
* 0 : OPEN
|
||||
* 2 : GETEVENT
|
||||
* 4 : SELECT
|
||||
* 6 : RELEASE
|
||||
* 8 : OUT
|
||||
* 10 : CLOSE
|
||||
*--------------------------------------
|
||||
* CLD $D8
|
||||
* JMP (*,x) $7C
|
||||
* #JMPTABLE
|
||||
* /JMPTABLE
|
||||
*--------------------------------------
|
||||
CS.START cld
|
||||
jmp (.1,x)
|
||||
.1 .DA OPEN
|
||||
.DA GETEVENT
|
||||
.DA SELECT
|
||||
.DA RELEASE
|
||||
.DA OUT
|
||||
.DA CLOSE
|
||||
.DA 0 end or relocation
|
||||
.DA CS.END-CS.START
|
||||
*--------------------------------------
|
||||
OPEN stz ZPTmpPtr1
|
||||
lda #$C1
|
||||
sta ZPTmpPtr1+1
|
||||
.1 ldy #5
|
||||
lda (ZPTmpPtr1),y
|
||||
cmp #SIG.05
|
||||
bne .2
|
||||
|
||||
ldy #7
|
||||
lda (ZPTmpPtr1),y
|
||||
cmp #SIG.07
|
||||
beq .3
|
||||
|
||||
.2 inc ZPTmpPtr1+1
|
||||
lda ZPTmpPtr1+1
|
||||
cmp #$C8
|
||||
bne .1
|
||||
beq .99
|
||||
|
||||
.3 lda ZPTmpPtr1+1
|
||||
and #$0F
|
||||
sta DEVSLOT
|
||||
ora #$30
|
||||
sta DEVNAME+4
|
||||
|
||||
lda #S.DEV.F.CHAR+S.DEV.F.OUT
|
||||
sta (DEVMGR.DEVPTR)
|
||||
ldy #S.DEV.NAME
|
||||
|
||||
ldx #0
|
||||
.7 lda DEVNAME,x
|
||||
sta (DEVMGR.DEVPTR),y
|
||||
cpx DEVNAME
|
||||
beq .8
|
||||
inx
|
||||
iny
|
||||
bne .7
|
||||
.8 clc
|
||||
rts
|
||||
.99 lda #DEVMGR.ERRNOHW
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
GETEVENT lda #0
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
SELECT
|
||||
RELEASE
|
||||
*--------------------------------------
|
||||
OUT clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CLOSE clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
DEVNAME >PSTRING "LPT0"
|
||||
DEVSLOT .BS 1
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE DRV/PPIC.DRV.S
|
||||
ASM
|
112
DRV/SSC.DRV.S.txt
Normal file
112
DRV/SSC.DRV.S.txt
Normal file
|
@ -0,0 +1,112 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF DRV/SSC.DRV
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
*--------------------------------------
|
||||
ZPTmpPtr1 .EQ ZPDRV
|
||||
*--------------------------------------
|
||||
SIG.05 .EQ $38
|
||||
SIG.07 .EQ $18
|
||||
SIG.0B .EQ $01
|
||||
SIG.0C .EQ $31
|
||||
*--------------------------------------
|
||||
* Main DRV entry point
|
||||
* input :
|
||||
* X = CMD
|
||||
* 0 : OPEN
|
||||
* 2 : GETEVENT
|
||||
* 4 : OUT
|
||||
* 6 : CLOSE
|
||||
*--------------------------------------
|
||||
* CLD $D8
|
||||
* JMP (*,x) $7C
|
||||
* #JMPTABLE
|
||||
* /JMPTABLE
|
||||
*--------------------------------------
|
||||
CS.START cld
|
||||
jmp (.1,x)
|
||||
.1 .DA OPEN
|
||||
.DA GETEVENT
|
||||
.DA OUT
|
||||
.DA CLOSE
|
||||
.DA 0 end or relocation
|
||||
.DA CS.END-CS.START
|
||||
*--------------------------------------
|
||||
OPEN stz ZPTmpPtr1
|
||||
lda #$C1
|
||||
sta ZPTmpPtr1+1
|
||||
.1 ldy #5
|
||||
lda (ZPTmpPtr1),y
|
||||
cmp #SIG.05
|
||||
bne .2
|
||||
|
||||
ldy #7
|
||||
lda (ZPTmpPtr1),y
|
||||
cmp #SIG.07
|
||||
bne .2
|
||||
|
||||
ldy #$B
|
||||
lda (ZPTmpPtr1),y
|
||||
cmp #SIG.0B
|
||||
bne .2
|
||||
|
||||
ldy #$C
|
||||
lda (ZPTmpPtr1),y
|
||||
cmp #SIG.0C
|
||||
beq .3
|
||||
|
||||
.2 inc ZPTmpPtr1+1
|
||||
lda ZPTmpPtr1+1
|
||||
cmp #$C8
|
||||
bne .1
|
||||
beq .99
|
||||
|
||||
.3 lda ZPTmpPtr1+1
|
||||
and #$0F
|
||||
sta DEVSLOT
|
||||
ora #$30
|
||||
sta DEVNAME+4
|
||||
|
||||
lda #S.DEV.F.CHAR+S.DEV.F.OUT
|
||||
sta (pDevContext)
|
||||
ldy #S.DEV.NAME
|
||||
|
||||
ldx #0
|
||||
.7 lda DEVNAME,x
|
||||
sta (pDevContext),y
|
||||
cpx DEVNAME
|
||||
beq .8
|
||||
inx
|
||||
iny
|
||||
bne .7
|
||||
.8 clc
|
||||
rts
|
||||
.99 lda #DEVMGR.ERRNOHW
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
GETEVENT lda #0
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
OUT clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CLOSE clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
DEVNAME >PSTRING "COM0"
|
||||
DEVSLOT .BS 1
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE DRV/SSC.DRV.S
|
||||
ASM
|
434
DRV/UTHERNET.DRV.S.txt
Normal file
434
DRV/UTHERNET.DRV.S.txt
Normal file
|
@ -0,0 +1,434 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF DRV/UTHERNET.DRV
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
* .INB INC/ZP.I
|
||||
*--------------------------------------
|
||||
ZPTmpPTR .EQ ZPDRV
|
||||
*--------------------------------------
|
||||
DEVID .EQ $630E
|
||||
*--------------------------------------
|
||||
* CS8900A IO Registers
|
||||
*--------------------------------------
|
||||
RTDATA .EQ $C080 Receive/Transmit Data (DWORD)
|
||||
TxCMD .EQ $C084 Transmit Command
|
||||
TxLength .EQ $C086 Transmission Length
|
||||
IntStatusQueue .EQ $C088 Interrupt Status Queue
|
||||
PacketPagePTR .EQ $C08A PacketPage Pointer
|
||||
PacketPageDATA .EQ $C08C PacketPage Data (DWORD)
|
||||
*--------------------------------------
|
||||
TxCMD.LID .EQ %00000000.00001001
|
||||
TxCMD.TxStart5 .EQ %00000000.00000000 00 = start after 5 Bytes
|
||||
TxCMD.TxStart381 .EQ %00000000.01000000 01 = start after 381 Bytes
|
||||
TxCMD.TxStart1021 .EQ %00000000.10000000 10 = start after 1021 Bytes
|
||||
TxCMD.TxStartFULL .EQ %00000000.11000000 11 = start after ENTIRE Frame
|
||||
TxCMD.Force .EQ %00000001.00000000
|
||||
TxCMD.OneColl .EQ %00000010.00000000
|
||||
TxCMD.InhibitCRC .EQ %00010000.00000000
|
||||
TxCMD.TxPadDis .EQ %00100000.00000000
|
||||
*--------------------------------------
|
||||
* PacketPage Offsets & Masks
|
||||
*--------------------------------------
|
||||
PP.ID .EQ $0000 Product ID code (RO)
|
||||
PP.RFBCNT .EQ $0050 Received Frame Byte Counter (RO)
|
||||
PP.RxCFG .EQ $0102 Receiver Configuration (RW)
|
||||
PP.RxCFG.LID .EQ %00000000.00000011
|
||||
PP.RxCTL .EQ $0104 Receiver Control (RW)
|
||||
PP.RxCTL.LID .EQ %00000000.00000101
|
||||
PP.RxCTL.IAHashA .EQ %00000000.01000000
|
||||
PP.RxCTL.PromisA .EQ %00000000.10000000
|
||||
PP.RxCTL.RxOKA .EQ %00000001.00000000
|
||||
PP.RxCTL.MulticastA .EQ %00000010.00000000
|
||||
PP.RxCTL.IA .EQ %00000100.00000000
|
||||
PP.RxCTL.BroadcastA .EQ %00001000.00000000
|
||||
PP.RxCTL.CRCerrorA .EQ %00010000.00000000
|
||||
PP.RxCTL.RuntA .EQ %00100000.00000000
|
||||
PP.RxCTL.ExtradataA .EQ %01000000.00000000
|
||||
PP.TxCFG .EQ $0106 Transmit Configuration (RW)
|
||||
PP.TxCMD .EQ $0108 Receiver Control (RW)
|
||||
PP.BufCFG .EQ $010A
|
||||
PP.LineCTL .EQ $0112 Line Control (RW)
|
||||
PP.LineCTL.LID .EQ %00000000.00010011
|
||||
PP.LineCTL.SerRxOn .EQ %00000000.01000000
|
||||
PP.LineCTL.SerTxOn .EQ %00000000.10000000
|
||||
PP.LineCTL.AUIonly .EQ %00000001.00000000
|
||||
PP.LineCTL.Auto .EQ %00000010.00000000
|
||||
PP.SelfCTL .EQ $0114 Self Control (RW)
|
||||
PP.SelfCTL.LID .EQ %00000000.00010101
|
||||
PP.SelfCTL.RESET .EQ %00000000.01000000
|
||||
PP.SelfCTL.SWSuspnd .EQ %00000000.10000000
|
||||
PP.SelfCTL.HWSleepE .EQ %00000001.00000000
|
||||
PP.SelfCTL.HWStndby .EQ %00000010.00000000
|
||||
PP.BufCTL .EQ $0116
|
||||
PP.TestCTL .EQ $0118
|
||||
PP.ISQ .EQ $0120
|
||||
PP.RxEvent .EQ $0124 Receiver Event (RO)
|
||||
PP.RxEvent.LID .EQ %00000000.00000100
|
||||
PP.RxEvent.RxOK .EQ %00000001.00000000
|
||||
PP.RxEvent.IA .EQ %00000100.00000000
|
||||
PP.RxEvent.Brdcast .EQ %00001000.00000000
|
||||
PP.RxEvent.CRCerror .EQ %00010000.00000000
|
||||
PP.RxEvent.Runt .EQ %00100000.00000000
|
||||
PP.RxEvent.Xtradata .EQ %01000000.00000000
|
||||
PP.TxEvent .EQ $0128 Transmitter Event (RO)
|
||||
PP.TxEvent.LID .EQ %00000000.00001000
|
||||
PP.BufEvent .EQ $012C
|
||||
PP.RxMISS .EQ $0130
|
||||
PP.TxCOL .EQ $0132
|
||||
PP.LineST .EQ $0134 Line Status (RO)
|
||||
PP.LineST.LID .EQ %00000000.00010100
|
||||
PP.LineST.LinkOK .EQ %00000000.10000000
|
||||
PP.LineST.AUI .EQ %00000001.00000000
|
||||
PP.LineST.10BT .EQ %00000010.00000000
|
||||
PP.LineST.PolOK .EQ %00010000.00000000
|
||||
PP.LineST.CRS .EQ %01000000.00000000
|
||||
PP.SelfST .EQ $0136 Self Status (RO)
|
||||
PP.SelfST.INITD .EQ %00000000.10000000
|
||||
PP.BusST .EQ $0138 Bus Status (RO)
|
||||
PP.BusST.LID .EQ %00000000.00011000
|
||||
PP.BusST.TxBidErr .EQ %00000000.10000000
|
||||
PP.BusST.Rdy4TxNOW .EQ %00000001.00000000
|
||||
PP.TDR .EQ $013C
|
||||
PP.MAC .EQ $0158 MAC Address (RW)
|
||||
PP.RxStatus .EQ $0400
|
||||
PP.RxLength .EQ $0402
|
||||
PP.RxFrame .EQ $0404
|
||||
PP.TxFrame .EQ $0A00
|
||||
*--------------------------------------
|
||||
ERRTNOFRAME .EQ 0
|
||||
ERRNOBUFFER .EQ 1
|
||||
ERRTIMEOUT .EQ 2
|
||||
*--------------------------------------
|
||||
* Main DRV entry point
|
||||
* input :
|
||||
* X = CMD
|
||||
* 0 : OPEN
|
||||
* 2 : GETEVENT
|
||||
* 4 : OUT
|
||||
* 6 : CLOSE
|
||||
* 8 : GETINFO
|
||||
*--------------------------------------
|
||||
* CLD $D8
|
||||
* JMP (*,x) $7C
|
||||
* #JMPTABLE
|
||||
* /JMPTABLE
|
||||
*--------------------------------------
|
||||
CS.START cld
|
||||
jmp (.1,x)
|
||||
.1 .DA OPEN
|
||||
.DA GETEVENT
|
||||
.DA OUT
|
||||
.DA CLOSE
|
||||
.DA GETINFO
|
||||
L.DEVINFO .DA DEVINFO
|
||||
.DA 0 end or relocation
|
||||
.DA CS.END-CS.START Code Length To Relocate
|
||||
.DA DS.END-DS.START Data Segment to Allocate
|
||||
*--------------------------------------
|
||||
* input :
|
||||
* none
|
||||
* output :
|
||||
* CC on success
|
||||
* CS on error
|
||||
*--------------------------------------
|
||||
OPEN ldx #$10
|
||||
.1 stx DEVSLOTx0
|
||||
>LDYAI PP.ID
|
||||
>STYA PacketPagePTR,x
|
||||
>LDYA PacketPageDATA,x
|
||||
cpy #DEVID
|
||||
bne .2
|
||||
cmp /DEVID
|
||||
beq .3
|
||||
.2 inc DEVNAME+4
|
||||
txa
|
||||
clc
|
||||
adc #$10
|
||||
tax
|
||||
cpx #$80
|
||||
bne .1
|
||||
lda #DEVMGR.ERRNOHW
|
||||
sec
|
||||
rts
|
||||
.3 ldy #S.DEV.hARGS
|
||||
lda (pDevContext),y
|
||||
beq .4
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPTmpPTR
|
||||
jsr DecodeMac
|
||||
bcc .4
|
||||
lda #DEVMGR.ERRNICL
|
||||
sec
|
||||
rts
|
||||
|
||||
.4 jsr Reset
|
||||
|
||||
>LDYAI PP.RxCTL
|
||||
>STYA PacketPagePTR,x
|
||||
>LDYAI PP.RxCTL.LID+PP.RxCTL.RxOKA+PP.RxCTL.IA+PP.RxCTL.BroadcastA
|
||||
>STYA PacketPageDATA,x
|
||||
|
||||
>LDYAI PP.MAC
|
||||
>STYA PacketPagePTR,x
|
||||
>LDYA MAC
|
||||
>STYA PacketPageDATA,x
|
||||
>LDYAI PP.MAC+2
|
||||
>STYA PacketPagePTR,x
|
||||
>LDYA MAC+2
|
||||
>STYA PacketPageDATA,x
|
||||
>LDYAI PP.MAC+4
|
||||
>STYA PacketPagePTR,x
|
||||
>LDYA MAC+4
|
||||
>STYA PacketPageDATA,x
|
||||
|
||||
>LDYAI PP.LineCTL
|
||||
>STYA PacketPagePTR,x
|
||||
>LDYAI PP.LineCTL.LID+PP.LineCTL.SerRxOn+PP.LineCTL.SerTxOn+PP.LineCTL.Auto
|
||||
>STYA PacketPageDATA,x
|
||||
|
||||
lda #S.DEV.F.NET+S.DEV.F.EVENT+S.DEV.F.OUT
|
||||
sta (pDevContext)
|
||||
ldy #S.DEV.NAME
|
||||
ldx #0
|
||||
.7 lda DEVNAME,x
|
||||
sta (pDevContext),y
|
||||
cpx DEVNAME
|
||||
beq .8
|
||||
inx
|
||||
iny
|
||||
bne .7
|
||||
.8 clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* input :
|
||||
* pEvent
|
||||
* output :
|
||||
* CC no event
|
||||
* CS event
|
||||
*--------------------------------------
|
||||
GETEVENT >PULLW pEvent
|
||||
ldx DEVSLOTx0
|
||||
>LDYAI PP.RxEvent
|
||||
>STYA PacketPagePTR,x
|
||||
>LDYA PacketPageDATA,x
|
||||
and /PP.RxEvent.RxOK+PP.RxEvent.Brdcast+PP.RxEvent.IA
|
||||
bne GETEVENT.RxOK
|
||||
lda #ERRTNOFRAME
|
||||
sec
|
||||
rts
|
||||
GETEVENT.RxOK
|
||||
and /PP.RxEvent.Brdcast
|
||||
beq .10
|
||||
lda #$80
|
||||
.10 ldy #S.EVT.DATAHI
|
||||
sta (pEvent),y
|
||||
>LDYA RTDATA,x discard RxStatus
|
||||
>LDYA RTDATA,x get RxLength
|
||||
>STYA FRAMELEN
|
||||
>PUSHYA
|
||||
>PUSHB 0
|
||||
>SYSCALL SYS.GetMem
|
||||
bcs .99
|
||||
>STYA ZPTmpPTR
|
||||
txa
|
||||
ldy #S.EVT.DATALO
|
||||
sta (pEvent),y
|
||||
ldy #S.EVT.DATAW1
|
||||
lda FRAMELEN
|
||||
sta (pEvent),y
|
||||
iny
|
||||
lda FRAMELEN+1
|
||||
sta (pEvent),y
|
||||
lda #S.EVT.F.NET+S.EVT.F.hMEM1
|
||||
sta (pEvent)
|
||||
ldy #0
|
||||
ldx DEVSLOTx0
|
||||
.1 lda RTDATA,x
|
||||
sta (ZPTmpPTR),y
|
||||
iny
|
||||
bne .2
|
||||
inc ZPTmpPTR+1
|
||||
.2 jsr DecFrameLen
|
||||
beq .8
|
||||
lda RTDATA+1,x
|
||||
sta (ZPTmpPTR),y
|
||||
iny
|
||||
bne .3
|
||||
inc ZPTmpPTR+1
|
||||
.3 jsr DecFrameLen
|
||||
beq .8
|
||||
bra .1
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* in:
|
||||
* PULLW = FRAME PTR
|
||||
* PULLW = FRAME LEN
|
||||
* out:
|
||||
* CC on success
|
||||
* CS on error
|
||||
*--------------------------------------
|
||||
OUT >PULLW ZPTmpPTR
|
||||
>PULLW FRAMELEN
|
||||
|
||||
ldy #11 Add Src MAC Address
|
||||
ldx #5
|
||||
.10 lda MAC,x
|
||||
sta (ZPTmpPTR),y
|
||||
dey
|
||||
dex
|
||||
bpl .10
|
||||
|
||||
ldx DEVSLOTx0
|
||||
>LDYAI TxCMD.LID+TxCMD.TxStartFULL
|
||||
>STYA TxCMD,x
|
||||
>LDYA FRAMELEN
|
||||
>STYA TxLength,x
|
||||
>LDYAI PP.BusST
|
||||
>STYA PacketPagePTR,x
|
||||
|
||||
ldy #16
|
||||
.1 lda PacketPageDATA,x
|
||||
and #PP.BusST.TxBidErr
|
||||
bne .9
|
||||
lda PacketPageDATA+1,x
|
||||
and /PP.BusST.Rdy4TxNOW
|
||||
bne SENDPREADY
|
||||
bra *
|
||||
lda #0
|
||||
.2 dec
|
||||
bne .2
|
||||
dey
|
||||
bne .1
|
||||
bra *
|
||||
lda #ERRTIMEOUT
|
||||
sec
|
||||
rts
|
||||
.9 bra *
|
||||
lda #ERRNOBUFFER
|
||||
sec
|
||||
rts
|
||||
|
||||
SENDPREADY ldy #0
|
||||
.1 lda (ZPTmpPTR),y
|
||||
sta RTDATA,x
|
||||
iny
|
||||
bne .2
|
||||
inc ZPTmpPTR+1
|
||||
.2 jsr DecFrameLen
|
||||
beq .8
|
||||
.3 lda (ZPTmpPTR),y
|
||||
sta RTDATA+1,x
|
||||
iny
|
||||
bne .5
|
||||
inc ZPTmpPTR+1
|
||||
.5 jsr DecFrameLen
|
||||
bne .1
|
||||
.8 clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CLOSE jsr Reset
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* in:
|
||||
* out:
|
||||
* Y,A = BUFFER PTR
|
||||
* CC on success
|
||||
* CS on error
|
||||
*--------------------------------------
|
||||
GETINFO >LDYA L.DEVINFO
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* PRIVATE
|
||||
*--------------------------------------
|
||||
Reset ldx DEVSLOTx0
|
||||
>LDYAI PP.SelfCTL
|
||||
>STYA PacketPagePTR,x
|
||||
>LDYAI PP.SelfCTL.LID+PP.SelfCTL.RESET
|
||||
>STYA PacketPageDATA,x
|
||||
rts
|
||||
*--------------------------------------
|
||||
DecodeMac lda (ZPTmpPTR)
|
||||
cmp #12
|
||||
bne .9
|
||||
ldy #1
|
||||
ldx #0
|
||||
.1 lda (ZPTmpPTR),y
|
||||
jsr Asc2NibbleA
|
||||
bcs .9
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
sta MAC,x
|
||||
iny
|
||||
lda (ZPTmpPTR),y
|
||||
jsr Asc2NibbleA
|
||||
bcs .9
|
||||
ora MAC,x
|
||||
sta MAC,x
|
||||
inx
|
||||
iny
|
||||
cpy #13
|
||||
bne .1
|
||||
clc
|
||||
rts
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
Asc2NibbleA cmp #$30
|
||||
bcc .9
|
||||
cmp #$3A
|
||||
bcs .1
|
||||
and #$0F
|
||||
clc
|
||||
rts
|
||||
.1 cmp #$41
|
||||
bcc .9
|
||||
cmp #$47
|
||||
bcs .9
|
||||
sbc #$36
|
||||
clc
|
||||
rts
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
DecFrameLen lda FRAMELEN
|
||||
bne .1
|
||||
lda FRAMELEN+1
|
||||
beq .2
|
||||
dec FRAMELEN+1
|
||||
.1 dec FRAMELEN
|
||||
.2 lda FRAMELEN
|
||||
ora FRAMELEN+1
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
DEVNAME >PSTRING "ETH1"
|
||||
*--------------------------------------
|
||||
DS.START
|
||||
*--------------------------------------
|
||||
DEVSLOTx0 .BS 1
|
||||
FRAMELEN .BS 2
|
||||
*--------------------------------------
|
||||
DEVINFO
|
||||
MAC .BS 6
|
||||
*--------------------------------------
|
||||
DS.END
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE DRV/UTHERNET.DRV.S
|
||||
ASM
|
14
ETC/TCPIP.CONF
Normal file
14
ETC/TCPIP.CONF
Normal file
|
@ -0,0 +1,14 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
IP=192.168.1.150
|
||||
MASK=255.255.255.0
|
||||
GW=192.168.1.1
|
||||
DNS=192.168.1.2
|
||||
DNS=192.168.1.1
|
||||
HOSTNAME=apple2
|
||||
DOMAIN=coincoin.hd.free.fr
|
||||
MAN
|
||||
TEXT ETC/TCPIP.CONF
|
324
INC/A2osX.I.txt
Normal file
324
INC/A2osX.I.txt
Normal file
|
@ -0,0 +1,324 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
* KERNEL Reserved ZP Location 00-1F,56-FF
|
||||
*--------------------------------------
|
||||
ZPQuickPtr1 .EQ $90 Temp Ptrs for use in very limited scope
|
||||
ZPQuickPtr2 .EQ $92 (could be trashed by any JSR)
|
||||
ZPQuickPtr3 .EQ $94
|
||||
ZPQuickPtr4 .EQ $96
|
||||
|
||||
ZPLIB .EQ $A0 Main
|
||||
ZPDRV .EQ $B0 Main
|
||||
ZPBIN .EQ $C0 Main
|
||||
*--------------------------------------
|
||||
pPsContext .EQ $F0
|
||||
pDevContext .EQ $F2
|
||||
pEvent .EQ $F4
|
||||
*--------------------------------------
|
||||
R.SP .EQ $FE Main
|
||||
*--------------------------------------
|
||||
* A2OS.SYSCALL Functions Indexes
|
||||
*--------------------------------------
|
||||
SYS.GetMem .EQ $00
|
||||
SYS.FreeMemA .EQ $02
|
||||
SYS.ClrMemA .EQ $04
|
||||
SYS.GetMemPtrA .EQ $06
|
||||
|
||||
SYS.GetMemLenA .EQ $08
|
||||
SYS.GetMemByIDA .EQ $0A
|
||||
SYS.GetMemByNameA .EQ $0C
|
||||
*--------------------------------------
|
||||
SYS.NewPStr .EQ $10
|
||||
SYS.PStrCpyA .EQ $12
|
||||
SYS.PStrCat .EQ $14
|
||||
SYS.PStrCmp .EQ $16
|
||||
|
||||
SYS.PStrGetTkn .EQ $18
|
||||
SYS.GetPStrIndex .EQ $1A
|
||||
*--------------------------------------
|
||||
SYS.LoadBinA .EQ $20
|
||||
SYS.LoadLib .EQ $22
|
||||
SYS.UnloadLibA .EQ $24
|
||||
SYS.LoadDrvA .EQ $26
|
||||
*--------------------------------------
|
||||
SYS.ExpandPStrA .EQ $30
|
||||
SYS.ExpandPStr .EQ $32
|
||||
SYS.GetEnvVarH .EQ $34
|
||||
SYS.GetEnvVarP .EQ $36
|
||||
|
||||
SYS.SetEnvVarH .EQ $38
|
||||
SYS.SetEnvVarP .EQ $3A
|
||||
*--------------------------------------
|
||||
SYS.MLICreate .EQ $40
|
||||
SYS.MLIDestroy .EQ $42
|
||||
SYS.MLIRename .EQ $44
|
||||
SYS.MLISetFileInfo .EQ $46
|
||||
|
||||
SYS.MLIGetFileInfoA .EQ $48
|
||||
SYS.MLIOnline .EQ $4A
|
||||
SYS.MLISetPrefix .EQ $4C
|
||||
SYS.MLIGetPrefixA .EQ $4E
|
||||
|
||||
SYS.MLIOpenA .EQ $50
|
||||
SYS.MLINewLine .EQ $52
|
||||
SYS.MLIRead .EQ $54
|
||||
SYS.MLIWrite .EQ $56
|
||||
|
||||
SYS.MLICloseA .EQ $58
|
||||
SYS.MLIFlushA .EQ $5A
|
||||
SYS.MLISetMark .EQ $5C
|
||||
SYS.MLIGetMark .EQ $5E
|
||||
|
||||
SYS.MLISetEOF .EQ $60
|
||||
SYS.MLIGetEOFA .EQ $62
|
||||
*--------------------------------------
|
||||
SYS.GetDevByIDA .EQ $70
|
||||
SYS.GetDevByNameA .EQ $72
|
||||
SYS.GetDevTable .EQ $74
|
||||
SYS.GetDevInfoA .EQ $76
|
||||
|
||||
SYS.DevOutA .EQ $78
|
||||
*--------------------------------------
|
||||
SYS.GetEvent .EQ $80
|
||||
SYS.DestroyEvent .EQ $82
|
||||
*--------------------------------------
|
||||
SYS.ExecProcessA .EQ $90
|
||||
SYS.CreateProcessA .EQ $92
|
||||
|
||||
SYS.GetPSByIDA .EQ $98
|
||||
*--------------------------------------
|
||||
SYS.CheckPrefixA .EQ $A0
|
||||
SYS.FileSearch .EQ $A2
|
||||
SYS.LoadFileA .EQ $A4
|
||||
SYS.ListDirInitA .EQ $A6
|
||||
|
||||
SYS.ListDirNextA .EQ $A8
|
||||
SYS.ListDirCloseA .EQ $AA
|
||||
*--------------------------------------
|
||||
SYS.AddNetCfg .EQ $B0
|
||||
SYS.SetNetCfg .EQ $B2
|
||||
SYS.GetNetCfgA .EQ $B4
|
||||
SYS.ClrNetCfgA .EQ $B6
|
||||
*--------------------------------------
|
||||
A2osX.SaveS .EQ $100 Main,Aux
|
||||
*--------------------------------------
|
||||
* Main $200 -> 2FF : (Reserved, ProDOS,Clock DRV....)
|
||||
* Main $300 -> 3EF : A2osX Global Page
|
||||
* Main $3F0 -> 3FF : ProDOS Vectors
|
||||
* Aux $200 -> 3FD : /RAM Driver
|
||||
* Aux $3FE -> 3FF : RESET Vector
|
||||
*--------------------------------------
|
||||
* A2osX GLOBAL PAGE
|
||||
*--------------------------------------
|
||||
A2osX.SYSCALL .EQ $0300
|
||||
A2osX.MLICALL .EQ $0302
|
||||
A2osX.LIBCALL .EQ $0304
|
||||
A2osX.SLEEP .EQ $0306
|
||||
Kernel.MLICALL .EQ $0308
|
||||
Kernel.DRVCALL .EQ $030A
|
||||
Kernel.BINCALL .EQ $030C
|
||||
Kernel.LIBCALL .EQ $030E
|
||||
*--------------------------------------
|
||||
A2osX.SCREENS .EQ $0310
|
||||
A2osX.SCREENS.G .EQ %00000100
|
||||
A2osX.SCREENS.C .EQ %00000010
|
||||
A2osX.SCREENS.S .EQ %00000001
|
||||
A2osX.ACTIVESCRN .EQ $0311
|
||||
|
||||
A2osX.TIMER16 .EQ $0312
|
||||
A2osX.RANDOM16 .EQ $0314
|
||||
|
||||
A2osX.CPUTYPE .EQ $0316
|
||||
A2osX.Z80SLOT .EQ $0317
|
||||
|
||||
Kernel.JMP .EQ $0318
|
||||
|
||||
A2osX.300CODE .EQ $031A
|
||||
*--------------------------------------
|
||||
* Console Screen .EQ $400 -> $7FF
|
||||
* System Screen .EQ $800 -> $BFF
|
||||
*--------------------------------------
|
||||
TmpBuffer256 .EQ $0C00
|
||||
*--------------------------------------
|
||||
D.STACKSEG .EQ $0D00 $0DFF Down to $0D00
|
||||
*--------------------------------------
|
||||
MLICALL.PARAMS .EQ $0E00 size=$12 (SET_FILE_INFO +1)
|
||||
A2osX.SaveA .EQ $0E20
|
||||
A2osX.SaveX .EQ $0E21
|
||||
A2osX.SaveY .EQ $0E22
|
||||
*--------------------------------------
|
||||
MEMMGR.LOMEM .EQ $0E30
|
||||
MEMMGR.MLLIMIT .EQ $0E32
|
||||
MEMMGR.MHLIMIT .EQ $0E34
|
||||
MEMMGR.HIMEM .EQ $0E36
|
||||
MEMMGR.MFREE .EQ $0E38
|
||||
MEMMGR.TABLESIZE .EQ $0E3A
|
||||
*--------------------------------------
|
||||
Z80STACK .EQ $0FFF (0FFFFh) Down to $0F00
|
||||
Z80JMP .EQ $1000
|
||||
*--------------------------------------
|
||||
MEMMGR.TABLE .EQ $1100 256 Handles
|
||||
DEVMGR.TABLE .EQ $1200 K.DEV.MAX*S.DEV.SIZE=20*12=240
|
||||
TSKMGR.TABLE .EQ $1300 K.PS.MAX*S.PS.SIZE=32*16=512
|
||||
*--------------------------------------
|
||||
A2osX.LOMEM .EQ $1500
|
||||
*--------------------------------------
|
||||
* MEM STRUCT
|
||||
*--------------------------------------
|
||||
S.MEM.F .EQ 0
|
||||
S.MEM.F.INUSE .EQ %10000000
|
||||
S.MEM.F.CLEAR .EQ %10000000 Fill with "0"
|
||||
S.MEM.F.CODE .EQ %01000000
|
||||
S.MEM.F.NOMOV .EQ %00100000
|
||||
S.MEM.F.ALIGN .EQ %00010000
|
||||
S.MEM.F.SPARE .EQ %00001000
|
||||
S.MEM.F.AUX .EQ %00000100
|
||||
S.MEM.F.LC1 .EQ %00000010
|
||||
S.MEM.F.LC2 .EQ %00000001
|
||||
S.MEM.REFCNT .EQ 1
|
||||
S.MEM.PTR .EQ 2
|
||||
S.MEM.LEN .EQ 4
|
||||
S.MEM.BIN .EQ 6
|
||||
S.MEM.OWNERPID .EQ 7
|
||||
*
|
||||
S.MEM.SIZE .EQ 8
|
||||
*--------------------------------------
|
||||
MEMMGR.ERROOM .EQ $FF Out Of Memory Error
|
||||
MEMMGR.ERROOS .EQ $FE Out Of Slot Error
|
||||
*--------------------------------------
|
||||
* DEV STRUCT
|
||||
*--------------------------------------
|
||||
S.DEV.F .EQ 0
|
||||
S.DEV.F.INUSE .EQ %10000000
|
||||
S.DEV.F.EVENT .EQ %01000000
|
||||
S.DEV.F.OUT .EQ %00100000
|
||||
S.DEV.F.XYP .EQ %00010000
|
||||
S.DEV.F.GFX .EQ %00001000
|
||||
S.DEV.F.NET .EQ %00000100
|
||||
S.DEV.F.BLOCK .EQ %00000010
|
||||
S.DEV.F.CHAR .EQ %00000001
|
||||
S.DEV.ID .EQ 1
|
||||
S.DEV.NAME .EQ 2 5 Bytes : NUL KBD CON COMx LPTx ETHx
|
||||
S.DEV.hCS .EQ 7
|
||||
S.DEV.hDS .EQ 8
|
||||
S.DEV.hCMD .EQ 9
|
||||
S.DEV.hARGS .EQ 10
|
||||
S.DEV.hOWNERPS .EQ 11
|
||||
*
|
||||
S.DEV.SIZE .EQ 12
|
||||
*--------------------------------------
|
||||
* Driver Function Indexes
|
||||
*--------------------------------------
|
||||
DEVMGR.OPEN .EQ 0
|
||||
DEVMGR.GETEVENT .EQ 2
|
||||
DEVMGR.OUT .EQ 4
|
||||
DEVMGR.CLOSE .EQ 6
|
||||
DEVMGR.GETINFO .EQ 8
|
||||
*--------------------------------------
|
||||
DEVMGR.ERRNICL .EQ $EB Invalid Command Line
|
||||
DEVMGR.ERRNOHW .EQ $EC No Hardware
|
||||
DEVMGR.ERRDNF .EQ $ED Device Not Found Error
|
||||
DEVMGR.ERROOS .EQ $EE Out Of Slot Error
|
||||
*--------------------------------------
|
||||
* PS STRUCT
|
||||
*--------------------------------------
|
||||
S.PS.F .EQ 0
|
||||
S.PS.F.INUSE .EQ %10000000
|
||||
S.PS.F.HOLD .EQ %01000000
|
||||
S.PS.F.EVENT .EQ %00100000
|
||||
S.PS.ID .EQ 1
|
||||
S.PS.PID .EQ 2
|
||||
S.PS.hCS .EQ 3
|
||||
S.PS.hDS .EQ 4
|
||||
S.PS.hPREFIX .EQ 5
|
||||
S.PS.hENV .EQ 6
|
||||
S.PS.hCMD .EQ 7
|
||||
S.PS.hARGS .EQ 8
|
||||
S.PS.hINDEV .EQ 9
|
||||
S.PS.hOUTDEV .EQ 10
|
||||
S.PS.hERRDEV .EQ 11
|
||||
S.PS.CID .EQ 12
|
||||
S.PS.LASTERROR .EQ 13
|
||||
S.PS.PC .EQ 14
|
||||
*
|
||||
S.PS.SIZE .EQ 16
|
||||
*--------------------------------------
|
||||
* LIB Function Indexes
|
||||
*--------------------------------------
|
||||
LIBMGR.LOAD .EQ 0
|
||||
LIBMGR.UNLOAD .EQ 2
|
||||
*--------------------------------------
|
||||
* Task Function Indexes
|
||||
*--------------------------------------
|
||||
TSKMGR.INIT .EQ 0
|
||||
TSKMGR.RUN .EQ 2
|
||||
TSKMGR.DOEVENT .EQ 4
|
||||
TSKMGR.QUIT .EQ 6
|
||||
*--------------------------------------
|
||||
TSKMGR.ERROOS .EQ $DE Out Of Slot Error
|
||||
TSKMGR.ERRNSP .EQ $DF No Such Process Error
|
||||
*--------------------------------------
|
||||
* EVENT STRUCT
|
||||
*--------------------------------------
|
||||
S.EVT.F .EQ 0
|
||||
S.EVT.F.SYS .EQ %10000000
|
||||
S.EVT.F.WND .EQ %01000000
|
||||
S.EVT.F.hMEM2 .EQ %00100000 Indicates That S.EVT.DATAHI is a hMem
|
||||
S.EVT.F.hMEM1 .EQ %00010000 Indicates That S.EVT.DATALO is a hMem
|
||||
S.EVT.F.TIMER .EQ %00001000
|
||||
S.EVT.F.NET .EQ %00000100
|
||||
S.EVT.F.MOUSE .EQ %00000010
|
||||
S.EVT.F.KEY .EQ %00000001
|
||||
S.EVT.hDEV .EQ 1
|
||||
S.EVT.DATA .EQ 2
|
||||
S.EVT.DATALO .EQ 2
|
||||
S.EVT.DATAHI .EQ 3
|
||||
S.EVT.DATAW1 .EQ 4
|
||||
S.EVT.DATAW2 .EQ 6
|
||||
*
|
||||
S.EVT.SIZE .EQ 8
|
||||
*--------------------------------------
|
||||
SYSMGR.ERRENVF .EQ $CB Env is Full
|
||||
SYSMGR.ERRIDIR .EQ $CC Invalid Directory
|
||||
SYSMGR.ERRFTB .EQ $CD File Too Big Error
|
||||
SYSMGR.ERRFNF .EQ $CE File Not Found Error
|
||||
SYSMGR.ERRSYN .EQ $CF Syntax Error
|
||||
*--------------------------------------
|
||||
* S.LISTDIR STRUCT
|
||||
*--------------------------------------
|
||||
S.LISTDIR.hONLINE .EQ 0
|
||||
S.LISTDIR.ONLINEPTR .EQ 1
|
||||
S.LISTDIR.REFNUM .EQ 2 ref_num file
|
||||
S.LISTDIR.hIOBUF .EQ 3 hMem to ProDOS IO buffer
|
||||
S.LISTDIR.hREADBUF .EQ 4 hMem to 512 Read Buffer
|
||||
S.LISTDIR.EL .EQ 5 entry_length
|
||||
S.LISTDIR.EIB .EQ 6 ENTRY_INDEX in block
|
||||
S.LISTDIR.EPB .EQ 7 entry_per_block
|
||||
S.LISTDIR.BLKPTR .EQ 8 entry PTR in block
|
||||
S.LISTDIR.FI .EQ 10 FILE_INDEX in DIR
|
||||
S.LISTDIR.FC .EQ 12 file_count
|
||||
S.LISTDIR.hPATTERN .EQ 14 Pattern for file filtering
|
||||
*
|
||||
S.LISTDIR.SIZE .EQ 16
|
||||
*--------------------------------------
|
||||
* S.FENTRY STRUCT
|
||||
*--------------------------------------
|
||||
S.FENTRY.F .EQ 0
|
||||
S.FENTRY.COUNT .EQ 1
|
||||
*--------------------------------------
|
||||
* S.BUFRDR STRUCT
|
||||
*--------------------------------------
|
||||
S.BUFRDR.hMEM .EQ 0
|
||||
S.BUFRDR.DELIM .EQ 1
|
||||
S.BUFRDR.LEN .EQ 2
|
||||
S.BUFRDR.IDX .EQ 4
|
||||
*
|
||||
S.BUFRDR.SIZE .EQ 6
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE INC/A2OSX.I
|
103
INC/IO.I.txt
Normal file
103
INC/IO.I.txt
Normal file
|
@ -0,0 +1,103 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
* Screen Holes
|
||||
*--------------------------------------
|
||||
OURCH .EQ $57B
|
||||
OURCV .EQ $5FB
|
||||
*--------------------------------------
|
||||
* Software Switches & Cxxx ROMs
|
||||
*--------------------------------------
|
||||
KBD .EQ $C000 R
|
||||
CLR80STORE .EQ $C000 W
|
||||
SET80STORE .EQ $C001 W
|
||||
CLRREADAUX .EQ $C002 W
|
||||
SETREADAUX .EQ $C003 W
|
||||
CLRWRITEAUX .EQ $C004 W
|
||||
SETWRITEAUX .EQ $C005 W
|
||||
CLRCXROM .EQ $C006 W
|
||||
SETCXROM .EQ $C007 W
|
||||
CLRALTZP .EQ $C008 W
|
||||
SETALTZP .EQ $C009 W
|
||||
CLRC3ROM .EQ $C00A W
|
||||
SETC3ROM .EQ $C00B W
|
||||
CLR80DISP .EQ $C00C W
|
||||
SET80DISP .EQ $C00D W
|
||||
CLRALTCHAR .EQ $C00E W
|
||||
SETALTCHAR .EQ $C00F W
|
||||
KBDSTROBE .EQ $C010 W
|
||||
RDBNK2 .EQ $C011 R
|
||||
RDLCRAM .EQ $C012 R
|
||||
RDREADAUX .EQ $C013 R
|
||||
RDWRITEAUX .EQ $C014 R
|
||||
RDCXROM .EQ $C015 R
|
||||
RDALTZP .EQ $C016 R
|
||||
RDC3ROM .EQ $C017 R
|
||||
RD80STORE .EQ $C018 R
|
||||
VBL .EQ $C019 R
|
||||
RDTEXT .EQ $C01A R
|
||||
RDMIXED .EQ $C01B R
|
||||
RDPAGE2 .EQ $C01C R
|
||||
RDHIRES .EQ $C01D R
|
||||
RDALTCHAR .EQ $C01E R
|
||||
RD80DISP .EQ $C01F R
|
||||
TAPEOUT .EQ $C020 W
|
||||
SPEAKER .EQ $C030 W, toggle speaker diaphragm
|
||||
STROBE .EQ $C040 R, generate .5 uS low pulse @ Game pin 5
|
||||
|
||||
EMUBYTE .EQ $C04F WRR, Write once then Read EMUL, Read Version
|
||||
|
||||
CLRTEXT .EQ $C050 W
|
||||
SETTEXT .EQ $C051 W
|
||||
CLRMIXED .EQ $C052 W
|
||||
SETMIXED .EQ $C053 W
|
||||
CLRPAGE2 .EQ $C054 W
|
||||
SETPAGE2 .EQ $C055 W
|
||||
CLRHIRES .EQ $C056 W
|
||||
SETHIRES .EQ $C057 W
|
||||
|
||||
SETAN0 .EQ $C058 W, Set annunciator-0 output to 0
|
||||
CLRAN0 .EQ $C059 W, Set annunciator-0 output to 1
|
||||
SETAN1 .EQ $C05A W, Set annunciator-1 output to 0
|
||||
CLRAN1 .EQ $C05B W, Set annunciator-1 output to 1
|
||||
SETAN2 .EQ $C05C W, Set annunciator-2 output to 0
|
||||
CLRAN2 .EQ $C05D W, Set annunciator-2 output to 1
|
||||
SETAN3 .EQ $C05E W, Set annunciator-3 output to 0
|
||||
SETDHIRES .EQ $C05E W, if IOUDIS Set, turn on double-hires
|
||||
CLRAN3 .EQ $C05F W, Set annunciator-3 output to 1
|
||||
CLRDHIRES .EQ $C05F W, if IOUDIS Set, turn off double-hires
|
||||
|
||||
TAPEIN .EQ $C060 R
|
||||
|
||||
OPENAPPLE .EQ $C061 R
|
||||
SOLIDAPPLE .EQ $C062 R
|
||||
PB2 .EQ $C063 R
|
||||
|
||||
PADDLE0 .EQ $C064 R, bit 7 = status of pdl-0 timer
|
||||
PADDLE1 .EQ $C065 R, bit 7 = status of pdl-1 timer
|
||||
PADDLE2 .EQ $C066 R, bit 7 = status of pdl-2 timer
|
||||
PADDLE3 .EQ $C067 R, bit 7 = status of pdl-3 timer
|
||||
PDLTRIG .EQ $C070 W, trigger paddles
|
||||
|
||||
SETIOUDIS .EQ $C07E W, enable DHIRES & disable $C058-5F
|
||||
CLRIOUDIS .EQ $C07F W, disable DHIRES & enable $C058-5F
|
||||
*--------------------------------------
|
||||
RRAMBNK2 .EQ $C080 R
|
||||
RROMWRAMBNK2 .EQ $C081 RR
|
||||
RROMBNK2 .EQ $C082 R
|
||||
RRAMWRAMBNK2 .EQ $C083 RR
|
||||
RRAMBNK1 .EQ $C088 R
|
||||
RROMWRAMBNK1 .EQ $C089 RR
|
||||
RROMBNK1 .EQ $C08A R
|
||||
RRAMWRAMBNK1 .EQ $C08B RR
|
||||
*--------------------------------------
|
||||
* Cxxx ROMs
|
||||
*--------------------------------------
|
||||
CX00ROM .EQ $C100
|
||||
C300ROM .EQ $C300
|
||||
MAN
|
||||
SAVE INC/IO.I
|
60
INC/KERNEL.I.txt
Normal file
60
INC/KERNEL.I.txt
Normal file
|
@ -0,0 +1,60 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
* KERNEL CONSTANTS DEFINITON
|
||||
*--------------------------------------
|
||||
K.BIN.MAGICHEADER .EQ $7CD8
|
||||
*--------------------------------------
|
||||
K.TIMER16RESOLUTION .EQ 5 every 5 VBL (50hz), so 100ms
|
||||
*--------------------------------------
|
||||
K.ENV.SIZE .EQ $100
|
||||
K.DEV.MAX .EQ 20
|
||||
K.PS.MAX .EQ 32
|
||||
*--------------------------------------
|
||||
K.NETCFG.MAX .EQ 4
|
||||
K.NETCFG.SIZE .EQ 128
|
||||
K.PROTOID.ATALK .EQ 0
|
||||
K.PROTOID.ETALK .EQ 1
|
||||
K.PROTOID.IP .EQ 2
|
||||
K.PROTOID.SPARE .EQ 3
|
||||
K.ARPCACHE.SIZE .EQ 10
|
||||
K.DNSCACHE.SIZE .EQ 10
|
||||
K.UDPTABLE.SIZE .EQ 16
|
||||
K.TCPTABLE.SIZE .EQ 16
|
||||
K.ETH.FRAME.LEN .EQ 1514
|
||||
K.IP.TTL .EQ 64
|
||||
*--------------------------------------
|
||||
* KERNEL Reserved ZP Location 00-1F,56-FF
|
||||
*--------------------------------------
|
||||
DEVMGR.DEVPTR .EQ $80
|
||||
EVTMGR.EVTPTR .EQ $82
|
||||
TSKMGR.TSKPTR .EQ $84
|
||||
TSKMGR.pNewPS .EQ $86
|
||||
*--------------------------------------
|
||||
ZPMemMgr .EQ $D0 Aux
|
||||
ZPSysScr .EQ $E0 Aux
|
||||
*--------------------------------------
|
||||
R.VCPU16 .EQ $F0 Aux
|
||||
R.AX .EQ R.VCPU16
|
||||
R.AL .EQ R.VCPU16
|
||||
R.AH .EQ R.VCPU16+$1
|
||||
R.BX .EQ R.VCPU16+$2
|
||||
R.BL .EQ R.VCPU16+$2
|
||||
R.BH .EQ R.VCPU16+$3
|
||||
R.CX .EQ R.VCPU16+$4
|
||||
R.CL .EQ R.VCPU16+$4
|
||||
R.CH .EQ R.VCPU16+$5
|
||||
R.DX .EQ R.VCPU16+$6
|
||||
R.DL .EQ R.VCPU16+$6
|
||||
R.DH .EQ R.VCPU16+$7
|
||||
*R.CS .EQ R.VCPU16+$8
|
||||
*R.DS .EQ R.VCPU16+$A
|
||||
R.LS .EQ R.VCPU16+$C
|
||||
*R.SP .EQ R.VCPU16+$E
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE INC/KERNEL.I
|
23
INC/LIBSTR.I.txt
Normal file
23
INC/LIBSTR.I.txt
Normal file
|
@ -0,0 +1,23 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
*--------------------------------------
|
||||
LIBSTR.PRINTF .EQ 4
|
||||
LIBSTR.PRINTC .EQ 6
|
||||
LIBSTR.PRINTP .EQ 8
|
||||
LIBSTR.STRMATCHP .EQ 10
|
||||
LIBSTR.STRCPYP .EQ 12
|
||||
LIBSTR.STRCATP .EQ 14
|
||||
LIBSTR.UCASEP .EQ 16
|
||||
LIBSTR.LCASEP .EQ 18
|
||||
LIBSTR.PRINTDATE .EQ 20
|
||||
LIBSTR.PRINTTIME .EQ 22
|
||||
LIBSTR.SSCANF .EQ 24
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE INC/LIBSTR.I
|
||||
|
221
INC/LIBTCPIP.I.txt
Normal file
221
INC/LIBTCPIP.I.txt
Normal file
|
@ -0,0 +1,221 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
*--------------------------------------
|
||||
LIBTCPIP.SET.IPCFG .EQ 4
|
||||
LIBTCPIP.GET.IPCFG .EQ 6
|
||||
|
||||
LIBTCPIP.NEW.ICMP.FRAME .EQ 8
|
||||
LIBTCPIP.NEW.TCP.FRAME .EQ 10
|
||||
LIBTCPIP.NEW.UDP.FRAME .EQ 12
|
||||
LIBTCPIP.NEW.IP.FRAME .EQ 14
|
||||
LIBTCPIP.NEW.ARP.FRAME .EQ 16
|
||||
LIBTCPIP.NEW.ETH.FRAME .EQ 18
|
||||
|
||||
LIBTCPIP.SEND.ICMP.FRAME .EQ 20
|
||||
LIBTCPIP.SEND.TCP.FRAME .EQ 22
|
||||
LIBTCPIP.SEND.UDP.FRAME .EQ 24
|
||||
LIBTCPIP.SEND.IP.FRAME .EQ 26
|
||||
LIBTCPIP.SEND.ARP.FRAME .EQ 28
|
||||
LIBTCPIP.SEND.ETH.FRAME .EQ 30
|
||||
|
||||
LIBTCPIP.ARP.CLEAR .EQ 32
|
||||
LIBTCPIP.ARP.QUERY .EQ 34
|
||||
LIBTCPIP.ARP.ADD .EQ 36
|
||||
LIBTCPIP.ARP.GETCACHE .EQ 38
|
||||
|
||||
LIBTCPIP.DNS.CLEAR .EQ 40
|
||||
LIBTCPIP.DNS.QUERY .EQ 42
|
||||
LIBTCPIP.DNS.ADD .EQ 44
|
||||
LIBTCPIP.DNS.GETCACHE .EQ 46
|
||||
|
||||
LIBTCPIP.UDP.LISTENER .EQ 48
|
||||
LIBTCPIP.TCP.LISTENER .EQ 50
|
||||
LIBTCPIP.ADD.LISTENER .EQ 52
|
||||
LIBTCPIP.REM.LISTENER .EQ 54
|
||||
*--------------------------------------
|
||||
TCP.PORT.TELNETS .EQ 23
|
||||
UDP.PORT.DNS .EQ 53
|
||||
UDP.PORT.DHCPC .EQ 68
|
||||
UDP.PORT.DHCPS .EQ 67
|
||||
*--------------------------------------
|
||||
S.IPCFG.STATUS .EQ 0
|
||||
S.IPCFG.STATUS.OFF .EQ %00000000 TCPIP Unconfigured
|
||||
S.IPCFG.STATUS.SDISC .EQ %00000001 DISCOVERY Sent
|
||||
S.IPCFG.STATUS.ROFFER .EQ %00000010 OFFER Received
|
||||
S.IPCFG.STATUS.SREQ .EQ %00000100 REQUEST Sent
|
||||
S.IPCFG.STATUS.RACK .EQ %00001000 ACK Received
|
||||
S.IPCFG.STATUS.OK .EQ %10000000 Fully configured (static or DHCP)
|
||||
S.IPCFG.HDEV .EQ 1
|
||||
S.IPCFG.MAC .EQ 2
|
||||
S.IPCFG.DHCPSRVR .EQ 8
|
||||
S.IPCFG.IP .EQ 12
|
||||
S.IPCFG.MASK .EQ 16
|
||||
S.IPCFG.GW .EQ 20
|
||||
S.IPCFG.DNS .EQ 24 2 x 4
|
||||
S.IPCFG.HOSTNAME .EQ 32 1+15 char PSTR
|
||||
S.IPCFG.DOMAIN .EQ 48 1+35 char PSTR
|
||||
*
|
||||
S.IPCFG .EQ K.NETCFG.SIZE
|
||||
*--------------------------------------
|
||||
S.ARPCACHE.STATUS .EQ 0
|
||||
S.ARPCACHE.STATUS.PENDING .EQ 64
|
||||
S.ARPCACHE.STATUS.RESOLVED .EQ 128
|
||||
S.ARPCACHE.RETRYCNT .EQ 1
|
||||
S.ARPCACHE.IP .EQ 2
|
||||
S.ARPCACHE.MAC .EQ 6
|
||||
*
|
||||
S.ARPCACHE .EQ 12
|
||||
*--------------------------------------
|
||||
S.DNSCACHE.STATUS .EQ 0
|
||||
S.DNSCACHE.STATUS.PENDING .EQ 64
|
||||
S.DNSCACHE.STATUS.RESOLVED .EQ 128
|
||||
S.DNSCACHE.hNAME .EQ 1
|
||||
S.DNSCACHE.TTL .EQ 2
|
||||
S.DNSCACHE.IP .EQ 4
|
||||
*
|
||||
S.DNSCACHE .EQ 8
|
||||
*--------------------------------------
|
||||
S.LISTENER.PORT .EQ 0
|
||||
S.LISTENER.hPS .EQ 2
|
||||
S.LISTENER.fIDX .EQ 3
|
||||
S.LISTENER .EQ 4
|
||||
*--------------------------------------
|
||||
S.ETH.DSTMAC .EQ 0
|
||||
S.ETH.SRCMAC .EQ 6
|
||||
S.ETH.ETHERTYPE .EQ 6+6
|
||||
S.ETH.ETHERTYPE.IP .EQ $800
|
||||
S.ETH.ETHERTYPE.ARP .EQ $806
|
||||
*
|
||||
S.ETH .EQ 6+6+2
|
||||
*--------------------------------------
|
||||
S.ARP.HTYPE .EQ S.ETH+0 $0001
|
||||
S.ARP.PTYPE .EQ S.ETH+2 $0800
|
||||
S.ARP.HLEN .EQ S.ETH+4 $06
|
||||
S.ARP.PLEN .EQ S.ETH+5 $04
|
||||
S.ARP.OPERATION .EQ S.ETH+6 REQ=$0001,REPLY=$0002
|
||||
S.ARP.OPERATION.REQ .EQ 1
|
||||
S.ARP.OPERATION.REP .EQ 2
|
||||
S.ARP.SHA .EQ S.ETH+8 Sender MAC
|
||||
S.ARP.SPA .EQ S.ETH+14 Sender IP
|
||||
S.ARP.THA .EQ S.ETH+18 Target MAC
|
||||
S.ARP.TPA .EQ S.ETH+24 Target IP
|
||||
*
|
||||
S.ARP .EQ S.ETH+28
|
||||
*--------------------------------------
|
||||
S.IP.V.IHL.DSCP.ECN .EQ S.ETH+0 $0045, IPV4,HDR=5DWORDs
|
||||
S.IP.TOTAL.LENGTH .EQ S.ETH+2
|
||||
S.IP.IDENTIFICATION .EQ S.ETH+4 $0000
|
||||
S.IP.FRAGMENT.FLAGS .EQ S.ETH+6
|
||||
S.IP.TTL .EQ S.ETH+8
|
||||
S.IP.PROTOCOL .EQ S.ETH+9
|
||||
S.IP.PROTOCOL.ICMP .EQ 1
|
||||
S.IP.PROTOCOL.TCP .EQ 6
|
||||
S.IP.PROTOCOL.UDP .EQ 17
|
||||
S.IP.HDR.CHECKSUM .EQ S.ETH+10
|
||||
S.IP.SRC .EQ S.ETH+12
|
||||
S.IP.DST .EQ S.ETH+16
|
||||
*
|
||||
S.IP .EQ S.ETH+20
|
||||
*--------------------------------------
|
||||
S.ICMP.TYPE .EQ S.IP+0
|
||||
S.ICMP.TYPE.ECHOREP .EQ 0
|
||||
S.ICMP.TYPE.UNREACH .EQ 3
|
||||
S.ICMP.TYPE.ECHOREQ .EQ 8
|
||||
S.ICMP.CODE .EQ S.IP+1
|
||||
S.ICMP.CHECKSUM .EQ S.IP+2
|
||||
S.ICMP.IDENTIFIER .EQ S.IP+4
|
||||
S.ICMP.SEQUENCE .EQ S.IP+6
|
||||
*
|
||||
S.ICMP .EQ S.IP+8
|
||||
*--------------------------------------
|
||||
S.UDP.SRCPORT .EQ S.IP+0
|
||||
S.UDP.DSTPORT .EQ S.IP+2
|
||||
S.UDP.LENGTH .EQ S.IP+4
|
||||
S.UDP.CHECKSUM .EQ S.IP+6 $0000 = DISABLE
|
||||
*
|
||||
S.UDP .EQ S.IP+8
|
||||
*--------------------------------------
|
||||
S.DHCP.OP .EQ S.UDP+0 1 = BOOTREQUEST, 2 = BOOTREPLY
|
||||
S.DHCP.OP.BOOTREQUEST .EQ 1
|
||||
S.DHCP.OP.BOOTREPLY .EQ 2
|
||||
S.DHCP.HTYPE .EQ S.UDP+1 1 = ETHERNET
|
||||
S.DHCP.HTYPE.ETHERNET .EQ 1
|
||||
S.DHCP.HLEN .EQ S.UDP+2 6 (MAC len)
|
||||
S.DHCP.HLEN.ETHERNET .EQ 6
|
||||
S.DHCP.HOPS .EQ S.UDP+3 0
|
||||
S.DHCP.XID .EQ S.UDP+4 client : random number
|
||||
S.DHCP.SECS .EQ S.UDP+8
|
||||
S.DHCP.FLAGS .EQ S.UDP+10
|
||||
S.DHCP.FLAGS.BRDCST .EQ %10000000
|
||||
S.DHCP.CIADDR .EQ S.UDP+12
|
||||
S.DHCP.YIADDR .EQ S.UDP+16
|
||||
S.DHCP.SIADDR .EQ S.UDP+20
|
||||
S.DHCP.GIADDR .EQ S.UDP+24
|
||||
S.DHCP.CHADDR .EQ S.UDP+28
|
||||
S.DHCP.SNAME .EQ S.UDP+44
|
||||
S.DHCP.FILE .EQ S.UDP+108
|
||||
S.DHCP.COOKIE .EQ S.UDP+236
|
||||
S.DHCP.OPTIONS .EQ S.UDP+240
|
||||
S.DHCP.OPTIONS.DHCPDiscover .EQ 1
|
||||
S.DHCP.OPTIONS.DHCPOffer .EQ 2
|
||||
S.DHCP.OPTIONS.DHCPRequest .EQ 3
|
||||
S.DHCP.OPTIONS.DHCPDecline .EQ 4
|
||||
S.DHCP.OPTIONS.DHCPAck .EQ 5
|
||||
S.DHCP.OPTIONS.DHCPNak .EQ 6
|
||||
S.DHCP.OPTIONS.DHCPRelease .EQ 7
|
||||
S.DHCP.OPTIONS.DHCPInform .EQ 8
|
||||
S.DHCP.OPTIONS.MASK .EQ 1
|
||||
S.DHCP.OPTIONS.GW .EQ 3
|
||||
S.DHCP.OPTIONS.DNS .EQ 6
|
||||
S.DHCP.OPTIONS.DOMAIN .EQ 15
|
||||
S.DHCP.OPTIONS.END .EQ 255
|
||||
*
|
||||
S.DHCP .EQ S.UDP+240
|
||||
*--------------------------------------
|
||||
S.DNS.ID .EQ S.UDP+0
|
||||
S.DNS.F .EQ S.UDP+2
|
||||
S.DNS.F.QR .EQ %10000000.00000000
|
||||
S.DNS.F.OPCODE.I .EQ %01000000.00000000
|
||||
S.DNS.F.OPCODE.S .EQ %00100000.00000000
|
||||
S.DNS.F.AA .EQ %00000100.00000000
|
||||
S.DNS.F.TC .EQ %00000010.00000000
|
||||
S.DNS.F.RD .EQ %00000001.00000000
|
||||
S.DNS.F.RA .EQ %00000000.10000000
|
||||
S.DNS.F.RCODE.FRMT .EQ %00000000.00000001
|
||||
S.DNS.F.RCODE.SRVR .EQ %00000000.00000010
|
||||
S.DNS.F.RCODE.UKWN .EQ %00000000.00000011
|
||||
S.DNS.F.RCODE.NIMP .EQ %00000000.00000100
|
||||
S.DNS.F.RCODE.DENY .EQ %00000000.00000101
|
||||
S.DNS.QDCOUNT .EQ S.UDP+4
|
||||
S.DNS.ANCOUNT .EQ S.UDP+6
|
||||
S.DNS.NSCOUNT .EQ S.UDP+8
|
||||
S.DNS.ARCOUNT .EQ S.UDP+10
|
||||
*
|
||||
S.DNS .EQ S.UDP+12
|
||||
*--------------------------------------
|
||||
S.DNS.QTYPE.A .EQ 1
|
||||
S.DNS.QTYPE.NS .EQ 2
|
||||
S.DNS.QTYPE.CNAME .EQ 5
|
||||
S.DNS.QTYPE.SOA .EQ 6
|
||||
S.DNS.QTYPE.WKS .EQ 11
|
||||
S.DNS.QTYPE.PTR .EQ 12
|
||||
S.DNS.QTYPE.MX .EQ 15
|
||||
S.DNS.QTYPE.SRV .EQ 33
|
||||
S.DNS.QTYPE.ANY .EQ 255
|
||||
S.DNS.QCLASS.IN .EQ 1
|
||||
*--------------------------------------
|
||||
S.TCP.SRCPORT .EQ S.IP+0
|
||||
S.TCP.DSTPORT .EQ S.IP+2
|
||||
S.TCP.SEQ.NUMBER .EQ S.IP+4
|
||||
S.TCP.ACK.NUMBER .EQ S.IP+8
|
||||
*
|
||||
S.TCP
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE INC/LIBTCPIP.I
|
||||
|
451
INC/MACROS.I.txt
Normal file
451
INC/MACROS.I.txt
Normal file
|
@ -0,0 +1,451 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
.MA DEBUG
|
||||
.70 bit $C000
|
||||
bpl .70
|
||||
sta $C010
|
||||
.EM
|
||||
*--------------------------------------
|
||||
* SYSCALLs Macros
|
||||
*--------------------------------------
|
||||
.MA SYSCALL
|
||||
ldx #]1
|
||||
jsr A2osX.SYSCALL
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA MLICALL
|
||||
ldx #]1
|
||||
.DO ]1=MLIREADBLOCK
|
||||
lda #3
|
||||
.FIN
|
||||
.DO ]1=MLIWRITEBLOCK
|
||||
lda #3
|
||||
.FIN
|
||||
.DO ]1=MLICREATE
|
||||
lda #7
|
||||
.FIN
|
||||
.DO ]1=MLIDESTROY
|
||||
lda #1
|
||||
.FIN
|
||||
.DO ]1=MLIRENAME
|
||||
lda #2
|
||||
.FIN
|
||||
.DO ]1=MLISETFILEINFO
|
||||
lda #7
|
||||
.FIN
|
||||
.DO ]1=MLIGETFILEINFO
|
||||
lda #10
|
||||
.FIN
|
||||
.DO ]1=MLIONLINE
|
||||
lda #2
|
||||
.FIN
|
||||
.DO ]1=MLISETPREFIX
|
||||
lda #1
|
||||
.FIN
|
||||
.DO ]1=MLIGETPREFIX
|
||||
lda #1
|
||||
.FIN
|
||||
.DO ]1=MLIOPEN
|
||||
lda #3
|
||||
.FIN
|
||||
.DO ]1=MLINEWLINE
|
||||
lda #3
|
||||
.FIN
|
||||
.DO ]1=MLIREAD
|
||||
lda #4
|
||||
.FIN
|
||||
.DO ]1=MLIWRITE
|
||||
lda #4
|
||||
.FIN
|
||||
.DO ]1=MLICLOSE
|
||||
lda #1
|
||||
.FIN
|
||||
.DO ]1=MLIFLUSH
|
||||
lda #1
|
||||
.FIN
|
||||
.DO ]1=MLISETMARK
|
||||
lda #2
|
||||
.FIN
|
||||
.DO ]1=MLIGETMARK
|
||||
lda #2
|
||||
.FIN
|
||||
.DO ]1=MLISETEOF
|
||||
lda #2
|
||||
.FIN
|
||||
.DO ]1=MLIGETEOF
|
||||
lda #2
|
||||
.FIN
|
||||
.DO ]1=MLISETBUF
|
||||
lda #2
|
||||
.FIN
|
||||
.DO ]1=MLIGETBUF
|
||||
lda #2
|
||||
.FIN
|
||||
|
||||
jsr A2osX.MLICALL
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA KMLICALL
|
||||
ldx #]1
|
||||
.DO ]1=MLIREADBLOCK
|
||||
lda #3
|
||||
.FIN
|
||||
.DO ]1=MLIWRITEBLOCK
|
||||
lda #3
|
||||
.FIN
|
||||
.DO ]1=MLICREATE
|
||||
lda #7
|
||||
.FIN
|
||||
.DO ]1=MLIDESTROY
|
||||
lda #1
|
||||
.FIN
|
||||
.DO ]1=MLIRENAME
|
||||
lda #2
|
||||
.FIN
|
||||
.DO ]1=MLISETFILEINFO
|
||||
lda #7
|
||||
.FIN
|
||||
.DO ]1=MLIGETFILEINFO
|
||||
lda #10
|
||||
.FIN
|
||||
.DO ]1=MLIONLINE
|
||||
lda #2
|
||||
.FIN
|
||||
.DO ]1=MLISETPREFIX
|
||||
lda #1
|
||||
.FIN
|
||||
.DO ]1=MLIGETPREFIX
|
||||
lda #1
|
||||
.FIN
|
||||
.DO ]1=MLIOPEN
|
||||
lda #3
|
||||
.FIN
|
||||
.DO ]1=MLINEWLINE
|
||||
lda #3
|
||||
.FIN
|
||||
.DO ]1=MLIREAD
|
||||
lda #4
|
||||
.FIN
|
||||
.DO ]1=MLIWRITE
|
||||
lda #4
|
||||
.FIN
|
||||
.DO ]1=MLICLOSE
|
||||
lda #1
|
||||
.FIN
|
||||
.DO ]1=MLIFLUSH
|
||||
lda #1
|
||||
.FIN
|
||||
.DO ]1=MLISETMARK
|
||||
lda #2
|
||||
.FIN
|
||||
.DO ]1=MLIGETMARK
|
||||
lda #2
|
||||
.FIN
|
||||
.DO ]1=MLISETEOF
|
||||
lda #2
|
||||
.FIN
|
||||
.DO ]1=MLIGETEOF
|
||||
lda #2
|
||||
.FIN
|
||||
.DO ]1=MLISETBUF
|
||||
lda #2
|
||||
.FIN
|
||||
.DO ]1=MLIGETBUF
|
||||
lda #2
|
||||
.FIN
|
||||
|
||||
jsr Kernel.MLICALL
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA DRVCALL
|
||||
ldy ]1
|
||||
ldx #]2
|
||||
jsr A2osX.DRVCALL
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA LIBLOADP
|
||||
>PUSHW ]1
|
||||
ldx #SYS.LoadLib
|
||||
jsr A2osX.SYSCALL
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA LIBLOADA
|
||||
ldx #SYS.LoadLibA
|
||||
jsr A2osX.SYSCALL
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA LIBCALL
|
||||
ldy ]1
|
||||
ldx #]2
|
||||
jsr A2osX.LIBCALL
|
||||
.EM
|
||||
*--------------------------------------
|
||||
* LOCAL SEGMENT Manipulation Macros
|
||||
*--------------------------------------
|
||||
.MA ADDLOCAL
|
||||
pha
|
||||
lda R.LS
|
||||
dec R.SP
|
||||
sta (R.SP)
|
||||
lda R.SP
|
||||
sec
|
||||
sbc #]1
|
||||
sta R.SP
|
||||
sta R.LS
|
||||
pla
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA REMLOCAL
|
||||
php
|
||||
pha
|
||||
lda R.SP
|
||||
clc
|
||||
adc #]1
|
||||
sta R.SP
|
||||
lda (R.SP)
|
||||
inc R.SP
|
||||
sta R.LS
|
||||
pla
|
||||
plp
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA LDAL
|
||||
ldy #]1
|
||||
lda (R.LS),y
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA ADCL
|
||||
ldy #]1
|
||||
adc (R.LS),y
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA SBCL
|
||||
ldy #]1
|
||||
adc (R.LS),y
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA STAL
|
||||
ldy #]1
|
||||
sta (R.LS),y
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA LDYAL
|
||||
ldy #]1
|
||||
lda (R.LS),y
|
||||
pha
|
||||
iny
|
||||
lda (R.LS),y
|
||||
ply
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA STYAL
|
||||
phy
|
||||
ldy #]1+1
|
||||
sta (R.LS),y
|
||||
dey
|
||||
pla
|
||||
sta (R.LS),y
|
||||
tay
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA INCL
|
||||
ldy #]1
|
||||
lda (R.LS),y
|
||||
inc
|
||||
sta (R.LS),y
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA INCLW
|
||||
ldy #]1
|
||||
lda (R.LS),y
|
||||
inc
|
||||
bne .71
|
||||
sta (R.LS),y
|
||||
iny
|
||||
lda (R.LS),y
|
||||
inc
|
||||
.71 sta (R.LS),y
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA DECL
|
||||
ldy #]1
|
||||
lda (R.LS),y
|
||||
dec
|
||||
sta (R.LS),y
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA DECLW
|
||||
ldy #]1
|
||||
lda (R.LS),y
|
||||
bne .72
|
||||
pha
|
||||
iny
|
||||
lda (R.LS),y
|
||||
dec
|
||||
sta (R.LS),y
|
||||
dey
|
||||
pla
|
||||
.72 dec
|
||||
sta (R.LS),y
|
||||
.EM
|
||||
*--------------------------------------
|
||||
* D.STACK PUSH/PULL Macros
|
||||
*--------------------------------------
|
||||
.MA PUSHA
|
||||
dec R.SP
|
||||
sta (R.SP)
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA PULLA
|
||||
lda (R.SP)
|
||||
inc R.SP
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA PUSHYA
|
||||
dec R.SP
|
||||
sta (R.SP)
|
||||
pha
|
||||
tya
|
||||
dec R.SP
|
||||
sta (R.SP)
|
||||
pla
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA PULLYA
|
||||
lda (R.SP)
|
||||
inc R.SP
|
||||
tay
|
||||
lda (R.SP)
|
||||
inc R.SP
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA PUSHBI
|
||||
dec R.SP
|
||||
lda #]1
|
||||
sta (R.SP)
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA PUSHB
|
||||
.DO ]#=2
|
||||
dec R.SP
|
||||
lda ]1,]2
|
||||
sta (R.SP)
|
||||
.ELSE
|
||||
dec R.SP
|
||||
lda ]1
|
||||
sta (R.SP)
|
||||
.FIN
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA PULLB
|
||||
.DO ]#=2
|
||||
lda (R.SP)
|
||||
sta ]1,]2
|
||||
inc R.SP
|
||||
.ELSE
|
||||
lda (R.SP)
|
||||
sta ]1
|
||||
inc R.SP
|
||||
.FIN
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA PUSHWI
|
||||
dec R.SP
|
||||
lda /]1
|
||||
sta (R.SP)
|
||||
dec R.SP
|
||||
lda #]1
|
||||
sta (R.SP)
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA PUSHW
|
||||
dec R.SP
|
||||
lda ]1+1
|
||||
sta (R.SP)
|
||||
dec R.SP
|
||||
lda ]1
|
||||
sta (R.SP)
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA PULLW
|
||||
lda (R.SP)
|
||||
sta ]1
|
||||
inc R.SP
|
||||
lda (R.SP)
|
||||
sta ]1+1
|
||||
inc R.SP
|
||||
.EM
|
||||
*--------------------------------------
|
||||
* General WORD Manipulation Macros
|
||||
*--------------------------------------
|
||||
.MA LDYAI
|
||||
ldy #]1
|
||||
lda /]1
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA LDAXI
|
||||
lda #]1
|
||||
ldx /]1
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA LDYA
|
||||
.DO ]#=2
|
||||
lda ]1+1,]2
|
||||
ldy ]1,]2
|
||||
.ELSE
|
||||
lda ]1+1
|
||||
ldy ]1
|
||||
.FIN
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA LDAX
|
||||
.DO ]#=2
|
||||
ldx ]1+1,]2
|
||||
lda ]1,]2
|
||||
.ELSE
|
||||
ldx ]1+1
|
||||
lda ]1
|
||||
.FIN
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA STYA
|
||||
.DO ]#=2
|
||||
sta ]1+1,]2
|
||||
tya
|
||||
sta ]1,]2
|
||||
.ELSE
|
||||
sta ]1+1
|
||||
sty ]1
|
||||
.FIN
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA STAX
|
||||
.DO ]#=2
|
||||
sta ]1+1,]2
|
||||
txa
|
||||
sta ]1,]2
|
||||
.ELSE
|
||||
stx ]1+1
|
||||
sta ]1
|
||||
.FIN
|
||||
.EM
|
||||
*--------------------------------------
|
||||
* General Strings Macros
|
||||
*--------------------------------------
|
||||
.MA CSTRING
|
||||
.AS "]1"
|
||||
.HS 00
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA PSTRING
|
||||
.DA #.74-.73
|
||||
.73 .AS "]1"
|
||||
.74 .AS ""
|
||||
.EM
|
||||
MAN
|
||||
SAVE INC/MACROS.I
|
95
INC/MONITOR.I.txt
Normal file
95
INC/MONITOR.I.txt
Normal file
|
@ -0,0 +1,95 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 1000
|
||||
*--------------------------------------
|
||||
* ROM Standard Routines
|
||||
*--------------------------------------
|
||||
.LIST OFF
|
||||
POWERUP .EQ $3F2
|
||||
*--------------------------------------
|
||||
COL80FIRM .EQ $C300
|
||||
*--------------------------------------
|
||||
BASICLD .EQ $E000 ENTER BASIC COLD
|
||||
BASICWM .EQ $E003 RE-ENTER BASIC WARM
|
||||
HGR2 .EQ $F3D8 APPLESOFT CLEAR TO HIRES 2
|
||||
HGR .EQ $F3E2 APPLESOFT CLEAR TO HIRES 1
|
||||
BKGND .EQ $F3F4 APPLESOFT HIRES BACKGROUND CLEAR
|
||||
HCOLOR .EQ $F6F0 APPLESOFT HIRES COLOR SELECT
|
||||
HPOSN .EQ $F411 APPLESOFT HIRES POSITION
|
||||
HPLOT .EQ $F457 APPLESOFT HIRES PLOT
|
||||
PLOT .EQ $F800 PLOT LORES BLOCK
|
||||
HLINE .EQ $F819 HORIZ LORES LINE
|
||||
VLINE .EQ $F828 VERTICAL LORES LINE
|
||||
CLRSCR .EQ $F832 CLEAR FULL LORES SCREEN
|
||||
CLRTOP .EQ $FB36 CLEAR TOP. LORES SCREEN
|
||||
GBSCALC .EQ $F847 LORES BASE CALCULATION
|
||||
NEXTCOL .EQ $F85F INCREASE LORES COLOR BY 3
|
||||
SETCOL .EQ $F864 SET LORES COLOR
|
||||
SCRN .EQ $F871 READ LORES SCREEN COLOR
|
||||
PRNTAX .EQ $F941 OUTPUT A THEN X. AS HEX
|
||||
PRBLNK .EQ $F948 OUTPUT 3 SPACES VIA BOOKS
|
||||
PRBL2 .EQ $F94A OUTPUT X BLANKS VIA HOOKS
|
||||
REGDSP .EQ $FAD7 DISPLAY WORKING REGISTERS
|
||||
PREAD .EQ $FB1E READ GAME PADDLE X
|
||||
INIT .EQ $FB2F INITIALIZE TEXT SCREEN
|
||||
SETTXT .EQ $FB93 SET UP TEXT SCREEN (NOT 2E!)
|
||||
SETGR .EQ $FB40 SET UP GRAPHICS SCREEN
|
||||
SETWND .EQ $FB4B SET NORMAL TEXT WINDOW
|
||||
SETPWRC .EQ $FB6F
|
||||
BASCALC .EQ $FBC1 CALCULATE TEXT BASE ADDRESS (NOT 2E!}
|
||||
BELL1 .EQ $FBD9 BEEP SPEAKER IF CTRL-G
|
||||
BELL2 .EQ $FBE4 BEEP SPEAKER ONCE
|
||||
ADVANCE .EQ $FBF4 TEXT CURSOR ONE TO RIGHT
|
||||
VIDOUT .EQ $FBFD OUTPUT ASCII TO SCREEN ONLY
|
||||
BS .EQ $FC10 BACKSPACE SCREEN
|
||||
UP .EQ $FC1A MOVE SCREEN CURSOR UP ONE LINE
|
||||
VTAB .EQ $FC22 VERTICAL SCREEN TAB USING CV
|
||||
VTABA .EQ $FC24 VERTICAL SCREEN TAB USING A
|
||||
ESC1 .EQ $FC66 PROCESS ESCAPE CURSOR MOVES
|
||||
CLREOP .EQ $FC42 CLEAR TO END OF PAGE
|
||||
HOME .EQ $FC58 CLEAR TEXT SCREEN AND HOME CURSOR
|
||||
CR .EQ $FC62 CARRIAGE RETURN TO SCREEN
|
||||
LF .EQ $FC66 LINEFEED TO SCREEN ONLY
|
||||
SCROLL .EQ $FC70 SCROLL TEXT SCREEN UP ONE
|
||||
CLEOL .EQ $FC9C CLEAR TEXT TO END OF LINE
|
||||
WAIT .EQ $FCA8 TIME DELAY SET BY ACCUMULATOR
|
||||
RDKEY .EQ $FD0C GET INPUT CHARACTER VIA HOOKS
|
||||
KEYIN .EQ $FD1B READ THE APPLE KEYBOARD
|
||||
RDCHAR .EQ $FD35 GET KEY AND PROCESS ESC A-F
|
||||
CANCEL .EQ $FD62 CANCEL KEYBOARD LINE ENTRY
|
||||
GETLNZ .EQ $FD67 CR THEN GET KEYBOARD INPUT LINE
|
||||
GETLN .EQ $FD6A GET KEYBOARD INPUT LINE
|
||||
GETLN1 .EQ $FD6F GET KBD INPUT, NO PROMPT
|
||||
CROUT1 .EQ $FD8B CLEAR EOL THEN CR VIA BOOKS
|
||||
CROUT .EQ $FD8E OUTPUT CR VIA HOOKS
|
||||
PRBYTE .EQ $FDDA OUTPUT FULL A IN HEX TO HOOKS
|
||||
PRHEX .EQ $FDE3 OUTPUT LOW A IN HEX TO HOOKS
|
||||
COUT .EQ $FDED OUTPUT CHARACTER VIA HOOKS
|
||||
COUTl .EQ $FDF0 OUTPUT CHARACTER TO SCREEN
|
||||
MOVE .EQ $FE2C MOVE BLOCK OF MEMORY
|
||||
VERIFY .EQ $FE36 VERIFY BLOCK OF MEMORY
|
||||
LIST .EQ $FE5E DISASSEMBLE 20 INSTRUCTIONS
|
||||
LIST2 .EQ $FE63 DISASSEMBLE •A• INSTRUCTIONS
|
||||
SETINV .EQ $FE80 PRINT INVERSE TEXT TO SCREEN
|
||||
SETNORM .EQ $FE84 PRINT NORMAL TEXT TO SCREEN
|
||||
SETVID .EQ $FE93 GRAB OUTPUT HOOKS FOR SCREEN
|
||||
XBASIC .EQ $FEB0 GO BASIC, DESTROYING OLD
|
||||
BASCON .EQ $FEB3 GO BASIC, CONTINUING OLD
|
||||
TRACE .EQ $FEC2 START TRACING (OLD ROM ONLY!)
|
||||
STEP .EQ $FEC4 SINGLE STEP (OLD ROM ONLY!)
|
||||
WRITE .EQ $FECD WRITE TO CASSETTE TAPE
|
||||
READ .EQ $FEF0 READ TO CASSETTE TAPE
|
||||
PRERR .EQ $FF2D PRINT "ERR" TO OUTPUT HOOK
|
||||
BELL .EQ $FF3A OUTPUT BELL TO HOOKS
|
||||
IORESR .EQ $FF3F RESTORE ALL WORKING REGISTER
|
||||
IOSAVE .EQ $FF4A SAVE ALL WORKING REGISTERS
|
||||
RETURN .EQ $FF58 "GUARANTEED" RETURN
|
||||
OLDRST .EQ $FF59 OLD RESET, NO AUTOSTART
|
||||
MON .EQ $FF65 ENTER MONITOR AND BEEP SPEAKER
|
||||
MONZ .EQ $FF69 ENTER MONITOR QUIETLY
|
||||
GETNUM .EQ $FFA7 ASCII TO HEX IN 3E & 3F
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE INC/MONITOR.I
|
131
INC/PRODOS.I.txt
Normal file
131
INC/PRODOS.I.txt
Normal file
|
@ -0,0 +1,131 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 1000
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
* PRODOS Constants
|
||||
*--------------------------------------
|
||||
MLI.MAXPATH .EQ 64
|
||||
*--------------------------------------
|
||||
* PRODOS Defines
|
||||
*--------------------------------------
|
||||
MLIALLOCIRQ .EQ $40
|
||||
MLIDEALLOCIRQ .EQ $41
|
||||
MLIATALK .EQ $42
|
||||
MLIQUIT .EQ $65
|
||||
MLIREADBLOCK .EQ $80
|
||||
MLIWRITEBLOCK .EQ $81
|
||||
MLIGETTIME .EQ $82
|
||||
MLICREATE .EQ $C0
|
||||
MLIDESTROY .EQ $C1
|
||||
MLIRENAME .EQ $C2
|
||||
MLISETFILEINFO .EQ $C3
|
||||
MLIGETFILEINFO .EQ $C4
|
||||
MLIONLINE .EQ $C5
|
||||
MLISETPREFIX .EQ $C6
|
||||
MLIGETPREFIX .EQ $C7
|
||||
MLIOPEN .EQ $C8
|
||||
MLINEWLINE .EQ $C9
|
||||
MLIREAD .EQ $CA
|
||||
MLIWRITE .EQ $CB
|
||||
MLICLOSE .EQ $CC
|
||||
MLIFLUSH .EQ $CD
|
||||
MLISETMARK .EQ $CE
|
||||
MLIGETMARK .EQ $CF
|
||||
MLISETEOF .EQ $D0
|
||||
MLIGETEOF .EQ $D1
|
||||
MLISETBUF .EQ $D2
|
||||
MLIGETBUF .EQ $D3
|
||||
*--------------------------------------
|
||||
MLI.ERR.BADCALL .EQ $01
|
||||
MLI.ERR.BADCNT .EQ $04
|
||||
MLI.ERR.IRQFULL .EQ $25
|
||||
MLI.ERR.IO .EQ $27
|
||||
MLI.ERR.NODEV .EQ $28
|
||||
MLI.ERR.WRTPROT .EQ $2B
|
||||
MLI.ERR.DSKSWIT .EQ $2E
|
||||
MLI.ERR.INVPATH .EQ $40
|
||||
MLI.ERR.FCBFULL .EQ $42
|
||||
MLI.ERR.BADREF .EQ $43
|
||||
MLI.ERR.PNOTFND .EQ $44
|
||||
MLI.ERR.VNOTFND .EQ $45
|
||||
MLI.ERR.FNOTFND .EQ $46
|
||||
MLI.ERR.DUPFILE .EQ $47
|
||||
MLI.ERR.OVERRUN .EQ $48
|
||||
MLI.ERR.VOLFULL .EQ $49
|
||||
|
||||
*--------------------------------------
|
||||
MLI .EQ $BF00
|
||||
JSPARE .EQ $BF03
|
||||
DATETIME .EQ $BF06
|
||||
SYSERR .EQ $BF09
|
||||
SYSDEATH .EQ $BF0C
|
||||
SERR .EQ $BF0F
|
||||
DEVPTRS0D1 .EQ $BF10
|
||||
DEVPTRS1D1 .EQ $BF12
|
||||
DEVPTRS2D1 .EQ $BF14
|
||||
DEVPTRS3D1 .EQ $BF16
|
||||
DEVPTRS4D1 .EQ $BF18
|
||||
DEVPTRS5D1 .EQ $BF1A
|
||||
DEVPTRS6D1 .EQ $BF1C
|
||||
DEVPTRS7D1 .EQ $BF1E
|
||||
DEVPTRS0D2 .EQ $BF20
|
||||
DEVPTRS1D2 .EQ $BF22
|
||||
DEVPTRS2D2 .EQ $BF24
|
||||
DEVPTRS3D2 .EQ $BF26
|
||||
DEVPTRS4D2 .EQ $BF28
|
||||
DEVPTRS5D2 .EQ $BF2A
|
||||
DEVPTRS6D2 .EQ $BF2C
|
||||
DEVPTRS7D2 .EQ $BF2E
|
||||
DEVNUM .EQ $BF30
|
||||
DEVCNT .EQ $BF31
|
||||
DEVLST .EQ $BF32 -> $BF3F
|
||||
DEVLST0END .EQ $BF40 A 0 was added to ensure list ended with 0 if 14 devices in list
|
||||
PRODOSCOPYRIGHT .EQ $BF41 ;free->$BF4B
|
||||
MEMTABL .EQ $BF58 -> $BF6F
|
||||
GL.BUFF .EQ $BF70
|
||||
INTRUPT1 .EQ $BF80
|
||||
INTRUPT2 .EQ $BF82
|
||||
INTRUPT3 .EQ $BF84
|
||||
INTRUPT4 .EQ $BF86
|
||||
DATELO .EQ $BF90
|
||||
TIMELO .EQ $BF92
|
||||
LEVEL .EQ $BF94
|
||||
BUBIT .EQ $BF95
|
||||
SPARE1 .EQ $BF96
|
||||
MACHID .EQ $BF98
|
||||
*--------------------------------------
|
||||
MACHID.TYPE .EQ %11001000
|
||||
MACHID.TYPE.II .EQ %00000000
|
||||
MACHID.TYPE.IIp .EQ %01000000
|
||||
MACHID.TYPE.IIe .EQ %10000000
|
||||
MACHID.TYPE.IIc .EQ %10001000
|
||||
MACHID.TYPE.III .EQ %11000000
|
||||
MACHID.RAM .EQ %00110000
|
||||
MACHID.RAM.128 .EQ %00110000
|
||||
MACHID.RAM.64 .EQ %00100000
|
||||
MACHID.RAM.48 .EQ %00010000
|
||||
MACHID.SPARE .EQ %00000100
|
||||
MACHID.COL80 .EQ %00000010
|
||||
MACHID.CLK .EQ %00000001
|
||||
*--------------------------------------
|
||||
SLTBYT .EQ $BF99
|
||||
PFIXPTR .EQ $BF9A
|
||||
MLIACTV .EQ $BF9B
|
||||
CMDADR .EQ $BF9C
|
||||
SAVEX .EQ $BF9E
|
||||
SAVEY .EQ $BF9F
|
||||
*--------------------------------------
|
||||
* code $BFA0 -> $BFF3
|
||||
*--------------------------------------
|
||||
BNKBYT1 .EQ $BFF4
|
||||
BNKBYT2 .EQ $BFF5
|
||||
SYS.RTS .EQ $BFF6 code -> $BFFB
|
||||
IBAKVER .EQ $BFFC
|
||||
IVERSION .EQ $BFFD
|
||||
KBAKVER .EQ $BFFE
|
||||
KVERSION .EQ $BFFF
|
||||
MAN
|
||||
SAVE INC/PRODOS.I
|
30
INC/ZP.I.txt
Normal file
30
INC/ZP.I.txt
Normal file
|
@ -0,0 +1,30 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
*--------------------------------------
|
||||
WNDLFT .EQ $20 SCROLL WINDOW LEFT
|
||||
WNDWDTH .EQ $21 SCROLL WINDOW WIDTH
|
||||
WNDTOP .EQ $22 SCROLL WINDOW TOP
|
||||
WNDBOT .EQ $23 SCROLL WINDOW BOTTOM
|
||||
CH .EQ $24 CURSOR HORIZONTAL
|
||||
CV .EQ $25 CURSOR VERTICAL
|
||||
GBASL .EQ $26 LORES BASE LOW
|
||||
GBASH .EQ $27 LORES BASE HIGH
|
||||
BASL .EQ $28 TEXT BASE LOW
|
||||
BASH .EQ $29 TEXT BASE HIGH
|
||||
BEND .EQ $2C LORES RIGHT END H LINE
|
||||
VBOT .EQ $2D LORES BOTTOM OF V LINE
|
||||
COLOR .EQ $30 LORES COLOR
|
||||
INVFLG .EQ $31 NORMAL/INVERSE /FLASH (FF,7F,3F)
|
||||
PROMPT .EQ $33 HOLDS PROMPT SYMBOL
|
||||
CSWL .EQ $36 OUTPUT CHARACTER HOOK LOW
|
||||
CSWH .EQ $37 OUTPUT CHARACTER HOOK HIGH
|
||||
KSWL .EQ $38 INPUT CHARACTER HOOOK LOW
|
||||
KSWH .EQ $39 INPUT CHARACTER HOOK HIGH
|
||||
RNDL .EQ $4E RANDOM NUMBER LOW
|
||||
RNDH .EQ $4F RANDOM NUMBER HIGH
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE INC/ZP.I
|
29
LIB/LIBCRYPT.I.txt
Normal file
29
LIB/LIBCRYPT.I.txt
Normal file
|
@ -0,0 +1,29 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
*--------------------------------------
|
||||
LIBCRYPT.MD5PStrA .EQ 4
|
||||
LIBCRYPT.MD5Init .EQ 6
|
||||
LIBCRYPT.MD5Update .EQ 8
|
||||
LIBCRYPT.MD5FinalizeA .EQ 10
|
||||
*--------------------------------------
|
||||
* S.MD5 STRUCT
|
||||
*--------------------------------------
|
||||
S.MD5.ABCD0 .EQ 0
|
||||
S.MD5.A0 .EQ 0
|
||||
S.MD5.B0 .EQ 4
|
||||
S.MD5.C0 .EQ 8
|
||||
S.MD5.D0 .EQ 12
|
||||
S.MD5.BITCOUNT .EQ 16
|
||||
S.MD5.EXTRABIT .EQ 24
|
||||
S.MD5.FINALIZED .EQ 25
|
||||
*
|
||||
S.MD5.SIZE .EQ 26
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE INC/LIBCRYPT.I
|
||||
|
511
LIB/LIBCRYPT.S.txt
Normal file
511
LIB/LIBCRYPT.S.txt
Normal file
|
@ -0,0 +1,511 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF LIB/LIBCRYPT.O
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/LIBCRYPT.I
|
||||
*--------------------------------------
|
||||
* DWORD Macros : Do NOT disturb carry with cpx, cpy...
|
||||
*--------------------------------------
|
||||
.MA ADC32
|
||||
ldx #3
|
||||
ldy #0
|
||||
clc
|
||||
:1 lda ]1,y
|
||||
adc ]2,y
|
||||
sta ]3,y
|
||||
iny
|
||||
dex
|
||||
bpl :1
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA AND32
|
||||
ldx #3
|
||||
:1 lda ]1,x
|
||||
and ]2,x
|
||||
sta ]3,x
|
||||
dex
|
||||
bpl :1
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA ORA32
|
||||
ldx #3
|
||||
:1 lda ]1,x
|
||||
ora ]2,x
|
||||
sta ]3,x
|
||||
dex
|
||||
bpl :1
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA EOR32
|
||||
ldx #3
|
||||
:1 lda ]1,x
|
||||
eor ]2,x
|
||||
sta ]3,x
|
||||
dex
|
||||
bpl :1
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA NOT32
|
||||
ldx #3
|
||||
:1 lda ]1,x
|
||||
eor #$FF
|
||||
sta ]2,x
|
||||
dex
|
||||
bpl :1
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA MOV32
|
||||
ldx #3
|
||||
:1 lda ]1,x
|
||||
sta ]2,x
|
||||
dex
|
||||
bpl :1
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA ROL32x
|
||||
:2 lda ]1+3
|
||||
rol
|
||||
rol ]1
|
||||
rol ]1+1
|
||||
rol ]1+2
|
||||
rol ]1+3
|
||||
dex
|
||||
bne :2
|
||||
.EM
|
||||
*--------------------------------------
|
||||
* Main entry point
|
||||
* input :
|
||||
* X = Function
|
||||
*--------------------------------------
|
||||
* Code signature and relocation table
|
||||
*--------------------------------------
|
||||
* CLD $D8
|
||||
* JMP (*,x) $7C
|
||||
* #JMPTABLE
|
||||
* /JMPTABLE
|
||||
*--------------------------------------
|
||||
CS.START cld
|
||||
jmp (.1,x)
|
||||
.1 .DA LIB.LOAD
|
||||
.DA LIB.UNLOAD
|
||||
.DA MD5PStrA
|
||||
.DA MD5Init
|
||||
.DA MD5Update
|
||||
.DA MD5FinalizeA
|
||||
*--------------------------------------
|
||||
.DA 0
|
||||
.DA CS.END-CS.START
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
LIB.LOAD
|
||||
LIB.UNLOAD clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* MD5PStrA
|
||||
* in :
|
||||
* A = hMem To PSTR
|
||||
* out :
|
||||
* A = hMem To MessageDigest
|
||||
*--------------------------------------
|
||||
MD5PStrA >SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPQuickPtr3 1 and 2 used by other MD5 functions
|
||||
ldy #0
|
||||
lda (ZPQuickPtr3),y get PStr len
|
||||
sta ZPQuickPtr4 ZPQuickPtr4 = str len
|
||||
stz ZPQuickPtr4+1 0,PSTR len <= 255
|
||||
inc ZPQuickPtr3
|
||||
bne .1
|
||||
inc ZPQuickPtr3+1 Make DATA skip PSTR Len Byte
|
||||
.1 jsr MD5Init
|
||||
bcs .9
|
||||
pha save MD5 Context hMem
|
||||
>PUSHW ZPQuickPtr4 Push LEN
|
||||
>PUSHW ZPQuickPtr3 Push DATA
|
||||
pla
|
||||
pha
|
||||
>PUSHA Push MD5 Context
|
||||
jsr MD5Update
|
||||
pla get back MD5 Context
|
||||
pha
|
||||
jsr MD5FinalizeA
|
||||
plx get back MD5 Context hMem
|
||||
pha save MessageDigest hMem
|
||||
txa
|
||||
>SYSCALL SYS.FreeMemA Free MD5 Context
|
||||
pla get back MessageDigest hMem
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* MD5Init
|
||||
* In :
|
||||
* Out :
|
||||
* A = hMem To S.MD5
|
||||
*--------------------------------------
|
||||
MD5Init >PUSHWI S.MD5.SIZE
|
||||
>PUSHBI 0
|
||||
>SYSCALL SYS.GetMem
|
||||
bcs .9
|
||||
>STYA ZPQuickPtr1
|
||||
ldy #0
|
||||
.1 lda MD5.ABCDINIT,y
|
||||
sta (ZPQuickPtr1),y
|
||||
iny
|
||||
cpy #16
|
||||
bne .1
|
||||
lda #0
|
||||
.2 sta (ZPQuickPtr1),y
|
||||
iny
|
||||
cpy #S.MD5.SIZE Includes S.MD5.FINALIZED Flag
|
||||
bne .2
|
||||
txa
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* MD5Update (Append "$80" & Padding & original size)
|
||||
* In:
|
||||
* PULLB MD5 Context hMem
|
||||
* PULLW DATA PTR
|
||||
* PULLW DATA LEN
|
||||
*--------------------------------------
|
||||
MD5Update >PULLA get MD5 Context
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPQuickPtr1 get MD5 Context
|
||||
>PULLW R.AX get DATA
|
||||
>PULLW R.BX get LEN
|
||||
ldy #S.MD5.FINALIZED
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .1
|
||||
sec
|
||||
rts
|
||||
.1 lda R.BH More than 256 Bytes remaining to hash ?
|
||||
bne .3 yes
|
||||
lda R.BL
|
||||
bne .2 Len = O ?
|
||||
clc All data processed
|
||||
rts
|
||||
.2 cmp #64 More than 64 Bytes remaining to hash ?
|
||||
bcc .50 yes
|
||||
.3 lda #64
|
||||
.50 sta R.CL Save Chunk Len
|
||||
jsr MD5UpdateBitCount
|
||||
ldy #0
|
||||
.51 lda (R.AX),y Load Buffer with data
|
||||
sta MD5.BUFFER64,y
|
||||
iny
|
||||
cpy R.CL
|
||||
bne .51
|
||||
cpy #64 Full 64 Bytes DATA ?
|
||||
beq .58
|
||||
lda #$80 no, Append $80
|
||||
sta MD5.BUFFER64,y
|
||||
lda #0
|
||||
.52 iny Pad with 0 to 64
|
||||
cpy #64
|
||||
beq .53
|
||||
sta MD5.BUFFER64,y
|
||||
bra .52
|
||||
.53 ldy #S.MD5.EXTRABIT Mark MD5 Context as Appended
|
||||
lda #$80
|
||||
sta (ZPQuickPtr1),y
|
||||
lda R.CL
|
||||
cmp #56 Enough room for BITCOUNT ?
|
||||
bcs .58 no
|
||||
jsr MD5AppendBitCount
|
||||
.58 jsr MD5Transform
|
||||
jsr MD5UpdateABCD0
|
||||
.8 lda R.BL Substract Bytes processed from LEN
|
||||
sec
|
||||
sbc R.CL get back chunk Len
|
||||
sta R.BL
|
||||
bcs .81
|
||||
dec R.BH
|
||||
.81 lda R.AL Add Bytes processed to DATA
|
||||
clc
|
||||
adc R.CL
|
||||
sta R.AL
|
||||
bcc .82
|
||||
inc R.AH
|
||||
.82 jmp .1
|
||||
*--------------------------------------
|
||||
* MD5FinalizeA
|
||||
* In :
|
||||
* A = hMem To S.MD5
|
||||
* Out:
|
||||
* A = MessageDigest (PSTR, 16 Bytes, 32 Chars)
|
||||
*--------------------------------------
|
||||
MD5FinalizeA >SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPQuickPtr1 get MD5 Context
|
||||
ldy #S.MD5.FINALIZED
|
||||
lda (ZPQuickPtr1),y
|
||||
bne .11
|
||||
jsr MD5ExtraChunk
|
||||
.11 >PUSHWI 33 Len + 32 Digits
|
||||
>PUSHBI 0
|
||||
>SYSCALL SYS.GetMem
|
||||
bcs .9
|
||||
>STYA ZPQuickPtr2
|
||||
phx save hMem for return
|
||||
lda #32
|
||||
sta (ZPQuickPtr2)
|
||||
inc ZPQuickPtr2
|
||||
bne .10
|
||||
inc ZPQuickPtr2+1
|
||||
.10 ldy #S.MD5.ABCD0
|
||||
.1 lda (ZPQuickPtr1),y
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
tax
|
||||
lda MD5.DIGITS,x
|
||||
sta (ZPQuickPtr2)
|
||||
inc ZPQuickPtr2
|
||||
bne .2
|
||||
inc ZPQuickPtr2+1
|
||||
.2 lda (ZPQuickPtr1),y
|
||||
and #$0F
|
||||
tax
|
||||
lda MD5.DIGITS,x
|
||||
sta (ZPQuickPtr2)
|
||||
inc ZPQuickPtr2
|
||||
bne .3
|
||||
inc ZPQuickPtr2+1
|
||||
.3 iny
|
||||
cpy #S.MD5.ABCD0+16
|
||||
bne .1
|
||||
pla get back hMem
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* PRIVATE
|
||||
*--------------------------------------
|
||||
* MD5AppendBitCount
|
||||
* In :
|
||||
* ZPQuickPtr1 = MD5 Context
|
||||
*--------------------------------------
|
||||
MD5AppendBitCount
|
||||
ldx #56
|
||||
ldy #S.MD5.BITCOUNT Append 8 Bytes of BITCOUNT
|
||||
.1 lda (ZPQuickPtr1),y
|
||||
sta MD5.BUFFER64,x
|
||||
inx
|
||||
iny
|
||||
cpy #S.MD5.BITCOUNT+8
|
||||
bne .1
|
||||
ldy #S.MD5.FINALIZED Mark MD5 Context as Finalized
|
||||
lda #$80
|
||||
sta (ZPQuickPtr1),y
|
||||
rts
|
||||
*--------------------------------------
|
||||
* MD5UpdateBitCount
|
||||
* In :
|
||||
* CL = Size (in bytes) to add to MD5 context
|
||||
* ZPQuickPtr1 = MD5 Context
|
||||
*--------------------------------------
|
||||
MD5UpdateBitCount
|
||||
stz R.CH
|
||||
lda R.CL
|
||||
asl
|
||||
rol R.CH
|
||||
asl times 8 to get bit count
|
||||
rol R.CH
|
||||
asl
|
||||
rol R.CH
|
||||
clc
|
||||
ldy #S.MD5.BITCOUNT
|
||||
adc (ZPQuickPtr1),y
|
||||
sta (ZPQuickPtr1),y
|
||||
iny
|
||||
lda R.CH
|
||||
adc (ZPQuickPtr1),y
|
||||
sta (ZPQuickPtr1),y
|
||||
bcc .8
|
||||
.1 iny
|
||||
lda (ZPQuickPtr1),y
|
||||
inc
|
||||
sta (ZPQuickPtr1),y
|
||||
bne .8
|
||||
cpy #7
|
||||
bne .1
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
* MD5ExtraChunk
|
||||
* In :
|
||||
* ZPQuickPtr1 = MD5 Context
|
||||
*--------------------------------------
|
||||
MD5ExtraChunk ldy #S.MD5.FINALIZED
|
||||
lda #$80
|
||||
sta (ZPQuickPtr1),y Mark MD5 Context as "finalized"
|
||||
ldx #0
|
||||
ldy #S.MD5.EXTRABIT Extra Bit already appended ?
|
||||
lda (ZPQuickPtr1),y
|
||||
bne .1
|
||||
lda #$80
|
||||
sta MD5.BUFFER64 Add extra bit to buffer
|
||||
sta (ZPQuickPtr1),y Mark Extrabit added
|
||||
inx
|
||||
.1 stz MD5.BUFFER64,x pad with "0"...
|
||||
inx
|
||||
cpx #56
|
||||
bne .1 ...until room for bitcount
|
||||
jsr MD5AppendBitCount
|
||||
jsr MD5Transform
|
||||
*--------------------------------------
|
||||
* MD5UpdateABCD0
|
||||
* In:
|
||||
* ZPQuickPtr1 = MD5 Context
|
||||
*--------------------------------------
|
||||
MD5UpdateABCD0 ldy #0
|
||||
.1 clc ADC32 A+A0->A0, B, C, D....
|
||||
.2 lda MD5.ABCD,y
|
||||
adc (ZPQuickPtr1),y
|
||||
sta (ZPQuickPtr1),y
|
||||
iny
|
||||
tya
|
||||
and #3
|
||||
bne .2
|
||||
cpy #16
|
||||
bne .1
|
||||
rts
|
||||
*--------------------------------------
|
||||
* MD5Transform
|
||||
* In:
|
||||
* ZPQuickPtr1 = MD5 Context
|
||||
* 512 Bits Padded chunk in MD5.BUFFER64
|
||||
* Out:
|
||||
* Updated MD5.ABCD
|
||||
*--------------------------------------
|
||||
MD5Transform ldy #15 init ABCD Chunk with Context ABCD0
|
||||
.1 lda (ZPQuickPtr1),y
|
||||
sta MD5.ABCD,y
|
||||
dey
|
||||
bpl .1
|
||||
stz MD5.i Start Proceed 0 to 63 bytes
|
||||
*--------------------------------------
|
||||
MD5.0015 lda MD5.i
|
||||
cmp #16
|
||||
bcs MD5.1631
|
||||
>AND32 MD5.B,MD5.C,MD5.F1
|
||||
>NOT32 MD5.B,MD5.F2
|
||||
>AND32 MD5.F2,MD5.D,MD5.F2
|
||||
>ORA32 MD5.F1,MD5.F2,MD5.F
|
||||
jmp MD5.NEXTi
|
||||
*--------------------------------------
|
||||
MD5.1631 cmp #32
|
||||
bcs MD5.3247
|
||||
>AND32 MD5.D,MD5.B,MD5.F1
|
||||
>NOT32 MD5.D,MD5.F2
|
||||
>AND32 MD5.F2,MD5.C,MD5.F2
|
||||
>ORA32 MD5.F1,MD5.F2,MD5.F
|
||||
jmp MD5.NEXTi
|
||||
*--------------------------------------
|
||||
MD5.3247 cmp #48
|
||||
bcs MD5.4863
|
||||
>EOR32 MD5.B,MD5.C,MD5.F
|
||||
>EOR32 MD5.F,MD5.D,MD5.F
|
||||
jmp MD5.NEXTi
|
||||
*--------------------------------------
|
||||
MD5.4863 cmp #64
|
||||
bne .1
|
||||
rts
|
||||
.1 >NOT32 MD5.D,MD5.F1
|
||||
>ORA32 MD5.F1,MD5.B,MD5.F2
|
||||
>EOR32 MD5.F2,MD5.C,MD5.F
|
||||
*--------------------------------------
|
||||
MD5.NEXTi >MOV32 MD5.D,MD5.DTemp
|
||||
>MOV32 MD5.C,MD5.D
|
||||
>MOV32 MD5.B,MD5.C
|
||||
>ADC32 MD5.A,MD5.F,MD5.F
|
||||
lda MD5.i
|
||||
asl
|
||||
asl
|
||||
tay
|
||||
ldx #0
|
||||
clc
|
||||
.1 lda MD5.K,y ADC32 MD5.K[i],MD5.F,MD5.F
|
||||
adc MD5.F,x
|
||||
sta MD5.F,x
|
||||
iny
|
||||
inx
|
||||
txa
|
||||
eor #4 DO NOT DISTURB carry with cpx !!!
|
||||
bne .1
|
||||
ldy MD5.i
|
||||
lda MD5.g,y
|
||||
asl
|
||||
asl
|
||||
tay
|
||||
ldx #0
|
||||
clc
|
||||
.2 lda MD5.BUFFER64,y ADC32 M[g],MD5.F,MD5.F
|
||||
adc MD5.F,x
|
||||
sta MD5.F,x
|
||||
iny
|
||||
inx
|
||||
txa
|
||||
eor #4 DO NOT DISTURB carry with cpx !!!
|
||||
bne .2
|
||||
ldy MD5.i
|
||||
lda MD5.s,y get s[i] in x
|
||||
tax
|
||||
>ROL32x MD5.F
|
||||
>ADC32 MD5.B,MD5.F,MD5.B
|
||||
>MOV32 MD5.DTemp,MD5.A
|
||||
inc MD5.i
|
||||
jmp MD5.0015
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
MD5.ABCD
|
||||
MD5.A .BS 4 Chunk Level,A,B,C,D
|
||||
MD5.B .BS 4
|
||||
MD5.C .BS 4
|
||||
MD5.D .BS 4
|
||||
MD5.DTemp .BS 4
|
||||
MD5.F .BS 4
|
||||
MD5.F1 .BS 4
|
||||
MD5.F2 .BS 4
|
||||
MD5.i .BS 1
|
||||
MD5.BUFFER64 .BS 64
|
||||
*--------------------------------------
|
||||
MD5.ABCDINIT .HS 01234567.89ABCDEF.FEDCBA98.76543210
|
||||
*--------------------------------------
|
||||
MD5.s .DA #7,#12,#17,#22,#7,#12,#17,#22,#7,#12,#17,#22,#7,#12,#17,#22
|
||||
.DA #5,#9,#14,#20,#5,#9,#14,#20,#5,#9,#14,#20,#5,#9,#14,#20
|
||||
.DA #4,#11,#16,#23,#4,#11,#16,#23,#4,#11,#16,#23,#4,#11,#16,#23
|
||||
.DA #6,#10,#15,#21,#6,#10,#15,#21,#6,#10,#15,#21,#6,#10,#15,#21
|
||||
*--------------------------------------
|
||||
MD5.g .DA #0,#1,#2,#3,#4,#5,#6,#7,#8,#9,#10,#11,#12,#13,#14,#15
|
||||
.DA #1,#6,#11,#0,#5,#10,#15,#4,#9,#14,#3,#8,#13,#2,#7,#12
|
||||
.DA #5,#8,#11,#14,#1,#4,#7,#10,#13,#0,#3,#6,#9,#12,#15,#2
|
||||
.DA #0,#7,#14,#5,#12,#3,#10,#1,#8,#15,#6,#13,#4,#11,#2,#9
|
||||
*--------------------------------------
|
||||
MD5.K .HS 78A46AD7.56B7C7E8.DB702024.EECEBDC1
|
||||
.HS AF0F7CF5.2AC68747.134630A8.019546FD
|
||||
.HS D8988069.AFF7448B.B15BFFFF.BED75C89
|
||||
.HS 2211906B.937198FD.8E4379A6.2108B449
|
||||
.HS 62251EF6.40B340C0.515A5E26.AAC7B6E9
|
||||
.HS 5D102FD6.53144402.81E6A1D8.C8FBD3E7
|
||||
.HS E6CDE121.D60737C3.870DD5F4.ED145A45
|
||||
.HS 05E9E3A9.F8A3EFFC.D9026F67.8A4C2A8D
|
||||
.HS 4239FAFF.81F67187.22619D6D.0C38E5FD
|
||||
.HS 44EABEA4.A9CFDE4B.604BBBF6.70BCBFBE
|
||||
.HS C67E9B28.FA27A1EA.8530EFD4.051D8804
|
||||
.HS 39D0D4D9.E599DBE6.F87CA21F.6556ACC4
|
||||
.HS 442229F4.97FF2A43.A72394AB.39A093FC
|
||||
.HS C3595B65.92CC0C8F.7DF4EFFF.D15D8485
|
||||
.HS 4F7EA86F.E0E62CFE.144301A3.A111084E
|
||||
.HS 827E53F7.35F23ABD.BBD2D72A.91D386EB
|
||||
*--------------------------------------
|
||||
MD5.DIGITS .AS "0123456789ABCDEF"
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE LIB/LIBCRYPT.S
|
||||
ASM
|
783
LIB/LIBSTR.S.txt
Normal file
783
LIB/LIBSTR.S.txt
Normal file
|
@ -0,0 +1,783 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF LIB/LIBSTR.O
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
*--------------------------------------
|
||||
ZPTmpPtr1 .EQ ZPLIB+2
|
||||
ZPTmpPtr2 .EQ ZPLIB+4
|
||||
ZPTmpPtr3 .EQ ZPLIB+6
|
||||
*--------------------------------------
|
||||
* Main entry point
|
||||
* input :
|
||||
* X = Function
|
||||
*--------------------------------------
|
||||
* Code signature and relocation table
|
||||
*--------------------------------------
|
||||
* CLD $D8
|
||||
* JMP (*,x) $7C
|
||||
* #JMPTABLE
|
||||
* /JMPTABLE
|
||||
*--------------------------------------
|
||||
CS.START cld
|
||||
jmp (.1,x)
|
||||
.1 .DA LIB.LOAD
|
||||
.DA LIB.UNLOAD
|
||||
.DA PRINTF
|
||||
.DA PRINTC
|
||||
.DA PRINTP
|
||||
.DA STRMATCHP
|
||||
.DA STRCPYP
|
||||
.DA STRCATP
|
||||
.DA UCASEP
|
||||
.DA LCASEP
|
||||
.DA PRINTDATE
|
||||
.DA PRINTTIME
|
||||
.DA SSCANF
|
||||
*--------------------------------------
|
||||
PRINTFJMP1 .DA PRINTFA
|
||||
.DA PRINTFB,PRINTFBB
|
||||
.DA PRINTFD,PRINTFDD,PRINTFL
|
||||
.DA PRINTFE,PRINTFEE
|
||||
.DA PRINTFH,PRINTFHH
|
||||
.DA PRINTFI,PRINTFII
|
||||
.DA PRINTFSC,PRINTFSP
|
||||
.DA PRINTFT,PRINTFTT
|
||||
PRINTFJMP2 .DA PRINTFCR,PRINTFBKSLH,PRINTFPERCENT
|
||||
*--------------------------------------
|
||||
.DA 0
|
||||
.DA CS.END-CS.START
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
LIB.LOAD
|
||||
LIB.UNLOAD clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* PRINTF :
|
||||
* Prints C-Style String
|
||||
* PULLW Pointer to Sting,Last Byte negative
|
||||
* %a pull 1 byte to print ATTRIB String
|
||||
* %b pull 1 byte to print BIN
|
||||
* %B pull 2 byte to print BIN
|
||||
* %d pull 1 byte to print unsigned DEC
|
||||
* %D pull 2 bytes to print unsigned DEC
|
||||
* %L pull 4 bytes to print unsigned DEC
|
||||
* %e pull 1 byte to print low Nibble HEX
|
||||
* %E pull 1 byte to print high Nibble HEX
|
||||
* %h pull 1 byte to print HEX
|
||||
* %H pull 2 bytes to print HEX
|
||||
* %i pull 1 byte to print signed DEC
|
||||
* %I pull 2 bytes to print signed DEC
|
||||
* %s pull 2 bytes ptr to C-Style String
|
||||
* %S pull 2 bytes ptr to P-Style String
|
||||
* \n print CR=13
|
||||
* \\ print \
|
||||
* \% print %
|
||||
* padding :
|
||||
* %d '9' '12'
|
||||
* %2d ' 9' '12'
|
||||
* %02d '09' '12'
|
||||
* %16s 'ABCDEFGHIjkl '
|
||||
* %011s 'ABCDEFGH000'
|
||||
*--------------------------------------
|
||||
PRINTF >PULLW ZPTmpPtr1
|
||||
ldy #0
|
||||
PRINTFCOUT lda (ZPTmpPtr1),y
|
||||
beq .1
|
||||
ora #$80
|
||||
cmp #"%"
|
||||
beq PRINTFESC1
|
||||
cmp #"\"
|
||||
beq PRINTFESC2
|
||||
jsr COUT
|
||||
iny
|
||||
bne PRINTFCOUT
|
||||
.1 rts
|
||||
PRINTFEXIT ply
|
||||
iny
|
||||
bne PRINTFCOUT
|
||||
rts
|
||||
*--------------------------------------
|
||||
PRINTFESC1 stz PADLEN
|
||||
lda #" "
|
||||
sta PADCHAR
|
||||
.1 ldx #PRINTFTBL1.END-PRINTFTBL1-1
|
||||
iny
|
||||
lda (ZPTmpPtr1),y
|
||||
beq .9
|
||||
ora #$80
|
||||
.2 cmp PRINTFTBL1,x do we have a %x command?
|
||||
beq .8 yes, jmp to it!
|
||||
dex
|
||||
bpl .2 no valid letter...
|
||||
cmp #"0" ...a 0...mmm... padding char!!
|
||||
beq .4
|
||||
bcc .9
|
||||
cmp #"9"
|
||||
bcs .9
|
||||
.3 and #$0F we have a digit
|
||||
pha save it...
|
||||
lda PADLEN starts PADLEN * 10
|
||||
asl times 2
|
||||
pha save times 2
|
||||
asl times 4
|
||||
asl times 8
|
||||
sta PADLEN
|
||||
pla get back times 2
|
||||
clc
|
||||
adc PADLEN times 8 + times 2 = times 10
|
||||
sta PADLEN
|
||||
pla get back current digit
|
||||
adc PADLEN
|
||||
sta PADLEN
|
||||
bra .5
|
||||
.4 lda PADLEN do we already had met digits to build PADLEN ?
|
||||
bne .3 yes, continue to build PADLEN
|
||||
lda #"0"
|
||||
sta PADCHAR no, this is the first 0, so make it PADCHAR
|
||||
.5 bra .1
|
||||
.8 phy
|
||||
txa
|
||||
asl
|
||||
tax
|
||||
jmp (PRINTFJMP1,x)
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
PRINTFESC2 ldx #PRINTFTBL2.END-PRINTFTBL2-1
|
||||
iny
|
||||
lda (ZPTmpPtr1),y
|
||||
beq .9
|
||||
ora #$80
|
||||
.2 cmp PRINTFTBL2,x
|
||||
beq .3
|
||||
dex
|
||||
bpl .2
|
||||
rts
|
||||
.3 phy
|
||||
txa
|
||||
asl
|
||||
tax
|
||||
jmp (PRINTFJMP2,x)
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
PRINTFA >PULLA
|
||||
ldx #0
|
||||
.1 asl
|
||||
pha
|
||||
lda #"-"
|
||||
bcc .2
|
||||
lda PRINTF.ATTRIB,x
|
||||
.2 jsr COUT
|
||||
pla
|
||||
inx
|
||||
cpx #8
|
||||
bne .1
|
||||
jmp PRINTFEXIT
|
||||
PRINTFB ldx #8
|
||||
>PULLA
|
||||
.1 asl
|
||||
pha
|
||||
lda #$B0
|
||||
bcc .2
|
||||
inc
|
||||
.2 jsr COUT
|
||||
pla
|
||||
dex
|
||||
bne .1
|
||||
jmp PRINTFEXIT
|
||||
PRINTFBB >PULLA
|
||||
>PULLA
|
||||
jmp PRINTFEXIT
|
||||
PRINTFD >PULLA
|
||||
sta HEXBUF
|
||||
stz HEXBUF+1
|
||||
stz HEXBUF+2
|
||||
stz HEXBUF+3
|
||||
jsr HEX2DEC
|
||||
jmp PRINTFEXIT
|
||||
PRINTFDD >PULLA
|
||||
sta HEXBUF
|
||||
>PULLA
|
||||
sta HEXBUF+1
|
||||
stz HEXBUF+2
|
||||
stz HEXBUF+3
|
||||
jsr HEX2DEC
|
||||
jmp PRINTFEXIT
|
||||
PRINTFL >PULLA
|
||||
sta HEXBUF
|
||||
>PULLA
|
||||
sta HEXBUF+1
|
||||
>PULLA
|
||||
sta HEXBUF+2
|
||||
>PULLA
|
||||
sta HEXBUF+3
|
||||
jsr HEX2DEC
|
||||
jmp PRINTFEXIT
|
||||
PRINTFE >PULLA
|
||||
jsr PRHEX
|
||||
jmp PRINTFEXIT
|
||||
PRINTFEE >PULLA
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
jsr PRHEX
|
||||
jmp PRINTFEXIT
|
||||
PRINTFH >PULLA
|
||||
jsr PRBYTE
|
||||
jmp PRINTFEXIT
|
||||
PRINTFHH >PULLA
|
||||
pha
|
||||
>PULLA
|
||||
jsr PRBYTE
|
||||
pla
|
||||
jsr PRBYTE
|
||||
jmp PRINTFEXIT
|
||||
PRINTFI >PULLA
|
||||
jmp PRINTFEXIT
|
||||
PRINTFII >PULLA
|
||||
>PULLA
|
||||
jmp PRINTFEXIT
|
||||
PRINTFSC >PULLYA
|
||||
jsr PRINTYA
|
||||
jmp PRINTFEXIT
|
||||
PRINTFSP >PULLYA
|
||||
jsr PRINTYAP
|
||||
jmp PRINTFEXIT
|
||||
PRINTFT jsr PRINTTIME
|
||||
jmp PRINTFEXIT
|
||||
PRINTFTT jsr PRINTDATE
|
||||
jmp PRINTFEXIT
|
||||
PRINTFCR jsr CROUT
|
||||
jmp PRINTFEXIT
|
||||
PRINTFBKSLH lda #"\"
|
||||
jsr COUT
|
||||
jmp PRINTFEXIT
|
||||
PRINTFPERCENT lda #"%"
|
||||
jsr COUT
|
||||
jmp PRINTFEXIT
|
||||
*--------------------------------------
|
||||
PRINTC >PULLW ZPTmpPtr2
|
||||
ldy #0
|
||||
.1 lda (ZPTmpPtr2),y
|
||||
beq .8
|
||||
ora #$80
|
||||
jsr COUT
|
||||
iny
|
||||
bne .1
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
PRINTP >PULLW ZPTmpPtr2
|
||||
ldy #0
|
||||
lda (ZPTmpPtr2),y
|
||||
tax
|
||||
beq .8
|
||||
.1 iny
|
||||
lda (ZPTmpPtr2),y
|
||||
ora #$80
|
||||
jsr COUT
|
||||
dex
|
||||
bne .1
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
* STRMATCHP : (P-Style Strings)
|
||||
* pull PTR to Dest String
|
||||
* pull PTR to Src string
|
||||
* works with wildcards :
|
||||
* Dest Str Src str
|
||||
* message = m?ss*
|
||||
* = me*ge
|
||||
* = *ge
|
||||
* = *
|
||||
* message = me?sage != me?age
|
||||
*--------------------------------------
|
||||
STRMATCHP >PULLW ZPTmpPtr1
|
||||
>PULLW ZPTmpPtr2
|
||||
rts
|
||||
*--------------------------------------
|
||||
* STRCPYP : (P-Style Strings)
|
||||
* pull PTR to Dest String
|
||||
* pull PTR to Src string
|
||||
*--------------------------------------
|
||||
STRCPYP >PULLW ZPTmpPtr1
|
||||
>PULLW ZPTmpPtr2
|
||||
lda (ZPTmpPtr2)
|
||||
sta (ZPTmpPtr1)
|
||||
tay
|
||||
beq .2
|
||||
.1 lda (ZPTmpPtr2),y
|
||||
sta (ZPTmpPtr1),y
|
||||
dey
|
||||
bne .1
|
||||
.2 rts
|
||||
*--------------------------------------
|
||||
* STRCATP : (P-Style Strings)
|
||||
* pull PTR to Dest String
|
||||
* pull PTR to Src string
|
||||
*--------------------------------------
|
||||
STRCATP >PULLW ZPTmpPtr1
|
||||
>PULLW ZPTmpPtr2
|
||||
lda (ZPTmpPtr1)
|
||||
tay
|
||||
iny
|
||||
lda (ZPTmpPtr2)
|
||||
tax
|
||||
beq .3
|
||||
.1 inc ZPTmpPtr2
|
||||
bne .2
|
||||
inc ZPTmpPtr2+1
|
||||
.2 lda (ZPTmpPtr2)
|
||||
sta (ZPTmpPtr1),y
|
||||
iny
|
||||
dex
|
||||
bne .1
|
||||
dey
|
||||
tya
|
||||
sta (ZPTmpPtr1)
|
||||
.3 rts
|
||||
*--------------------------------------
|
||||
UCASEP phx
|
||||
>PULLW ZPTmpPtr2
|
||||
ldy #0
|
||||
lda (ZPTmpPtr2),y
|
||||
tax
|
||||
beq .9
|
||||
.1 iny
|
||||
lda (ZPTmpPtr2),y
|
||||
cmp #$61 "a"
|
||||
bmi .2
|
||||
cmp #$7B "z"+1
|
||||
bpl .2
|
||||
sec
|
||||
sbc #$20
|
||||
sta (ZPTmpPtr2),y
|
||||
.2 dex
|
||||
bne .1
|
||||
.9 plx
|
||||
rts
|
||||
*--------------------------------------
|
||||
LCASEP phx
|
||||
>PULLW ZPTmpPtr2
|
||||
ldy #0
|
||||
lda (ZPTmpPtr2),y
|
||||
tax
|
||||
beq .9
|
||||
.1 iny
|
||||
lda (ZPTmpPtr2),y
|
||||
cmp #$41 "A"
|
||||
bmi .2
|
||||
cmp #$5B "Z"+1
|
||||
bpl .2
|
||||
clc
|
||||
adc #$20
|
||||
sta (ZPTmpPtr2),y
|
||||
.2 dex
|
||||
bne .1
|
||||
.9 plx
|
||||
rts
|
||||
*--------------------------------------
|
||||
* PULLW = DATE in ProDOS Format
|
||||
* A = year, Y = month/day
|
||||
*--------------------------------------
|
||||
PRINTDATE stz HEXBUF+1
|
||||
stz HEXBUF+2
|
||||
stz HEXBUF+3
|
||||
ldx #"0"
|
||||
stx PADCHAR
|
||||
ldx #2
|
||||
stx PADLEN
|
||||
>PULLYA
|
||||
pha save year to get high bit of month later
|
||||
lsr
|
||||
pha
|
||||
cmp #70 are we in the 70s ?
|
||||
bcc .1
|
||||
lda #$19
|
||||
bra .2
|
||||
.1 lda #$20
|
||||
.2 jsr PRBYTE
|
||||
pla
|
||||
sta HEXBUF
|
||||
jsr HEX2DEC
|
||||
lda #"/"
|
||||
jsr COUT
|
||||
ldx #"0"
|
||||
stx PADCHAR
|
||||
ldx #2
|
||||
stx PADLEN
|
||||
pla get back year
|
||||
lsr get high bit of month in carry
|
||||
tya get month/day
|
||||
pha save it for day
|
||||
ror pick high bit from carry
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
sta HEXBUF
|
||||
jsr HEX2DEC
|
||||
lda #"/"
|
||||
jsr COUT
|
||||
ldx #"0"
|
||||
stx PADCHAR
|
||||
ldx #2
|
||||
stx PADLEN
|
||||
pla get back month/day
|
||||
and #$1F
|
||||
sta HEXBUF
|
||||
jmp HEX2DEC
|
||||
*--------------------------------------
|
||||
* PULLW = TIME in ProDOS Format
|
||||
* A = hours, Y = minutes
|
||||
*--------------------------------------
|
||||
PRINTTIME stz HEXBUF+1
|
||||
stz HEXBUF+2
|
||||
stz HEXBUF+3
|
||||
ldx #"0"
|
||||
stx PADCHAR
|
||||
ldx #2
|
||||
stx PADLEN
|
||||
>PULLYA
|
||||
and #$1F
|
||||
sta HEXBUF
|
||||
jsr HEX2DEC
|
||||
lda #":"
|
||||
jsr COUT
|
||||
ldx #"0"
|
||||
stx PADCHAR
|
||||
ldx #2
|
||||
stx PADLEN
|
||||
tya get minutes
|
||||
and #$3F
|
||||
sta HEXBUF
|
||||
jmp HEX2DEC
|
||||
*--------------------------------------
|
||||
*
|
||||
*--------------------------------------
|
||||
SSCANF >PULLW ZPTmpPtr1 get PString to scan (ex: "192.168.1.5")
|
||||
>PULLW ZPTmpPtr2 get PString pattern (ex: "%d.%d.%d.%d")
|
||||
>PULLW ZPTmpPtr3 get target buffer
|
||||
|
||||
ldy #0 Y = PTR in pattern
|
||||
|
||||
lda (ZPTmpPtr1)
|
||||
beq .9
|
||||
tax X = COUNT to scan
|
||||
inc ZPTmpPtr1
|
||||
bne .1
|
||||
inc ZPTmpPtr1+1
|
||||
|
||||
.1 txa End Of String?
|
||||
beq .8
|
||||
tya
|
||||
cmp (ZPTmpPtr2) End of pattern?
|
||||
beq .8
|
||||
iny
|
||||
lda (ZPTmpPtr2),y
|
||||
cmp #'%' Escape?
|
||||
beq .2
|
||||
cmp (ZPTmpPtr1) Same char?
|
||||
bne .9
|
||||
jsr SSCANF.IncPtr1
|
||||
bne .1
|
||||
clc
|
||||
rts
|
||||
|
||||
.2 tya
|
||||
cmp (ZPTmpPtr2) unexpected End of pattern after "%" ?
|
||||
beq .9
|
||||
|
||||
iny
|
||||
lda (ZPTmpPtr2),y
|
||||
cmp #'d' BYTE ?
|
||||
bne .3
|
||||
|
||||
stz ASCBUF
|
||||
.20 lda (ZPTmpPtr1)
|
||||
jsr SSCANF.IsDigit
|
||||
bcs .21
|
||||
phx
|
||||
inc ASCBUF
|
||||
ldx ASCBUF
|
||||
sta ASCBUF,x
|
||||
plx
|
||||
jsr SSCANF.IncPtr1
|
||||
bne .20 end of string ?
|
||||
|
||||
.21 jsr DEC2HEX
|
||||
lda HEXBUF
|
||||
sta (ZPTmpPtr3)
|
||||
inc ZPTmpPtr3
|
||||
bne .1
|
||||
inc ZPTmpPtr3+1
|
||||
bra .1
|
||||
|
||||
.3 cmp #'D' WORD ?
|
||||
bne .4
|
||||
|
||||
bra .1
|
||||
|
||||
.4 cmp #'s' STRING ?
|
||||
bne .9
|
||||
|
||||
bra .1
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
.9 sec
|
||||
rts
|
||||
|
||||
*--------------------------------------
|
||||
SSCANF.IncPtr1 dex
|
||||
beq .1
|
||||
inc ZPTmpPtr1
|
||||
bne .1
|
||||
inc ZPTmpPtr1+1 never Zero
|
||||
.1 rts
|
||||
*--------------------------------------
|
||||
SSCANF.IsDigit cmp #'0'
|
||||
bcc .1
|
||||
cmp #'9'+1
|
||||
bcs .1
|
||||
rts
|
||||
.1 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
********** PRIVATE FUNCTIONS **********
|
||||
*--------------------------------------
|
||||
* PRINTYAC :
|
||||
* Prints C-Style String
|
||||
* Y,A=Pointer to Sting, Last Byte 0
|
||||
*--------------------------------------
|
||||
PRINTYA >STYA ZPTmpPtr2
|
||||
ldy #0
|
||||
.1 lda (ZPTmpPtr2),y
|
||||
beq .2
|
||||
ora #$80
|
||||
jsr COUT
|
||||
iny
|
||||
bne .1
|
||||
.2 rts
|
||||
*--------------------------------------
|
||||
* PRINTYAP :
|
||||
* Prints Pascal-Style String
|
||||
* Y,A=Pointer to Sting, LEN=1st Byte
|
||||
*--------------------------------------
|
||||
PRINTYAP phx
|
||||
>STYA ZPTmpPtr2
|
||||
ldy #0
|
||||
lda (ZPTmpPtr2),y
|
||||
tax
|
||||
beq .8
|
||||
.1 iny
|
||||
lda (ZPTmpPtr2),y
|
||||
ora #$80
|
||||
jsr COUT
|
||||
lda PADLEN
|
||||
beq .2
|
||||
cpy PADLEN
|
||||
beq .8
|
||||
.2 dex
|
||||
bne .1
|
||||
lda PADLEN
|
||||
beq .8
|
||||
.3 lda PADCHAR
|
||||
jsr COUT
|
||||
iny
|
||||
cpy PADLEN
|
||||
bne .3
|
||||
.8 plx
|
||||
rts
|
||||
*--------------------------------------
|
||||
* Convert HEXBUF to ASCBUF decimal padded with 0
|
||||
*--------------------------------------
|
||||
HEX2DEC phx
|
||||
phy
|
||||
ldx #4
|
||||
.1 stz BCDBUF,x Clear all 5 bytes
|
||||
dex
|
||||
bpl .1
|
||||
ldx #32 let's roll 32 bits
|
||||
sed
|
||||
.2 asl HEXBUF
|
||||
rol HEXBUF+1
|
||||
rol HEXBUF+2
|
||||
rol HEXBUF+3
|
||||
php cpy will disturb carry while BCD adc
|
||||
ldy #0
|
||||
.3 plp
|
||||
lda BCDBUF,y
|
||||
adc BCDBUF,y
|
||||
sta BCDBUF,y
|
||||
php
|
||||
iny
|
||||
cpy #5 Last byte of BCDBUF?
|
||||
bne .3
|
||||
plp
|
||||
dex
|
||||
bne .2
|
||||
cld
|
||||
ldy #0
|
||||
ldx #9
|
||||
.4 lda BCDBUF,y
|
||||
pha
|
||||
and #$0F
|
||||
ora #$B0
|
||||
sta ASCBUF,x
|
||||
dex
|
||||
pla
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
ora #$B0
|
||||
sta ASCBUF,x
|
||||
iny
|
||||
dex
|
||||
bpl .4
|
||||
lda PADLEN any Len format ?
|
||||
beq .5 no
|
||||
lda #10
|
||||
sec yes, print only digits starting at pos 10-padlen
|
||||
sbc PADLEN
|
||||
.5 tax x=0 if no padlen, or x=10-padlen
|
||||
.6 lda ASCBUF,x
|
||||
cmp #$B0 a zero?
|
||||
beq .7
|
||||
inc PADLEN found a non zero, print all digits, even if 0, next time
|
||||
ldy #"0"
|
||||
sty PADCHAR
|
||||
bra .8
|
||||
.7 cpx #9 last digit ?
|
||||
beq .8 print always
|
||||
ldy PADLEN no pad to fill, do not print 0
|
||||
beq .9
|
||||
lda PADCHAR fill with PADCHAR
|
||||
.8 jsr COUT
|
||||
.9 inx
|
||||
cpx #10
|
||||
bne .6
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
*--------------------------------------
|
||||
* Convert ASCBUF decimal to HEXBUF
|
||||
*--------------------------------------
|
||||
DEC2HEX phx
|
||||
phy
|
||||
stz HEXBUF
|
||||
stz HEXBUF+1
|
||||
stz HEXBUF+2
|
||||
stz HEXBUF+3
|
||||
|
||||
ldx #0
|
||||
.1 asl HEXBUF HEXBUF * 2 -> HEXBUF
|
||||
rol HEXBUF+1
|
||||
rol HEXBUF+2
|
||||
rol HEXBUF+3
|
||||
|
||||
lda HEXBUF HEXBUF * 2 -> HEXBUFTMP
|
||||
asl
|
||||
sta HEXBUFTMP
|
||||
lda HEXBUF+1
|
||||
rol
|
||||
sta HEXBUFTMP+1
|
||||
lda HEXBUF+2
|
||||
rol
|
||||
sta HEXBUFTMP+2
|
||||
lda HEXBUF+3
|
||||
rol
|
||||
sta HEXBUFTMP+3
|
||||
|
||||
asl HEXBUFTMP HEXBUFTMP * 2 -> HEXBUFTMP
|
||||
rol HEXBUFTMP+1
|
||||
rol HEXBUFTMP+2
|
||||
rol HEXBUFTMP+3
|
||||
|
||||
lda HEXBUF HEXBUF + HEXBUFTMP -> HEXBUF
|
||||
clc
|
||||
adc HEXBUFTMP
|
||||
sta HEXBUF
|
||||
lda HEXBUF+1
|
||||
adc HEXBUFTMP+1
|
||||
sta HEXBUF+1
|
||||
lda HEXBUF+2
|
||||
adc HEXBUFTMP+2
|
||||
sta HEXBUF+2
|
||||
lda HEXBUF+3
|
||||
adc HEXBUFTMP+3
|
||||
sta HEXBUF+3
|
||||
|
||||
inx
|
||||
lda ASCBUF,x
|
||||
and #$0F
|
||||
clc
|
||||
adc HEXBUF
|
||||
sta HEXBUF
|
||||
bcc .2
|
||||
inc HEXBUF+1
|
||||
bne .2
|
||||
inc HEXBUF+2
|
||||
bne .2
|
||||
inc HEXBUF+3
|
||||
.2 cpx ASCBUF
|
||||
bne .1
|
||||
ply
|
||||
plx
|
||||
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
|
||||
PRINTFTBL1 .AS -"abBdDLeEhHiIsStT"
|
||||
PRINTFTBL1.END
|
||||
PRINTFTBL2 .AS -"n\%"
|
||||
PRINTFTBL2.END
|
||||
PRINTF.ATTRIB .AS -"dnb+++wr"
|
||||
*--------------------------------------
|
||||
PADCHAR .BS 1
|
||||
PADLEN .BS 1
|
||||
HEXBUF .BS 4 32 bits max
|
||||
HEXBUFTMP .BS 4
|
||||
BCDBUF .BS 5 5, enough to handle 32bits
|
||||
ASCBUF .BS 11 LEN + 10 digits ($FFFFFFFF=4.294.967.295)
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE LIB/LIBSTR.S
|
||||
ASM
|
266
LIB/LIBTCPIP.S.ARP.txt
Normal file
266
LIB/LIBTCPIP.S.ARP.txt
Normal file
|
@ -0,0 +1,266 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
*--------------------------------------
|
||||
* ARP.CLEAR
|
||||
*--------------------------------------
|
||||
ARP.CLEAR ldx #K.ARPCACHE.SIZE*S.ARPCACHE
|
||||
.1 stz ARP.CACHE-1,x
|
||||
dex
|
||||
bne .1
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* ARP.QUERY
|
||||
* In:
|
||||
* PULLW PTR to IP
|
||||
* PULLW PTR to MAC (to fill)
|
||||
* Out:
|
||||
* CC: hit: MAC filled
|
||||
* CS: missed
|
||||
*--------------------------------------
|
||||
ARP.QUERY >PULLW ZPARPIP IP
|
||||
>PULLW ZPARPMAC MAC
|
||||
jmp ARP.QUERY.I
|
||||
*--------------------------------------
|
||||
* ARP.ADD
|
||||
* In:
|
||||
* PULLW PTR to IP
|
||||
* PULLW PTR to MAC
|
||||
*--------------------------------------
|
||||
ARP.ADD >PULLW ZPARPIP IP
|
||||
>PULLW ZPARPMAC MAC
|
||||
lda #S.ARPCACHE.STATUS.RESOLVED
|
||||
jmp ARP.ADD.I
|
||||
*--------------------------------------
|
||||
* ARP.GETCACHE
|
||||
* Out:
|
||||
* Y,A = PTR to ARP.CACHE
|
||||
*--------------------------------------
|
||||
ARP.GETCACHE >LDYA L.ARP.CACHE
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* PRIVATE
|
||||
*--------------------------------------
|
||||
ARP.RESOLVE ldy #S.IP.DST
|
||||
lda (ZPFrameBase1),y
|
||||
iny
|
||||
.1 and (ZPFrameBase1),y
|
||||
iny
|
||||
cpy #S.IP.DST+4
|
||||
bne .1
|
||||
cmp #$FF
|
||||
bne .3 not a broadcast....
|
||||
|
||||
ldy #S.ETH.DSTMAC
|
||||
.2 sta (ZPFrameBase1),y
|
||||
iny
|
||||
cpy #S.ETH.DSTMAC+6
|
||||
bne .2
|
||||
clc
|
||||
rts
|
||||
|
||||
.3 ldy #S.IP.DST+3
|
||||
ldx #3
|
||||
.4 lda (ZPFrameBase1),y
|
||||
eor IPCFG+S.IPCFG.IP,x
|
||||
and IPCFG+S.IPCFG.MASK,x
|
||||
bne .5
|
||||
dey
|
||||
dex
|
||||
bpl .4
|
||||
|
||||
lda ZPFrameBase1 Same network, query ARP for dest IP
|
||||
clc
|
||||
adc #S.IP.DST
|
||||
sta ZPARPIP
|
||||
lda ZPFrameBase1+1
|
||||
adc /S.IP.DST
|
||||
sta ZPARPIP+1
|
||||
bra .6
|
||||
|
||||
.5 lda L.IPCFG Not Same network, query ARP for GW
|
||||
clc
|
||||
adc #S.IPCFG.GW
|
||||
sta ZPARPIP
|
||||
lda L.IPCFG+1
|
||||
adc /S.IPCFG.GW
|
||||
sta ZPARPIP+1
|
||||
|
||||
.6 lda ZPFrameBase1
|
||||
clc
|
||||
adc #S.ETH.DSTMAC
|
||||
sta ZPARPMAC
|
||||
lda ZPFrameBase1+1
|
||||
adc /S.ETH.DSTMAC
|
||||
sta ZPARPMAC+1
|
||||
*--------------------------------------
|
||||
ARP.QUERY.I ldx #0
|
||||
|
||||
.1 phx
|
||||
lda ARP.CACHE,x
|
||||
beq .5 empty ARP Cache entry, try next...
|
||||
|
||||
ldy #0
|
||||
.2 lda ARP.CACHE+S.ARPCACHE.IP,x
|
||||
cmp (ZPARPIP),y
|
||||
bne .5 wrong IP, try next...
|
||||
inx
|
||||
iny
|
||||
cpy #4
|
||||
bne .2
|
||||
|
||||
plx
|
||||
lda ARP.CACHE,x get back status
|
||||
bpl .4 Pending...
|
||||
|
||||
ldy #0 already resolved, get MAC
|
||||
.3 lda ARP.CACHE+S.ARPCACHE.MAC,x
|
||||
sta (ZPARPMAC),y
|
||||
inx
|
||||
iny
|
||||
cpy #6
|
||||
bne .3
|
||||
clc
|
||||
rts
|
||||
|
||||
.4 inc ARP.CACHE+S.ARPCACHE.RETRYCNT,x Pending, increase Retry Count
|
||||
bne .41
|
||||
stz ARP.CACHE,x reached max retry,mark as free
|
||||
.41 sec
|
||||
rts
|
||||
|
||||
.5 pla
|
||||
clc
|
||||
adc #S.ARPCACHE
|
||||
tax
|
||||
cmp #K.ARPCACHE.SIZE*S.ARPCACHE
|
||||
bne .1
|
||||
|
||||
jsr NEW.ARP.FRAME nothing in ARP cache, send ARP request
|
||||
bcs .9
|
||||
phx
|
||||
ldy #S.ARP.OPERATION+1
|
||||
lda #S.ARP.OPERATION.REQ
|
||||
sta (ZPFrameBase1),y
|
||||
|
||||
ldx #5
|
||||
ldy #S.ARP.SHA+5
|
||||
.71 lda IPCFG+S.IPCFG.MAC,x
|
||||
sta (ZPFrameBase1),y
|
||||
dey
|
||||
dex
|
||||
bpl .71
|
||||
|
||||
ldx #3
|
||||
ldy #S.ARP.SPA+3
|
||||
.72 lda IPCFG+S.IPCFG.IP,x
|
||||
sta (ZPFrameBase1),y
|
||||
dey
|
||||
dex
|
||||
bpl .72
|
||||
|
||||
ldy #3
|
||||
.73 lda (ZPARPIP),y
|
||||
pha
|
||||
dey
|
||||
bpl .73
|
||||
|
||||
ldy #S.ARP.TPA
|
||||
.74 pla
|
||||
sta (ZPFrameBase1),y
|
||||
iny
|
||||
cpy #S.ARP.TPA+4
|
||||
bne .74
|
||||
|
||||
lda #255
|
||||
ldy #S.ETH.DSTMAC
|
||||
.75 sta (ZPFrameBase1),y
|
||||
iny
|
||||
cpy #S.ETH.DSTMAC+6
|
||||
bne .75
|
||||
|
||||
jsr SEND.ARP.FRAME.I
|
||||
bcs .76
|
||||
|
||||
jsr ARP.ADD.PENDING ZPARPIP still pointing IP
|
||||
|
||||
.76 pla
|
||||
>SYSCALL SYS.FreeMemA
|
||||
|
||||
sec
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
ARP.ADD.PENDING lda #S.ARPCACHE.STATUS.PENDING
|
||||
|
||||
ARP.ADD.I sta Status
|
||||
|
||||
ldx #0
|
||||
.1 lda ARP.CACHE,x get status
|
||||
beq .7 empty ARP cache entry
|
||||
|
||||
phx
|
||||
|
||||
ldy #0
|
||||
.2 lda (ZPARPIP),y
|
||||
cmp ARP.CACHE+S.ARPCACHE.IP,x
|
||||
bne .4
|
||||
inx
|
||||
iny
|
||||
cpy #4
|
||||
bne .2
|
||||
plx
|
||||
bra .7 same IP,update MAC
|
||||
|
||||
.4 pla get back index in ARP.CACHE
|
||||
clc
|
||||
adc #S.ARPCACHE
|
||||
cmp #K.ARPCACHE.SIZE*S.ARPCACHE
|
||||
beq .5 Cache is full ?
|
||||
tax
|
||||
bra .1
|
||||
|
||||
.5 ldx #K.ARPCACHE.SIZE*S.ARPCACHE-S.ARPCACHE
|
||||
|
||||
.6 lda ARP.CACHE+S.ARPCACHE-1,x
|
||||
sta ARP.CACHE-1,x
|
||||
dex
|
||||
bne .6
|
||||
|
||||
ldx #K.ARPCACHE.SIZE*S.ARPCACHE-S.ARPCACHE
|
||||
|
||||
.7 lda Status
|
||||
sta ARP.CACHE,x mark ARP entry Status
|
||||
inx
|
||||
stz ARP.CACHE,x Init retry count
|
||||
inx
|
||||
ldy #0
|
||||
.8 lda (ZPARPIP),y store IP in cache
|
||||
sta ARP.CACHE,x
|
||||
inx
|
||||
iny
|
||||
cpy #4
|
||||
bne .8
|
||||
|
||||
lda Status
|
||||
bpl .82 no MAC if "pending"
|
||||
|
||||
ldy #0
|
||||
.81 lda (ZPARPMAC),y store MAC in cache
|
||||
sta ARP.CACHE,x
|
||||
inx
|
||||
iny
|
||||
cpy #6
|
||||
bne .81
|
||||
.82 clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE LIB/LIBTCPIP.S.ARP
|
||||
LOAD LIB/LIBTCPIP.S
|
||||
ASM
|
314
LIB/LIBTCPIP.S.DNS.txt
Normal file
314
LIB/LIBTCPIP.S.DNS.txt
Normal file
|
@ -0,0 +1,314 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
*--------------------------------------
|
||||
DNS.CLEAR ldx #K.DNSCACHE.SIZE*S.DNSCACHE
|
||||
.1 stz DNS.CACHE-1,x
|
||||
dex
|
||||
bne .1
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* DNS.QUERY
|
||||
* In:
|
||||
* PULLA = hostname PSTR
|
||||
* PULLW = PTR to IP to fill with cached data
|
||||
* Out:
|
||||
* CC: hit: IP filled with address
|
||||
* CS: missed
|
||||
*--------------------------------------
|
||||
DNS.QUERY >PULLB hHOST Get host string hMem
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPDNSHostname
|
||||
>PULLW ZPDNSIP Get IP address to fill
|
||||
|
||||
ldx #0
|
||||
|
||||
.1 lda DNS.CACHE,x
|
||||
beq .6 empty DNS cache entry?
|
||||
|
||||
lda DNS.CACHE+S.DNSCACHE.hNAME,x
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPQuickPtr3
|
||||
lda (ZPDNSHostname)
|
||||
cmp (ZPQuickPtr3) Same Length?
|
||||
bne .6
|
||||
tay
|
||||
.2 lda (ZPDNSHostname),y
|
||||
jsr ToLowerCaseA
|
||||
cmp (ZPQuickPtr3),y
|
||||
bne .6
|
||||
dey
|
||||
bne .2
|
||||
|
||||
lda DNS.CACHE,x get back status...
|
||||
bpl .4 Pending...
|
||||
|
||||
ldy #0
|
||||
.3 lda DNS.CACHE+S.DNSCACHE.IP,x
|
||||
sta (ZPDNSIP),y
|
||||
inx
|
||||
iny
|
||||
cpy #4
|
||||
bne .3
|
||||
clc
|
||||
rts
|
||||
|
||||
.4 sec
|
||||
rts
|
||||
|
||||
.6 txa
|
||||
clc
|
||||
adc #S.DNSCACHE
|
||||
tax
|
||||
cmp #K.DNSCACHE.SIZE*S.DNSCACHE
|
||||
bne .1
|
||||
|
||||
DNS.REQUEST jsr NEW.UDP.FRAME
|
||||
bcc .1
|
||||
|
||||
bra *
|
||||
|
||||
rts
|
||||
|
||||
.1 phx
|
||||
|
||||
ldy #S.UDP.SRCPORT
|
||||
lda /UDP.PORT.DNS
|
||||
sta (ZPFrameBase1),y
|
||||
iny
|
||||
lda #UDP.PORT.DNS
|
||||
sta (ZPFrameBase1),y
|
||||
|
||||
ldy #S.UDP.DSTPORT
|
||||
lda /UDP.PORT.DNS
|
||||
sta (ZPFrameBase1),y
|
||||
iny
|
||||
lda #UDP.PORT.DNS
|
||||
sta (ZPFrameBase1),y
|
||||
|
||||
ldy #S.DNS.F
|
||||
lda /S.DNS.F.RD
|
||||
sta (ZPFrameBase1),y
|
||||
iny
|
||||
lda #S.DNS.F.RD
|
||||
sta (ZPFrameBase1),y
|
||||
|
||||
ldy #S.DNS.QDCOUNT
|
||||
lda /1
|
||||
sta (ZPFrameBase1),y
|
||||
iny
|
||||
lda #1
|
||||
sta (ZPFrameBase1),y
|
||||
|
||||
lda #S.DNS
|
||||
clc
|
||||
adc ZPFrameBase1
|
||||
sta ZPFramePtr1
|
||||
lda /S.DNS
|
||||
adc ZPFrameBase1+1
|
||||
sta ZPFramePtr1+1
|
||||
|
||||
lda (ZPDNSHostname) Get hostname len
|
||||
tay
|
||||
ldx #0
|
||||
.2 lda (ZPDNSHostname),y
|
||||
cmp #'.'
|
||||
bne .3
|
||||
txa
|
||||
ldx #$FF
|
||||
.3 sta (ZPFramePtr1),y
|
||||
inx
|
||||
dey
|
||||
bne .2
|
||||
txa
|
||||
sta (ZPFramePtr1)
|
||||
|
||||
lda (ZPDNSHostname)
|
||||
tay
|
||||
iny
|
||||
lda #$0 Ending #0
|
||||
sta (ZPFramePtr1),y
|
||||
|
||||
iny
|
||||
lda /S.DNS.QTYPE.A
|
||||
sta (ZPFramePtr1),y
|
||||
iny
|
||||
lda #S.DNS.QTYPE.A
|
||||
sta (ZPFramePtr1),y
|
||||
|
||||
iny
|
||||
lda /S.DNS.QCLASS.IN
|
||||
sta (ZPFramePtr1),y
|
||||
iny
|
||||
lda #S.DNS.QCLASS.IN
|
||||
sta (ZPFramePtr1),y
|
||||
|
||||
lda (ZPDNSHostname) Get hostname len again (QNAME)
|
||||
clc
|
||||
adc #6 (len+1) + Ending 0 + QTYPE + QCLASS
|
||||
adc #S.DNS
|
||||
sta ZPFrameLen1
|
||||
lda #0
|
||||
adc /S.DNS
|
||||
sta ZPFrameLen1+1
|
||||
|
||||
ldx #S.IPCFG.DNS
|
||||
ldy #S.IP.DST
|
||||
|
||||
lda IPCFG,x
|
||||
beq .5
|
||||
|
||||
.4 lda IPCFG,x
|
||||
sta (ZPFrameBase1),y
|
||||
iny
|
||||
inx
|
||||
cpx #S.IPCFG.DNS+4
|
||||
bne .4
|
||||
jsr SEND.UDP.FRAME.I
|
||||
bcs .8
|
||||
|
||||
.5 ldx #S.IPCFG.DNS+4
|
||||
ldy #S.IP.DST
|
||||
|
||||
lda IPCFG,x
|
||||
beq .7
|
||||
|
||||
.6 lda IPCFG,x
|
||||
sta (ZPFrameBase1),y
|
||||
iny
|
||||
inx
|
||||
cpx #S.IPCFG.DNS+8
|
||||
bne .6
|
||||
jsr SEND.UDP.FRAME.I
|
||||
bcs .8
|
||||
|
||||
.7 jsr DNS.ADD.PENDING.I
|
||||
|
||||
.8 pla
|
||||
>SYSCALL SYS.FreeMemA
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* DNS.ADD
|
||||
* In:
|
||||
* PULLA = hostname PSTR to Add
|
||||
* PULLW = PTR to IP
|
||||
* PULLW = TTL
|
||||
*--------------------------------------
|
||||
DNS.ADD >PULLB hHOST Get host string hMem
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPDNSHostname
|
||||
>PULLW ZPDNSIP Get host IP address
|
||||
>PULLW HOST.TTL
|
||||
lda #S.DNSCACHE.STATUS.RESOLVED
|
||||
bra DNS.ADD.I
|
||||
|
||||
DNS.ADD.PENDING.I
|
||||
lda #S.DNSCACHE.STATUS.PENDING
|
||||
|
||||
DNS.ADD.I sta Status
|
||||
ldx #0
|
||||
|
||||
.1 lda DNS.CACHE,x
|
||||
beq DNS.ADD.ENTRY free ?
|
||||
|
||||
lda DNS.CACHE+S.DNSCACHE.hNAME,x
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPQuickPtr3
|
||||
lda (ZPDNSHostname)
|
||||
cmp (ZPQuickPtr3) Same Length?
|
||||
bne .4
|
||||
|
||||
tay
|
||||
.2 lda (ZPDNSHostname),y
|
||||
jsr ToLowerCaseA
|
||||
cmp (ZPQuickPtr3),y
|
||||
bne .4
|
||||
dey
|
||||
bne .2
|
||||
|
||||
bra DNS.UPD.ENTRY
|
||||
|
||||
.4 txa
|
||||
clc
|
||||
adc #S.DNSCACHE
|
||||
cmp #K.DNSCACHE.SIZE*S.DNSCACHE
|
||||
beq .5
|
||||
tax
|
||||
bra .1
|
||||
|
||||
.5 lda DNS.CACHE+S.DNSCACHE.hNAME discard oldest entry hNAME
|
||||
>SYSCALL SYS.FreeMemA
|
||||
|
||||
ldx #K.DNSCACHE.SIZE*S.DNSCACHE-S.DNSCACHE
|
||||
.6 lda DNS.CACHE+S.DNSCACHE-1,x
|
||||
sta DNS.CACHE-1,x
|
||||
dex
|
||||
bne .6
|
||||
|
||||
ldx #K.DNSCACHE.SIZE*S.DNSCACHE-S.DNSCACHE
|
||||
|
||||
DNS.ADD.ENTRY phx
|
||||
lda (ZPDNSHostname)
|
||||
inc add 1 for len
|
||||
tay
|
||||
lda #0
|
||||
>PUSHYA push PSTR len
|
||||
>PUSHBI 0 no option
|
||||
>SYSCALL SYS.GetMem
|
||||
bcc .10
|
||||
plx
|
||||
rts
|
||||
|
||||
.10 >STYA ZPQuickPtr3
|
||||
txa
|
||||
plx
|
||||
sta DNS.CACHE+S.DNSCACHE.hNAME,x
|
||||
|
||||
lda (ZPDNSHostname)
|
||||
sta (ZPQuickPtr3)
|
||||
tay
|
||||
|
||||
.1 lda (ZPDNSHostname),y
|
||||
jsr ToLowerCaseA
|
||||
sta (ZPQuickPtr3),y
|
||||
dey
|
||||
bne .1
|
||||
|
||||
DNS.UPD.ENTRY lda Status
|
||||
sta DNS.CACHE,x
|
||||
bpl .9 pending...
|
||||
|
||||
lda HOST.TTL
|
||||
sta DNS.CACHE+S.DNSCACHE.TTL,x
|
||||
lda HOST.TTL+1
|
||||
sta DNS.CACHE+S.DNSCACHE.TTL+1,x
|
||||
|
||||
ldy #0
|
||||
.2 lda (ZPDNSIP),y
|
||||
sta DNS.CACHE+S.DNSCACHE.IP,x
|
||||
inx
|
||||
iny
|
||||
cpy #4
|
||||
bne .2
|
||||
|
||||
clc
|
||||
rts
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
DNS.GETCACHE >LDYA L.DNS.CACHE
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* PRIVATE
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE LIB/LIBTCPIP.S.DNS
|
||||
LOAD LIB/LIBTCPIP.S
|
||||
ASM
|
482
LIB/LIBTCPIP.S.txt
Normal file
482
LIB/LIBTCPIP.S.txt
Normal file
|
@ -0,0 +1,482 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF LIB/LIBTCPIP.O
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/KERNEL.I
|
||||
.INB INC/LIBTCPIP.I
|
||||
*--------------------------------------
|
||||
ZPFrameBase1 .EQ ZPLIB
|
||||
ZPFrameLen1 .EQ ZPLIB+2
|
||||
ZPFramePtr1 .EQ ZPLIB+4
|
||||
ZPARPIP .EQ ZPLIB+6
|
||||
ZPARPMAC .EQ ZPLIB+8
|
||||
ZPDNSHostname .EQ ZPLIB+10
|
||||
ZPDNSIP .EQ ZPLIB+12
|
||||
*--------------------------------------
|
||||
* Main entry point
|
||||
* input :
|
||||
* X = Function
|
||||
*--------------------------------------
|
||||
* Code signature and relocation table
|
||||
*--------------------------------------
|
||||
* CLD $D8
|
||||
* JMP (*,x) $7C
|
||||
* #JMPTABLE
|
||||
* /JMPTABLE
|
||||
*--------------------------------------
|
||||
CS.START cld
|
||||
jmp (.1,x)
|
||||
.1 .DA LIB.LOAD
|
||||
.DA LIB.UNLOAD
|
||||
|
||||
.DA SET.IPCFG
|
||||
.DA GET.IPCFG
|
||||
|
||||
.DA NEW.ICMP.FRAME
|
||||
.DA NEW.TCP.FRAME
|
||||
.DA NEW.UDP.FRAME
|
||||
.DA NEW.IP.FRAME
|
||||
.DA NEW.ARP.FRAME
|
||||
.DA NEW.ETH.FRAME
|
||||
|
||||
.DA SEND.ICMP.FRAME
|
||||
.DA SEND.TCP.FRAME
|
||||
.DA SEND.UDP.FRAME
|
||||
.DA SEND.IP.FRAME
|
||||
.DA SEND.ARP.FRAME
|
||||
.DA SEND.ETH.FRAME
|
||||
|
||||
.DA ARP.CLEAR
|
||||
.DA ARP.QUERY
|
||||
.DA ARP.ADD
|
||||
.DA ARP.GETCACHE
|
||||
|
||||
.DA DNS.CLEAR
|
||||
.DA DNS.QUERY
|
||||
.DA DNS.ADD
|
||||
.DA DNS.GETCACHE
|
||||
|
||||
.DA UDP.LISTENER
|
||||
.DA TCP.LISTENER
|
||||
.DA ADD.LISTENER
|
||||
.DA REM.LISTENER
|
||||
*--------------------------------------
|
||||
L.IPCFG .DA IPCFG
|
||||
L.ARP.CACHE .DA ARP.CACHE
|
||||
L.DNS.CACHE .DA DNS.CACHE
|
||||
.DA 0
|
||||
.DA CS.END-CS.START
|
||||
.DA DS.END-DS.START
|
||||
*--------------------------------------
|
||||
LIB.LOAD lda bFirstLoad
|
||||
bne .8
|
||||
jsr ARP.CLEAR
|
||||
jsr DNS.CLEAR
|
||||
inc bFirstLoad
|
||||
.8 clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
LIB.UNLOAD clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* PULLW = PTR to S.IPCFG
|
||||
*--------------------------------------
|
||||
SET.IPCFG >PUSHBI K.PROTOID.IP
|
||||
>SYSCALL SYS.SetNetCfg
|
||||
bcs GET.IPCFG.RTS
|
||||
*--------------------------------------
|
||||
* grab a copy on the fly for lib function
|
||||
* OUT :
|
||||
* Y,A = PTR to S.IPCFG
|
||||
*--------------------------------------
|
||||
GET.IPCFG lda #K.PROTOID.IP
|
||||
>SYSCALL SYS.GetNetCfgA
|
||||
bcs GET.IPCFG.RTS
|
||||
>STYA ZPQuickPtr1
|
||||
ldy #S.IPCFG
|
||||
.1 dey
|
||||
lda (ZPQuickPtr1),y
|
||||
sta IPCFG,y
|
||||
tya
|
||||
bne .1
|
||||
>LDYA ZPQuickPtr1
|
||||
clc
|
||||
GET.IPCFG.RTS rts
|
||||
*--------------------------------------
|
||||
* Out:
|
||||
* Y,A = Frame PTR
|
||||
* X = hMem
|
||||
*--------------------------------------
|
||||
NEW.ICMP.FRAME jsr NEW.IP.FRAME
|
||||
bcs .9
|
||||
ldy #S.IP.PROTOCOL
|
||||
lda #S.IP.PROTOCOL.ICMP
|
||||
sta (ZPFrameBase1),y
|
||||
>LDYA ZPFrameBase1
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* Out:
|
||||
* Y,A = Frame PTR
|
||||
* X = hMem
|
||||
*--------------------------------------
|
||||
NEW.TCP.FRAME jsr NEW.IP.FRAME
|
||||
bcs .9
|
||||
ldy #S.IP.PROTOCOL
|
||||
lda #S.IP.PROTOCOL.TCP
|
||||
sta (ZPFrameBase1),y
|
||||
>LDYA ZPFrameBase1
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* Out:
|
||||
* Y,A = Frame PTR
|
||||
* X = hMem
|
||||
*--------------------------------------
|
||||
NEW.UDP.FRAME jsr NEW.IP.FRAME
|
||||
bcs .9
|
||||
ldy #S.IP.PROTOCOL
|
||||
lda #S.IP.PROTOCOL.UDP
|
||||
sta (ZPFrameBase1),y
|
||||
>LDYA ZPFrameBase1
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* Out:
|
||||
* Y,A = Frame PTR
|
||||
* X = hMem
|
||||
*--------------------------------------
|
||||
NEW.IP.FRAME jsr NEW.ETH.FRAME
|
||||
bcs .9
|
||||
|
||||
ldy #S.ETH.ETHERTYPE
|
||||
lda /S.ETH.ETHERTYPE.IP
|
||||
sta (ZPFrameBase1),y
|
||||
iny
|
||||
lda #S.ETH.ETHERTYPE.IP
|
||||
sta (ZPFrameBase1),y
|
||||
|
||||
ldy #S.IP.V.IHL.DSCP.ECN
|
||||
lda #$45
|
||||
sta (ZPFrameBase1),y
|
||||
iny
|
||||
lda #$0
|
||||
sta (ZPFrameBase1),y
|
||||
|
||||
ldy #S.IP.IDENTIFICATION
|
||||
sta (ZPFrameBase1),y
|
||||
inc
|
||||
iny
|
||||
sta (ZPFrameBase1),y
|
||||
dec
|
||||
ldy #S.IP.FRAGMENT.FLAGS
|
||||
sta (ZPFrameBase1),y
|
||||
iny
|
||||
sta (ZPFrameBase1),y
|
||||
|
||||
ldy #S.IP.TTL
|
||||
lda #K.IP.TTL
|
||||
sta (ZPFrameBase1),y
|
||||
>LDYA ZPFrameBase1
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* Out:
|
||||
* Y,A = Frame PTR
|
||||
* X = hMem
|
||||
*--------------------------------------
|
||||
NEW.ARP.FRAME jsr NEW.ETH.FRAME
|
||||
bcs .9
|
||||
|
||||
ldy #S.ETH.ETHERTYPE
|
||||
lda /S.ETH.ETHERTYPE.ARP
|
||||
sta (ZPFrameBase1),y
|
||||
iny
|
||||
lda #S.ETH.ETHERTYPE.ARP
|
||||
sta (ZPFrameBase1),y
|
||||
|
||||
ldy #S.ARP.HTYPE
|
||||
lda #0
|
||||
sta (ZPFrameBase1),y
|
||||
iny
|
||||
lda #1
|
||||
sta (ZPFrameBase1),y
|
||||
iny
|
||||
lda #8
|
||||
sta (ZPFrameBase1),y
|
||||
iny
|
||||
lda #0
|
||||
sta (ZPFrameBase1),y
|
||||
iny
|
||||
lda #6
|
||||
sta (ZPFrameBase1),y
|
||||
iny
|
||||
lda #4
|
||||
sta (ZPFrameBase1),y
|
||||
>LDYA ZPFrameBase1
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* Out:
|
||||
* Y,A = Frame PTR
|
||||
* X = hMem
|
||||
*--------------------------------------
|
||||
NEW.ETH.FRAME >PUSHWI K.ETH.FRAME.LEN
|
||||
>PUSHBI 0
|
||||
>SYSCALL SYS.GetMem
|
||||
bcs .9
|
||||
>STYA ZPFrameBase1
|
||||
phx
|
||||
txa
|
||||
>SYSCALL SYS.ClrMemA
|
||||
plx
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* In:
|
||||
* Out:
|
||||
*--------------------------------------
|
||||
SEND.ICMP.FRAME >PULLW ZPFrameBase1
|
||||
>PULLW ZPFrameLen1
|
||||
|
||||
>PUSHW ZPFrameLen1
|
||||
>PUSHWI S.ICMP.TYPE
|
||||
jsr ComputeChecksum
|
||||
|
||||
phy
|
||||
ldy #S.ICMP.CHECKSUM
|
||||
sta (ZPFrameBase1),y
|
||||
iny
|
||||
pla
|
||||
sta (ZPFrameBase1),y
|
||||
|
||||
bra SEND.IP.FRAME.I
|
||||
*--------------------------------------
|
||||
* In:
|
||||
* Out:
|
||||
*--------------------------------------
|
||||
SEND.TCP.FRAME >PULLW ZPFrameBase1
|
||||
>PULLW ZPFrameLen1
|
||||
bra SEND.IP.FRAME.I
|
||||
*--------------------------------------
|
||||
* In:
|
||||
* Out:
|
||||
*--------------------------------------
|
||||
SEND.UDP.FRAME >PULLW ZPFrameBase1
|
||||
>PULLW ZPFrameLen1
|
||||
SEND.UDP.FRAME.I
|
||||
ldy #S.UDP.LENGTH+1
|
||||
lda ZPFrameLen1
|
||||
sec
|
||||
sbc #S.IP
|
||||
sta (ZPFrameBase1),y
|
||||
dey
|
||||
lda ZPFrameLen1+1
|
||||
sbc /S.IP
|
||||
sta (ZPFrameBase1),y
|
||||
lda #0 SET.UDP.CHECKSUM
|
||||
ldy #S.UDP.CHECKSUM (0 = Disable UDP Checksum)
|
||||
sta (ZPFrameBase1),y
|
||||
iny
|
||||
sta (ZPFrameBase1),y
|
||||
bra SEND.IP.FRAME.I
|
||||
*--------------------------------------
|
||||
* In:
|
||||
* Out:
|
||||
*--------------------------------------
|
||||
SEND.IP.FRAME >PULLW ZPFrameBase1
|
||||
>PULLW ZPFrameLen1
|
||||
|
||||
SEND.IP.FRAME.I ldx #S.IPCFG.IP
|
||||
ldy #S.IP.SRC
|
||||
|
||||
.10 lda IPCFG,x
|
||||
sta (ZPFrameBase1),y
|
||||
inx
|
||||
iny
|
||||
cpy #S.IP.SRC+4
|
||||
bne .10
|
||||
|
||||
jsr ARP.RESOLVE
|
||||
bcs .9
|
||||
ldy #S.IP.TOTAL.LENGTH+1
|
||||
lda ZPFrameLen1
|
||||
sec
|
||||
sbc #S.ETH
|
||||
sta (ZPFrameBase1),y
|
||||
dey
|
||||
lda ZPFrameLen1+1
|
||||
sbc /S.ETH
|
||||
sta (ZPFrameBase1),y
|
||||
|
||||
stz IP.CHECKSUM RESET.IP.CHECKSUM
|
||||
stz IP.CHECKSUM+1
|
||||
stz IP.CHECKSUM+2
|
||||
* stz IP.CHECKSUM+3 Optimized for IP Header
|
||||
|
||||
ldy #S.IP.V.IHL.DSCP.ECN
|
||||
.1 lda (ZPFrameBase1),y
|
||||
tax
|
||||
iny
|
||||
lda (ZPFrameBase1),y
|
||||
iny
|
||||
clc
|
||||
adc IP.CHECKSUM
|
||||
sta IP.CHECKSUM
|
||||
txa
|
||||
adc IP.CHECKSUM+1
|
||||
sta IP.CHECKSUM+1
|
||||
bcc .2
|
||||
inc IP.CHECKSUM+2
|
||||
*.2 bne .3 Optimized for IP Header
|
||||
* inc IP.CHECKSUM+3 Optimized for IP Header
|
||||
.2 cpy #S.IP
|
||||
bne .1
|
||||
|
||||
lda IP.CHECKSUM
|
||||
clc
|
||||
adc IP.CHECKSUM+2
|
||||
eor #$FF
|
||||
ldy #S.IP.HDR.CHECKSUM+1
|
||||
sta (ZPFrameBase1),y
|
||||
dey
|
||||
lda IP.CHECKSUM+1
|
||||
* adc IP.CHECKSUM+3 Optimized for IP Header
|
||||
adc #0 Optimized for IP Header
|
||||
eor #$FF
|
||||
sta (ZPFrameBase1),y
|
||||
bra SEND.ETH.FRAME
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* In:
|
||||
* Out:
|
||||
*--------------------------------------
|
||||
SEND.ARP.FRAME >PULLW ZPFrameBase1
|
||||
SEND.ARP.FRAME.I
|
||||
>LDYAI S.ARP default ARP Frame length
|
||||
>STYA ZPFrameLen1
|
||||
*--------------------------------------
|
||||
* In:
|
||||
* Out:
|
||||
*--------------------------------------
|
||||
SEND.ETH.FRAME >PUSHW ZPFrameLen1
|
||||
>PUSHW ZPFrameBase1
|
||||
ldx #S.IPCFG.HDEV
|
||||
lda IPCFG,x
|
||||
>SYSCALL SYS.DevOutA
|
||||
rts
|
||||
*--------------------------------------
|
||||
UDP.LISTENER >PULLW ZPFrameBase1
|
||||
>PULLW ZPFrameLen1
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
TCP.LISTENER >PULLW ZPFrameBase1
|
||||
>PULLW ZPFrameLen1
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
ADD.LISTENER sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
REM.LISTENER sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
.INB LIB/LIBTCPIP.S.ARP
|
||||
.INB LIB/LIBTCPIP.S.DNS
|
||||
*--------------------------------------
|
||||
* PRIVATE
|
||||
*--------------------------------------
|
||||
ToLowerCaseA cmp #'A'
|
||||
bcc .1
|
||||
cmp #'Z'+1
|
||||
bcs .1
|
||||
adc #$20
|
||||
.1 rts
|
||||
*--------------------------------------
|
||||
* In:
|
||||
* PULLW = Start Offset
|
||||
* PULLW = End Offset
|
||||
* Out:
|
||||
* Y,A = CheckSum
|
||||
*--------------------------------------
|
||||
ComputeChecksum >PULLA
|
||||
clc
|
||||
adc ZPFrameBase1
|
||||
sta ZPQuickPtr1
|
||||
>PULLA
|
||||
adc ZPFrameBase1+1
|
||||
sta ZPQuickPtr1+1
|
||||
|
||||
>PULLA
|
||||
clc
|
||||
adc ZPFrameBase1
|
||||
sta ZPQuickPtr2
|
||||
>PULLA
|
||||
adc ZPFrameBase1+1
|
||||
sta ZPQuickPtr2+1
|
||||
|
||||
stz IP.CHECKSUM RESET.IP.CHECKSUM
|
||||
stz IP.CHECKSUM+1
|
||||
stz IP.CHECKSUM+2
|
||||
stz IP.CHECKSUM+3
|
||||
ldy #1
|
||||
.1 lda (ZPQuickPtr1),y
|
||||
clc
|
||||
adc IP.CHECKSUM
|
||||
sta IP.CHECKSUM
|
||||
lda (ZPQuickPtr1)
|
||||
adc IP.CHECKSUM+1
|
||||
sta IP.CHECKSUM+1
|
||||
bcc .3
|
||||
inc IP.CHECKSUM+2
|
||||
bne .3
|
||||
inc IP.CHECKSUM+3
|
||||
.3 lda ZPQuickPtr1
|
||||
clc
|
||||
adc #2
|
||||
sta ZPQuickPtr1
|
||||
bcc .4
|
||||
inc ZPQuickPtr1+1
|
||||
.4 cmp ZPQuickPtr2
|
||||
bne .1
|
||||
lda ZPQuickPtr1+1
|
||||
cmp ZPQuickPtr2+1
|
||||
bne .1
|
||||
lda IP.CHECKSUM
|
||||
clc
|
||||
adc IP.CHECKSUM+2
|
||||
eor #$FF
|
||||
tay
|
||||
lda IP.CHECKSUM+1
|
||||
adc IP.CHECKSUM+3
|
||||
eor #$FF
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
*--------------------------------------
|
||||
bFirstLoad .DA #0
|
||||
Status .BS 1
|
||||
hHOST .BS 1 for DNS Cache functions
|
||||
HOST.TTL .BS 2 for DNS Cache functions
|
||||
IP.CHECKSUM .BS 4
|
||||
IPCFG .BS S.IPCFG
|
||||
ARP.CACHE .BS K.ARPCACHE.SIZE*S.ARPCACHE
|
||||
DNS.CACHE .BS K.DNSCACHE.SIZE*S.DNSCACHE
|
||||
UDP.TABLE .BS K.UDPTABLE.SIZE*S.LISTENER
|
||||
TCP.TABLE .BS K.TCPTABLE.SIZE*S.LISTENER
|
||||
*--------------------------------------
|
||||
DS.START
|
||||
DS.END
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE LIB/LIBTCPIP.S
|
||||
ASM
|
502
SBIN/DHCPCLNT.S.txt
Normal file
502
SBIN/DHCPCLNT.S.txt
Normal file
|
@ -0,0 +1,502 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF SBIN/DHCPCLNT
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/KERNEL.I
|
||||
.INB INC/LIBSTR.I
|
||||
.INB INC/LIBTCPIP.I
|
||||
*--------------------------------------
|
||||
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.DOEVENT
|
||||
.DA CS.QUIT
|
||||
L.LIBSTR .DA LIBSTR
|
||||
L.LIBTCPIP .DA LIBTCPIP
|
||||
L.IPCFG .DA IPCFG
|
||||
.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
|
||||
|
||||
>LIBLOADP L.LIBTCPIP
|
||||
sta hLIBTCPIP
|
||||
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG
|
||||
bcs .9
|
||||
>STYA ZPQuickPTR1
|
||||
|
||||
ldy #S.IPCFG
|
||||
.1 dey
|
||||
lda (ZPQuickPTR1),y
|
||||
sta IPCFG,y
|
||||
tya
|
||||
bne .1
|
||||
|
||||
>LDYA A2OSX.TIMER16
|
||||
>STYA FRAME.DISC.XID
|
||||
>STYA FRAME.REQ.XID
|
||||
>LDYA A2OSX.RANDOM16
|
||||
>STYA FRAME.DISC.XID+2
|
||||
>STYA FRAME.REQ.XID+2
|
||||
|
||||
lda #0
|
||||
sta IPCFG
|
||||
|
||||
ldy #S.IPCFG.MAC+5
|
||||
ldx #5
|
||||
.2 lda IPCFG,y
|
||||
sta FRAME.DISC.CHADDR,x
|
||||
sta FRAME.REQ.CHADDR,x
|
||||
dey
|
||||
dex
|
||||
bpl .2
|
||||
|
||||
lda #20
|
||||
sta TimeOut
|
||||
|
||||
lda (pPsContext)
|
||||
ora #S.PS.F.EVENT Now accept events
|
||||
sta (pPsContext)
|
||||
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CS.RUN
|
||||
CS.RUN.DISC jsr SendDHCPDiscFrame
|
||||
bcs CS.RUN.KO
|
||||
|
||||
lda #S.IPCFG.STATUS.SDISC
|
||||
sta IPCFG
|
||||
|
||||
CS.RUN.OFFER jsr A2osX.SLEEP
|
||||
lda IPCFG
|
||||
and #S.IPCFG.STATUS.ROFFER
|
||||
bne CS.RUN.REQ
|
||||
lda TimeOut
|
||||
bne CS.RUN.OFFER
|
||||
lda #1
|
||||
bra CS.RUN.KO
|
||||
|
||||
CS.RUN.REQ jsr SendDHCPReqFrame
|
||||
bcs CS.RUN.KO
|
||||
|
||||
lda #S.IPCFG.STATUS.SREQ
|
||||
sta IPCFG
|
||||
|
||||
CS.RUN.RACK jsr A2osX.SLEEP
|
||||
lda IPCFG
|
||||
and #S.IPCFG.STATUS.RACK
|
||||
bne CS.RUN.OK
|
||||
lda TimeOut
|
||||
bne CS.RUN.RACK
|
||||
lda #2
|
||||
bra CS.RUN.KO
|
||||
|
||||
CS.RUN.OK lda #S.IPCFG.STATUS.OK
|
||||
sta IPCFG
|
||||
|
||||
>PUSHW L.IPCFG
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.SET.IPCFG
|
||||
|
||||
lda #0 Leave with NO ERROR
|
||||
sec
|
||||
rts
|
||||
|
||||
CS.RUN.KO sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.DOEVENT >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 do not discard TIMER event
|
||||
|
||||
.1 lda (pEvent)
|
||||
and #S.EVT.F.NET
|
||||
beq .9
|
||||
|
||||
ldy #S.IPCFG.HDEV
|
||||
lda IPCFG,y
|
||||
ldy #S.EVT.hDEV
|
||||
cmp (pEvent),y
|
||||
bne .9
|
||||
|
||||
ldy #S.EVT.DATALO Get Frame hMem
|
||||
lda (pEvent),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPFrameBase1
|
||||
|
||||
ldy #S.EVT.DATAW1 Get Frame Len
|
||||
lda (pEvent),y
|
||||
sta ZPFrameLen1
|
||||
iny
|
||||
lda (pEvent),y
|
||||
sta ZPFrameLen1+1
|
||||
|
||||
lda IPCFG
|
||||
and #S.IPCFG.STATUS.SDISC
|
||||
beq .2
|
||||
jsr CheckDHCPOfferFrame
|
||||
bcs .9
|
||||
lda #S.IPCFG.STATUS.ROFFER
|
||||
sta IPCFG
|
||||
bra .88
|
||||
|
||||
.2 lda IPCFG
|
||||
and #S.IPCFG.STATUS.SREQ
|
||||
beq .9
|
||||
jsr CheckDHCPAckFrame
|
||||
bcs .9
|
||||
lda #S.IPCFG.STATUS.RACK
|
||||
sta IPCFG
|
||||
|
||||
.88 >SYSCALL SYS.DestroyEvent
|
||||
.89 clc
|
||||
rts
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.QUIT lda hLIBTCPIP
|
||||
>SYSCALL SYS.UnloadLibA
|
||||
lda hLIBSTR
|
||||
>SYSCALL SYS.UnloadLibA
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* SendDHCPDiscFrame
|
||||
* In:
|
||||
* Out:
|
||||
*--------------------------------------
|
||||
SendDHCPDiscFrame
|
||||
jsr NewDHCPFrame
|
||||
bcs .9
|
||||
phx
|
||||
|
||||
lda ZPFrameBase1
|
||||
clc
|
||||
adc #S.UDP
|
||||
sta ZPQuickPTR1
|
||||
lda ZPFrameBase1+1
|
||||
adc /S.UDP
|
||||
sta ZPQuickPTR1+1
|
||||
|
||||
ldy #FRAME.DISC.LEN
|
||||
.1 dey
|
||||
lda FRAME.DISC,y
|
||||
sta (ZPQuickPTR1),y
|
||||
tya
|
||||
bne .1
|
||||
|
||||
>LDYAI S.UDP+FRAME.DISC.LEN
|
||||
>PUSHYA
|
||||
>PUSHW ZPFrameBase1
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.SEND.UDP.FRAME
|
||||
pla
|
||||
php
|
||||
>SYSCALL SYS.FreeMemA
|
||||
plp
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CheckDHCPOfferFrame
|
||||
jsr CheckDHCPXID
|
||||
bcs .9
|
||||
|
||||
>LDAXI S.DHCP.OPTIONS
|
||||
jsr SetFramePtr1AX
|
||||
|
||||
ldy #2 DHCPOffer ?
|
||||
lda (ZPFramePtr1),y
|
||||
cmp #S.DHCP.OPTIONS.DHCPOffer
|
||||
bne .9
|
||||
|
||||
ldy #S.DHCP.YIADDR+3
|
||||
ldx #3
|
||||
.1 lda (ZPFrameBase1),y
|
||||
sta FRAME.REQ.OPT.REQIP,x
|
||||
dey
|
||||
dex
|
||||
bpl .1
|
||||
|
||||
ldx #3
|
||||
ldy #S.IPCFG.IP+3
|
||||
.2 lda FRAME.REQ.OPT.REQIP,x
|
||||
sta IPCFG,y
|
||||
dey
|
||||
dex
|
||||
bpl .2
|
||||
|
||||
ldy #S.IP.SRC+3
|
||||
ldx #3
|
||||
.3 lda (ZPFrameBase1),y
|
||||
sta FRAME.REQ.OPT.SVRIP,x
|
||||
dey
|
||||
dex
|
||||
bpl .3
|
||||
|
||||
ldx #3
|
||||
ldy #S.IPCFG.DHCPSRVR+3
|
||||
.4 lda FRAME.REQ.OPT.SVRIP,x
|
||||
sta IPCFG,y
|
||||
dey
|
||||
dex
|
||||
bpl .4
|
||||
|
||||
.5 inc ZPFramePtr1 skip Option 53 (DHCPOffer:530102)
|
||||
bne .6
|
||||
inc ZPFramePtr1+1
|
||||
.6 lda (ZPFramePtr1)
|
||||
sec
|
||||
adc ZPFramePtr1 add option len + 1
|
||||
sta ZPFramePtr1
|
||||
bcc .7
|
||||
inc ZPFramePtr1+1
|
||||
|
||||
.7 lda (ZPFramePtr1)
|
||||
cmp #S.DHCP.OPTIONS.END
|
||||
beq .8
|
||||
jsr GetDHCPOption
|
||||
bra .5
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
GetDHCPOption cmp #S.DHCP.OPTIONS.MASK
|
||||
bne .1
|
||||
ldy #S.IPCFG.MASK
|
||||
bra GetDHCPOption.CopyIP
|
||||
|
||||
.1 cmp #S.DHCP.OPTIONS.GW
|
||||
bne .2
|
||||
ldy #S.IPCFG.GW
|
||||
bra GetDHCPOption.CopyIP
|
||||
|
||||
.2 cmp #S.DHCP.OPTIONS.DNS
|
||||
bne .3
|
||||
ldy #S.IPCFG.DNS
|
||||
bra GetDHCPOption.CopyIP
|
||||
|
||||
.3 cmp #S.DHCP.OPTIONS.DOMAIN
|
||||
bne .9
|
||||
|
||||
ldy #1
|
||||
ldx #$FF
|
||||
.4 iny
|
||||
inx
|
||||
lda (ZPFramePtr1),y
|
||||
sta TmpBuffer256,x
|
||||
bne .4
|
||||
ldy #S.IPCFG.DOMAIN-1
|
||||
ldx #$FF
|
||||
.5 iny
|
||||
inx
|
||||
lda TmpBuffer256,x
|
||||
sta IPCFG,y
|
||||
bne .5
|
||||
|
||||
|
||||
.9 rts
|
||||
GetDHCPOption.CopyIP
|
||||
phy
|
||||
ldy #2
|
||||
ldx #0
|
||||
.1 lda (ZPFramePtr1),y
|
||||
sta TmpBuffer256,x
|
||||
iny
|
||||
inx
|
||||
cpx #4
|
||||
bne .1
|
||||
ply
|
||||
ldx #0
|
||||
.2 lda TmpBuffer256,x
|
||||
sta IPCFG,y
|
||||
iny
|
||||
inx
|
||||
cpx #4
|
||||
bne .2
|
||||
rts
|
||||
*--------------------------------------
|
||||
* SendDHCPReqFrame
|
||||
* In:
|
||||
* Out:
|
||||
*--------------------------------------
|
||||
SendDHCPReqFrame
|
||||
jsr NewDHCPFrame
|
||||
bcs .9
|
||||
phx
|
||||
|
||||
lda ZPFrameBase1
|
||||
clc
|
||||
adc #S.UDP
|
||||
sta ZPQuickPTR1
|
||||
lda ZPFrameBase1+1
|
||||
adc /S.UDP
|
||||
sta ZPQuickPTR1+1
|
||||
|
||||
ldy #FRAME.REQ.LEN
|
||||
.1 dey
|
||||
lda FRAME.REQ,y
|
||||
sta (ZPQuickPTR1),y
|
||||
tya
|
||||
bne .1
|
||||
|
||||
>LDYAI S.UDP+FRAME.REQ.LEN
|
||||
>PUSHYA
|
||||
>PUSHW ZPFrameBase1
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.SEND.UDP.FRAME
|
||||
pla
|
||||
php
|
||||
>SYSCALL SYS.FreeMemA
|
||||
plp
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CheckDHCPAckFrame
|
||||
jsr CheckDHCPXID
|
||||
bcs .9
|
||||
|
||||
>LDAXI S.DHCP.OPTIONS
|
||||
jsr SetFramePtr1AX
|
||||
|
||||
ldy #2 DHCPAck ?
|
||||
lda (ZPFramePtr1),y
|
||||
cmp #S.DHCP.OPTIONS.DHCPAck
|
||||
bne .9
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CheckDHCPXID ldy #S.DHCP.XID+3
|
||||
ldx #3
|
||||
.1 lda (ZPFrameBase1),y
|
||||
cmp FRAME.DISC.XID,x same XID ?
|
||||
bne .9
|
||||
dey
|
||||
dex
|
||||
bpl .1
|
||||
clc
|
||||
rts
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
NewDHCPFrame >LIBCALL hLIBTCPIP,LIBTCPIP.NEW.UDP.FRAME
|
||||
bcs .9
|
||||
>STYA ZPFrameBase1
|
||||
|
||||
ldy #S.UDP.SRCPORT
|
||||
lda /UDP.PORT.DHCPC
|
||||
sta (ZPFrameBase1),y
|
||||
iny
|
||||
lda #UDP.PORT.DHCPC
|
||||
sta (ZPFrameBase1),y
|
||||
|
||||
ldy #S.UDP.DSTPORT
|
||||
lda /UDP.PORT.DHCPS
|
||||
sta (ZPFrameBase1),y
|
||||
iny
|
||||
lda #UDP.PORT.DHCPS
|
||||
sta (ZPFrameBase1),y
|
||||
|
||||
lda #255 S.IP.DST = 255.255.255.255
|
||||
ldy #S.IP.DST
|
||||
.1 sta (ZPFrameBase1),y
|
||||
iny
|
||||
cpy #S.IP.DST+4
|
||||
bne .1
|
||||
clc x = hMem
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
SetFramePtr1AX clc
|
||||
adc ZPFrameBase1
|
||||
sta ZPFramePtr1
|
||||
txa
|
||||
adc ZPFrameBase1+1
|
||||
sta ZPFramePtr1+1
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
LIBSTR >PSTRING "libstr.o"
|
||||
LIBTCPIP >PSTRING "libtcpip.o"
|
||||
*--------------------------------------
|
||||
FRAME.DISC .HS 01010600 OP,HTYPE,HLEN,HOPS
|
||||
FRAME.DISC.XID .BS 4
|
||||
FRAME.DISC.SECS .HS 0000
|
||||
FRAME.DISC.FLAGS .HS 0000
|
||||
FRAME.DISC.CIADDR .HS 00000000
|
||||
FRAME.DISC.YIADDR .HS 00000000
|
||||
FRAME.DISC.SIADDR .HS 00000000
|
||||
FRAME.DISC.GIADDR .HS 00000000
|
||||
FRAME.DISC.CHADDR .HS 00000000.00000000.00000000.00000000
|
||||
FRAME.DISC.SNAME .BS 64
|
||||
FRAME.DISC.FILE .BS 128
|
||||
FRAME.DISC.COOKIE .HS 63825363
|
||||
FRAME.DISC.OPT .HS 3501
|
||||
.DA #S.DHCP.OPTIONS.DHCPDiscover
|
||||
.HS 37040103060FFF
|
||||
FRAME.DISC.LEN .EQ *-FRAME.DISC
|
||||
*--------------------------------------
|
||||
FRAME.REQ .HS 01010600 OP,HTYPE,HLEN,HOPS
|
||||
FRAME.REQ.XID .BS 4
|
||||
FRAME.REQ.SECS .HS 0000
|
||||
FRAME.REQ.FLAGS .HS 0000
|
||||
FRAME.REQ.CIADDR .HS 00000000
|
||||
FRAME.REQ.YIADDR .HS 00000000
|
||||
FRAME.REQ.SIADDR .HS 00000000
|
||||
FRAME.REQ.GIADDR .HS 00000000
|
||||
FRAME.REQ.CHADDR .HS 00000000.00000000.00000000.00000000
|
||||
FRAME.REQ.SNAME .BS 64
|
||||
FRAME.REQ.FILE .BS 128
|
||||
FRAME.REQ.COOKIE .HS 63825363
|
||||
FRAME.REQ.OPT .HS 3501
|
||||
.DA #S.DHCP.OPTIONS.DHCPRequest
|
||||
.HS 3204
|
||||
FRAME.REQ.OPT.REQIP .BS 4
|
||||
.HS 3604
|
||||
FRAME.REQ.OPT.SVRIP .BS 4
|
||||
.HS FF
|
||||
FRAME.REQ.LEN .EQ *-FRAME.REQ
|
||||
*--------------------------------------
|
||||
DS.START
|
||||
*--------------------------------------
|
||||
hLIBSTR .BS 1
|
||||
hLIBTCPIP .BS 1
|
||||
TimeOut .BS 1
|
||||
IPCFG .BS S.IPCFG
|
||||
*--------------------------------------
|
||||
DS.END
|
||||
MAN
|
||||
SAVE SBIN/DHCPCLNT.S
|
||||
ASM
|
304
SBIN/GETTY.S.txt
Normal file
304
SBIN/GETTY.S.txt
Normal file
|
@ -0,0 +1,304 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF SBIN/GETTY
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.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.MSG.GREETINGS .DA MSG.GREETINGS
|
||||
L.MSG.LOGIN .DA MSG.LOGIN
|
||||
L.MSG.PASSWORD .DA MSG.PASSWORD
|
||||
.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
|
||||
>PUSHA
|
||||
>PUSHBI $20 Push SEP=' '
|
||||
>PUSHBI 1 Push 1 for getting INDEV
|
||||
>SYSCALL SYS.PStrGetTkn
|
||||
bcs .9
|
||||
|
||||
sta hDEVNAME
|
||||
>SYSCALL SYS.GetDevByNameA
|
||||
bcs .8
|
||||
|
||||
sta hINDEV
|
||||
ldy #S.PS.hINDEV
|
||||
sta (pPsContext),y
|
||||
lda hDEVNAME
|
||||
>SYSCALL SYS.FreeMemA
|
||||
|
||||
ldy #S.PS.hARGS
|
||||
lda (pPsContext),y
|
||||
>PUSHA
|
||||
>PUSHBI $20 Push SEP=' '
|
||||
>PUSHBI 2 Push 1 for getting OUTDEV
|
||||
>SYSCALL SYS.PStrGetTkn
|
||||
.9 bcs .99
|
||||
|
||||
sta hDEVNAME
|
||||
>SYSCALL SYS.GetDevByNameA
|
||||
.8 bcs .98
|
||||
|
||||
sta hOUTDEV
|
||||
ldy #S.PS.hOUTDEV
|
||||
sta (pPsContext),y
|
||||
ldy #S.PS.hERRDEV
|
||||
sta (pPsContext),y
|
||||
lda hDEVNAME
|
||||
>SYSCALL SYS.FreeMemA
|
||||
|
||||
ldy #S.PS.hARGS
|
||||
lda (pPsContext),y
|
||||
>PUSHA
|
||||
>PUSHBI $20 Push SEP=' '
|
||||
>PUSHBI 3 Push 3 for getting BIN
|
||||
>SYSCALL SYS.PStrGetTkn
|
||||
bcs .99
|
||||
|
||||
sta BINID
|
||||
ldy #S.PS.ID
|
||||
lda (pPsContext),y
|
||||
* ldy #S.DEV.hOWNERPS
|
||||
* sta (DEVMGR.DEVPTR),y
|
||||
|
||||
>LDYA L.MSG.GREETINGS
|
||||
jsr PRINT.MSG
|
||||
|
||||
lda hOUTDEV
|
||||
jsr PRBYTE
|
||||
|
||||
stz STATUS
|
||||
lda (pPsContext)
|
||||
ora #S.PS.F.EVENT Now accept events
|
||||
sta (pPsContext)
|
||||
clc Tell TskMgr To stay in memory
|
||||
rts
|
||||
|
||||
.98 pha
|
||||
lda hDEVNAME
|
||||
>SYSCALL SYS.FreeMemA
|
||||
pla
|
||||
sec
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
CS.RUN lda STATUS
|
||||
bne CS.RUN.1
|
||||
jsr CROUT
|
||||
jsr CROUT
|
||||
>LDYA L.MSG.LOGIN
|
||||
jsr PRINT.MSG
|
||||
jsr INPUT.INIT
|
||||
inc STATUS
|
||||
clc
|
||||
rts
|
||||
CS.RUN.1 cmp #1
|
||||
bne CS.RUN.2
|
||||
ldx INSTATUS
|
||||
beq .9
|
||||
ldx INBUFFER
|
||||
beq .2
|
||||
.1 lda INBUFFER,x
|
||||
sta USERNAME,x
|
||||
dex
|
||||
bpl .1
|
||||
inc STATUS
|
||||
clc
|
||||
rts
|
||||
.2 dec STATUS
|
||||
.9 clc
|
||||
rts
|
||||
CS.RUN.2 cmp #2
|
||||
bne CS.RUN.3
|
||||
jsr CROUT
|
||||
>LDYA L.MSG.PASSWORD
|
||||
jsr PRINT.MSG
|
||||
jsr INPUT.INIT
|
||||
inc STATUS
|
||||
clc
|
||||
rts
|
||||
CS.RUN.3 cmp #3
|
||||
bne CS.RUN.4
|
||||
ldx INSTATUS
|
||||
beq .9
|
||||
ldx INBUFFER
|
||||
beq .2
|
||||
.1 lda INBUFFER,x
|
||||
sta PASSWORD,x
|
||||
dex
|
||||
bpl .1
|
||||
.2 inc STATUS
|
||||
.9 clc
|
||||
rts
|
||||
CS.RUN.4 cmp #4
|
||||
bne CS.RUN.5
|
||||
jsr CROUT
|
||||
inc STATUS TODO:CHECK USER/PASS
|
||||
clc
|
||||
rts
|
||||
CS.RUN.5 cmp #5
|
||||
bne CS.RUN.6
|
||||
lda BINID
|
||||
ldx pPsContext
|
||||
stx pPsContext.SAVE
|
||||
ldx pPsContext+1
|
||||
stx pPsContext.SAVE+1
|
||||
>SYSCALL SYS.CreateProcessA
|
||||
ldx pPsContext.SAVE
|
||||
stx pPsContext
|
||||
ldx pPsContext.SAVE+1
|
||||
stx pPsContext+1
|
||||
bcs .9
|
||||
sta CHILDPSID
|
||||
inc STATUS
|
||||
clc
|
||||
rts
|
||||
.9 jsr PRBYTE
|
||||
stz STATUS
|
||||
clc
|
||||
rts
|
||||
CS.RUN.6 dec CHILDPSIDPOLL
|
||||
bne .8
|
||||
lda CHILDPSID Check for CHILDTSKID
|
||||
>SYSCALL SYS.GetPSByIDA
|
||||
bcc .8 Still Alive ?
|
||||
stz STATUS
|
||||
stz CHILDPSID
|
||||
.8 clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.DOEVENT >PULLW pEvent
|
||||
lda CHILDPSID
|
||||
bne .99
|
||||
ldy #S.EVT.hDEV
|
||||
lda (pEvent),y
|
||||
cmp hINDEV
|
||||
bne .99
|
||||
lda (pEvent)
|
||||
and #S.EVT.F.KEY
|
||||
beq .99
|
||||
ldy #S.EVT.DATAHI
|
||||
lda (pEvent),y
|
||||
bne .99
|
||||
ldy #S.EVT.DATALO
|
||||
lda (pEvent),y
|
||||
jsr INPUT.CHARIN
|
||||
>SYSCALL SYS.DestroyEvent
|
||||
clc
|
||||
rts
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.QUIT clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* PRIVATE
|
||||
*--------------------------------------
|
||||
PRINT.MSG >STYA ZPQuickPtr1
|
||||
ldy #0
|
||||
.1 lda (ZPQuickPtr1),y
|
||||
beq .2
|
||||
ora #$80
|
||||
jsr COUT
|
||||
iny
|
||||
bne .1
|
||||
.2 rts
|
||||
*--------------------------------------
|
||||
INPUT.INIT stz INSTATUS
|
||||
stz INBUFFER
|
||||
rts
|
||||
*--------------------------------------
|
||||
INPUT.CHARIN ldx INSTATUS
|
||||
bne .9
|
||||
cmp #$20
|
||||
bcc .1
|
||||
ldx INBUFFER
|
||||
inx
|
||||
cpx #16
|
||||
beq .9
|
||||
sta INBUFFER,x
|
||||
stx INBUFFER
|
||||
ora #$80
|
||||
jmp COUT
|
||||
.1 cmp #$0D
|
||||
bne .9
|
||||
inc INSTATUS
|
||||
.9 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 >PUSHA
|
||||
phx
|
||||
phy
|
||||
ldy #S.PS.hOUTDEV
|
||||
lda (pPsContext),y
|
||||
>SYSCALL SYS.DevOutA
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
*--------------------------------------
|
||||
MSG.GREETINGS >CSTRING "A2osX-GeTTY on Dev="
|
||||
MSG.LOGIN >CSTRING "login:"
|
||||
MSG.PASSWORD >CSTRING "password:"
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
DS.START
|
||||
*--------------------------------------
|
||||
hDEVNAME .BS 1
|
||||
hINDEV .BS 1
|
||||
hOUTDEV .BS 1
|
||||
BINID .BS 1
|
||||
STATUS .BS 1
|
||||
CHILDPSID .BS 1
|
||||
CHILDPSIDPOLL .BS 1
|
||||
INSTATUS .BS 1
|
||||
INBUFFER .BS 16
|
||||
USERNAME .BS 16
|
||||
PASSWORD .BS 16
|
||||
pPsContext.SAVE .BS 2
|
||||
*--------------------------------------
|
||||
DS.END
|
||||
MAN
|
||||
SAVE SBIN/GETTY.S
|
||||
ASM
|
568
SBIN/SHELL.S.txt
Normal file
568
SBIN/SHELL.S.txt
Normal file
|
@ -0,0 +1,568 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF SBIN/SHELL
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/PRODOS.I
|
||||
.INB INC/LIBSTR.I
|
||||
*--------------------------------------
|
||||
ZPPTR1 .EQ ZPBIN
|
||||
ZPPTR2 .EQ ZPBIN+2
|
||||
ZPPTR3 .EQ ZPBIN+4
|
||||
*--------------------------------------
|
||||
CmdBuffer.MAX .EQ 127
|
||||
*--------------------------------------
|
||||
* 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.CmdBuffer .DA CmdBuffer
|
||||
L.MSG.GREETINGS .DA MSG.GREETINGS
|
||||
L.MSG.UNKNOWN .DA MSG.UNKNOWN
|
||||
L.MSG.SYNERR .DA MSG.SYNERR
|
||||
L.CMDS .DA CMDS
|
||||
T.INTCMDS .DA EXEC.CMD.CD
|
||||
.DA EXEC.CMD.SET
|
||||
.DA EXEC.CMD.DATE
|
||||
.DA EXEC.CMD.TIME
|
||||
.DA EXEC.CMD.ECHO
|
||||
.DA EXEC.CMD.TYPE
|
||||
.DA EXEC.CMD.EXIT
|
||||
.DA 0
|
||||
.DA CS.END-CS.START Code Length To Relocate
|
||||
.DA DS.END-DS.START Data Segment to Allocate
|
||||
*--------------------------------------
|
||||
CS.INIT stz bEXIT
|
||||
|
||||
stz CmdHistory
|
||||
stz CmdHistory.IDX
|
||||
stz CmdHistory.END
|
||||
|
||||
>LIBLOADP L.LIBSTR
|
||||
|
||||
bcs .99
|
||||
sta hLIBSTR
|
||||
|
||||
ldy #S.PS.ID
|
||||
lda (pPsContext),y
|
||||
>PUSHA
|
||||
ldy #S.PS.hOUTDEV
|
||||
lda (pPsContext),y
|
||||
>PUSHA
|
||||
ldy #S.PS.hINDEV
|
||||
lda (pPsContext),y
|
||||
>PUSHA
|
||||
>PUSHW L.MSG.GREETINGS
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||
|
||||
lda (pPsContext)
|
||||
ora #S.PS.F.EVENT Now accept events
|
||||
sta (pPsContext)
|
||||
|
||||
clc
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
CS.RUN stz CmdBuffer
|
||||
lda #"$"
|
||||
jsr COUT
|
||||
lda #" "
|
||||
jsr COUT
|
||||
|
||||
.1 lda CmdBuffer
|
||||
bmi .2
|
||||
jsr A2osX.SLEEP
|
||||
|
||||
bra .1
|
||||
|
||||
.2 and #$7F
|
||||
sta CmdBuffer
|
||||
beq CS.RUN Empty line
|
||||
|
||||
>PUSHW L.CmdBuffer
|
||||
>SYSCALL SYS.NewPStr
|
||||
bcs .99
|
||||
sta hCMDLINE
|
||||
jsr HISTORY.ADD
|
||||
jsr EXEC.CMD
|
||||
bcc .3
|
||||
|
||||
pha
|
||||
lda #"["
|
||||
jsr COUT
|
||||
pla
|
||||
jsr PRBYTE
|
||||
lda #"]"
|
||||
jsr COUT
|
||||
jsr CROUT
|
||||
|
||||
.3 lda hCMDLINE
|
||||
>SYSCALL SYS.FreeMemA
|
||||
stz hCMDLINE
|
||||
|
||||
lda bEXIT
|
||||
bne .99
|
||||
clc
|
||||
rts
|
||||
.99 sec
|
||||
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 #$1F
|
||||
bpl .1
|
||||
jsr CS.EVENT.CTRL.CHAR
|
||||
bra .8
|
||||
|
||||
.1 cmp #$7f
|
||||
bne .2
|
||||
jsr CmdBuffer.DEL
|
||||
bra .8
|
||||
|
||||
.2 ldx CmdBuffer
|
||||
cpx #CmdBuffer.MAX
|
||||
beq .8
|
||||
inx
|
||||
sta CmdBuffer,x
|
||||
inc CmdBuffer
|
||||
ora #$80
|
||||
jsr COUT
|
||||
|
||||
.8 >SYSCALL SYS.DestroyEvent
|
||||
clc
|
||||
rts
|
||||
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.EVENT.CTRL.CHAR
|
||||
cmp #13 CR
|
||||
bne .10
|
||||
jsr CROUT
|
||||
lda CmdBuffer
|
||||
ora #$80
|
||||
sta CmdBuffer
|
||||
clc
|
||||
rts
|
||||
|
||||
.10 cmp #3
|
||||
bne .1
|
||||
jsr CmdBuffer.CLR
|
||||
clc
|
||||
rts
|
||||
|
||||
.1 cmp #8 BS (left arrow)
|
||||
bne .2
|
||||
jsr CmdBuffer.DEL
|
||||
clc
|
||||
rts
|
||||
|
||||
.2 cmp #10 LF (down arrow)
|
||||
bne .3
|
||||
|
||||
jsr HISTORY.GETNEXT
|
||||
clc
|
||||
rts
|
||||
|
||||
.3 cmp #11 VT (up arrow)
|
||||
bne .4
|
||||
|
||||
jsr HISTORY.GETPREV
|
||||
clc
|
||||
rts
|
||||
|
||||
.4 cmp #21 NAK (right arrow)
|
||||
bne .8
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
.8 jsr PRBYTE
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.QUIT lda hLIBSTR
|
||||
>SYSCALL SYS.UnloadLibA
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* PRIVATE
|
||||
*--------------------------------------
|
||||
EXEC.CMD >PUSHB hCMDLINE
|
||||
>PUSHBI $20 Push SEP=' '
|
||||
>PUSHBI 0 Push 0 for getting CMD & ARGS
|
||||
>SYSCALL SYS.PStrGetTkn
|
||||
bcs .99
|
||||
|
||||
sta hCMD
|
||||
stx hARGS
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>PUSHYA
|
||||
>PUSHYA
|
||||
>LIBCALL hLIBSTR,LIBSTR.UCASEP
|
||||
>PUSHW L.CMDS
|
||||
>SYSCALL SYS.GetPStrIndex
|
||||
bcs .1 Not An internal command
|
||||
jsr EXEC.CMD.INT
|
||||
bcs .98
|
||||
jsr .98
|
||||
clc
|
||||
rts
|
||||
|
||||
.1 jsr .98 Discard CMD & ARGS
|
||||
lda hCMDLINE
|
||||
>SYSCALL SYS.ExecProcessA
|
||||
rts
|
||||
|
||||
.98 pha
|
||||
lda hCMD
|
||||
>SYSCALL SYS.FreeMemA
|
||||
lda hARGS
|
||||
>SYSCALL SYS.FreeMemA
|
||||
pla
|
||||
sec
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
EXEC.CMD.INT asl
|
||||
tax
|
||||
jmp (T.INTCMDS,x)
|
||||
*--------------------------------------
|
||||
EXEC.CMD.CD lda hARGS
|
||||
bne EXEC.CMD.CD.C
|
||||
ldy #S.PS.hPREFIX
|
||||
lda (pPsContext),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>PUSHYA
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTP
|
||||
jsr CROUT
|
||||
clc
|
||||
rts
|
||||
|
||||
EXEC.CMD.CD.C >SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPPTR2
|
||||
ldy #S.PS.hPREFIX
|
||||
lda (pPsContext),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPPTR1
|
||||
>PUSHWI MLI.MAXPATH+1 Get a buffer for new PATH
|
||||
>PUSHBI 0 no particular Option
|
||||
>SYSCALL SYS.GetMem
|
||||
bcs .99
|
||||
stx hNEWPATH
|
||||
>STYA ZPPTR3
|
||||
lda #0
|
||||
sta (ZPPTR3)
|
||||
ldy #1
|
||||
lda (ZPPTR2),y
|
||||
cmp #'/' Full Path?
|
||||
beq .3
|
||||
cmp #'.' ".." ?
|
||||
bne .2
|
||||
lda (ZPPTR2)
|
||||
cmp #2
|
||||
bne .97
|
||||
iny
|
||||
lda (ZPPTR2),y
|
||||
cmp #'.'
|
||||
bne .97
|
||||
lda (ZPPTR1)
|
||||
tay
|
||||
.1 dey
|
||||
beq .97
|
||||
lda (ZPPTR1),y
|
||||
cmp #'/'
|
||||
bne .1
|
||||
tya
|
||||
sta (ZPPTR3)
|
||||
.11 lda (ZPPTR1),y
|
||||
sta (ZPPTR3),y
|
||||
dey
|
||||
bne .11
|
||||
bra .4
|
||||
.97 lda #SYSMGR.ERRSYN
|
||||
.98 pha
|
||||
lda hNEWPATH
|
||||
>SYSCALL SYS.FreeMemA
|
||||
pla
|
||||
sec
|
||||
.99 rts
|
||||
.2 >PUSHW ZPPTR1
|
||||
>PUSHW ZPPTR3
|
||||
>LIBCALL hLIBSTR,LIBSTR.STRCPYP
|
||||
.3 >PUSHW ZPPTR2
|
||||
>PUSHW ZPPTR3
|
||||
>LIBCALL hLIBSTR,LIBSTR.STRCATP
|
||||
lda (ZPPTR3)
|
||||
tay
|
||||
lda #'/' Ending with '/'?
|
||||
cmp (ZPPTR3),y
|
||||
beq .4
|
||||
iny
|
||||
sta (ZPPTR3),y
|
||||
tya
|
||||
sta (ZPPTR3)
|
||||
.4 lda hNEWPATH
|
||||
>SYSCALL SYS.CheckPrefixA
|
||||
bcs .98
|
||||
ldy #S.PS.hPREFIX
|
||||
lda (pPsContext),y
|
||||
pha
|
||||
lda hNEWPATH
|
||||
sta (pPsContext),y
|
||||
pla
|
||||
>SYSCALL SYS.FreeMemA
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
EXEC.CMD.SET clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
EXEC.CMD.DATE jsr MLI
|
||||
.DA #MLIGETTIME
|
||||
.DA 0
|
||||
bcs .9
|
||||
>PUSHW DATELO
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTDATE
|
||||
jsr CROUT
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
EXEC.CMD.TIME jsr MLI
|
||||
.DA #MLIGETTIME
|
||||
.DA 0
|
||||
bcs .9
|
||||
>PUSHW TIMELO
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTTIME
|
||||
jsr CROUT
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
EXEC.CMD.ECHO lda #$DD
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
EXEC.CMD.TYPE lda hARGS
|
||||
beq .98
|
||||
>SYSCALL SYS.LoadFileA
|
||||
bcs .99
|
||||
>STYA ZPPTR2 store file len
|
||||
phx
|
||||
txa
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPPTR1
|
||||
.1 lda ZPPTR2
|
||||
bne .2
|
||||
lda ZPPTR2+1
|
||||
beq .3
|
||||
dec ZPPTR2+1
|
||||
.2 dec ZPPTR2
|
||||
|
||||
lda (ZPPTR1)
|
||||
ora #$80
|
||||
jsr COUT
|
||||
inc ZPPTR1
|
||||
bne .1
|
||||
inc ZPPTR1+1
|
||||
bra .1
|
||||
|
||||
.3 pla
|
||||
>SYSCALL SYS.FreeMemA
|
||||
clc
|
||||
rts
|
||||
|
||||
.98 lda #SYSMGR.ERRSYN
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
EXEC.CMD.EXIT lda #$FF
|
||||
sta bEXIT
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
HISTORY.ADD lda CmdHistory.END ending 0
|
||||
inc keep room for new ending 0
|
||||
sec add len+1
|
||||
adc CmdBuffer
|
||||
bcc .2 enough room
|
||||
|
||||
ldx CmdHistory get len of oldest string
|
||||
ldy #0
|
||||
.1 inx
|
||||
iny
|
||||
lda CmdHistory,x move back until 0 found
|
||||
sta CmdHistory-1,y
|
||||
bne .1
|
||||
sty CmdHistory.END mark new end of history
|
||||
bra HISTORY.ADD retry....
|
||||
|
||||
.2 ldx CmdHistory.END
|
||||
ldy #$FF
|
||||
.3 iny
|
||||
lda CmdBuffer,y
|
||||
sta CmdHistory,x
|
||||
inx
|
||||
cpy CmdBuffer
|
||||
bne .3
|
||||
stz CmdHistory,x set ending 0
|
||||
stx CmdHistory.IDX
|
||||
stx CmdHistory.END
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
HISTORY.GETPREV lda CmdHistory.END
|
||||
beq HISTORY.RTS empty history,nothing to do
|
||||
lda CmdHistory.IDX
|
||||
beq HISTORY.RTS already oldest,nothing to do
|
||||
lda #0
|
||||
.1 tax save current index
|
||||
sec
|
||||
adc CmdHistory,x
|
||||
cmp CmdHistory.IDX
|
||||
bne .1 not yet reached current index
|
||||
stx CmdHistory.IDX set new index
|
||||
bra HISTORY.SETBUF
|
||||
HISTORY.RTS rts
|
||||
*--------------------------------------
|
||||
HISTORY.GETNEXT ldx CmdHistory.END
|
||||
beq HISTORY.RTS empty history,nothing to do
|
||||
cpx CmdHistory.IDX
|
||||
beq HISTORY.RTS
|
||||
ldx CmdHistory.IDX
|
||||
lda CmdHistory,x
|
||||
sec
|
||||
adc CmdHistory.IDX
|
||||
cmp CmdHistory.END
|
||||
sta CmdHistory.IDX
|
||||
beq CmdBuffer.CLR end of history, just blank buffer
|
||||
*--------------------------------------
|
||||
HISTORY.SETBUF jsr CmdBuffer.CLR
|
||||
ldx CmdHistory.IDX
|
||||
ldy #$ff
|
||||
.1 iny
|
||||
lda CmdHistory,x
|
||||
inx
|
||||
sta CmdBuffer,y
|
||||
cpy CmdBuffer
|
||||
bne .1
|
||||
bra CmdBuffer.PRINT
|
||||
*--------------------------------------
|
||||
CmdBuffer.PRINT ldx #0
|
||||
.1 inx
|
||||
lda CmdBuffer,x
|
||||
ora #$80
|
||||
phx
|
||||
jsr COUT
|
||||
plx
|
||||
cpx CmdBuffer
|
||||
bne .1
|
||||
rts
|
||||
*--------------------------------------
|
||||
CmdBuffer.CLR jsr CmdBuffer.DEL
|
||||
bne CmdBuffer.CLR
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CmdBuffer.DEL lda CmdBuffer
|
||||
beq .9
|
||||
lda #8
|
||||
jsr COUT
|
||||
dec CmdBuffer
|
||||
.9 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
|
||||
*--------------------------------------
|
||||
CMDS >PSTRING "CD"
|
||||
CMDS1 >PSTRING "SET"
|
||||
CMDS2 >PSTRING "DATE"
|
||||
CMDS3 >PSTRING "TIME"
|
||||
CMDS4 >PSTRING "ECHO"
|
||||
CMDS5 >PSTRING "TYPE"
|
||||
CMDS6 >PSTRING "EXIT"
|
||||
.DA #0
|
||||
*--------------------------------------
|
||||
LIBSTR >PSTRING "libstr.o"
|
||||
MSG.GREETINGS >CSTRING "\nA2osX-Shell on Dev=(%h:%h),PS=%h\n\n"
|
||||
MSG.UNKNOWN >CSTRING "Command Not Found\n"
|
||||
MSG.SYNERR >CSTRING "Syntax Error Or Invalid Pathname\n"
|
||||
*--------------------------------------
|
||||
DS.START
|
||||
*--------------------------------------
|
||||
hLIBSTR .BS 1
|
||||
bEXIT .BS 1
|
||||
hCMDLINE .BS 1
|
||||
hCMD .BS 1
|
||||
hARGS .BS 1
|
||||
hNEWPATH .BS 1
|
||||
CmdBuffer .BS CmdBuffer.MAX+1
|
||||
CmdBuffer.POS .BS 1
|
||||
CmdHistory .BS 256
|
||||
CmdHistory.IDX .BS 1
|
||||
CmdHistory.END .BS 1
|
||||
*--------------------------------------
|
||||
DS.END
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SBIN/SHELL.S
|
||||
ASM
|
449
SBIN/TCPIP.S.txt
Normal file
449
SBIN/TCPIP.S.txt
Normal file
|
@ -0,0 +1,449 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF SBIN/TCPIP
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/KERNEL.I
|
||||
.INB INC/LIBTCPIP.I
|
||||
*--------------------------------------
|
||||
ZPFrameBase1 .EQ ZPBIN
|
||||
ZPFrameLen1 .EQ ZPBIN+2
|
||||
ZPFramePtr1 .EQ ZPBIN+4
|
||||
ZPFrameBase2 .EQ ZPBIN+6
|
||||
ZPFrameLen2 .EQ ZPBIN+8
|
||||
ZPFramePtr2 .EQ ZPBIN+10
|
||||
*--------------------------------------
|
||||
* 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.LIBTCPIP .DA LIBTCPIP
|
||||
L.CFGFILENAME .DA CFGFILENAME
|
||||
L.IPCFG .DA IPCFG
|
||||
.DA 0
|
||||
.DA CS.END-CS.START Code Length To Relocate
|
||||
.DA DS.END-DS.START Data Segment to Allocate
|
||||
*--------------------------------------
|
||||
CS.INIT >LIBLOADP L.LIBTCPIP
|
||||
bcs .99
|
||||
sta hLIBTCPIP
|
||||
ldx #0
|
||||
.1 stz IPCFG,x
|
||||
inx
|
||||
cpx #S.IPCFG
|
||||
bne .1
|
||||
|
||||
jsr CS.INIT.DEV
|
||||
|
||||
bcs .99
|
||||
|
||||
* jsr CS.INIT.CFGFILE continue even if error opening CFG file
|
||||
|
||||
ldx #S.IPCFG.HOSTNAME
|
||||
lda IPCFG,x
|
||||
bne .3
|
||||
|
||||
ldy #0
|
||||
.2 lda DefaultHostName,y
|
||||
sta IPCFG,x
|
||||
beq .3
|
||||
inx
|
||||
iny
|
||||
bne .2
|
||||
|
||||
.3 >PUSHW L.IPCFG
|
||||
>PUSHBI K.PROTOID.IP
|
||||
>SYSCALL SYS.AddNetCfg
|
||||
bcs .99
|
||||
|
||||
lda (pPsContext)
|
||||
ora #S.PS.F.EVENT Now accept events
|
||||
sta (pPsContext)
|
||||
|
||||
clc
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
CS.INIT.DEV ldy #S.PS.hARGS
|
||||
lda (pPsContext),y
|
||||
>PUSHA
|
||||
>PUSHBI $20 Push SEP=' '
|
||||
>PUSHBI 1 Push 1 for getting DEV
|
||||
>SYSCALL SYS.PStrGetTkn
|
||||
bcs .99
|
||||
sta hDEVNAME save DevName for discard
|
||||
>SYSCALL SYS.GetDevByNameA
|
||||
bcs .98
|
||||
|
||||
sta hDev
|
||||
ldx #S.IPCFG.HDEV
|
||||
sta IPCFG,x
|
||||
|
||||
>SYSCALL SYS.GetDevInfoA
|
||||
>STYA ZPQuickPtr1
|
||||
|
||||
ldy #0
|
||||
ldx #S.IPCFG.MAC
|
||||
.1 lda (ZPQuickPtr1),y
|
||||
sta IPCFG,x
|
||||
inx
|
||||
iny
|
||||
cpy #S.IPCFG.MAC+6
|
||||
bne .1
|
||||
|
||||
lda hDEVNAME
|
||||
>SYSCALL SYS.FreeMemA
|
||||
clc
|
||||
rts
|
||||
.98 pha
|
||||
lda hDEVNAME
|
||||
>SYSCALL SYS.FreeMemA
|
||||
pla
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
CS.INIT.CFGFILE >PUSHW L.CFGFILENAME
|
||||
>SYSCALL SYS.ExpandPStr
|
||||
bcs .99
|
||||
sta hCfgFileName
|
||||
>SYSCALL SYS.LoadFileA
|
||||
bcs .98
|
||||
stx hCfgFile
|
||||
>STYA hCfgFileLen
|
||||
txa
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPQuickPtr1
|
||||
|
||||
|
||||
|
||||
|
||||
.89 lda hCfgFile
|
||||
>SYSCALL SYS.FreeMemA
|
||||
|
||||
lda hCfgFileName
|
||||
>SYSCALL SYS.FreeMemA
|
||||
clc
|
||||
rts
|
||||
|
||||
.98 pha
|
||||
lda hCfgFileName
|
||||
>SYSCALL SYS.FreeMemA
|
||||
pla
|
||||
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RUN clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.DOEVENT >PULLW pEvent
|
||||
lda (pEvent)
|
||||
and #S.EVT.F.NET
|
||||
beq .9
|
||||
|
||||
ldy #S.EVT.hDEV
|
||||
lda (pEvent),y
|
||||
cmp hDev
|
||||
beq CS.DOEVENT.NET
|
||||
.9 sec
|
||||
rts
|
||||
|
||||
CS.DOEVENT.NET ldy #S.EVT.DATALO Get Frame hMem
|
||||
lda (pEvent),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPFrameBase1
|
||||
|
||||
ldy #S.EVT.DATAW1 Get Frame Len
|
||||
lda (pEvent),y
|
||||
sta ZPFrameLen1
|
||||
iny
|
||||
lda (pEvent),y
|
||||
sta ZPFrameLen1+1
|
||||
|
||||
ldy #S.ETH.ETHERTYPE
|
||||
lda (ZPFrameBase1),y
|
||||
tax
|
||||
iny
|
||||
lda (ZPFrameBase1),y
|
||||
|
||||
cmp #S.ETH.ETHERTYPE.ARP
|
||||
bne .1
|
||||
cpx /S.ETH.ETHERTYPE.ARP
|
||||
bne .1
|
||||
jsr ARPListener
|
||||
bcc .89
|
||||
rts
|
||||
|
||||
.1 cmp #S.ETH.ETHERTYPE.IP
|
||||
bne .99
|
||||
cpx /S.ETH.ETHERTYPE.IP
|
||||
bne .99
|
||||
|
||||
ldy #S.IP.PROTOCOL
|
||||
lda (ZPFrameBase1),y
|
||||
cmp #S.IP.PROTOCOL.ICMP
|
||||
bne .2
|
||||
jsr ICMPListener
|
||||
bcc .89
|
||||
rts
|
||||
|
||||
.2 cmp #S.IP.PROTOCOL.UDP
|
||||
bne .3
|
||||
>PUSHW ZPFrameLen1
|
||||
>PUSHW ZPFrameBase1
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.UDP.LISTENER
|
||||
bcc .89
|
||||
rts
|
||||
|
||||
.3 cmp #S.IP.PROTOCOL.TCP
|
||||
bne .99
|
||||
>PUSHW ZPFrameLen1
|
||||
>PUSHW ZPFrameBase1
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.TCP.LISTENER
|
||||
bcc .89
|
||||
rts
|
||||
|
||||
.89 >SYSCALL SYS.DestroyEvent
|
||||
clc
|
||||
rts
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.QUIT lda hLIBTCPIP
|
||||
>SYSCALL SYS.FreeMemA
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* PRIVATE
|
||||
*--------------------------------------
|
||||
ARPListener jsr GetIPCFG
|
||||
|
||||
ldy #S.ARP.TPA
|
||||
ldx #S.IPCFG.IP
|
||||
|
||||
.1 lda (ZPFrameBase1),y
|
||||
cmp IPCFG,x
|
||||
bne .9
|
||||
iny
|
||||
inx
|
||||
cpx #S.IPCFG.IP+4
|
||||
bne .1
|
||||
|
||||
ldy #S.ARP.OPERATION+1 HI byte
|
||||
lda (ZPFrameBase1),y
|
||||
cmp #S.ARP.OPERATION.REQ
|
||||
beq ARPListener.REQ
|
||||
|
||||
cmp #S.ARP.OPERATION.REP
|
||||
beq ARPListener.REP
|
||||
|
||||
.9 clc Discard any other ARP frames
|
||||
rts
|
||||
|
||||
ARPListener.REP >LDAXI S.ARP.SHA
|
||||
jsr SetFramePtr1AX
|
||||
>PUSHW ZPFramePtr1
|
||||
>LDAXI S.ARP.SPA
|
||||
jsr SetFramePtr1AX
|
||||
>PUSHW ZPFramePtr1
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.ARP.ADD
|
||||
clc
|
||||
ARPListener.RTS rts
|
||||
|
||||
ARPListener.REQ >LIBCALL hLIBTCPIP,LIBTCPIP.NEW.ARP.FRAME
|
||||
bcs ARPListener.RTS
|
||||
|
||||
phx
|
||||
>STYA ZPFrameBase2
|
||||
ldy #S.ARP.OPERATION+1
|
||||
lda #S.ARP.OPERATION.REP
|
||||
sta (ZPFrameBase2),y
|
||||
|
||||
>LDAXI S.ARP.SHA
|
||||
jsr SetFramePtr1AX
|
||||
|
||||
>LDAXI S.ETH.DSTMAC
|
||||
jsr SetFramePtr2AX
|
||||
|
||||
ldy #6
|
||||
jsr CopyFramePtr12
|
||||
|
||||
>LDAXI S.ARP.THA
|
||||
jsr SetFramePtr2AX
|
||||
|
||||
ldy #10 IP(4) + MAC(6)
|
||||
jsr CopyFramePtr12
|
||||
|
||||
>PUSHW ZPFramePtr1 still point to SHA
|
||||
>LDAXI S.ARP.SPA
|
||||
jsr SetFramePtr1AX
|
||||
>PUSHW ZPFramePtr1
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.ARP.ADD
|
||||
|
||||
ldx #5
|
||||
ldy #S.ARP.SHA+5
|
||||
.4 lda IPCFG+S.IPCFG.MAC,x
|
||||
sta (ZPFrameBase2),y
|
||||
dey
|
||||
dex
|
||||
bpl .4
|
||||
|
||||
ldx #3
|
||||
ldy #S.ARP.SPA+3
|
||||
.5 lda IPCFG+S.IPCFG.IP,x
|
||||
sta (ZPFrameBase2),y
|
||||
dey
|
||||
dex
|
||||
bpl .5
|
||||
|
||||
>PUSHW ZPFrameBase2
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.SEND.ARP.FRAME
|
||||
|
||||
pla
|
||||
>SYSCALL SYS.FreeMemA
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
ICMPListener ldy #S.ICMP.TYPE
|
||||
lda (ZPFrameBase1),y
|
||||
cmp #S.ICMP.TYPE.ECHOREQ
|
||||
bne .9
|
||||
|
||||
jsr GetIPCFG
|
||||
|
||||
ldy #S.IP.DST
|
||||
ldx #S.IPCFG.IP
|
||||
.10 lda (ZPFrameBase1),y
|
||||
cmp IPCFG,x
|
||||
bne .9
|
||||
iny
|
||||
inx
|
||||
cpx #S.IPCFG.IP+4
|
||||
bne .10
|
||||
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.NEW.ICMP.FRAME
|
||||
bcs .9
|
||||
phx
|
||||
>STYA ZPFrameBase2
|
||||
ldy #S.ICMP.TYPE
|
||||
lda #S.ICMP.TYPE.ECHOREP
|
||||
sta (ZPFrameBase2),y
|
||||
jsr MakeIPReply
|
||||
|
||||
ldy #S.ICMP.IDENTIFIER
|
||||
.1 lda (ZPFrameBase1),y
|
||||
sta (ZPFrameBase2),y
|
||||
iny
|
||||
cpy #ZPFrameLen1
|
||||
bne .1
|
||||
|
||||
>PUSHW ZPFrameLen1
|
||||
>PUSHW ZPFrameBase2
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.SEND.ICMP.FRAME
|
||||
|
||||
pla
|
||||
>SYSCALL SYS.FreeMemA
|
||||
clc
|
||||
rts
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
GetIPCFG >LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG
|
||||
>STYA ZPQuickPtr1
|
||||
|
||||
ldy #S.IPCFG
|
||||
.1 dey
|
||||
lda (ZPQuickPtr1),y
|
||||
sta IPCFG,y
|
||||
tya
|
||||
bne .1
|
||||
rts
|
||||
*--------------------------------------
|
||||
MakeIPReply >LDAXI S.IP.SRC
|
||||
jsr SetFramePtr1AX
|
||||
>LDAXI S.IP.DST
|
||||
jsr SetFramePtr2AX
|
||||
ldy #4
|
||||
jsr CopyFramePtr12
|
||||
|
||||
>LDAXI S.IP.DST
|
||||
jsr SetFramePtr1AX
|
||||
>LDAXI S.IP.SRC
|
||||
jsr SetFramePtr2AX
|
||||
ldy #4
|
||||
jsr CopyFramePtr12
|
||||
|
||||
>LDAXI S.ETH.SRCMAC
|
||||
jsr SetFramePtr1AX
|
||||
>LDAXI S.ETH.DSTMAC
|
||||
jsr SetFramePtr2AX
|
||||
ldy #6
|
||||
jsr CopyFramePtr12
|
||||
rts
|
||||
*--------------------------------------
|
||||
* A,X = Frame PTR
|
||||
*--------------------------------------
|
||||
SetFramePtr1AX clc
|
||||
adc ZPFrameBase1
|
||||
sta ZPFramePtr1
|
||||
txa
|
||||
adc ZPFrameBase1+1
|
||||
sta ZPFramePtr1+1
|
||||
rts
|
||||
*--------------------------------------
|
||||
* A,X = Frame PTR
|
||||
*--------------------------------------
|
||||
SetFramePtr2AX clc
|
||||
adc ZPFrameBase2
|
||||
sta ZPFramePtr2
|
||||
txa
|
||||
adc ZPFrameBase2+1
|
||||
sta ZPFramePtr2+1
|
||||
rts
|
||||
*--------------------------------------
|
||||
* Y = bytes to copy from ZPFramePtr1 to ZPFramePtr2
|
||||
*--------------------------------------
|
||||
CopyFramePtr12 dey
|
||||
lda (ZPFramePtr1),y
|
||||
sta (ZPFramePtr2),y
|
||||
tya
|
||||
bne CopyFramePtr12
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
*--------------------------------------
|
||||
LIBTCPIP >PSTRING "libtcpip.o"
|
||||
CFGFILENAME >PSTRING "%ETC%TCPIP.CONF"
|
||||
DefaultHostName >CSTRING "a2osx-host"
|
||||
*--------------------------------------
|
||||
DS.START
|
||||
*--------------------------------------
|
||||
hLIBTCPIP .BS 1
|
||||
hDEVNAME .BS 1
|
||||
hDev .BS 1
|
||||
hCfgFileName .BS 1
|
||||
hCfgFile .BS 1
|
||||
hCfgFileLen .BS 2
|
||||
IPCFG .BS S.IPCFG Get in cache for faster access with ,X
|
||||
*--------------------------------------
|
||||
DS.END
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SBIN/TCPIP.S
|
||||
ASM
|
49
SBIN/TELNETD.S.txt
Normal file
49
SBIN/TELNETD.S.txt
Normal file
|
@ -0,0 +1,49 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF SBIN/TELNETD
|
||||
*--------------------------------------
|
||||
.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 0 Data Segemnt to Allocate
|
||||
*--------------------------------------
|
||||
CS.INIT clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RUN clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.EVENT clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.QUIT clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
MAN
|
||||
SAVE SBIN/TELNETD.S
|
||||
ASM
|
411
SYS/KERNEL.S.BIN.txt
Normal file
411
SYS/KERNEL.S.BIN.txt
Normal file
|
@ -0,0 +1,411 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
*--------------------------------------
|
||||
* S.LoadBinA
|
||||
* in :
|
||||
* A = hMem of FilePath (PSTRING)
|
||||
* out :
|
||||
* Y,A = MEMPTR
|
||||
* X = hMem of Code Segment
|
||||
*--------------------------------------
|
||||
S.LoadBinA sta R.DH save file path
|
||||
jsr S.GetMemByNameA
|
||||
bcs .1 not already loaded
|
||||
>STYA R.AX Save base address
|
||||
ldy #S.MEM.REFCNT
|
||||
lda (R.AX),y
|
||||
inc
|
||||
sta (R.AX),y
|
||||
ldy #S.MEM.PTR
|
||||
lda (R.AX),y
|
||||
pha Y,A = MEM PTR...
|
||||
iny
|
||||
lda (R.AX),y
|
||||
ply X=hMem from S.GetMemByNameA
|
||||
clc
|
||||
rts
|
||||
|
||||
.1 lda R.DH
|
||||
jsr S.LoadFileA
|
||||
bcs .99
|
||||
>STYA R.BX save file length for relocation
|
||||
stx R.DL save hMem
|
||||
txa
|
||||
jsr S.GetMemPtrA
|
||||
>STYA R.AX save base address for relocation
|
||||
lda R.DH
|
||||
jsr S.MLIGetFileInfoA Get File Info for AUXTYPE
|
||||
bcs .98
|
||||
>STYA ZPQuickPtr1
|
||||
ldy #2 get AUXTYPE
|
||||
lda (ZPQuickPtr1),y
|
||||
sta R.CL
|
||||
iny
|
||||
lda (ZPQuickPtr1),y
|
||||
sta R.CH save File load address for relocation
|
||||
lda R.AL compute offset for relocation....
|
||||
sec
|
||||
sbc R.CL ...AX-CX...
|
||||
sta R.CL
|
||||
lda R.AH
|
||||
sbc R.CH
|
||||
sta R.CH ...to CX
|
||||
jsr S.BinRelocate
|
||||
bcs .98 relocation error, dicard Code segment
|
||||
lda R.DH get back bin path
|
||||
jsr S.PStrCpyA
|
||||
bcs .98
|
||||
pha save copy of bin path
|
||||
lda R.DL
|
||||
jsr S.GetMemByIDA
|
||||
>STYA ZPQuickPtr1
|
||||
lda (ZPQuickPtr1)
|
||||
ora #S.MEM.F.CODE This is a code segment
|
||||
sta (ZPQuickPtr1)
|
||||
ldy #S.MEM.BIN
|
||||
pla get back copy of bin path
|
||||
sta (ZPQuickPtr1),y
|
||||
>LDYA R.AX return CS PTR ... not modified by S.LoadCodeReloc
|
||||
ldx R.DL ...and hMEM to Caller
|
||||
clc
|
||||
rts
|
||||
.98 pha
|
||||
lda R.DL
|
||||
jsr S.FreeMemA Discard Loaded Code
|
||||
pla
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.LoadDrvA
|
||||
* in :
|
||||
* A = hMem To Full Cmd Line
|
||||
* out :
|
||||
* none
|
||||
*--------------------------------------
|
||||
S.LoadDrvA >PUSHA push Cmd Line for S.PStrGetTkn
|
||||
>LDYAI MSG.DRVLOAD
|
||||
jsr S.SysScrPPSTR
|
||||
jsr S.CreateDevice
|
||||
bcc .1
|
||||
pha save error code
|
||||
>PULLA discard Cmd Line
|
||||
pla
|
||||
sec
|
||||
rts
|
||||
|
||||
.1 >PUSHBI $20 Push SEP=' '
|
||||
>PUSHBI 0 Push 0 for getting CMD And ARGS
|
||||
jsr S.PStrGetTkn
|
||||
bcs .98
|
||||
ldy #S.DEV.hCMD
|
||||
sta (DEVMGR.DEVPTR),y
|
||||
|
||||
>PUSHA push CMD for S.FileSearch
|
||||
txa
|
||||
ldy #S.DEV.hARGS
|
||||
sta (DEVMGR.DEVPTR),y
|
||||
>PUSHWI ENV.DRV push ENVNAME=DRV
|
||||
ldy #S.PS.hENV
|
||||
lda TSKMGR.TABLE,y Get PS #0 Env
|
||||
>PUSHA
|
||||
jsr S.GetEnvVarP get value for ENV=%DRV%
|
||||
bcs .98
|
||||
|
||||
sta LoadDrv.ENV
|
||||
>PUSHA A=PStr to Value
|
||||
jsr S.FileSearch find File in %DRV%
|
||||
bcs .98 not Found
|
||||
|
||||
sta LoadDrv.BIN
|
||||
jsr S.SysScrPPSTRA
|
||||
|
||||
lda LoadDrv.BIN
|
||||
jsr S.LoadBinA X = BinPath hMem
|
||||
bcs .97
|
||||
>STYA Kernel.JMP save PTR to Code Segment
|
||||
txa
|
||||
ldy #S.DEV.hCS
|
||||
sta (DEVMGR.DEVPTR),y save CS hMem in DEVSLOT
|
||||
|
||||
lda LoadDrv.BIN
|
||||
jsr S.FreeMemA
|
||||
lda LoadDrv.ENV
|
||||
jsr S.FreeMemA
|
||||
|
||||
ldx #DEVMGR.OPEN
|
||||
>LDYA DEVMGR.DEVPTR
|
||||
jsr Kernel.DRVCALL Call DRV Open function
|
||||
bcs .99
|
||||
|
||||
lda (DEVMGR.DEVPTR)
|
||||
ora #S.DEV.F.INUSE Get Device Flags in A
|
||||
sta (DEVMGR.DEVPTR)
|
||||
clc
|
||||
rts
|
||||
|
||||
.97 pha save error code
|
||||
lda LoadDrv.BIN
|
||||
jsr S.FreeMemA discard BIN in case of failed load
|
||||
pla
|
||||
|
||||
.98 pha
|
||||
lda LoadDrv.ENV
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
|
||||
.99 pha
|
||||
jsr S.DestroyDevice
|
||||
pla
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.LoadLib
|
||||
* in :
|
||||
* PULLW = PTR To Lib Name
|
||||
* out :
|
||||
* A = hMem To loaded LIB
|
||||
*--------------------------------------
|
||||
S.LoadLib jsr S.NewPStr
|
||||
bcs .99
|
||||
pha save LibName hMem for discard
|
||||
jsr S.LoadLibA
|
||||
bcs .98
|
||||
plx get back STR hMem
|
||||
pha save error code/hMem
|
||||
txa
|
||||
jsr S.FreeMemA discard STR hMem
|
||||
pla get back error code/hMem
|
||||
clc
|
||||
rts
|
||||
.98 plx get back STR hMem
|
||||
pha save error code/hMem
|
||||
txa
|
||||
jsr S.FreeMemA discard STR hMem
|
||||
pla get back error code/hMem
|
||||
sec
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
* S.LoadLibA
|
||||
* in :
|
||||
* A = hMem To Lib Name
|
||||
* out :
|
||||
* A = hMem of Loaded Lib
|
||||
*--------------------------------------
|
||||
S.LoadLibA >PUSHA push libname for S.FileSearch
|
||||
>LDYAI MSG.LOADLIB
|
||||
jsr S.SysScrPPSTR
|
||||
>PUSHWI ENV.LIB push ENVNAME=LIB
|
||||
ldy #S.PS.hENV
|
||||
lda (TSKMGR.TSKPTR),y
|
||||
>PUSHA
|
||||
jsr S.GetEnvVarP get value for ENV=LIB
|
||||
bcs .99
|
||||
pha save hMem to LIB VALUE
|
||||
>PUSHA Push %LIB% VALUE
|
||||
jsr S.FileSearch find libname in %LIB%
|
||||
bcs .98
|
||||
pha save hMem to LIB full path
|
||||
jsr S.SysScrPPSTRA
|
||||
pla
|
||||
pha
|
||||
jsr S.LoadBinA A = hMem of filename full path
|
||||
bcs .97
|
||||
phx
|
||||
>STYA Kernel.JMP
|
||||
|
||||
ldx #LIBMGR.LOAD
|
||||
jsr Kernel.LIBCALL Call LIB.LOAD function
|
||||
|
||||
bcs .97
|
||||
|
||||
plx
|
||||
pla discard LIB PATH
|
||||
jsr S.FreeMemA
|
||||
pla discard LIB VALUE
|
||||
jsr S.FreeMemA
|
||||
txa
|
||||
clc
|
||||
rts
|
||||
.97 pla discard LIB PATH
|
||||
jsr S.FreeMemA
|
||||
.98 pla discard LIB VALUE
|
||||
jsr S.FreeMemA
|
||||
sec
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
* S.UnloadLibA
|
||||
* in :
|
||||
* A = hMem To Lib
|
||||
* out :
|
||||
*--------------------------------------
|
||||
S.UnloadLibA pha
|
||||
jsr S.GetMemByIDA
|
||||
>STYA ZPQuickPtr1
|
||||
ldy #S.MEM.REFCNT
|
||||
lda (ZPQuickPtr1),y Get count of those referencing this lib
|
||||
dec only one left ?
|
||||
beq .1
|
||||
sta (ZPQuickPtr1),y
|
||||
pla
|
||||
clc
|
||||
rts
|
||||
|
||||
.1 ldy #S.MEM.PTR
|
||||
lda (ZPQuickPtr1),y
|
||||
pha
|
||||
iny
|
||||
lda (ZPQuickPtr1),y
|
||||
ply
|
||||
>STYA Kernel.JMP
|
||||
|
||||
ldx #LIBMGR.UNLOAD
|
||||
jsr Kernel.BINCALL Call LIB.UNLOAD function
|
||||
pla
|
||||
jmp S.FreeMemA
|
||||
*--------------------------------------
|
||||
* S.BinRelocate :
|
||||
* R.AX = base address to start relocate
|
||||
* R.BX = segment length (including data)
|
||||
* R.CX = offset to apply to all abs addresses within segment
|
||||
* R.DX unmodified
|
||||
*--------------------------------------
|
||||
S.BinRelocate lda (R.AX)
|
||||
cmp #K.BIN.MAGICHEADER
|
||||
bne .99
|
||||
ldy #1
|
||||
lda (R.AX),y
|
||||
cmp /K.BIN.MAGICHEADER
|
||||
beq .1
|
||||
.99 sec Not a Valid Relocatable BIN File, exiting
|
||||
rts
|
||||
.1 >PUSHW R.DX
|
||||
lda R.AL
|
||||
clc
|
||||
adc R.BL Make BX end of Segment Range (BX=AX+BX)
|
||||
sta R.BL
|
||||
lda R.AH
|
||||
adc R.BH
|
||||
sta R.BH
|
||||
iny
|
||||
.2 lda (R.AX),y Start Relocate JMP table
|
||||
clc
|
||||
adc R.CL
|
||||
tax save LO to X
|
||||
iny
|
||||
lda (R.AX),y if HI = 0,we are done
|
||||
beq .3
|
||||
adc R.CH
|
||||
sta (R.AX),y
|
||||
dey
|
||||
txa get back LO
|
||||
sta (R.AX),y
|
||||
iny
|
||||
iny
|
||||
bra .2
|
||||
.3 iny we already skipped the 2 "0" bytes indicating end of JMP table
|
||||
lda R.AL
|
||||
clc
|
||||
adc (R.AX),y make DX = end of opcode range
|
||||
sta R.DL
|
||||
iny
|
||||
lda R.AH
|
||||
adc (R.AX),y
|
||||
sta R.DH
|
||||
iny
|
||||
* Start relocating opcodes between R.AX and R.DX with abs addressing pointing between R.AX and R.BX
|
||||
* Applying offset = R.CX
|
||||
tya add current offset in Y to R.AX
|
||||
clc
|
||||
adc R.AL
|
||||
sta ZPQuickPtr1
|
||||
lda #0
|
||||
adc R.AH
|
||||
sta ZPQuickPtr1+1
|
||||
.4 lda (ZPQuickPtr1) get OPCODE
|
||||
tax
|
||||
lda OPCODES,x get OPCODE definition
|
||||
bpl .7 abs addressing?
|
||||
ldy #1
|
||||
lda (ZPQuickPtr1),y Get LO
|
||||
clc
|
||||
adc R.CL add CX to abs address
|
||||
sta ZPQuickPtr2 store relocated addr LO
|
||||
iny
|
||||
lda (ZPQuickPtr1),y Get HI
|
||||
adc R.CH
|
||||
sta ZPQuickPtr2+1 store relocated addr LO
|
||||
dey
|
||||
lda ZPQuickPtr2 Get new LO
|
||||
sec
|
||||
sbc R.AL
|
||||
iny
|
||||
lda ZPQuickPtr2+1 Get new HI
|
||||
sbc R.AH
|
||||
bcc .6 new addr < AX, out of range
|
||||
dey
|
||||
lda ZPQuickPtr2 Get new LO
|
||||
sec
|
||||
sbc R.BL
|
||||
iny
|
||||
lda ZPQuickPtr2+1 Get new HI
|
||||
sbc R.BH
|
||||
bcs .6 new addr > BX, out of range
|
||||
dey
|
||||
lda ZPQuickPtr2 Get new LO
|
||||
sta (ZPQuickPtr1),y
|
||||
iny
|
||||
lda ZPQuickPtr2+1 Get new HI
|
||||
sta (ZPQuickPtr1),y
|
||||
.6 lda OPCODES,x
|
||||
.7 and #$3 get OPCODE length
|
||||
clc
|
||||
adc ZPQuickPtr1
|
||||
sta ZPQuickPtr1
|
||||
bcc .8
|
||||
inc ZPQuickPtr1+1
|
||||
.8 sec A already got Ptr LO
|
||||
sbc R.DL
|
||||
lda ZPQuickPtr1+1 is Ptr greater than DX ?
|
||||
sbc R.DH
|
||||
bcc .4 no, continue relocating
|
||||
>PULLW R.DX
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
MSG.DRVLOAD >PSTRING "\nLoadDrv:"
|
||||
MSG.LOADLIB >PSTRING "\nLoadLib:"
|
||||
LoadDrv.ENV .BS 1
|
||||
LoadDrv.BIN .BS 1
|
||||
|
||||
*--------------------------------------
|
||||
* 65C02 OPCODES
|
||||
* Bit 7 : 1 absolute addressing
|
||||
* Bit 1-0 : opcode + @ length
|
||||
*--------------------------------------
|
||||
* x0.x1.x2.x3.x4.x5.x6.x7.x8.x9.xA.xB.xC.xD.xE.xF
|
||||
OPCODES .HS 01.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
||||
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
|
||||
.HS 83.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
||||
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
|
||||
.HS 01.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
||||
.HS 02.02.02.01.02.02.02.02.01.83.01.01.01.83.83.03
|
||||
.HS 01.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
||||
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
|
||||
.HS 02.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
||||
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
|
||||
.HS 02.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
||||
.HS 02.02.02.01.02.02.02.02.01.83.01.01.83.83.83.03
|
||||
.HS 02.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
||||
.HS 02.02.02.01.02.02.02.02.01.83.01.01.01.83.83.03
|
||||
.HS 02.02.02.01.02.02.02.02.01.02.01.01.83.83.83.03
|
||||
.HS 02.02.02.01.02.02.02.02.01.83.01.01.01.83.83.03
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.BIN
|
||||
LOAD SYS/KERNEL.S
|
||||
ASM
|
248
SYS/KERNEL.S.DEV.txt
Normal file
248
SYS/KERNEL.S.DEV.txt
Normal file
|
@ -0,0 +1,248 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
*--------------------------------------
|
||||
* S.DevMgrInit
|
||||
*--------------------------------------
|
||||
S.DevMgrInit ldx #S.DEV.SIZE*K.DEV.MAX
|
||||
.1 stz DEVMGR.TABLE-1,x
|
||||
dex
|
||||
bne .1
|
||||
|
||||
ldy #5
|
||||
.2 lda DEVMGR.TABLE.NUL,y
|
||||
sta DEVMGR.TABLE,y
|
||||
dey
|
||||
bpl .2
|
||||
|
||||
ldy #5
|
||||
ldx #S.DEV.SIZE+5
|
||||
.3 lda DEVMGR.TABLE.KBD,y
|
||||
sta DEVMGR.TABLE,x
|
||||
dex
|
||||
dey
|
||||
bpl .3
|
||||
|
||||
lda #1 reserve #0=NUL, #1=KBD
|
||||
sta DEVMGR.LASTID
|
||||
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.GetDevByIDA
|
||||
* IN:
|
||||
* A = DevID
|
||||
* OUT:
|
||||
* CC = OK, CS = ERROR
|
||||
* Y,A = devslot
|
||||
* X Unmodified
|
||||
*--------------------------------------
|
||||
S.GetDevByIDA sta ZPQuickPtr1
|
||||
lda #K.DEV.MAX
|
||||
sta ZPQuickPtr1+1
|
||||
|
||||
>LDYAI DEVMGR.TABLE
|
||||
>STYA ZPQuickPtr2
|
||||
|
||||
.1 lda (ZPQuickPtr2) get S.DEV.F
|
||||
bpl .3 In use ?
|
||||
ldy #S.DEV.ID
|
||||
lda (ZPQuickPtr2),y
|
||||
cmp ZPQuickPtr1
|
||||
beq .8
|
||||
|
||||
.2 lda ZPQuickPtr2
|
||||
clc
|
||||
adc #S.DEV.SIZE
|
||||
sta ZPQuickPtr2
|
||||
bcc .3
|
||||
inc ZPQuickPtr2+1
|
||||
|
||||
.3 dec ZPQuickPtr1+1
|
||||
bne .1
|
||||
sec
|
||||
rts
|
||||
|
||||
.8 >LDYA ZPQuickPtr2
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* GetDevIDByNameA
|
||||
* IN:
|
||||
* A = hPStr
|
||||
* OUT:
|
||||
* CC = OK, CS = ERROR
|
||||
* A = DEVID
|
||||
* set DEVMGR.DEVPTR to devslot
|
||||
*--------------------------------------
|
||||
S.GetDevByNameA jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr1
|
||||
>LDYAI DEVMGR.TABLE
|
||||
>STYA DEVMGR.DEVPTR
|
||||
|
||||
ldx #K.DEV.MAX
|
||||
.1 lda (DEVMGR.DEVPTR) get S.DEV.F
|
||||
bpl .3 empty ?
|
||||
lda DEVMGR.DEVPTR
|
||||
clc
|
||||
adc #S.DEV.NAME
|
||||
sta ZPQuickPtr2
|
||||
lda DEVMGR.DEVPTR+1
|
||||
adc /S.DEV.NAME
|
||||
sta ZPQuickPtr2+1
|
||||
lda (ZPQuickPtr1)
|
||||
cmp (ZPQuickPtr2)
|
||||
bne .3
|
||||
tay
|
||||
.2 lda (ZPQuickPtr1),y
|
||||
cmp (ZPQuickPtr2),y
|
||||
bne .3
|
||||
dey
|
||||
bne .2
|
||||
ldy #S.DEV.ID
|
||||
lda (DEVMGR.DEVPTR),y
|
||||
clc
|
||||
rts
|
||||
.3 lda DEVMGR.DEVPTR
|
||||
clc
|
||||
adc #S.DEV.SIZE
|
||||
sta DEVMGR.DEVPTR
|
||||
bcc .5
|
||||
inc DEVMGR.DEVPTR+1
|
||||
.5 dex
|
||||
bne .1
|
||||
lda #DEVMGR.ERRDNF
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.GetDevTable
|
||||
* IN :
|
||||
* OUT CC = OK, CS = ERROR
|
||||
* Y,A = PTR to dev table
|
||||
* X = LASTID
|
||||
*--------------------------------------
|
||||
S.GetDevTable >LDYAI DEVMGR.TABLE
|
||||
|
||||
ldx DEVMGR.LASTID
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.DevOutA
|
||||
* IN :
|
||||
* A = hDev
|
||||
*--------------------------------------
|
||||
S.DevOutA ldx #DEVMGR.OUT
|
||||
jmp S.DevCallFunc
|
||||
*--------------------------------------
|
||||
* S.GetDevInfoA
|
||||
*--------------------------------------
|
||||
S.GetDevInfoA ldx #DEVMGR.GETINFO
|
||||
jmp S.DevCallFunc
|
||||
*--------------------------------------
|
||||
* PRIVATE
|
||||
*--------------------------------------
|
||||
* S.DevOpenA
|
||||
* IN :
|
||||
* A = hDev
|
||||
* OUT CC = OK, CS = ERROR
|
||||
*--------------------------------------
|
||||
S.DevOpenA ldx #DEVMGR.OPEN
|
||||
bra S.DevCallFunc
|
||||
*--------------------------------------
|
||||
* S.DevGetEventA
|
||||
* IN :
|
||||
* A = hDev
|
||||
* OUT CC = OK, CS = ERROR
|
||||
*--------------------------------------
|
||||
S.DevGetEventA ldx #DEVMGR.GETEVENT
|
||||
bra S.DevCallFunc
|
||||
*--------------------------------------
|
||||
* S.DevCloseA
|
||||
*--------------------------------------
|
||||
S.DevCloseA ldx #DEVMGR.CLOSE
|
||||
bra S.DevCallFunc
|
||||
*--------------------------------------
|
||||
S.DevCallFunc jsr S.GetDevByIDA
|
||||
bcs .9
|
||||
>STYA pDevContext
|
||||
ldy #S.DEV.hCS
|
||||
lda (pDevContext),y
|
||||
jsr S.GetMemPtrA X = unmodified
|
||||
>STYA Kernel.JMP
|
||||
>LDYA pDevContext
|
||||
jsr Kernel.DRVCALL Call DRV function
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* S.CreateDevSlot
|
||||
* IN : none
|
||||
* OUT : A = DevID
|
||||
* set DEVMGR.DEVPTR to freeslot
|
||||
* init (DEVMGR.DEVPTR),S.DEV.ID with Dev.ID
|
||||
*--------------------------------------
|
||||
S.CreateDevice >LDYAI DEVMGR.TABLE
|
||||
>STYA DEVMGR.DEVPTR
|
||||
ldx #K.DEV.MAX
|
||||
|
||||
.1 lda (DEVMGR.DEVPTR)
|
||||
bpl .3
|
||||
lda DEVMGR.DEVPTR
|
||||
clc
|
||||
adc #S.DEV.SIZE
|
||||
sta DEVMGR.DEVPTR
|
||||
bcc .2
|
||||
inc DEVMGR.DEVPTR+1
|
||||
.2 dex
|
||||
bne .1
|
||||
lda #DEVMGR.ERROOS
|
||||
sec
|
||||
rts
|
||||
|
||||
.3 lda #0
|
||||
tay
|
||||
.4 sta (DEVMGR.DEVPTR),y
|
||||
iny
|
||||
cpy #S.DEV.SIZE
|
||||
bne .4
|
||||
inc DEVMGR.LASTID
|
||||
lda DEVMGR.LASTID
|
||||
ldy #S.DEV.ID
|
||||
sta (DEVMGR.DEVPTR),y
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.DestroyDevSlot
|
||||
* selected by (DEVMGR.DEVPTR)
|
||||
*--------------------------------------
|
||||
S.DestroyDevice ldy #S.DEV.hCS
|
||||
lda (DEVMGR.DEVPTR),y
|
||||
beq .1
|
||||
jsr S.FreeMemA
|
||||
.1 ldy #S.DEV.hDS
|
||||
lda (DEVMGR.DEVPTR),y
|
||||
beq .2
|
||||
jsr S.FreeMemA
|
||||
.2 ldy #S.DEV.hCMD
|
||||
lda (DEVMGR.DEVPTR),y
|
||||
beq .3
|
||||
jsr S.FreeMemA
|
||||
.3 ldy #S.DEV.hARGS
|
||||
lda (DEVMGR.DEVPTR),y
|
||||
beq .4
|
||||
jsr S.FreeMemA
|
||||
.4 rts
|
||||
*--------------------------------------
|
||||
DEVMGR.TABLE.NUL .DA #S.DEV.F.INUSE+S.DEV.F.CHAR+S.DEV.F.BLOCK
|
||||
.HS 00 ID
|
||||
>PSTRING "NUL" NAME
|
||||
DEVMGR.TABLE.KBD .DA #S.DEV.F.INUSE+S.DEV.F.CHAR
|
||||
.HS 01 ID
|
||||
>PSTRING "KBD" NAME
|
||||
DEVMGR.LASTID .BS 1
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.DEV
|
||||
LOAD SYS/KERNEL.S
|
||||
ASM
|
385
SYS/KERNEL.S.ENV.txt
Normal file
385
SYS/KERNEL.S.ENV.txt
Normal file
|
@ -0,0 +1,385 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
*--------------------------------------
|
||||
* S.ExpandPStr
|
||||
* In:
|
||||
* PULLW = PSTR to String to Expand (PSTRING)
|
||||
* Out:
|
||||
* A = hMem to Expanded String (PSTRING)
|
||||
*--------------------------------------
|
||||
* S.ExpandPStrA
|
||||
* In:
|
||||
* A = hMem of String to Expand (PSTRING)
|
||||
* Out:
|
||||
* A = hMem to Expanded String (PSTRING)
|
||||
*--------------------------------------
|
||||
S.ExpandPStr >PULLW R.AX
|
||||
bra S.ExpandPStr2
|
||||
S.ExpandPStrA jsr S.GetMemPtrA
|
||||
>STYA R.AX
|
||||
S.ExpandPStr2 stz TmpBuffer256 init Expanded String len=0
|
||||
stz R.BL reset "in var"
|
||||
ldy #0
|
||||
.1 iny
|
||||
lda (R.AX),y
|
||||
cmp #'%'
|
||||
beq .10
|
||||
jmp .7
|
||||
.10 ldx R.BL in var?
|
||||
bne .2
|
||||
sty R.BL no, save start
|
||||
jmp .8 skip this char
|
||||
.2 sty R.BH yes, save end
|
||||
phy save Actual char position
|
||||
tya
|
||||
sec
|
||||
sbc R.BL compute len of %VAR% -1
|
||||
tay
|
||||
lda #0
|
||||
>PUSHYA
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem create VARNAME
|
||||
phx save hMem for discard
|
||||
>STYA R.CX
|
||||
lda R.BH
|
||||
sec
|
||||
sbc R.BL
|
||||
dec skip %
|
||||
sta (R.CX)
|
||||
ldy R.BL
|
||||
iny
|
||||
.3 inc R.CL
|
||||
bne .4
|
||||
inc R.CH
|
||||
.4 lda (R.AX),y Copy string between % to ENVNAME
|
||||
sta (R.CX)
|
||||
iny
|
||||
cpy R.BH
|
||||
bne .3
|
||||
pla
|
||||
pha Get back ENVNAME hMem
|
||||
>PUSHA
|
||||
ldy #S.PS.hENV
|
||||
lda (TSKMGR.TSKPTR),y
|
||||
>PUSHA
|
||||
jsr S.GetEnvVarH
|
||||
bcs .5
|
||||
pha save hMem of VALUE
|
||||
jsr S.GetMemPtrA
|
||||
>STYA R.DX
|
||||
ldy #0
|
||||
.41 iny
|
||||
lda (R.DX),y
|
||||
inc TmpBuffer256
|
||||
ldx TmpBuffer256
|
||||
sta TmpBuffer256,x
|
||||
tya
|
||||
cmp (R.DX)
|
||||
bne .41
|
||||
pla
|
||||
jsr S.FreeMemA discard VALUE hMem
|
||||
.5 pla
|
||||
jsr S.FreeMemA discard VARNAME hMem
|
||||
* ldy R.BL TODO:continue scanning from first % found
|
||||
stz R.BL reset "in var"
|
||||
ply
|
||||
bra .8
|
||||
.7 ldx R.BL in var?
|
||||
bne .8 yes, skip this char
|
||||
inc TmpBuffer256
|
||||
ldx TmpBuffer256
|
||||
sta TmpBuffer256,x
|
||||
.8 tya
|
||||
cmp (R.AX) last char?
|
||||
beq .81
|
||||
jmp .1
|
||||
.81 >PUSHWI TmpBuffer256
|
||||
jsr S.NewPStr
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.CreateEnv
|
||||
* in :
|
||||
* out :
|
||||
* A = hMem to new env
|
||||
*--------------------------------------
|
||||
S.CreateEnv >PUSHWI K.ENV.SIZE get a buffer for ENV
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem create it...
|
||||
bcs .9
|
||||
>STYA ZPQuickPtr1
|
||||
lda #0
|
||||
sta (ZPQuickPtr1)
|
||||
txa
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* S.DupEnvA2
|
||||
* In:
|
||||
* A = ENV hMem To Duplicate
|
||||
* Out:
|
||||
* A = hMem to new ENV
|
||||
*--------------------------------------
|
||||
S.DupEnvA pha
|
||||
jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr1
|
||||
pla
|
||||
jsr S.GetMemLenA
|
||||
>PUSHYA
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem
|
||||
bcs .9
|
||||
>STYA ZPQuickPtr2
|
||||
phx
|
||||
.1 lda (ZPQuickPtr1)
|
||||
sta (ZPQuickPtr2)
|
||||
beq .8
|
||||
inc ZPQuickPtr1
|
||||
bne .2
|
||||
inc ZPQuickPtr1+1
|
||||
.2 inc ZPQuickPtr2
|
||||
bne .1
|
||||
inc ZPQuickPtr2+1
|
||||
bra .1
|
||||
.8 pla
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* S.GetEnvVarH
|
||||
* In:
|
||||
* PULLB = hENV
|
||||
* PULLB = hMem to NAME (PSTRING)
|
||||
*--------------------------------------
|
||||
* S.GetEnvVarP
|
||||
* In:
|
||||
* PULLB = hENV
|
||||
* PULLW = PTR to NAME (PSTRING)
|
||||
* Out:
|
||||
* A = hMem to VALUE (PSTRING) 0,"" if not exist
|
||||
*--------------------------------------
|
||||
S.GetEnvVarH jsr S.SelectEnvH
|
||||
bra S.GetEnvVar
|
||||
S.GetEnvVarP jsr S.SelectEnvP
|
||||
S.GetEnvVar bcc .1
|
||||
>LDYAI 1 not found
|
||||
>PUSHYA create "" PSTR
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem create a new PSTR
|
||||
bcs .99
|
||||
>STYA ZPQuickPtr3
|
||||
lda #0
|
||||
sta (ZPQuickPtr3) set len of PSTR
|
||||
txa
|
||||
clc
|
||||
rts
|
||||
.1 lda (ZPQuickPtr1) get NAME=VALUE len
|
||||
sec
|
||||
sbc (ZPQuickPtr2) substract (NAME len)
|
||||
tay y=len("=VALUE")
|
||||
lda #0
|
||||
>PUSHYA
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem create a new PSTR
|
||||
bcs .99
|
||||
>STYA ZPQuickPtr3
|
||||
phx save hMem
|
||||
lda (ZPQuickPtr1) get NAME=VALUE len
|
||||
clc
|
||||
sbc (ZPQuickPtr2) compute VALUE len
|
||||
sta (ZPQuickPtr3) set new PSTR Len
|
||||
tax x = chr to copy
|
||||
lda (ZPQuickPtr2) get name len
|
||||
inc add 1 to skip "="
|
||||
tay
|
||||
.2 iny
|
||||
inc ZPQuickPtr3
|
||||
bne .3
|
||||
inc ZPQuickPtr3+1
|
||||
.3 lda (ZPQuickPtr1),y
|
||||
sta (ZPQuickPtr3)
|
||||
dex
|
||||
bne .2
|
||||
pla get back PSTR hMem
|
||||
clc
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
* S.SetEnvVarH
|
||||
* In:
|
||||
* PULLB = hENV
|
||||
* PULLB = hMem To Name (PSTRING)
|
||||
* PULLB = hMem To Value (PSTRING)
|
||||
*--------------------------------------
|
||||
* S.SetEnvVarP
|
||||
* In:
|
||||
* PULLB = hENV
|
||||
* PULLW = PTR To Name (PSTRING)
|
||||
* PULLW = PTR To Value (PSTRING)
|
||||
* Out:
|
||||
*--------------------------------------
|
||||
S.SetEnvVarH jsr S.SelectEnvH
|
||||
php
|
||||
>PULLA
|
||||
jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr3 ZPQuickPtr3 = VALUE
|
||||
bra S.SetEnvVar
|
||||
|
||||
S.SetEnvVarP jsr S.SelectEnvP
|
||||
php
|
||||
>PULLW ZPQuickPtr3 ZPQuickPtr3 = VALUE
|
||||
|
||||
S.SetEnvVar plp
|
||||
bcs .3 Not Found,ZPQuickPtr1 -> End Of Env
|
||||
lda (ZPQuickPtr1) Found, Discard current NAME definition
|
||||
sec
|
||||
adc ZPQuickPtr1 add NAME=VALUE len+1 to ZPQuickPtr1
|
||||
sta ZPQuickPtr4
|
||||
lda #0
|
||||
adc ZPQuickPtr1+1 store it in ZPQuickPtr4
|
||||
sta ZPQuickPtr4+1
|
||||
.1 lda (ZPQuickPtr4)
|
||||
sta (ZPQuickPtr1)
|
||||
beq .3 until we move ending 0
|
||||
inc ZPQuickPtr1
|
||||
bne .2
|
||||
inc ZPQuickPtr1+1
|
||||
.2 inc ZPQuickPtr4
|
||||
bne .1
|
||||
inc ZPQuickPtr4+1
|
||||
bra .1
|
||||
.3 lda ZPQuickPtr1 Compute ENV UPPER LIMIT
|
||||
clc
|
||||
adc #K.ENV.SIZE
|
||||
sta ZPQuickPtr4
|
||||
lda ZPQuickPtr1+1
|
||||
adc /K.ENV.SIZE
|
||||
sta ZPQuickPtr4+1
|
||||
ldy ZPQuickPtr1+1
|
||||
lda ZPQuickPtr1 Compute New Env Upper limit in A,Y
|
||||
sec
|
||||
adc (ZPQuickPtr2) add NAME len +1(for len)
|
||||
bcc .4
|
||||
iny
|
||||
.4 sec
|
||||
adc (ZPQuickPtr3) add VALUE len +1(for "=")
|
||||
bcc .5
|
||||
iny
|
||||
.5 sec A,Y=new upper limit
|
||||
sbc ZPQuickPtr4 greater than hMem Upper limit ?
|
||||
bcc .51
|
||||
tya
|
||||
sbc ZPQuickPtr4+1
|
||||
bcs .99
|
||||
.51 lda (ZPQuickPtr2) make len = NAME+VALUE+1
|
||||
sec
|
||||
adc (ZPQuickPtr3)
|
||||
sta (ZPQuickPtr1)
|
||||
inc ZPQuickPtr1
|
||||
bne .6
|
||||
inc ZPQuickPtr1+1
|
||||
.6 ldy #0
|
||||
.7 iny
|
||||
lda (ZPQuickPtr2),y
|
||||
sta (ZPQuickPtr1)
|
||||
inc ZPQuickPtr1
|
||||
bne .8
|
||||
inc ZPQuickPtr1+1
|
||||
.8 tya
|
||||
cmp (ZPQuickPtr2)
|
||||
bne .7
|
||||
lda #'='
|
||||
sta (ZPQuickPtr1)
|
||||
inc ZPQuickPtr1
|
||||
bne .9
|
||||
inc ZPQuickPtr1+1
|
||||
.9 ldy #0
|
||||
.10 iny
|
||||
lda (ZPQuickPtr3),y
|
||||
sta (ZPQuickPtr1)
|
||||
inc ZPQuickPtr1
|
||||
bne .11
|
||||
inc ZPQuickPtr1+1
|
||||
.11 tya
|
||||
cmp (ZPQuickPtr3)
|
||||
bne .10
|
||||
lda #0
|
||||
sta (ZPQuickPtr1)
|
||||
clc
|
||||
rts
|
||||
.99 lda #SYSMGR.ERRENVF
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* PRIVATE
|
||||
*--------------------------------------
|
||||
* S.SelectEnvH
|
||||
* In:
|
||||
* PULLB = hENV
|
||||
* PULLB = hMem to NAME (PSTRING)
|
||||
*--------------------------------------
|
||||
* S.SelectEnvP
|
||||
* In:
|
||||
* PULLB = hENV
|
||||
* PULLW = PTR to NAME (PSTRING)
|
||||
*--------------------------------------
|
||||
* Out:
|
||||
* CC: Found
|
||||
* ZPQuickPtr1 -> NAME=VALUE
|
||||
* ZPQuickPtr2 -> NAME
|
||||
* CS: Not Found
|
||||
* ZPQuickPtr1 -> PTR to Ending 0
|
||||
* ZPQuickPtr2 -> NAME
|
||||
*--------------------------------------
|
||||
S.SelectEnvH >PULLA get ENV
|
||||
jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr1 Store ENV
|
||||
>PULLA get NAME
|
||||
jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr2 Store VAR Name
|
||||
bra S.SelectEnv
|
||||
|
||||
S.SelectEnvP >PULLA get ENV
|
||||
jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr1 Store ENV
|
||||
>PULLW ZPQuickPtr2 get NAME
|
||||
|
||||
S.SelectEnv
|
||||
.1 lda (ZPQuickPtr1)
|
||||
beq .9
|
||||
ldy #0
|
||||
.2 iny
|
||||
lda (ZPQuickPtr1),y
|
||||
cmp #'=' End Of VAR Name ?
|
||||
beq .4
|
||||
.3 cmp (ZPQuickPtr2),y
|
||||
bne .7
|
||||
tya
|
||||
cmp (ZPQuickPtr2)
|
||||
bne .2
|
||||
iny
|
||||
lda (ZPQuickPtr1),y
|
||||
cmp #'=' End Of VAR Name ?
|
||||
bne .3
|
||||
.4 dey
|
||||
tya
|
||||
cmp (ZPQuickPtr2) Y = VAR Name Len ?
|
||||
beq .8 yes, found VAR
|
||||
.7 lda (ZPQuickPtr1) no, go to next NAME=VALUE
|
||||
sec
|
||||
adc ZPQuickPtr1
|
||||
sta ZPQuickPtr1
|
||||
bcc .1
|
||||
inc ZPQuickPtr1+1
|
||||
bra .1
|
||||
.8 clc
|
||||
rts
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.ENV
|
||||
LOAD SYS/KERNEL.S
|
||||
ASM
|
180
SYS/KERNEL.S.EVT.txt
Normal file
180
SYS/KERNEL.S.EVT.txt
Normal file
|
@ -0,0 +1,180 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
*--------------------------------------
|
||||
* S.EvtMgrInit
|
||||
*--------------------------------------
|
||||
S.EvtMgrInit stz EVTMGR.PENDING
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* GETEVENT :
|
||||
* IN :
|
||||
* OUT :
|
||||
* CS = no event, A = ERROR
|
||||
* CC * event in YA
|
||||
* (EVTMGR.EVTPTR)
|
||||
*--------------------------------------
|
||||
S.GetEvent lda EVTMGR.PENDING Get Pending EVENT hMem if any
|
||||
beq .1
|
||||
jsr S.GetMemPtrA
|
||||
>STYA EVTMGR.EVTPTR
|
||||
clc
|
||||
rts
|
||||
.1 jsr S.CreateEvent
|
||||
bcs .9
|
||||
stx EVTMGR.PENDING
|
||||
jsr S.GetSysEvent
|
||||
bcc .9 got SYS event
|
||||
jsr S.GetDevEvent
|
||||
bcc .9 got DEV event
|
||||
jsr S.DestroyEvent discard empty event
|
||||
lda #0 error code=0
|
||||
sec no event
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
S.GetSysEvent lda VBL get VLINE status
|
||||
eor EVTMGR.VBLSTATE
|
||||
bpl .2 no change
|
||||
|
||||
sta EVTMGR.VBLSTATE save new
|
||||
|
||||
dec EVTMGR.FRAMECNT
|
||||
bne .2
|
||||
lda #K.TIMER16RESOLUTION
|
||||
sta EVTMGR.FRAMECNT
|
||||
|
||||
inc A2osX.TIMER16
|
||||
bne .1
|
||||
inc A2osX.TIMER16+1
|
||||
|
||||
.1 lda #S.EVT.F.TIMER
|
||||
sta (EVTMGR.EVTPTR)
|
||||
clc
|
||||
rts
|
||||
|
||||
.2 lda KBD
|
||||
bpl .9
|
||||
and #$7F
|
||||
sta KBDSTROBE
|
||||
ldy #S.EVT.DATA
|
||||
sta (EVTMGR.EVTPTR),y
|
||||
iny
|
||||
lda OPENAPPLE
|
||||
asl
|
||||
lda SOLIDAPPLE
|
||||
ror
|
||||
and #$C0
|
||||
sta (EVTMGR.EVTPTR),y
|
||||
lda #S.EVT.F.KEY
|
||||
sta (EVTMGR.EVTPTR)
|
||||
ldy #S.EVT.hDEV
|
||||
lda #1 Source dev = KBD
|
||||
sta (EVTMGR.EVTPTR),y
|
||||
clc
|
||||
rts
|
||||
|
||||
.9 inc A2osX.RANDOM16
|
||||
bne .99
|
||||
inc A2osX.RANDOM16+1
|
||||
.99 lda #0 error code=0
|
||||
sec no event
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.GetDevEvent >LDYAI DEVMGR.TABLE
|
||||
>STYA DEVMGR.DEVPTR
|
||||
ldx #K.DEV.MAX
|
||||
.1 lda (DEVMGR.DEVPTR) get S.DEV.F
|
||||
bpl .3 empty ?
|
||||
and #S.DEV.F.EVENT
|
||||
beq .3 EVENT enabled ?
|
||||
ldy #S.DEV.ID
|
||||
lda (DEVMGR.DEVPTR),y
|
||||
ldy #S.EVT.hDEV
|
||||
sta (EVTMGR.EVTPTR),y
|
||||
ldy #S.DEV.hCS
|
||||
lda (DEVMGR.DEVPTR),y
|
||||
jsr S.GetMemPtrA
|
||||
>STYA Kernel.JMP
|
||||
|
||||
phx
|
||||
>PUSHW EVTMGR.EVTPTR
|
||||
ldx #DEVMGR.GETEVENT
|
||||
|
||||
jsr Kernel.DRVCALL Call DRV GetEvent function
|
||||
|
||||
plx
|
||||
bcc .9 Got An Event
|
||||
|
||||
.3 lda DEVMGR.DEVPTR
|
||||
clc
|
||||
adc #S.DEV.SIZE
|
||||
sta DEVMGR.DEVPTR
|
||||
bcc .4
|
||||
inc DEVMGR.DEVPTR+1
|
||||
.4 dex
|
||||
bne .1
|
||||
lda #0 error code=0
|
||||
sec no event
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* S.CreateEvent
|
||||
* OUT :
|
||||
* X = hMem
|
||||
* Y,A = PTR to EVENT
|
||||
*--------------------------------------
|
||||
S.CreateEvent >PUSHWI S.EVT.SIZE
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem
|
||||
bcs .9
|
||||
>STYA EVTMGR.EVTPTR
|
||||
lda #0
|
||||
ldy #S.EVT.SIZE-1
|
||||
.1 sta (EVTMGR.EVTPTR),y
|
||||
dey
|
||||
bpl .1
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
S.DestroyEvent lda EVTMGR.PENDING
|
||||
beq .9
|
||||
jsr S.DestroyEventA
|
||||
stz EVTMGR.PENDING
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* S.DestroyEvent
|
||||
* IN :
|
||||
* A = Event hMem
|
||||
* OUT :
|
||||
*--------------------------------------
|
||||
S.DestroyEventA pha
|
||||
jsr S.GetMemPtrA
|
||||
>STYA EVTMGR.EVTPTR
|
||||
lda (EVTMGR.EVTPTR)
|
||||
and #S.EVT.F.hMEM1
|
||||
beq .1
|
||||
ldy #S.EVT.DATALO
|
||||
lda (EVTMGR.EVTPTR),y
|
||||
jsr S.FreeMemA
|
||||
.1 lda (EVTMGR.EVTPTR)
|
||||
and #S.EVT.F.hMEM2
|
||||
beq .2
|
||||
ldy #S.EVT.DATAHI
|
||||
lda (EVTMGR.EVTPTR),y
|
||||
jsr S.FreeMemA
|
||||
.2 pla
|
||||
jsr S.FreeMemA
|
||||
rts
|
||||
*--------------------------------------
|
||||
EVTMGR.VBLSTATE .BS 1
|
||||
EVTMGR.FRAMECNT .BS 1
|
||||
EVTMGR.PENDING .BS 1
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.EVT
|
||||
LOAD SYS/KERNEL.S
|
||||
ASM
|
556
SYS/KERNEL.S.FS.txt
Normal file
556
SYS/KERNEL.S.FS.txt
Normal file
|
@ -0,0 +1,556 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
*--------------------------------------
|
||||
* PUBLIC
|
||||
*--------------------------------------
|
||||
S.CheckPrefixA jsr S.GetMemPtrA
|
||||
S.CheckPrefix >STYA MLICALL.PARAMS+1
|
||||
>STYA ZPQuickPtr1
|
||||
lda (ZPQuickPtr1)
|
||||
beq .98
|
||||
tax
|
||||
ldy #1
|
||||
lda (ZPQuickPtr1),y
|
||||
cmp #'/'
|
||||
bne .98
|
||||
cpx #1 "/" allowed for listing online volumes
|
||||
beq .8
|
||||
>KMLICALL MLIGETFILEINFO
|
||||
bcs .98 No, invalid path...
|
||||
lda MLICALL.PARAMS+4 Check file type
|
||||
cmp #$0F Directory?
|
||||
bne .98
|
||||
.8 clc
|
||||
rts
|
||||
.98 lda #SYSMGR.ERRIDIR
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.FileSearch
|
||||
* in :
|
||||
* PULLB = hMem to Search Path (PSTRING) %LIB%;/SYS/SLIB
|
||||
* PULLB = hMem to File Name (PSTRING)
|
||||
* out :
|
||||
* A = hMem of FilePath (PSTRING)
|
||||
*--------------------------------------
|
||||
S.FileSearch >PULLA Get Search path
|
||||
jsr S.ExpandPStrA Expand it
|
||||
bcc .10
|
||||
pha save error code
|
||||
>PULLA discard file name
|
||||
pla
|
||||
sec
|
||||
rts
|
||||
.10 sta R.BL Store Expanded path list to search
|
||||
>PULLB R.AH Store Filename
|
||||
lda #1
|
||||
sta R.BH Start At Token 1
|
||||
.1 >PUSHB R.BL push expanded path list
|
||||
>PUSHBI $3B Push SEP=';'
|
||||
>PUSHB R.BH Push Token IDX
|
||||
jsr S.PStrGetTkn Get R.BL token in A
|
||||
bcs .98
|
||||
sta R.CL Store Token path
|
||||
>PUSHB R.AH push filename
|
||||
>PUSHB R.CL Push Token path
|
||||
jsr S.PStrCat
|
||||
bcs .97
|
||||
sta R.CH Store Full path (Token Path+filename)
|
||||
jsr S.MLIGetFileInfoA
|
||||
bcc .8
|
||||
lda R.CH Discard this Full Path
|
||||
jsr S.FreeMemA
|
||||
lda R.CL Discard Token path
|
||||
jsr S.FreeMemA
|
||||
inc R.BH Try next Token
|
||||
bne .1
|
||||
beq .98 go to discard Expanded path list
|
||||
.97 lda R.CL Discard Token path
|
||||
jsr S.FreeMemA
|
||||
.98 lda R.BL Discard Expanded Path list
|
||||
jsr S.FreeMemA
|
||||
lda #SYSMGR.ERRFNF
|
||||
sec
|
||||
rts
|
||||
.8 jsr .97 Dicard all except Full Path
|
||||
lda R.CH
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.LoadFileA
|
||||
* in :
|
||||
* A = hMem of FilePath (PSTRING)
|
||||
* out :
|
||||
* Y,A = File Length
|
||||
* X = hMem of Loaded File
|
||||
*--------------------------------------
|
||||
S.LoadFileA jsr S.MLIOpenA
|
||||
bcs .99
|
||||
sta R.AL save ref_num
|
||||
stx R.AH save Prodos Buffer for freemem
|
||||
jsr S.MLIGetEOFA
|
||||
bcs .98
|
||||
phx Larger than 64k?
|
||||
plx
|
||||
beq .1 File too big!!!!
|
||||
lda #SYSMGR.ERRFTB
|
||||
bra .98
|
||||
.1 >STYA R.BX save Length
|
||||
>PUSHYA Push Length for S.GetMem
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem
|
||||
bcs .98
|
||||
>STYA R.CX
|
||||
stx R.DL save Segment hMem
|
||||
>PUSHW R.BX Push Length for S.ReadFile
|
||||
>PUSHW R.CX Push Dest PTR
|
||||
>PUSHB R.AL Push ref_num
|
||||
jsr S.MLIRead
|
||||
bcs .97
|
||||
lda R.AL
|
||||
jsr S.MLICloseA
|
||||
lda R.AH
|
||||
jsr S.FreeMemA Discard ProDOS IO Buffer
|
||||
>LDYA R.BX Return File Length...
|
||||
ldx R.DL ...and hMem to Caller
|
||||
clc
|
||||
rts
|
||||
.97 pha
|
||||
lda R.DL
|
||||
jsr S.FreeMemA freemem because of failed load
|
||||
pla
|
||||
.98 pha
|
||||
lda R.AL
|
||||
jsr S.MLICloseA
|
||||
lda R.AH
|
||||
jsr S.FreeMemA ProDOS IO Buffer
|
||||
pla
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.ListDirInitA
|
||||
* in :
|
||||
* A = PATH (PSTR) /DIR,/DIR/*.?s
|
||||
* out :
|
||||
* A = hMem of Dir Listing
|
||||
*--------------------------------------
|
||||
S.ListDirInitA sta R.AL
|
||||
stz TmpFileName Reset File.Pattern
|
||||
jsr S.GetMemPtrA
|
||||
>STYA R.BX Store path
|
||||
jsr S.CheckPrefix is it a existing directory?
|
||||
bcc .4 yes, continue with empty pattern
|
||||
|
||||
lda (R.BX) no, get pattern at end of full path
|
||||
tay
|
||||
ldx #0
|
||||
|
||||
.1 lda (R.BX),y
|
||||
cmp #'/'
|
||||
beq .2
|
||||
inx
|
||||
dey
|
||||
bne .1
|
||||
|
||||
.2 stx TmpFileName
|
||||
txa
|
||||
beq .4
|
||||
|
||||
lda (R.BX)
|
||||
tay
|
||||
|
||||
.3 lda (R.BX),y
|
||||
sta TmpFileName,x
|
||||
dey
|
||||
dex
|
||||
bne .3
|
||||
|
||||
tya
|
||||
sta (R.BX) remove pattern from path
|
||||
|
||||
.4 >PUSHWI S.LISTDIR.SIZE get LISTDIR Struct
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem
|
||||
bcs .99
|
||||
stx R.AH
|
||||
>STYA R.CX Store LISTDIR Struct
|
||||
txa
|
||||
jsr S.ClrMemA reset all bytes
|
||||
|
||||
ldy TmpFileName
|
||||
beq .5
|
||||
|
||||
lda #0
|
||||
>PUSHYA
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem
|
||||
bcs .98
|
||||
>STYA ZPQuickPtr1
|
||||
|
||||
txa
|
||||
ldy #S.LISTDIR.hPATTERN
|
||||
sta (R.CX),y
|
||||
|
||||
ldy TmpFileName
|
||||
.40 lda TmpFileName,y
|
||||
sta (ZPQuickPtr1),y
|
||||
dey
|
||||
bpl .40
|
||||
|
||||
.5 lda (R.BX)
|
||||
cmp #1 length = 1 ? ('/')
|
||||
bne .6
|
||||
jsr S.ListDirInitAV
|
||||
bcs .98
|
||||
lda R.AH
|
||||
rts
|
||||
|
||||
.6 jsr S.ListDirInitAD
|
||||
bcs .98
|
||||
lda R.AH
|
||||
rts
|
||||
|
||||
.98 pha
|
||||
lda R.AH Discard S.LISTDIR
|
||||
jsr S.ListDirCloseA
|
||||
pla
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.ListDirInitAV >PUSHWI 256
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem
|
||||
bcs .99
|
||||
>PUSHYA push buffer for online call
|
||||
txa
|
||||
sta (R.CX) save hONLINE buffer
|
||||
>PUSHBI 0 All devices
|
||||
jsr S.MLIOnline
|
||||
bcs .98
|
||||
ldy #S.LISTDIR.ONLINEPTR
|
||||
lda #0 make index point first Entry
|
||||
sta (R.CX),y
|
||||
clc
|
||||
rts
|
||||
.98 lda (R.CX)
|
||||
jsr S.FreeMemA
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.ListDirInitAD lda #0
|
||||
sta (R.CX) reset hONLINE
|
||||
>LDYA R.BX Open DIR
|
||||
jsr S.MLIOpen
|
||||
bcs .99
|
||||
ldy #S.LISTDIR.REFNUM
|
||||
sta (R.CX),y save ref_num
|
||||
txa
|
||||
ldy #S.LISTDIR.hIOBUF
|
||||
sta (R.CX),y save ProDOS IO buffer hMem
|
||||
|
||||
>PUSHWI 512 get Read buffer
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem
|
||||
bcs .99
|
||||
txa
|
||||
ldy #S.LISTDIR.hREADBUF save Read Buffer hMem
|
||||
sta (R.CX),y
|
||||
jsr S.ListDirReadBlock
|
||||
bcs .99
|
||||
>STYA ZPQuickPtr1
|
||||
|
||||
ldy #$23 get entry_length
|
||||
lda (ZPQuickPtr1),y
|
||||
ldy #S.LISTDIR.EL
|
||||
sta (R.CX),y
|
||||
|
||||
ldy #$24 get entry_per_block
|
||||
lda (ZPQuickPtr1),y
|
||||
ldy #S.LISTDIR.EPB
|
||||
sta (R.CX),y
|
||||
|
||||
ldy #$25 get File_count LO
|
||||
lda (ZPQuickPtr1),y
|
||||
ldy #S.LISTDIR.FC
|
||||
sta (R.CX),y
|
||||
|
||||
ldy #$26 get File_count HI
|
||||
lda (ZPQuickPtr1),y
|
||||
ldy #S.LISTDIR.FC+1
|
||||
sta (R.CX),y
|
||||
|
||||
ldy #S.LISTDIR.FI
|
||||
sta (R.CX),y
|
||||
iny
|
||||
sta (R.CX),y set FI to $0000
|
||||
clc
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
* S.DirListNextA
|
||||
* A = S.LISTDIR hMEM
|
||||
* out :
|
||||
* A = hMem To Dir Entry
|
||||
*--------------------------------------
|
||||
S.ListDirNextA jsr S.GetMemPtrA Get PTR to S.LISTDIR
|
||||
>STYA R.CX
|
||||
lda (R.CX) Online Data?
|
||||
beq S.ListDirNextAD no,list files
|
||||
*--------------------------------------
|
||||
S.ListDirNextAV jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr1 ZPQuickPtr1 = Online DATA
|
||||
.10 ldy #S.LISTDIR.ONLINEPTR
|
||||
lda (R.CX),y
|
||||
cmp #16
|
||||
beq .9
|
||||
|
||||
inc
|
||||
sta (R.CX),y
|
||||
dec
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
tay
|
||||
|
||||
lda (ZPQuickPtr1),y
|
||||
and #$0F
|
||||
beq .10
|
||||
|
||||
sta TmpFileName
|
||||
ldx #0
|
||||
.1 iny
|
||||
inx
|
||||
lda (ZPQuickPtr1),y
|
||||
sta TmpFileName,x
|
||||
cpx TmpFileName
|
||||
bne .1
|
||||
|
||||
>PUSHWI 16
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem
|
||||
bcs .9
|
||||
|
||||
>STYA ZPQuickPtr2
|
||||
|
||||
ldy #15
|
||||
.2 lda TmpFileName,y
|
||||
sta (ZPQuickPtr2),y
|
||||
dey
|
||||
bpl .2
|
||||
|
||||
lda (ZPQuickPtr2) Mark Record as "VOL"
|
||||
ora #$C0
|
||||
sta (ZPQuickPtr2)
|
||||
|
||||
txa Get back hMem of Volume.Name
|
||||
clc
|
||||
rts
|
||||
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.ListDirNextAD stz R.DL Reset Return Record hMem
|
||||
ldy #S.LISTDIR.FI File Index = File count ?
|
||||
lda (R.CX),y
|
||||
ldy #S.LISTDIR.FC
|
||||
cmp (R.CX),y
|
||||
bne .1
|
||||
ldy #S.LISTDIR.FI+1
|
||||
lda (R.CX),y
|
||||
ldy #S.LISTDIR.FC+1
|
||||
cmp (R.CX),y
|
||||
bne .1
|
||||
sec yes, exit no more file
|
||||
rts
|
||||
*--------------------------------------
|
||||
.1 ldy #S.LISTDIR.EIB Entry Index in block = Entry per block ?
|
||||
lda (R.CX),y
|
||||
ldy #S.LISTDIR.EPB
|
||||
cmp (R.CX),y
|
||||
bne .2
|
||||
jsr S.ListDirReadBlock
|
||||
bcc .3
|
||||
rts
|
||||
*--------------------------------------
|
||||
.2 ldy #S.LISTDIR.hREADBUF
|
||||
lda (R.CX),y
|
||||
jsr S.GetMemPtrA
|
||||
.3 >STYA R.AX R.AX = READ BUFFER
|
||||
ldy #S.LISTDIR.BLKPTR
|
||||
lda (R.CX),y
|
||||
clc
|
||||
adc R.AX
|
||||
sta R.AX
|
||||
iny
|
||||
lda (R.CX),y
|
||||
adc R.AX+1
|
||||
sta R.AX+1
|
||||
|
||||
lda (R.AX) Is is a deleted file ? (storage_type=0)
|
||||
and #$F0
|
||||
beq .40
|
||||
|
||||
cmp #$F0 Volume header ?
|
||||
beq .30 yes, do not filter
|
||||
cmp #$E0 Directory header ?
|
||||
beq .30 yes, do not filter
|
||||
|
||||
ldy #S.LISTDIR.hPATTERN any filter ?
|
||||
lda (R.CX),y
|
||||
beq .30
|
||||
jsr S.GetMemPtrA
|
||||
>PUSHYA push Filter hMem
|
||||
|
||||
lda (R.AX)
|
||||
and #$0F
|
||||
sta TmpFileName
|
||||
tay
|
||||
.31 lda (R.AX),y
|
||||
sta TmpFileName,y
|
||||
dey
|
||||
bne .31
|
||||
|
||||
>PUSHWI TmpFileName push Filename
|
||||
jsr S.PStrMatchP
|
||||
bcs .40 no match
|
||||
|
||||
.30 ldy #S.LISTDIR.EL Get Entry length
|
||||
lda (R.CX),y
|
||||
tay
|
||||
lda #0
|
||||
>PUSHYA Get an entry_length buffer
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem
|
||||
bcs .99
|
||||
>STYA R.BX R.BX = DEST RECORD
|
||||
stx R.DL
|
||||
|
||||
ldy #S.LISTDIR.EL
|
||||
lda (R.CX),y
|
||||
tay
|
||||
dey
|
||||
.4 lda (R.AX),y
|
||||
sta (R.BX),y
|
||||
dey
|
||||
bpl .4
|
||||
|
||||
.40 ldy #S.LISTDIR.EIB Set ENTRY INDEX IN BLOCK +=1
|
||||
lda (R.CX),y
|
||||
inc
|
||||
sta (R.CX),y
|
||||
ldy #S.LISTDIR.EL Set BLOCK PTR +=entry_length
|
||||
lda (R.CX),y
|
||||
ldy #S.LISTDIR.BLKPTR
|
||||
clc
|
||||
adc (R.CX),y
|
||||
sta (R.CX),y
|
||||
bcc .5
|
||||
iny
|
||||
lda (R.CX),y
|
||||
inc
|
||||
sta (R.CX),y
|
||||
|
||||
.5 lda (R.AX)
|
||||
and #$E0 is storage_type = $F or $E ?
|
||||
cmp #$E0 yes, do NOT increase FI
|
||||
bne .6
|
||||
|
||||
ldy #S.LISTDIR.FI Increase FILE INDEX
|
||||
lda (R.CX),y
|
||||
inc
|
||||
sta (R.CX),y
|
||||
bne .6
|
||||
iny
|
||||
lda (R.CX),y
|
||||
inc
|
||||
sta (R.CX),y
|
||||
|
||||
.6 lda R.DL
|
||||
bne .8
|
||||
jmp S.ListDirNextAD Nothing to return, start over for next file entry
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.DirListCloseA
|
||||
* in :
|
||||
* A = hS.LISTDIR
|
||||
*--------------------------------------
|
||||
S.ListDirCloseA pha
|
||||
jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr1
|
||||
ldy #S.LISTDIR.REFNUM
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .1
|
||||
jsr S.MLICloseA
|
||||
bcs * If Close Failed, we cannot free IOBUF
|
||||
|
||||
.1 ldy #S.LISTDIR.hIOBUF
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .2
|
||||
jsr S.FreeMemA
|
||||
|
||||
.2 ldy #S.LISTDIR.hREADBUF
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .3
|
||||
jsr S.FreeMemA
|
||||
|
||||
.3 lda (ZPQuickPtr1) Online buffer
|
||||
beq .4
|
||||
jsr S.FreeMemA
|
||||
|
||||
.4 ldy #S.LISTDIR.hPATTERN
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .5
|
||||
jsr S.FreeMemA
|
||||
|
||||
.5 pla
|
||||
jsr S.FreeMemA
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* PRIVATE
|
||||
*--------------------------------------
|
||||
* S.ListDirReadBlock
|
||||
* In :
|
||||
* CX = LISTDIR
|
||||
* Out :
|
||||
* Y,A = READ BUFFER
|
||||
*--------------------------------------
|
||||
S.ListDirReadBlock
|
||||
ldy #S.LISTDIR.REFNUM
|
||||
lda (R.CX),y get ref_num
|
||||
sta MLICALL.PARAMS+1
|
||||
ldy #S.LISTDIR.hREADBUF
|
||||
lda (R.CX),y get READ BUFFER
|
||||
jsr S.GetMemPtrA
|
||||
>STYA MLICALL.PARAMS+2
|
||||
>LDYAI 512
|
||||
>STYA MLICALL.PARAMS+4
|
||||
>KMLICALL MLIREAD
|
||||
bcs .9
|
||||
ldy #S.LISTDIR.BLKPTR set BLKPTR to $0004
|
||||
lda #4
|
||||
sta (R.CX),y
|
||||
iny
|
||||
lda #0
|
||||
sta (R.CX),y
|
||||
ldy #S.LISTDIR.EIB set EIB to 0
|
||||
sta (R.CX),y
|
||||
>LDYA MLICALL.PARAMS+2
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
TmpFileName .BS 16
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.FS
|
||||
LOAD SYS/KERNEL.S
|
||||
ASM
|
0
SYS/KERNEL.S.MD5.txt
Normal file
0
SYS/KERNEL.S.MD5.txt
Normal file
474
SYS/KERNEL.S.MEM.txt
Normal file
474
SYS/KERNEL.S.MEM.txt
Normal file
|
@ -0,0 +1,474 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
*--------------------------------------
|
||||
* !!!!!!!! DO NOT USE VCPU16 !!!!!!!!
|
||||
* !!!!!! DO NOT USE ZPQuickPTRs !!!!!
|
||||
*--------------------------------------
|
||||
ZPMemMgrReqS .EQ ZPMemMgr store requested Size
|
||||
ZPMemMgrReqF .EQ ZPMemMgr+2 store requested Flags
|
||||
ZPMemMgrSPtr .EQ ZPMemMgr+6 Pointer To Slot selected
|
||||
ZPMemMgrTmp1 .EQ ZPMemMgr+8
|
||||
ZPMemMgrTmp2 .EQ ZPMemMgr+10
|
||||
ZPMemMgrTmp3 .EQ ZPMemMgr+12
|
||||
*--------------------------------------
|
||||
* TODO :
|
||||
* Create a 256 bytes table in SLOT #0
|
||||
* (eh, mem.ID=0 always used! useful to test if hMem=0)
|
||||
* mapping hMem's to real memory blocks to help
|
||||
* Garbage collector move blocks
|
||||
*--------------------------------------
|
||||
S.MemMgrInit ldx /A2osX.LOMEM
|
||||
lda #A2osX.LOMEM
|
||||
beq .1
|
||||
inx
|
||||
.1 phx
|
||||
txa
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
tay
|
||||
txa
|
||||
and #7
|
||||
tax
|
||||
lda #$80
|
||||
.2 dex
|
||||
bmi .3
|
||||
lsr
|
||||
bra .2
|
||||
.3 and MEMTABL,y
|
||||
bne .4
|
||||
plx
|
||||
inx
|
||||
cpx /MLI
|
||||
bne .1
|
||||
bra .5
|
||||
.4 plx
|
||||
.5 stz MEMMGR.MHLIMIT
|
||||
stz MEMMGR.HIMEM
|
||||
stx MEMMGR.MHLIMIT+1
|
||||
stx MEMMGR.HIMEM+1
|
||||
>LDYAI A2osX.LOMEM
|
||||
>STYA MEMMGR.LOMEM
|
||||
>STYA MEMMGR.MLLIMIT
|
||||
stz MEMMGR.TABLESIZE Init Table Size to 0
|
||||
* jsr S.UpdateMemStats Not needed, will be called by S.GetMem
|
||||
>PUSHWI 256 get a 256 bytes buffer for Map Table, hMem=0
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem create it...
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* PUBLIC
|
||||
*--------------------------------------
|
||||
S.SetLowMemLimit
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.GarbageCollector
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.GetMem
|
||||
* In:
|
||||
* PULLB = FLAGS
|
||||
* PULLW = Size Requested
|
||||
* Out:
|
||||
* YA = PTR to Mem
|
||||
* X = S.MEM.ID
|
||||
* CS on err
|
||||
*--------------------------------------
|
||||
S.GetMem >PULLB ZPMemMgrReqF store requested flags
|
||||
>PULLW ZPMemMgrReqS store requested size
|
||||
lda ZPMemMgrReqS align REQS to 16 bytes
|
||||
and #$0F
|
||||
beq .10
|
||||
lda ZPMemMgrReqS
|
||||
and #$F0
|
||||
clc
|
||||
adc #$10
|
||||
sta ZPMemMgrReqS
|
||||
bcc .10
|
||||
inc ZPMemMgrReqS+1
|
||||
.10 ldx #0 init to SLOT #0 of MEMSLOT list
|
||||
lda MEMMGR.TABLESIZE Check if some free slot to reuse first
|
||||
beq .6
|
||||
.1 txa
|
||||
jsr S.GetMemByIDA
|
||||
lda (ZPMemMgrSPtr) Get Flags
|
||||
bmi .4 in use ?
|
||||
.2 lda ZPMemMgrReqF Found an empty slot
|
||||
and #S.MEM.F.ALIGN is request needs a page align ?
|
||||
beq .3
|
||||
ldy #S.MEM.PTR
|
||||
lda (ZPMemMgrSPtr),y get LO of PTR
|
||||
bne .4 not page-aligned
|
||||
.3 ldy #S.MEM.LEN
|
||||
lda (ZPMemMgrSPtr),y get LEN of this block
|
||||
cmp ZPMemMgrReqS compare with requested size
|
||||
bne .4
|
||||
iny
|
||||
lda (ZPMemMgrSPtr),y
|
||||
cmp ZPMemMgrReqS+1
|
||||
beq .5 requested size matches slot size !!!
|
||||
.4 inx move to next slot
|
||||
cpx MEMMGR.TABLESIZE last slot ?
|
||||
bne .1 check for another slot
|
||||
beq .6 last one, create a new slot
|
||||
*-------------- Reuse this SLOT
|
||||
.5 lda ZPMemMgrReqF get requested flags
|
||||
ora #S.MEM.F.INUSE mark as in use
|
||||
sta (ZPMemMgrSPtr)
|
||||
lda #0
|
||||
ldy #S.MEM.BIN
|
||||
sta (ZPMemMgrSPtr),y
|
||||
inc Mark this slot used by one task
|
||||
ldy #S.MEM.REFCNT
|
||||
sta (ZPMemMgrSPtr),y
|
||||
ldy #S.PS.ID
|
||||
lda (TSKMGR.TSKPTR),y
|
||||
ldy #S.MEM.OWNERPID
|
||||
sta (ZPMemMgrSPtr),y
|
||||
ldy #S.MEM.PTR
|
||||
lda (ZPMemMgrSPtr),y
|
||||
pha
|
||||
iny
|
||||
lda (ZPMemMgrSPtr),y A = HI PTR
|
||||
ply Y = LO PTR
|
||||
clc X = Current hMem
|
||||
rts
|
||||
*-------------- Create a New SLOT
|
||||
.6 lda ZPMemMgrReqF
|
||||
and #S.MEM.F.ALIGN is request needs a page align ?
|
||||
beq .7
|
||||
lda MEMMGR.MHLIMIT target PTR will be page aligned ?
|
||||
sec
|
||||
sbc ZPMemMgrReqS
|
||||
beq .7 yes, allocate
|
||||
tay no, reserve a free slot to fill gap
|
||||
lda #0
|
||||
jsr S.AddSlot
|
||||
bcs .99
|
||||
.7 >LDYA ZPMemMgrReqS
|
||||
jsr S.AddSlot
|
||||
bcs .99
|
||||
phx Save hMem
|
||||
>STYA ZPMemMgrTmp1
|
||||
lda ZPMemMgrReqF
|
||||
ora #S.MEM.F.INUSE
|
||||
sta (ZPMemMgrSPtr) set Flags
|
||||
lda #1
|
||||
ldy #S.MEM.REFCNT Mark this slot referenced
|
||||
sta (ZPMemMgrSPtr),y
|
||||
ldy #S.PS.ID
|
||||
lda (TSKMGR.TSKPTR),y
|
||||
ldy #S.MEM.OWNERPID
|
||||
sta (ZPMemMgrSPtr),y
|
||||
jsr S.UpdateMemStats
|
||||
>LDYA ZPMemMgrTmp1 Y,A = PTR
|
||||
plx X = hMem
|
||||
clc
|
||||
rts
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.FreeMemA
|
||||
* In:
|
||||
* A = hMem To Free
|
||||
* Out:
|
||||
* X,Y unmodified
|
||||
*--------------------------------------
|
||||
S.FreeMemA and #$FF
|
||||
bne S.FreeMemA0 Slot=0, reserved by Kernel
|
||||
rts
|
||||
|
||||
S.FreeMemA0 phy
|
||||
phx
|
||||
jsr S.GetMemByIDA
|
||||
lda (ZPMemMgrSPtr)
|
||||
bmi .10 In use ?
|
||||
bra *
|
||||
|
||||
.10 ldy #S.MEM.REFCNT
|
||||
lda (ZPMemMgrSPtr),y Get count of those referencing this hMem
|
||||
dec only one left ?
|
||||
sta (ZPMemMgrSPtr),y
|
||||
bne .82 no, must be a code segment loaded several times
|
||||
|
||||
ldy #S.MEM.BIN
|
||||
lda (ZPMemMgrSPtr),y Any BINPATH to discard ?
|
||||
beq .11
|
||||
|
||||
pha save hMem
|
||||
>PUSHW ZPMemMgrSPtr
|
||||
pla
|
||||
jsr S.GetMemByIDA
|
||||
lda (ZPMemMgrSPtr)
|
||||
bmi .12 In use ?
|
||||
bra *
|
||||
|
||||
.12 lda (ZPMemMgrSPtr) mark record as free
|
||||
and #$7F
|
||||
sta (ZPMemMgrSPtr)
|
||||
>PULLW ZPMemMgrSPtr
|
||||
|
||||
.11 lda (ZPMemMgrSPtr) mark record as free
|
||||
and #$7F
|
||||
sta (ZPMemMgrSPtr)
|
||||
|
||||
.20 lda MEMMGR.TABLESIZE
|
||||
beq .82
|
||||
.21 dec
|
||||
jsr S.GetMemByIDA
|
||||
lda (ZPMemMgrSPtr)
|
||||
bmi .81
|
||||
dec MEMMGR.TABLESIZE discard last record
|
||||
ldy #S.MEM.LEN
|
||||
lda (ZPMemMgrSPtr),y give back LEN bytes
|
||||
clc
|
||||
adc MEMMGR.MHLIMIT to HLIMIT
|
||||
sta MEMMGR.MHLIMIT
|
||||
iny
|
||||
lda (ZPMemMgrSPtr),y
|
||||
adc MEMMGR.MHLIMIT+1
|
||||
sta MEMMGR.MHLIMIT+1
|
||||
lda MEMMGR.MLLIMIT And give back S.MEM.SIZE
|
||||
sec
|
||||
sbc #S.MEM.SIZE
|
||||
sta MEMMGR.MLLIMIT to LLIMIT
|
||||
bcs .2
|
||||
dec MEMMGR.MLLIMIT+1
|
||||
.2 lda MEMMGR.TABLESIZE
|
||||
bne .21 no slot left, exit
|
||||
.81 jsr S.UpdateMemStats
|
||||
.82 plx
|
||||
ply
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* IN/OUT
|
||||
* A = hMem
|
||||
*--------------------------------------
|
||||
S.ClrMemA pha
|
||||
jsr S.GetMemByIDA
|
||||
ldy #S.MEM.LEN ZPMemMgrSPtr already set by S.GetMemByIDA
|
||||
lda (ZPMemMgrSPtr),y
|
||||
sta ZPMemMgrReqS set ZPMemMgrReqS to mem size
|
||||
iny
|
||||
lda (ZPMemMgrSPtr),y
|
||||
sta ZPMemMgrReqS+1
|
||||
ldy #S.MEM.PTR
|
||||
lda (ZPMemMgrSPtr),y
|
||||
tax
|
||||
iny
|
||||
lda (ZPMemMgrSPtr),y
|
||||
stx ZPMemMgrSPtr
|
||||
sta ZPMemMgrSPtr+1 set ZPMemMgrSPtr to Mem
|
||||
lda #0
|
||||
.1 ldx ZPMemMgrReqS
|
||||
bne .2
|
||||
ldx ZPMemMgrReqS+1
|
||||
beq .3
|
||||
dec ZPMemMgrReqS+1
|
||||
.2 dec ZPMemMgrReqS
|
||||
sta (ZPMemMgrSPtr)
|
||||
inc ZPMemMgrSPtr
|
||||
bne .1
|
||||
inc ZPMemMgrSPtr+1
|
||||
bra .1
|
||||
.3 pla
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.GetMemByIDA
|
||||
* In:
|
||||
* A = hMem
|
||||
* Out:
|
||||
* Y,A = ZPMemMgrSPtr = PTR to S.MEM
|
||||
* X unmodified
|
||||
*--------------------------------------
|
||||
S.GetMemByIDA stz ZPMemMgrSPtr+1
|
||||
asl
|
||||
rol ZPMemMgrSPtr+1
|
||||
asl
|
||||
rol ZPMemMgrSPtr+1
|
||||
asl
|
||||
rol ZPMemMgrSPtr+1
|
||||
clc
|
||||
adc MEMMGR.LOMEM
|
||||
sta ZPMemMgrSPtr
|
||||
tay
|
||||
lda ZPMemMgrSPtr+1
|
||||
adc MEMMGR.LOMEM+1
|
||||
sta ZPMemMgrSPtr+1
|
||||
rts
|
||||
*--------------------------------------
|
||||
* In:
|
||||
* A = hMem to BINPATH (PSTR)
|
||||
* Out:
|
||||
* Y,A = ZPMemMgrSPtr = PTR to S.MEM
|
||||
* X = hMem
|
||||
*--------------------------------------
|
||||
S.GetMemByNameA jsr S.GetMemPtrA
|
||||
>STYA ZPMemMgrTmp1 save BINPATH
|
||||
>LDYA MEMMGR.LOMEM
|
||||
>STYA ZPMemMgrTmp2
|
||||
ldx #0
|
||||
.1 lda (ZPMemMgrTmp2)
|
||||
bpl .6 In Use?
|
||||
ldy #S.MEM.BIN any BIN PATH in this slot?
|
||||
lda (ZPMemMgrTmp2),y
|
||||
beq .6
|
||||
jsr S.GetMemPtrA get pathname
|
||||
>STYA ZPMemMgrTmp3
|
||||
ldy #0
|
||||
.2 lda (ZPMemMgrTmp1),y
|
||||
cmp (ZPMemMgrTmp3),y
|
||||
bne .6
|
||||
tya
|
||||
iny
|
||||
cmp (ZPMemMgrTmp1)
|
||||
bne .2
|
||||
>LDYA ZPMemMgrTmp2
|
||||
clc
|
||||
rts
|
||||
.6 lda ZPMemMgrTmp2
|
||||
clc
|
||||
adc #S.MEM.SIZE
|
||||
sta ZPMemMgrTmp2
|
||||
bcc .7
|
||||
inc ZPMemMgrTmp2+1
|
||||
.7 inx
|
||||
cpx MEMMGR.TABLESIZE
|
||||
bne .1
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.GetMemPtrA
|
||||
* In:
|
||||
* A = hMem
|
||||
* Out:
|
||||
* Y,A = PTR to MemBlock
|
||||
* X unmodified
|
||||
*--------------------------------------
|
||||
S.GetMemPtrA jsr S.GetMemByIDA
|
||||
ldy #S.MEM.PTR
|
||||
lda (ZPMemMgrSPtr),y
|
||||
pha
|
||||
iny
|
||||
lda (ZPMemMgrSPtr),y
|
||||
ply
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.GetMemLenA
|
||||
* In:
|
||||
* A = hMem
|
||||
* Out:
|
||||
* Y,A = PTR to MemLength
|
||||
* X unmodified
|
||||
*--------------------------------------
|
||||
S.GetMemLenA jsr S.GetMemByIDA
|
||||
ldy #S.MEM.LEN
|
||||
lda (ZPMemMgrSPtr),y
|
||||
pha
|
||||
iny
|
||||
lda (ZPMemMgrSPtr),y
|
||||
ply
|
||||
rts
|
||||
*--------------------------------------
|
||||
* PRIVATE
|
||||
*--------------------------------------
|
||||
* S.AddSlot
|
||||
* In:
|
||||
* Y,A = Requested size
|
||||
* Out:
|
||||
* Y,A = PTR to MemSlot
|
||||
* X = SLOT.ID
|
||||
*--------------------------------------
|
||||
S.AddSlot >STYA ZPMemMgrTmp1 save req size
|
||||
lda MEMMGR.TABLESIZE
|
||||
inc
|
||||
beq .99 > 255 ERR:OUT OF SLOT
|
||||
dec
|
||||
jsr S.GetMemByIDA yes, get PTR to slot
|
||||
|
||||
lda MEMMGR.MHLIMIT Compute base PTR=HLIMIT-REQ size
|
||||
sec
|
||||
sbc ZPMemMgrTmp1
|
||||
sta ZPMemMgrTmp2 store new HLIMIT in ZPMemMgrTmp2
|
||||
lda MEMMGR.MHLIMIT+1
|
||||
sbc ZPMemMgrTmp1+1
|
||||
sta ZPMemMgrTmp2+1
|
||||
|
||||
lda MEMMGR.MLLIMIT compute new LLIMIT
|
||||
clc
|
||||
adc #S.MEM.SIZE
|
||||
sta ZPMemMgrTmp3 store new LLIMIT in ZPMemMgrTmp3
|
||||
lda MEMMGR.MLLIMIT+1
|
||||
adc #0
|
||||
sta ZPMemMgrTmp3+1
|
||||
|
||||
lda ZPMemMgrTmp2 ensure new LLIMIT is not higher
|
||||
sec than new HLIMIT
|
||||
sbc ZPMemMgrTmp3
|
||||
lda ZPMemMgrTmp2+1
|
||||
sbc ZPMemMgrTmp3+1
|
||||
bcc .98 ERR out of mem
|
||||
|
||||
>LDYA ZPMemMgrTmp3 get new LLIMIT
|
||||
>STYA MEMMGR.MLLIMIT And set it allocated
|
||||
|
||||
lda #0
|
||||
sta (ZPMemMgrSPtr)
|
||||
ldy #S.MEM.BIN
|
||||
sta (ZPMemMgrSPtr),y
|
||||
ldy #S.MEM.REFCNT
|
||||
sta (ZPMemMgrSPtr),y
|
||||
ldy #S.MEM.OWNERPID
|
||||
sta (ZPMemMgrSPtr),y
|
||||
|
||||
ldy #S.MEM.PTR
|
||||
lda ZPMemMgrTmp2 get new HLIMIT
|
||||
sta MEMMGR.MHLIMIT set as system HLIMIT value
|
||||
sta (ZPMemMgrSPtr),y store is as base address of new slot
|
||||
iny
|
||||
lda ZPMemMgrTmp2+1
|
||||
sta MEMMGR.MHLIMIT+1
|
||||
sta (ZPMemMgrSPtr),y
|
||||
|
||||
ldy #S.MEM.LEN
|
||||
lda ZPMemMgrTmp1 get requested size
|
||||
sta (ZPMemMgrSPtr),y setup slot LEN
|
||||
iny
|
||||
lda ZPMemMgrTmp1+1
|
||||
sta (ZPMemMgrSPtr),y
|
||||
|
||||
>LDYA ZPMemMgrTmp2 Y,A = PTR
|
||||
ldx MEMMGR.TABLESIZE X = SLOT.ID
|
||||
inc MEMMGR.TABLESIZE mark this slot allocated
|
||||
clc
|
||||
rts
|
||||
.98 lda #MEMMGR.ERROOM
|
||||
sec
|
||||
rts
|
||||
.99 lda #MEMMGR.ERROOS
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.UpdateMemStats
|
||||
lda MEMMGR.MHLIMIT
|
||||
sec
|
||||
sbc MEMMGR.MLLIMIT
|
||||
sta MEMMGR.MFREE
|
||||
lda MEMMGR.MHLIMIT+1
|
||||
sbc MEMMGR.MLLIMIT+1
|
||||
sta MEMMGR.MFREE+1
|
||||
rts
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.MEM
|
||||
LOAD SYS/KERNEL.S
|
||||
ASM
|
151
SYS/KERNEL.S.MLI.txt
Normal file
151
SYS/KERNEL.S.MLI.txt
Normal file
|
@ -0,0 +1,151 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
*--------------------------------------
|
||||
* PUBLIC
|
||||
*--------------------------------------
|
||||
S.MLICreate
|
||||
S.MLIDestroy
|
||||
S.MLIRename
|
||||
S.MLISetFileInfo
|
||||
*--------------------------------------
|
||||
* S.MLIGetFileInfoA
|
||||
* in :
|
||||
* A = hMem To FileName
|
||||
* out :
|
||||
* Y,A = PTR To Buffer (L=15)
|
||||
*--------------------------------------
|
||||
S.MLIGetFileInfoA
|
||||
jsr S.GetMemPtrA
|
||||
S.MLIGetFileInfo
|
||||
>STYA MLICALL.PARAMS+1
|
||||
>KMLICALL MLIGETFILEINFO
|
||||
bcs .9
|
||||
>LDYAI MLICALL.PARAMS+3
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* S.MLIOnline
|
||||
* in :
|
||||
* PULLB = Device
|
||||
* PULLW = Dest PTR
|
||||
*--------------------------------------
|
||||
S.MLIOnline >PULLB MLICALL.PARAMS+1
|
||||
>PULLW MLICALL.PARAMS+2
|
||||
>KMLICALL MLIONLINE
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.MLISetPrefix
|
||||
*--------------------------------------
|
||||
S.MLIGetPrefixA jsr S.GetMemPtrA
|
||||
S.MLIGetPrefix >STYA MLICALL.PARAMS+1
|
||||
>KMLICALL MLIGETPREFIX
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.MLIOpenA
|
||||
* in :
|
||||
* A = hMem To FileName
|
||||
* out :
|
||||
* A = ref_num
|
||||
* X = buf hMem
|
||||
*--------------------------------------
|
||||
S.MLIOpenA jsr S.GetMemPtrA
|
||||
S.MLIOpen >STYA MLICALL.PARAMS+1
|
||||
>PUSHWI 1024 get a ProDOS IO buffer
|
||||
>PUSHBI S.MEM.F.ALIGN+S.MEM.F.NOMOV
|
||||
jsr S.GetMem
|
||||
bcs .99
|
||||
phx save Prodos Buffer hMem
|
||||
>STYA MLICALL.PARAMS+3
|
||||
>KMLICALL MLIOPEN
|
||||
bcs .98
|
||||
lda MLICALL.PARAMS+5 get ref_num
|
||||
plx get back Prodos Buffer hMem
|
||||
rts CC
|
||||
.98 plx get back Prodos Buffer hMem
|
||||
pha save MLI error
|
||||
txa
|
||||
jsr S.FreeMemA discard Prodos Buffer
|
||||
pla get back MLI error
|
||||
sec
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
* S.MLINewline
|
||||
* in :
|
||||
* PULLB = ref_num
|
||||
* PULLB = Enable Mask
|
||||
* PULLB = Newline Char
|
||||
*--------------------------------------
|
||||
S.MLINewLine >PULLB MLICALL.PARAMS+1
|
||||
>PULLB MLICALL.PARAMS+2
|
||||
>PULLB MLICALL.PARAMS+3
|
||||
>KMLICALL MLINEWLINE
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.MLIRead
|
||||
* in :
|
||||
* PULLB = ref_num
|
||||
* PULLW = Dest PTR
|
||||
* PULLW = Bytes To Read
|
||||
* out :
|
||||
* Y,A = Bytes Read
|
||||
*--------------------------------------
|
||||
S.MLIRead >PULLB MLICALL.PARAMS+1
|
||||
>PULLW MLICALL.PARAMS+2
|
||||
>PULLW MLICALL.PARAMS+4
|
||||
>KMLICALL MLIREAD
|
||||
bcs .9
|
||||
>LDYA MLICALL.PARAMS+6
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* S.MLIWrite
|
||||
* in :
|
||||
* PULLB = ref_num
|
||||
* PULLW = Dest PTR
|
||||
* PULLW = Bytes To Read
|
||||
* out :
|
||||
* Y,A = Bytes Written
|
||||
*--------------------------------------
|
||||
S.MLIWrite >PULLB MLICALL.PARAMS+1
|
||||
>PULLW MLICALL.PARAMS+2
|
||||
>PULLW MLICALL.PARAMS+4
|
||||
>KMLICALL MLIWRITE
|
||||
bcs .9
|
||||
>LDYA MLICALL.PARAMS+6
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* S.MLIClose
|
||||
* in :
|
||||
* A = ref_num
|
||||
* out :
|
||||
*--------------------------------------
|
||||
S.MLICloseA sta MLICALL.PARAMS+1
|
||||
>KMLICALL MLICLOSE
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.MLIFlushA
|
||||
S.MLISetMark
|
||||
S.MLIGetMark
|
||||
S.MLISetEOF
|
||||
*--------------------------------------
|
||||
* S.MLIGetEOF
|
||||
* in :
|
||||
* A = ref_num
|
||||
* out :
|
||||
* Y,A,X = EOF
|
||||
*--------------------------------------
|
||||
S.MLIGetEOFA sta MLICALL.PARAMS+1
|
||||
>KMLICALL MLIGETEOF
|
||||
bcs .9
|
||||
>LDYA MLICALL.PARAMS+2
|
||||
ldx MLICALL.PARAMS+4
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.MLI
|
||||
LOAD SYS/KERNEL.S
|
||||
ASM
|
154
SYS/KERNEL.S.NET.txt
Normal file
154
SYS/KERNEL.S.NET.txt
Normal file
|
@ -0,0 +1,154 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
*--------------------------------------
|
||||
* S.AddNetCfg
|
||||
* in :
|
||||
* PULLB = ProtocolID
|
||||
* PULLW = PTR to NetCfg Struct
|
||||
* out :
|
||||
* A =
|
||||
* cc,cs
|
||||
*--------------------------------------
|
||||
S.AddNetCfg lda NetCfgCnt
|
||||
cmp #K.NETCFG.MAX
|
||||
beq .9
|
||||
|
||||
asl
|
||||
sta NetCfgIdx
|
||||
tax
|
||||
>PULLB NetCfgTbl,x save PROTOID
|
||||
>PULLW ZPQuickPtr1
|
||||
|
||||
>PUSHWI K.NETCFG.SIZE
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem
|
||||
bcs .99
|
||||
>STYA ZPQuickPtr2
|
||||
txa
|
||||
ldx NetCfgIdx
|
||||
sta NetCfgTbl+1,x
|
||||
|
||||
ldy #K.NETCFG.SIZE
|
||||
.1 dey
|
||||
lda (ZPQuickPtr1),y
|
||||
sta (ZPQuickPtr2),y
|
||||
tya
|
||||
bne .1
|
||||
|
||||
lda NetCfgCnt
|
||||
inc NetCfgCnt
|
||||
clc
|
||||
rts
|
||||
.9 >PULLA discard parameters
|
||||
>PULLA
|
||||
>PULLA
|
||||
sec
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
* S.SetNetCfg
|
||||
* in :
|
||||
* PULLB = ProtocolID
|
||||
* PULLW = PTR to NetConfig
|
||||
* out :
|
||||
*--------------------------------------
|
||||
S.SetNetCfg >PULLA
|
||||
pha
|
||||
>PULLW ZPQuickPtr1
|
||||
pla
|
||||
ldx NetCfgCnt
|
||||
beq .9
|
||||
|
||||
ldy #0
|
||||
.1 cmp NetCfgTbl,y
|
||||
beq .2
|
||||
iny
|
||||
iny
|
||||
dex
|
||||
bne .1
|
||||
|
||||
.9 sec
|
||||
rts
|
||||
|
||||
.2 lda NetCfgTbl+1,y
|
||||
jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr2
|
||||
ldy #K.NETCFG.SIZE
|
||||
.3 dey
|
||||
lda (ZPQuickPtr1),y
|
||||
sta (ZPQuickPtr2),y
|
||||
tya
|
||||
bne .3
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.GetNetCfgA
|
||||
* in :
|
||||
* A = ProtocolID
|
||||
* out :
|
||||
* Y,A = PTR to NetConfig
|
||||
*--------------------------------------
|
||||
S.GetNetCfgA ldx NetCfgCnt
|
||||
beq .9
|
||||
ldy #0
|
||||
.1 cmp NetCfgTbl,y
|
||||
beq .2
|
||||
iny
|
||||
iny
|
||||
dex
|
||||
bne .1
|
||||
.9 sec
|
||||
rts
|
||||
.2 lda NetCfgTbl+1,y
|
||||
jsr S.GetMemPtrA
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.ClrNetCfgA
|
||||
* in :
|
||||
* A = ProtocolID
|
||||
* out :
|
||||
* cc,cs
|
||||
*--------------------------------------
|
||||
S.ClrNetCfgA ldx NetCfgCnt
|
||||
beq .9
|
||||
ldy #0
|
||||
.1 cmp NetCfgTbl,y
|
||||
beq .2
|
||||
iny
|
||||
iny
|
||||
dex
|
||||
bne .1
|
||||
.9 sec
|
||||
rts
|
||||
|
||||
.2 lda NetCfgTbl+1,y
|
||||
jsr S.FreeMemA X,Y unmodified
|
||||
cpy #K.NETCFG.MAX*2-2 last slot?
|
||||
beq .4
|
||||
.3 lda NetCfgTbl+2,y
|
||||
sta NetCfgTbl,y
|
||||
lda NetCfgTbl+3,y
|
||||
sta NetCfgTbl+1,y
|
||||
iny
|
||||
iny
|
||||
cpy #K.NETCFG.MAX*2-2 last slot?
|
||||
bne .3
|
||||
.4 lda #0
|
||||
sta NetCfgTbl+1,y
|
||||
sta NetCfgTbl,y
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
NetCfgCnt .HS 00
|
||||
NetCfgIdx .BS 1
|
||||
NetCfgTbl .BS K.NETCFG.MAX*2
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.NET
|
||||
LOAD SYS/KERNEL.S
|
||||
ASM
|
151
SYS/KERNEL.S.RDR.txt
Normal file
151
SYS/KERNEL.S.RDR.txt
Normal file
|
@ -0,0 +1,151 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
*--------------------------------------
|
||||
* S.NewBufRdr
|
||||
* In :
|
||||
* PULLB = DATA hMem
|
||||
* PULLB = Delim Char
|
||||
* PULLW = Size of DATA
|
||||
* Out :
|
||||
* A = hMem To newly created BufRdr
|
||||
*--------------------------------------
|
||||
S.NewBufRdr >PUSHWI S.BUFRDR.SIZE
|
||||
>PUSHBI 0 0 = no option
|
||||
jsr S.GetMem
|
||||
bcs .98
|
||||
phx save hMem
|
||||
>STYA ZPQuickPtr1
|
||||
ldy #S.BUFRDR.hMEM
|
||||
|
||||
>PULLB (ZPQuickPtr1),y
|
||||
ldy #S.BUFRDR.DELIM
|
||||
|
||||
>PULLB (ZPQuickPtr1),y
|
||||
ldy #S.BUFRDR.LEN+1
|
||||
>PULLB (ZPQuickPtr1),y
|
||||
dey
|
||||
>PULLB (ZPQuickPtr1),y
|
||||
|
||||
ldy #S.BUFRDR.IDX
|
||||
lda #0
|
||||
sta (ZPQuickPtr1),y
|
||||
iny
|
||||
sta (ZPQuickPtr1),y
|
||||
|
||||
pla
|
||||
clc
|
||||
rts
|
||||
.98 pha
|
||||
>PULLA
|
||||
>PULLYA
|
||||
pla
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
* S.BufRdrReadA
|
||||
* In :
|
||||
* A = hMem To BufRdr
|
||||
* Out :
|
||||
* CC: Y,A = PTR to line (PSTR)
|
||||
* CS: EOF
|
||||
*--------------------------------------
|
||||
S.BufRdrReadA jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr1
|
||||
ldy #S.BUFRDR.hMEM
|
||||
jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr2 PTR to DATA
|
||||
|
||||
ldy #S.BUFRDR.IDX
|
||||
lda (ZPQuickPtr1),y
|
||||
sta ZPQuickPtr3 IDX
|
||||
clc
|
||||
adc ZPQuickPtr2 PTR=PTR+IDX
|
||||
sta ZPQuickPtr2
|
||||
iny
|
||||
lda (ZPQuickPtr1),y
|
||||
sta ZPQuickPtr3+1
|
||||
adc ZPQuickPtr2+1
|
||||
sta ZPQuickPtr2+1
|
||||
|
||||
ldy #S.BUFRDR.LEN
|
||||
lda (ZPQuickPtr1),y
|
||||
sta ZPQuickPtr4
|
||||
iny
|
||||
lda (ZPQuickPtr1),y
|
||||
sta ZPQuickPtr4+1
|
||||
|
||||
stz TmpBuffer256
|
||||
ldy #S.BUFRDR.DELIM
|
||||
|
||||
.1 lda ZPQuickPtr4
|
||||
bne .2
|
||||
lda ZPQuickPtr4
|
||||
beq .8
|
||||
dec ZPQuickPtr4+1
|
||||
.2 dec ZPQuickPtr4
|
||||
|
||||
lda (ZPQuickPtr2)
|
||||
|
||||
inc ZPQuickPtr2
|
||||
bne .3
|
||||
inc ZPQuickPtr2+1
|
||||
|
||||
.3 inc ZPQuickPtr3
|
||||
bne .4
|
||||
inc ZPQuickPtr3+1
|
||||
|
||||
.4 cmp (ZPQuickPtr1),y DELIM
|
||||
beq .8
|
||||
inc TmpBuffer256
|
||||
beq .8
|
||||
ldx TmpBuffer256
|
||||
sta TmpBuffer256,x
|
||||
bra .1
|
||||
|
||||
.8 lda TmpBuffer256
|
||||
bne .81
|
||||
sec
|
||||
rts
|
||||
|
||||
.81 ldy #S.BUFRDR.IDX
|
||||
lda ZPQuickPtr3
|
||||
sta (ZPQuickPtr1),y
|
||||
iny
|
||||
lda ZPQuickPtr3+1
|
||||
sta (ZPQuickPtr1),y
|
||||
|
||||
ldy #S.BUFRDR.LEN
|
||||
lda ZPQuickPtr4
|
||||
sta (ZPQuickPtr1),y
|
||||
iny
|
||||
lda ZPQuickPtr4+1
|
||||
sta (ZPQuickPtr1),y
|
||||
>LDYAI TmpBuffer256
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.BufRdrCloseA
|
||||
* In :
|
||||
* A = hMem To BufRdr
|
||||
*--------------------------------------
|
||||
S.BufRdrCloseA pha
|
||||
jsr S.GetMemPtrA
|
||||
>STYA S.BUFRDR.hMEM
|
||||
ldy #S.BUFRDR.hMEM
|
||||
lda (S.BUFRDR.hMEM),y
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
jsr S.FreeMemA
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* PRIVATE
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.RDR
|
||||
LOAD SYS/KERNEL.S
|
||||
ASM
|
283
SYS/KERNEL.S.SCR.txt
Normal file
283
SYS/KERNEL.S.SCR.txt
Normal file
|
@ -0,0 +1,283 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
*--------------------------------------
|
||||
* !!!!!!!! DO NOT USE VCPU16 !!!!!!!!
|
||||
* !!!!!! DO NOT USE ZPQuickPTRs !!!!!
|
||||
*--------------------------------------
|
||||
SYSSCR.BASL .EQ ZPSysScr COUT
|
||||
SYSSCR.BASLTMP .EQ ZPSysScr+2 Scrolling
|
||||
SYSSCR.STRPTR .EQ ZPSysScr+4 PPSTR
|
||||
*--------------------------------------
|
||||
SYSSCR.BASL0 .EQ $800
|
||||
*--------------------------------------
|
||||
* S.SysScrInit
|
||||
*--------------------------------------
|
||||
S.SysScrInit stz SYSSCR.CPULOADI
|
||||
stz SYSSCR.CH
|
||||
stz SYSSCR.CV
|
||||
|
||||
ldx #0
|
||||
|
||||
ldy #0
|
||||
.1 lda SYSSCR.TITLE,y
|
||||
beq .2
|
||||
|
||||
jsr S.SysScrSetCharAtYX
|
||||
iny
|
||||
bne .1
|
||||
|
||||
.2 lda #$20
|
||||
jsr S.SysScrSetCharAtYX
|
||||
iny
|
||||
cpy #80
|
||||
bne .2
|
||||
|
||||
jsr S.SysScrHOME
|
||||
|
||||
lda A2osX.SCREENS
|
||||
ora #A2osX.SCREENS.S
|
||||
sta A2osX.SCREENS
|
||||
lda #A2osX.SCREENS.S
|
||||
jsr S.ScreenSelectA
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.SysScrCPULoad ldx SYSSCR.CPULOADI
|
||||
lda SYSSCR.CPULOADC,x
|
||||
sta SYSSCR.BASL0+38
|
||||
dec SYSSCR.CPULOADI
|
||||
bpl .1
|
||||
lda #3
|
||||
sta SYSSCR.CPULOADI
|
||||
.1 rts
|
||||
*--------------------------------------
|
||||
* S.SysScrPRCode
|
||||
* In:
|
||||
* CC : Prints [OK]
|
||||
* CS : [$$] at column 36-39
|
||||
*--------------------------------------
|
||||
S.SysScrPRCode php save P to keep carry
|
||||
bcs .1
|
||||
lda #0 ensure we have ERR=0 if cc
|
||||
.1 pha
|
||||
ldy #76 HTAB to 76
|
||||
sty SYSSCR.CH
|
||||
lda #"["
|
||||
jsr S.SysScrCOUTA
|
||||
pla
|
||||
pha
|
||||
bne .2
|
||||
|
||||
lda #"O"
|
||||
jsr S.SysScrCOUTA
|
||||
lda #"K"
|
||||
jsr S.SysScrCOUTA
|
||||
bra .3
|
||||
|
||||
.2 jsr S.SysScrPRBYTEA
|
||||
.3 lda #"]"
|
||||
jsr S.SysScrCOUTA
|
||||
pla
|
||||
plp
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.SysScrPPSTRA jsr S.GetMemPtrA
|
||||
S.SysScrPPSTR >STYA SYSSCR.STRPTR
|
||||
lda (SYSSCR.STRPTR)
|
||||
beq .9
|
||||
ldy #0
|
||||
.1 iny
|
||||
lda (SYSSCR.STRPTR),y
|
||||
cmp #'\'
|
||||
bne .7
|
||||
tya
|
||||
cmp (SYSSCR.STRPTR)
|
||||
beq .9
|
||||
iny
|
||||
lda (SYSSCR.STRPTR),y
|
||||
cmp #'n'
|
||||
bne .7
|
||||
lda #13
|
||||
.7 jsr S.SysScrCOUTA
|
||||
.8 tya
|
||||
cmp (SYSSCR.STRPTR)
|
||||
bne .1
|
||||
.9 >LDYA SYSSCR.STRPTR
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.SysScrPRBYTEA pha
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
ora #$B0
|
||||
cmp #$BA
|
||||
bcc .1
|
||||
adc #6
|
||||
.1 jsr S.SysScrCOUTA
|
||||
pla
|
||||
and #$0F
|
||||
ora #$B0
|
||||
cmp #$BA
|
||||
bcc S.SysScrCOUTA
|
||||
adc #6
|
||||
*--------------------------------------
|
||||
S.SysScrCOUTA phx
|
||||
phy
|
||||
cmp #13
|
||||
bne .1
|
||||
jsr S.SysScrCROUT
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
|
||||
.1 ldy SYSSCR.CH
|
||||
ldx SYSSCR.CV
|
||||
ora #$80
|
||||
jsr S.SysScrSetCharAtYX
|
||||
jsr S.SysScrFSOUT
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.SysScrFSOUT lda SYSSCR.CH
|
||||
cmp #79
|
||||
beq S.SysScrCROUT1
|
||||
inc SYSSCR.CH
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.SysScrCROUT jsr S.SysScrCLREOL
|
||||
S.SysScrCROUT1 stz SYSSCR.CH
|
||||
ldx SYSSCR.CV
|
||||
cpx #23
|
||||
beq S.SysScrScroll
|
||||
inc SYSSCR.CV
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.SysScrCLREOL ldx SYSSCR.CV
|
||||
lda #$A0
|
||||
ldy SYSSCR.CH
|
||||
.1 cpy #79
|
||||
beq .2
|
||||
jsr S.SysScrSetCharAtYX
|
||||
iny
|
||||
bne .1
|
||||
.2 rts
|
||||
*--------------------------------------
|
||||
S.SysScrScroll ldx #1
|
||||
.1 lda SYSSCR.BASEL,x
|
||||
sta SYSSCR.BASL
|
||||
lda SYSSCR.BASEH,x
|
||||
sta SYSSCR.BASL+1
|
||||
inx
|
||||
lda SYSSCR.BASEL,x
|
||||
sta SYSSCR.BASLTMP
|
||||
lda SYSSCR.BASEH,x
|
||||
sta SYSSCR.BASLTMP+1
|
||||
|
||||
ldy #39
|
||||
sta SETWRITEAUX
|
||||
sta SETREADAUX
|
||||
.2 lda (SYSSCR.BASLTMP),y
|
||||
sta (SYSSCR.BASL),y
|
||||
dey
|
||||
bpl .2
|
||||
|
||||
ldy #39
|
||||
sta CLRWRITEAUX
|
||||
sta CLRREADAUX
|
||||
.3 lda (SYSSCR.BASLTMP),y
|
||||
sta (SYSSCR.BASL),y
|
||||
dey
|
||||
bpl .3
|
||||
|
||||
cpx #23
|
||||
bne .1
|
||||
|
||||
ldy #39
|
||||
lda #$A0
|
||||
.4 sta SETWRITEAUX
|
||||
sta (SYSSCR.BASLTMP),y
|
||||
sta CLRWRITEAUX
|
||||
sta (SYSSCR.BASLTMP),y
|
||||
dey
|
||||
bpl .4
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.SysScrClrLineAtX
|
||||
lda SYSSCR.BASEL,x
|
||||
sta SYSSCR.BASL
|
||||
lda SYSSCR.BASEH,x
|
||||
sta SYSSCR.BASL+1
|
||||
|
||||
lda #$A0
|
||||
|
||||
ldy #39
|
||||
sta SETWRITEAUX
|
||||
.1 sta (SYSSCR.BASL),y
|
||||
dey
|
||||
bpl .1
|
||||
|
||||
ldy #39
|
||||
sta CLRWRITEAUX
|
||||
.2 sta (SYSSCR.BASL),y
|
||||
dey
|
||||
bpl .2
|
||||
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.SysScrHOME ldx #23
|
||||
|
||||
.1 jsr S.SysScrClrLineAtX
|
||||
dex
|
||||
bne .1
|
||||
|
||||
stz SYSSCR.CH
|
||||
lda #1
|
||||
sta SYSSCR.CV
|
||||
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.SysScrSetCharAtYX
|
||||
cmp #$40
|
||||
bcc .1
|
||||
cmp #$5F
|
||||
bcs .1
|
||||
and #$3F
|
||||
|
||||
.1 phy
|
||||
pha
|
||||
lda SYSSCR.BASEL,x
|
||||
sta SYSSCR.BASL
|
||||
lda SYSSCR.BASEH,x
|
||||
sta SYSSCR.BASL+1
|
||||
tya
|
||||
lsr
|
||||
tay
|
||||
bcs .2
|
||||
sta SETWRITEAUX
|
||||
|
||||
.2 pla
|
||||
sta (SYSSCR.BASL),y
|
||||
sta CLRWRITEAUX
|
||||
ply
|
||||
rts
|
||||
*--------------------------------------
|
||||
SYSSCR.CH .BS 1
|
||||
SYSSCR.CV .BS 1
|
||||
SYSSCR.CPULOADI .BS 1
|
||||
SYSSCR.CPULOADC .AS -"|\-/"
|
||||
*--------------------------------------
|
||||
SYSSCR.TITLE >CSTRING "A2osX System Screen"
|
||||
SYSSCR.BASEL .HS 00.80.00.80.00.80.00.80.28.A8.28.A8.28.A8.28.A8.50.D0.50.D0.50.D0.50.D0
|
||||
SYSSCR.BASEH .HS 08.08.09.09.0A.0A.0B.0B.08.08.09.09.0A.0A.0B.0B.08.08.09.09.0A.0A.0B.0B
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.SCR
|
||||
LOAD SYS/KERNEL.S
|
||||
ASM
|
384
SYS/KERNEL.S.STR.txt
Normal file
384
SYS/KERNEL.S.STR.txt
Normal file
|
@ -0,0 +1,384 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
*--------------------------------------
|
||||
* S.NewPStr
|
||||
* IN:
|
||||
* PULLW = PTR to buffer
|
||||
* OUT:
|
||||
* A = hMem to S (PSTRING)
|
||||
*--------------------------------------
|
||||
S.NewPStr >PULLW ZPQuickPtr1
|
||||
bra S.PStrCpy2
|
||||
*--------------------------------------
|
||||
* S.PStrCpyA
|
||||
* In:
|
||||
* A = hMem of Src String
|
||||
* Out:
|
||||
* A = hMem of Dest String
|
||||
*--------------------------------------
|
||||
S.PStrCpyA jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr1
|
||||
S.PStrCpy2 lda (ZPQuickPtr1)
|
||||
inc
|
||||
tay
|
||||
lda #0 Y,A = len of new string
|
||||
>PUSHYA
|
||||
>PUSHA 0 = no option
|
||||
jsr S.GetMem
|
||||
bcs .9
|
||||
phx
|
||||
>STYA ZPQuickPtr2
|
||||
lda (ZPQuickPtr1)
|
||||
sta (ZPQuickPtr2)
|
||||
tay
|
||||
beq .2
|
||||
.1 lda (ZPQuickPtr1),y
|
||||
sta (ZPQuickPtr2),y
|
||||
dey
|
||||
bne .1
|
||||
.2 pla
|
||||
clc
|
||||
rts
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.PStrCat
|
||||
* IN:
|
||||
* PULLB = hMem to S1 (PSTRING)
|
||||
* PULLB = hMem to S2 (PSTRING)
|
||||
* OUT:
|
||||
* A = hMem to S1+S2 (PSTRING)
|
||||
*--------------------------------------
|
||||
S.PStrCat >PULLA
|
||||
jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr1 save S1
|
||||
>PULLA
|
||||
jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr2 save S2
|
||||
lda (ZPQuickPtr1) Compute length of new path = S1 + S2 + 1
|
||||
sec
|
||||
adc (ZPQuickPtr2)
|
||||
tay
|
||||
lda #0 Y,A = len of new string
|
||||
>PUSHYA
|
||||
>PUSHA 0 = no option
|
||||
jsr S.GetMem
|
||||
bcs .9 OOM error
|
||||
>STYA ZPQuickPtr3
|
||||
phx save New hMem
|
||||
lda (ZPQuickPtr1)
|
||||
tax
|
||||
ldy #0
|
||||
.2 iny
|
||||
lda (ZPQuickPtr1),y
|
||||
sta (ZPQuickPtr3),y
|
||||
dex
|
||||
bne .2
|
||||
lda (ZPQuickPtr2)
|
||||
tax
|
||||
.3 inc ZPQuickPtr2
|
||||
bne .4
|
||||
inc ZPQuickPtr2+1
|
||||
.4 iny
|
||||
lda (ZPQuickPtr2)
|
||||
sta (ZPQuickPtr3),y
|
||||
dex
|
||||
bne .3
|
||||
tya
|
||||
sta (ZPQuickPtr3)
|
||||
pla returns A = new hMem
|
||||
clc
|
||||
rts
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.PStrCmp
|
||||
* IN:
|
||||
* PULLB = hMem to S1 (PSTRING)
|
||||
* PULLB = hMem to S2 (PSTRING)
|
||||
* OUT:
|
||||
* cc or cs
|
||||
*--------------------------------------
|
||||
S.PStrCmp >PULLA
|
||||
jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr1 save S1
|
||||
>PULLA
|
||||
jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr2 save S2
|
||||
lda (ZPQuickPtr1)
|
||||
tay
|
||||
cmp (ZPQuickPtr2)
|
||||
bne .9
|
||||
.1 lda (ZPQuickPtr1),y
|
||||
cmp (ZPQuickPtr2),y
|
||||
bne .9
|
||||
dey
|
||||
bne .1
|
||||
clc
|
||||
rts
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.PStrMatch
|
||||
* IN:
|
||||
* PULLB = hMem to String (PSTRING)
|
||||
* PULLB = hMem to Pattern (PSTRING)
|
||||
* OUT:
|
||||
* cc = match
|
||||
* cs = no match
|
||||
*--------------------------------------
|
||||
S.PStrMatch >PULLA
|
||||
jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr2 save String
|
||||
>PULLA
|
||||
jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr1 save Pattern
|
||||
bra S.PStrMatch1
|
||||
|
||||
S.PStrMatchP >PULLW ZPQuickPtr2 pull String
|
||||
>PULLW ZPQuickPtr1 pull Pattern
|
||||
|
||||
S.PStrMatch1 lda (ZPQuickPTR1) Keep Pattern Length in X
|
||||
tax
|
||||
beq .8 Match always if empty
|
||||
ldy #0
|
||||
|
||||
.1 inc ZPQuickPTR1 Make PTR1 advance to next char
|
||||
bne .2
|
||||
inc ZPQuickPTR1+1
|
||||
|
||||
.2 lda (ZPQuickPTR1) get pattern char
|
||||
cmp #'*'
|
||||
beq .5
|
||||
|
||||
.3 tya we must match ? or regular char
|
||||
cmp (ZPQuickPTR2) check if at end of string
|
||||
beq .9 yes, no char left, exit with error
|
||||
|
||||
iny advance to next char to compare
|
||||
|
||||
lda (ZPQuickPTR1) get back pattern char
|
||||
cmp #'?'
|
||||
beq .4 no need to compare, any char will match
|
||||
cmp (ZPQuickPTR2),y Regular Char, compare with string at Y
|
||||
bne .9 no match, exit
|
||||
|
||||
.4 dex char matched, check if end of pattern
|
||||
bne .1 continue if remaining char in pattern
|
||||
|
||||
tya end of pattern, but end of string ?
|
||||
cmp (ZPQuickPTR2) end of string ?
|
||||
beq .8 yes, string matched entirely
|
||||
bra .9 no, remaining char in string, no match
|
||||
|
||||
.5 dex we have '*', last char of pattern ?
|
||||
beq .8 yes, match everything, including empty string
|
||||
|
||||
inc ZPQuickPTR1 Make PTR1 advance to next char
|
||||
bne .6
|
||||
inc ZPQuickPTR1+1
|
||||
|
||||
.6 lda (ZPQuickPTR1) get next char of pattern
|
||||
cmp #'*' another '*' ?
|
||||
beq .5 yes, '**' = '*', go next char
|
||||
cmp #'?' '*?' ??? we must match a least one char
|
||||
beq .3
|
||||
|
||||
.7 tya we need at least one remaining char in string,
|
||||
cmp (ZPQuickPTR2) check if at end of string
|
||||
beq .9 no chance to match ? or regular char
|
||||
|
||||
iny
|
||||
lda (ZPQuickPTR1) get again char in pattern
|
||||
cmp (ZPQuickPTR2),y compare with char in string
|
||||
bne .7 not equal to next non wildcard in pattern
|
||||
|
||||
bra .4 go check remaining char in pattern...
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.PStrGetTkn
|
||||
* IN:
|
||||
* PULLB = Token IDX
|
||||
* 0: "Split mode": first token + remaining
|
||||
* !0: "Std Mode": Return token #
|
||||
* PULLB = SEP char
|
||||
* PULLB = hMem to PSTRING
|
||||
* OUT:
|
||||
* A = hMem to Token (PSTRING)
|
||||
* X = hMem to Remaining String After Token "Split Mode"
|
||||
*--------------------------------------
|
||||
S.PStrGetTkn >PULLA Get IDX
|
||||
sta ZPQuickPtr2+1
|
||||
>PULLA Get SEP
|
||||
sta ZPQuickPtr2
|
||||
>PULLA Get PStr
|
||||
jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr1
|
||||
ldx #0 init token count to 0
|
||||
ldy #0
|
||||
stz ZPQuickPtr3 init INTOKEN start to 0
|
||||
.1 iny
|
||||
lda (ZPQuickPtr1),y
|
||||
and #$7F
|
||||
cmp ZPQuickPtr2 char=SEP ?
|
||||
bne .3 no, start a new token if not alredy in
|
||||
lda ZPQuickPtr3 SEP:in INTOKEN ?
|
||||
beq .4 no, skip this SEP
|
||||
inx yes, increase token count
|
||||
lda ZPQuickPtr2+1 requested token=0 ?
|
||||
beq .71 yes, we are in "split mode"
|
||||
cpx ZPQuickPtr2+1 no,is current X=requested IDX?
|
||||
beq .71
|
||||
stz ZPQuickPtr3 reset in INTOKEN start
|
||||
bra .4
|
||||
.3 lda ZPQuickPtr3 char:already INTOKEN ?
|
||||
bne .4 yes, keep existing start index
|
||||
sty ZPQuickPtr3 mark begining of token
|
||||
.4 tya
|
||||
cmp (ZPQuickPtr1) end of string ?
|
||||
bne .1 no, get next one
|
||||
lda ZPQuickPtr3 INTOKEN?
|
||||
beq .6
|
||||
inx yes, last one is ending with string
|
||||
.6 lda ZPQuickPtr2+1 split mode ?
|
||||
beq .7
|
||||
cpx ZPQuickPtr2+1 is token = requested?
|
||||
beq .7
|
||||
sec End of String reached, no matching token
|
||||
.61 rts
|
||||
.71 dey move back yo end of token before this SEP
|
||||
.7 sty ZPQuickPtr3+1 we have matching token (or 1st one in split mode) at [ZPQuickPtr3,ZPQuickPtr3+1]
|
||||
tya compute token len=Y-ZPQuickPtr3+1
|
||||
sec
|
||||
sbc ZPQuickPtr3
|
||||
inc +1
|
||||
inc +1 for string len
|
||||
tay
|
||||
lda #0
|
||||
>PUSHYA Get a hMem for this token
|
||||
>PUSHA 0 = no option
|
||||
jsr S.GetMem
|
||||
bcs .61
|
||||
phx save hMem
|
||||
>STYA ZPQuickPtr4
|
||||
lda ZPQuickPtr3+1
|
||||
sec
|
||||
sbc ZPQuickPtr3
|
||||
inc
|
||||
sta (ZPQuickPtr4) set this string length
|
||||
ldy ZPQuickPtr3
|
||||
dey
|
||||
.8 iny
|
||||
inc ZPQuickPtr4
|
||||
bne .9
|
||||
inc ZPQuickPtr4+1
|
||||
.9 lda (ZPQuickPtr1),y
|
||||
sta (ZPQuickPtr4)
|
||||
cpy ZPQuickPtr3+1
|
||||
bne .8
|
||||
lda ZPQuickPtr2+1 requested token=0 ?
|
||||
bne .87
|
||||
tya yes, we are in "split mode"
|
||||
cmp (ZPQuickPtr1) Remaining chars ?
|
||||
beq .87
|
||||
.10 iny move to next char
|
||||
lda (ZPQuickPtr1),y
|
||||
cmp ZPQuickPtr2 char=SEP?
|
||||
bne .11
|
||||
tya
|
||||
cmp (ZPQuickPtr1) last one ?
|
||||
bne .10
|
||||
bra .87 yes, nothing to return
|
||||
.11 sty ZPQuickPtr3+1 ZPQuickPtr3+1=1st non SEP char
|
||||
lda (ZPQuickPtr1) compute reamining len=Y-ZPQuickPtr3+1
|
||||
sec
|
||||
sbc ZPQuickPtr3+1
|
||||
inc
|
||||
inc +1 for string len
|
||||
tay
|
||||
lda #0
|
||||
>PUSHYA Get a hMem for remaining string
|
||||
>PUSHA 0 = no option
|
||||
jsr S.GetMem
|
||||
bcs .98
|
||||
phx save hMem
|
||||
>STYA ZPQuickPtr4
|
||||
lda (ZPQuickPtr1)
|
||||
sec
|
||||
sbc ZPQuickPtr3+1
|
||||
inc
|
||||
sta (ZPQuickPtr4)
|
||||
ldy ZPQuickPtr3+1
|
||||
dey
|
||||
.12 iny
|
||||
inc ZPQuickPtr4
|
||||
bne .13
|
||||
inc ZPQuickPtr4+1
|
||||
.13 lda (ZPQuickPtr1),y
|
||||
sta (ZPQuickPtr4)
|
||||
tya
|
||||
cmp (ZPQuickPtr1)
|
||||
bne .12
|
||||
plx get back remaining string hMem
|
||||
pla get back token hMem
|
||||
clc
|
||||
rts
|
||||
.87 ldx #0 Splitmode but no remaining string to return
|
||||
pla get back token hMem
|
||||
clc
|
||||
rts
|
||||
.98 pla get back Token hMem
|
||||
jsr S.FreeMemA discard Token
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.GetPStrIndex
|
||||
* in :
|
||||
* PULLW = String Table (Array Of PSTR)
|
||||
* PULLW = String To Search (PSTR)
|
||||
* out :
|
||||
* CC: A = String Index In Table
|
||||
*--------------------------------------
|
||||
S.GetPStrIndex >PULLW ZPQuickPtr1
|
||||
>PULLW ZPQuickPtr2
|
||||
ldx #0
|
||||
.1 lda (ZPQuickPtr1)
|
||||
beq .99
|
||||
cmp (ZPQuickPtr2)
|
||||
bne .3
|
||||
tay
|
||||
.2 lda (ZPQuickPtr1),y
|
||||
eor (ZPQuickPtr2),y
|
||||
and #$7F
|
||||
bne .3
|
||||
dey
|
||||
bne .2
|
||||
txa
|
||||
clc
|
||||
rts
|
||||
.3 inx
|
||||
lda (ZPQuickPtr1)
|
||||
sec
|
||||
adc ZPQuickPtr1
|
||||
sta ZPQuickPtr1
|
||||
bcc .1
|
||||
inc ZPQuickPtr1+1
|
||||
bra .1
|
||||
.99 lda #SYSMGR.ERRSYN
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.STR
|
||||
LOAD SYS/KERNEL.S
|
||||
ASM
|
544
SYS/KERNEL.S.TSK.txt
Normal file
544
SYS/KERNEL.S.TSK.txt
Normal file
|
@ -0,0 +1,544 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2OSX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
*--------------------------------------
|
||||
* S.TskMgrInit
|
||||
*--------------------------------------
|
||||
S.TskMgrInit stz TSKMGR.LASTID
|
||||
|
||||
>LDYAI TSKMGR.TABLE
|
||||
>STYA TSKMGR.TSKPTR
|
||||
|
||||
ldx #K.PS.MAX
|
||||
|
||||
.1 lda #0
|
||||
ldy #S.PS.SIZE-1
|
||||
|
||||
.2 sta (TSKMGR.TSKPTR),y
|
||||
dey
|
||||
bpl .2
|
||||
|
||||
lda TSKMGR.TSKPTR
|
||||
clc
|
||||
adc #S.PS.SIZE
|
||||
sta TSKMGR.TSKPTR
|
||||
bcc .3
|
||||
inc TSKMGR.TSKPTR+1
|
||||
.3 dex
|
||||
bne .1
|
||||
|
||||
>LDYAI TSKMGR.TABLE Make PS #0 as current process
|
||||
>STYA TSKMGR.TSKPTR
|
||||
|
||||
jsr S.CreateEnv
|
||||
bcs .9
|
||||
ldy #S.PS.hENV
|
||||
sta TSKMGR.TABLE,y
|
||||
|
||||
>LDYAI TmpBuffer256
|
||||
jsr S.MLIGetPrefix
|
||||
bcs .9
|
||||
>PUSHWI TmpBuffer256
|
||||
jsr S.NewPStr
|
||||
bcs .9
|
||||
ldy #S.PS.hPREFIX
|
||||
sta TSKMGR.TABLE,y
|
||||
>PUSHWI TmpBuffer256 push ENV value
|
||||
>PUSHWI ENV.A2osX push ENV name
|
||||
ldy #S.PS.hENV
|
||||
lda TSKMGR.TABLE,y
|
||||
>PUSHA
|
||||
jsr S.SetEnvVarP
|
||||
rts
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.TskMgrRun
|
||||
*--------------------------------------
|
||||
S.TskMgrRun >LDYAI TSKMGR.TABLE+S.PS.SIZE
|
||||
>STYA TSKMGR.TSKPTR
|
||||
|
||||
lda #K.PS.MAX-1 Skip PS #0
|
||||
sta TSKMGR.COUNT
|
||||
|
||||
.1 lda (TSKMGR.TSKPTR) get S.PS.F
|
||||
and #S.PS.F.INUSE In use ?
|
||||
beq .5
|
||||
|
||||
lda (TSKMGR.TSKPTR) get S.PS.F
|
||||
and #S.PS.F.HOLD Waiting for Another Task to Terminate?
|
||||
beq .3
|
||||
|
||||
ldy #S.PS.CID
|
||||
lda (TSKMGR.TSKPTR),y
|
||||
jsr S.IsPSRunningA
|
||||
bcc .5 yes, running....
|
||||
lda (TSKMGR.TSKPTR) get S.PS.F
|
||||
and #$FF^S.PS.F.HOLD unmark as HOLD
|
||||
sta (TSKMGR.TSKPTR)
|
||||
|
||||
.3 ldy #S.PS.hCS
|
||||
lda (TSKMGR.TSKPTR),y
|
||||
jsr S.GetMemPtrA Y,A = CS
|
||||
pha
|
||||
tya get CS LO
|
||||
ldy #S.PS.PC
|
||||
clc
|
||||
adc (TSKMGR.TSKPTR),y
|
||||
sta Kernel.JMP
|
||||
iny
|
||||
pla
|
||||
adc (TSKMGR.TSKPTR),y
|
||||
sta Kernel.JMP+1
|
||||
|
||||
lda #0 Don't forget to reset S.PC
|
||||
sta (TSKMGR.TSKPTR),y
|
||||
dey
|
||||
sta (TSKMGR.TSKPTR),y
|
||||
|
||||
>LDYA TSKMGR.TSKPTR
|
||||
ldx #TSKMGR.RUN
|
||||
jsr Kernel.BINCALL Call RUN function
|
||||
bcc .5 RUN said CS=QUIT?
|
||||
|
||||
ldy #S.PS.hCS
|
||||
lda (TSKMGR.TSKPTR),y
|
||||
jsr S.GetMemPtrA Y,A = CS
|
||||
>STYA Kernel.JMP
|
||||
|
||||
>LDYA TSKMGR.TSKPTR
|
||||
ldx #TSKMGR.QUIT yes, quit this process
|
||||
|
||||
jsr Kernel.BINCALL Call QUIT function
|
||||
|
||||
ldy #S.PS.ID
|
||||
lda (TSKMGR.TSKPTR),y
|
||||
jsr S.FreeProcessA
|
||||
bcs .99
|
||||
|
||||
.5 lda TSKMGR.TSKPTR
|
||||
clc
|
||||
adc #S.PS.SIZE
|
||||
sta TSKMGR.TSKPTR
|
||||
bcc .6
|
||||
inc TSKMGR.TSKPTR+1
|
||||
|
||||
.6 dec TSKMGR.COUNT
|
||||
bne .1
|
||||
clc
|
||||
rts
|
||||
.99 bra *
|
||||
*--------------------------------------
|
||||
* S.DispatchEvent
|
||||
* IN:
|
||||
* PULLW = Event
|
||||
* OUT:
|
||||
* CS: Not Dispatched
|
||||
* CC: Event Cleared
|
||||
*--------------------------------------
|
||||
S.DispatchEvent >LDYAI TSKMGR.TABLE+S.PS.SIZE
|
||||
>STYA TSKMGR.TSKPTR
|
||||
|
||||
lda #K.PS.MAX-1
|
||||
sta TSKMGR.COUNT
|
||||
|
||||
.1 lda (TSKMGR.TSKPTR) get S.PS.F
|
||||
and #S.PS.F.INUSE In use ?
|
||||
beq .3
|
||||
|
||||
lda (TSKMGR.TSKPTR) get S.PS.F
|
||||
and #S.PS.F.HOLD Waiting for Another Task to Terminate?
|
||||
bne .3
|
||||
|
||||
lda (TSKMGR.TSKPTR) get S.PS.F
|
||||
and #S.PS.F.EVENT Accept Events ?
|
||||
beq .3
|
||||
|
||||
ldy #S.PS.hCS
|
||||
lda (TSKMGR.TSKPTR),y
|
||||
jsr S.GetMemPtrA
|
||||
>STYA Kernel.JMP
|
||||
|
||||
>PUSHW EVTMGR.EVTPTR
|
||||
>LDYA TSKMGR.TSKPTR
|
||||
ldx #TSKMGR.DOEVENT
|
||||
jsr Kernel.BINCALL Call DOEVENT function
|
||||
bcc .8
|
||||
|
||||
.3 lda TSKMGR.TSKPTR
|
||||
clc
|
||||
adc #S.PS.SIZE
|
||||
sta TSKMGR.TSKPTR
|
||||
bcc .4
|
||||
inc TSKMGR.TSKPTR+1
|
||||
|
||||
.4 dec TSKMGR.COUNT
|
||||
bne .1
|
||||
sec
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
* S.TskMgrQuit
|
||||
*--------------------------------------
|
||||
S.TskMgrQuit clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* PUBLIC
|
||||
*--------------------------------------
|
||||
* S.ExecProcessA (Blocking Parent PID)
|
||||
* in :
|
||||
* A = hMem To Full Cmd Line
|
||||
* out :
|
||||
* A = Child PSID
|
||||
*--------------------------------------
|
||||
S.ExecProcessA jsr S.CreateProcessA
|
||||
bcs .9 terminated, do not set PID as HOLD
|
||||
ldy #S.PS.CID
|
||||
sta (TSKMGR.TSKPTR),y
|
||||
pha Save Child PID
|
||||
lda (TSKMGR.TSKPTR)
|
||||
ora #S.PS.F.HOLD
|
||||
sta (TSKMGR.TSKPTR)
|
||||
pla Get Back PID
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* S.CreateProcessA (Non Blocking)
|
||||
* in :
|
||||
* A = hMem To Full Cmd Line
|
||||
* out :
|
||||
* A = Child PSID
|
||||
*--------------------------------------
|
||||
S.CreateProcessA
|
||||
pha save CMD line
|
||||
>LDYAI MSG.NEWPS
|
||||
jsr S.SysScrPPSTR
|
||||
|
||||
ldy #S.PS.ID
|
||||
lda (TSKMGR.TSKPTR),y
|
||||
|
||||
jsr S.CreateChildProcessA
|
||||
|
||||
bcs .99
|
||||
>STYA TSKMGR.pNewPS
|
||||
|
||||
pla Get Back CMD Line
|
||||
jsr S.InitProcessA
|
||||
bcs .97 Init Failed or exit?
|
||||
ldy #S.PS.ID
|
||||
lda (TSKMGR.pNewPS),y
|
||||
clc
|
||||
rts
|
||||
|
||||
.97 pha save error code
|
||||
tay error code =0 ?
|
||||
bne .98 no, init failed
|
||||
>LDYA TSKMGR.pNewPS
|
||||
ldx #TSKMGR.QUIT yes, simply call QUIT function
|
||||
jsr Kernel.BINCALL Call QUIT function
|
||||
|
||||
.98 ldy #S.PS.ID
|
||||
lda (TSKMGR.pNewPS),y
|
||||
jsr S.FreeProcessA
|
||||
bra .90
|
||||
|
||||
.99 plx Discard CMD Line
|
||||
pha save error code
|
||||
|
||||
.90 pla get back error code
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.GetPSByIDA
|
||||
* In :
|
||||
* A = PID
|
||||
* Out :
|
||||
* Y,A = PTR to TSKSLOT
|
||||
*--------------------------------------
|
||||
S.GetPSByIDA tax
|
||||
bne .10
|
||||
>LDYAI TSKMGR.TABLE
|
||||
clc
|
||||
rts
|
||||
|
||||
.10 sta ZPQuickPtr1 Store requested PID
|
||||
lda #K.PS.MAX
|
||||
sta ZPQuickPtr1+1
|
||||
|
||||
>LDYAI TSKMGR.TABLE+S.PS.SIZE
|
||||
>STYA ZPQuickPtr2
|
||||
|
||||
.1 lda (ZPQuickPtr2)
|
||||
bpl .2
|
||||
ldy #S.PS.ID
|
||||
lda (ZPQuickPtr2),y
|
||||
cmp ZPQuickPtr1
|
||||
beq .8
|
||||
.2 dec ZPQuickPtr1+1
|
||||
beq .9
|
||||
lda ZPQuickPtr2
|
||||
clc
|
||||
adc #S.PS.SIZE
|
||||
sta ZPQuickPtr2
|
||||
bcc .1
|
||||
inc ZPQuickPtr2+1
|
||||
bra .1
|
||||
.8 >LDYA ZPQuickPtr2
|
||||
clc
|
||||
rts
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* PRIVATE
|
||||
*--------------------------------------
|
||||
* S.CreateChildProcessA
|
||||
* in :
|
||||
* A = Parent PSID
|
||||
* out :
|
||||
* X = PSID
|
||||
* Y,A = PTR to S.PS
|
||||
* we cannot use ZPQuickPtrs
|
||||
* because of calling S.PStrCpyA & S.DupEnvA
|
||||
*--------------------------------------
|
||||
S.CreateChildProcessA
|
||||
jsr S.GetPSByIDA
|
||||
bcs .9
|
||||
|
||||
>STYA R.AX
|
||||
>LDYAI TSKMGR.TABLE+S.PS.SIZE
|
||||
>STYA R.BX
|
||||
|
||||
ldx #K.PS.MAX
|
||||
.1 lda (R.BX)
|
||||
bpl .3
|
||||
lda R.BL
|
||||
clc
|
||||
adc #S.PS.SIZE
|
||||
sta R.BL
|
||||
bcc .2
|
||||
inc R.BH
|
||||
.2 dex
|
||||
bne .1
|
||||
lda #TSKMGR.ERROOS
|
||||
sec
|
||||
rts
|
||||
|
||||
.9 lda #TSKMGR.ERRNSP
|
||||
sec
|
||||
rts
|
||||
|
||||
.3 lda #S.PS.F.INUSE
|
||||
sta (R.BX)
|
||||
ldy #S.PS.ID
|
||||
lda (R.AX),y
|
||||
ldy #S.PS.PID
|
||||
sta (R.BX),y
|
||||
|
||||
inc TSKMGR.LASTID
|
||||
bne .4
|
||||
inc TSKMGR.LASTID Ensure PSID not 0
|
||||
.4 lda TSKMGR.LASTID
|
||||
|
||||
ldy #S.PS.ID
|
||||
sta (R.BX),y
|
||||
lda #0
|
||||
ldy #S.PS.hCS
|
||||
.5 sta (R.BX),y Blank Everything in this S.PS
|
||||
iny
|
||||
cpy #S.PS.SIZE
|
||||
bne .5
|
||||
|
||||
ldy #S.PS.hPREFIX copy hPREFIX...
|
||||
lda (R.AX),y
|
||||
jsr S.PStrCpyA
|
||||
bcs .99
|
||||
|
||||
ldy #S.PS.hPREFIX
|
||||
sta (R.BX),y
|
||||
ldy #S.PS.hENV ...and hENV from parent PS
|
||||
lda (R.AX),y
|
||||
jsr S.DupEnvA
|
||||
bcs .99
|
||||
ldy #S.PS.hENV
|
||||
sta (R.BX),y
|
||||
|
||||
ldy #S.PS.hINDEV
|
||||
lda (R.AX),y
|
||||
sta (R.BX),y
|
||||
ldy #S.PS.hOUTDEV
|
||||
lda (R.AX),y
|
||||
sta (R.BX),y
|
||||
ldy #S.PS.hERRDEV
|
||||
lda (R.AX),y
|
||||
sta (R.BX),y
|
||||
|
||||
ldy #S.PS.ID
|
||||
lda (R.BX),y
|
||||
tax Exit with X=PSID
|
||||
>LDYA R.BX And Y,A=S.PS
|
||||
clc
|
||||
rts
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.InitProcessA
|
||||
* In :
|
||||
* A = hMem To Full Cmd Line
|
||||
*--------------------------------------
|
||||
* LS(2)
|
||||
* 0 : hMem to ENVPATH value
|
||||
* 1 : hMem to FULLPATH value
|
||||
*--------------------------------------
|
||||
S.InitProcessA >ADDLOCAL 2
|
||||
>PUSHA Push Cmd Line
|
||||
>PUSHBI $20 Push SEP=' '
|
||||
>PUSHBI 0 Push 0 for getting CMD And ARGS
|
||||
jsr S.PStrGetTkn
|
||||
bcs .99 OOM error
|
||||
ldy #S.PS.hCMD
|
||||
sta (TSKMGR.pNewPS),y
|
||||
>PUSHA push CMD for S.FileSearch
|
||||
txa
|
||||
ldy #S.PS.hARGS
|
||||
sta (TSKMGR.pNewPS),y set ARGS hMem (0 if none)
|
||||
>PUSHWI ENV.PATH push ENVNAME=PATH
|
||||
ldy #S.PS.hENV
|
||||
lda (TSKMGR.pNewPS),y
|
||||
>PUSHA
|
||||
jsr S.GetEnvVarP get value for ENV=PATH
|
||||
bcs .99
|
||||
>STAL 0 save VALUE hMem for discard
|
||||
>PUSHA A=PStr to ENV Value
|
||||
jsr S.FileSearch find File in %PATH%
|
||||
bcs .98
|
||||
>STAL 1 save FULLPATH hMem for discard
|
||||
pha
|
||||
jsr S.SysScrPPSTRA
|
||||
pla
|
||||
jsr S.LoadBinA A = BinPath hMem
|
||||
bcs .97
|
||||
>STYA Kernel.JMP save PTR to Code Segment
|
||||
txa
|
||||
ldy #S.PS.hCS
|
||||
sta (TSKMGR.pNewPS),y save CS hMem in TSKSLOT
|
||||
>LDYA TSKMGR.pNewPS
|
||||
ldx #TSKMGR.INIT
|
||||
jsr Kernel.BINCALL Call INIT function
|
||||
bcs .97
|
||||
jsr .97
|
||||
clc
|
||||
rts
|
||||
.97 pha save ERR
|
||||
>LDAL 1
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
.98 pha save ERR
|
||||
>LDAL 0
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
.99 >REMLOCAL 2
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.QuitProcessA
|
||||
* In : A = PID to Quit (call TSKMGR.QUIT)
|
||||
*--------------------------------------
|
||||
S.QuitProcessA jsr S.GetPSByIDA
|
||||
bcs .9
|
||||
>STYA ZPQuickPtr1
|
||||
ldy #S.PS.hCS
|
||||
lda (ZPQuickPtr1),y
|
||||
jsr S.GetMemPtrA
|
||||
>STYA Kernel.JMP
|
||||
>LDYA ZPQuickPtr1
|
||||
ldx #TSKMGR.QUIT
|
||||
jsr Kernel.BINCALL Call QUIT function
|
||||
clc
|
||||
rts
|
||||
.9 bra *
|
||||
*--------------------------------------
|
||||
* S.FreeProcessA
|
||||
* In : A = PID to free
|
||||
*--------------------------------------
|
||||
S.FreeProcessA jsr S.GetPSByIDA
|
||||
bcs .9
|
||||
>STYA ZPQuickPtr1
|
||||
ldy #S.PS.hARGS
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .1
|
||||
jsr S.FreeMemA
|
||||
.1 ldy #S.PS.hCMD
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .2
|
||||
jsr S.FreeMemA
|
||||
.2 ldy #S.PS.hENV
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .3
|
||||
jsr S.FreeMemA
|
||||
.3 ldy #S.PS.hPREFIX
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .4
|
||||
jsr S.FreeMemA
|
||||
.4 ldy #S.PS.hDS
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .5
|
||||
jsr S.FreeMemA
|
||||
.5 ldy #S.PS.hCS
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .8
|
||||
jsr S.FreeMemA
|
||||
.8 lda #0
|
||||
sta (ZPQuickPtr1) Mark TSKSLOT as free
|
||||
clc
|
||||
rts
|
||||
.9 bra *
|
||||
*--------------------------------------
|
||||
* S.IsPSRunningA
|
||||
* In :
|
||||
* A = PID
|
||||
* Out :
|
||||
* CC = Running
|
||||
* CS = no PS
|
||||
*--------------------------------------
|
||||
S.IsPSRunningA pha save PID
|
||||
ldx #K.PS.MAX
|
||||
>LDYAI TSKMGR.TABLE+S.PS.SIZE
|
||||
>STYA ZPQuickPtr1
|
||||
|
||||
.1 lda (ZPQuickPtr1)
|
||||
bpl .2
|
||||
ldy #S.PS.ID
|
||||
pla
|
||||
pha
|
||||
cmp (ZPQuickPtr1),y
|
||||
beq .8
|
||||
|
||||
lda ZPQuickPtr1
|
||||
clc
|
||||
adc #S.PS.SIZE
|
||||
sta ZPQuickPtr1
|
||||
bcc .2
|
||||
|
||||
inc ZPQuickPtr2+1
|
||||
.2 dex
|
||||
bne .1
|
||||
|
||||
pla
|
||||
sec
|
||||
rts
|
||||
|
||||
.8 pla
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
TSKMGR.COUNT .BS 1
|
||||
TSKMGR.LASTID .BS 1
|
||||
*--------------------------------------
|
||||
MSG.NEWPS >PSTRING "\nTskMgr:"
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.TSK
|
||||
LOAD SYS/KERNEL.S
|
||||
ASM
|
541
SYS/KERNEL.S.txt
Normal file
541
SYS/KERNEL.S.txt
Normal file
|
@ -0,0 +1,541 @@
|
|||
PR#3
|
||||
PREFIX /DATA/A2osX
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $E000
|
||||
.TF SYS/KERNEL
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/KERNEL.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/IO.I
|
||||
.INB INC/PRODOS.I
|
||||
*--------------------------------------
|
||||
KERNEL.BOOT jmp S.Kernel
|
||||
*--------------------------------------
|
||||
KERNEL.SYSCALL jmp (.1,x)
|
||||
*--------------------------------------
|
||||
.1 .DA S.GetMem $00
|
||||
.DA S.FreeMemA
|
||||
.DA S.ClrMemA
|
||||
.DA S.GetMemPtrA
|
||||
|
||||
.DA S.GetMemLenA
|
||||
.DA S.GetMemByIDA
|
||||
.DA S.GetMemByNameA
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.NewPStr $10
|
||||
.DA S.PStrCpyA
|
||||
.DA S.PStrCat
|
||||
.DA S.PStrCmp
|
||||
|
||||
.DA S.PStrGetTkn
|
||||
.DA S.GetPStrIndex
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.LoadBinA $20
|
||||
.DA S.LoadLib
|
||||
.DA S.UnloadLibA
|
||||
.DA S.LoadDrvA
|
||||
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.ExpandPStrA $30
|
||||
.DA S.ExpandPStr
|
||||
.DA S.GetEnvVarH
|
||||
.DA S.GetEnvVarP
|
||||
|
||||
.DA S.SetEnvVarH
|
||||
.DA S.SetEnvVarP
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.MLICreate $40
|
||||
.DA S.MLIDestroy
|
||||
.DA S.MLIRename
|
||||
.DA S.MLISetFileInfo
|
||||
|
||||
.DA S.MLIGetFileInfoA
|
||||
.DA S.MLIOnline
|
||||
.DA S.MLISetPrefix
|
||||
.DA S.MLIGetPrefixA
|
||||
|
||||
.DA S.MLIOpenA $50
|
||||
.DA S.MLINewLine
|
||||
.DA S.MLIRead
|
||||
.DA S.MLIWrite
|
||||
|
||||
.DA S.MLICloseA
|
||||
.DA S.MLIFlushA
|
||||
.DA S.MLISetMark
|
||||
.DA S.MLIGetMark
|
||||
|
||||
.DA S.MLISetEOF $60
|
||||
.DA S.MLIGetEOFA
|
||||
.DA 0
|
||||
.DA 0
|
||||
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.GetDevByIDA $70
|
||||
.DA S.GetDevByNameA
|
||||
.DA S.GetDevTable
|
||||
.DA S.GetDevInfoA
|
||||
|
||||
.DA S.DevOutA
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.GetEvent $80
|
||||
.DA S.DestroyEvent
|
||||
.DA 0
|
||||
.DA 0
|
||||
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.ExecProcessA $90
|
||||
.DA S.CreateProcessA
|
||||
.DA 0
|
||||
.DA 0
|
||||
|
||||
.DA S.GetPSByIDA
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.CheckPrefixA $A0
|
||||
.DA S.FileSearch
|
||||
.DA S.LoadFileA
|
||||
.DA S.ListDirInitA
|
||||
|
||||
.DA S.ListDirNextA
|
||||
.DA S.ListDirCloseA
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.AddNetCfg $B0
|
||||
.DA S.SetNetCfg
|
||||
.DA S.GetNetCfgA
|
||||
.DA S.ClrNetCfgA
|
||||
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
S.Kernel jsr S.KernelInit
|
||||
jsr S.KernelRun
|
||||
jsr S.KernelQuit
|
||||
|
||||
bra *
|
||||
*--------------------------------------
|
||||
S.KernelInit >LDYAI D.STACKSEG
|
||||
>STYA R.SP init Soft Stack
|
||||
>STYA R.LS init LS
|
||||
|
||||
stz A2osX.SCREENS
|
||||
stz A2osX.ACTIVESCRN
|
||||
jsr S.SysScrInit
|
||||
|
||||
>LDYAI MSG.INIT0
|
||||
jsr S.SysScrPPSTR
|
||||
|
||||
>LDYAI MSG.INIT1
|
||||
jsr S.SysScrPPSTR
|
||||
jsr S.MemMgrInit
|
||||
jsr S.SysScrPRCode
|
||||
bcs .1
|
||||
|
||||
>LDYAI MSG.INIT2
|
||||
jsr S.SysScrPPSTR
|
||||
|
||||
jsr S.TskMgrInit
|
||||
jsr S.SysScrPRCode
|
||||
.1 bcs .2
|
||||
|
||||
>LDYAI MSG.INIT3
|
||||
jsr S.SysScrPPSTR
|
||||
jsr S.DevMgrInit
|
||||
jsr S.SysScrPRCode
|
||||
.2 bcs .3
|
||||
|
||||
>LDYAI MSG.INIT4
|
||||
jsr S.SysScrPPSTR
|
||||
jsr S.EvtMgrInit
|
||||
jsr S.SysScrPRCode
|
||||
.3 bcs .99
|
||||
|
||||
>LDYAI MSG.INIT5
|
||||
jsr S.SysScrPPSTR
|
||||
|
||||
>PUSHWI STARTUP.FILE Build A2osX.STARTUP full path...
|
||||
jsr S.NewPStr
|
||||
pha save for discard
|
||||
>PUSHA
|
||||
>PUSHWI ENV.A2osX get KRNL root path
|
||||
ldy #S.PS.hENV
|
||||
lda TSKMGR.TABLE,y
|
||||
>PUSHA
|
||||
jsr S.GetEnvVarP
|
||||
pha save for discard
|
||||
>PUSHA
|
||||
jsr S.PStrCat
|
||||
pha save for discard
|
||||
jsr S.ExecFileA
|
||||
bcs .99
|
||||
pla
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
jsr S.FreeMemA
|
||||
|
||||
>LDYAI MSG.INIT6
|
||||
jsr S.SysScrPPSTR
|
||||
|
||||
jsr S.PrintSysEnv
|
||||
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
S.KernelRun jsr S.TskMgrRun
|
||||
bcs .98
|
||||
|
||||
jsr S.SysScrCPULoad
|
||||
jsr S.GetEvent
|
||||
bcs S.KernelRun CS=no event
|
||||
|
||||
jsr S.DispatchEvent
|
||||
bcc S.KernelRun CC=Event Dispatched
|
||||
|
||||
lda (EVTMGR.EVTPTR)
|
||||
and #S.EVT.F.TIMER Discard any TIMER event
|
||||
beq .1
|
||||
jsr S.DestroyEvent
|
||||
bra S.KernelRun
|
||||
|
||||
.1 lda (EVTMGR.EVTPTR)
|
||||
and #S.EVT.F.KEY any special key?
|
||||
beq .99
|
||||
|
||||
ldy #S.EVT.DATAHI Open-Apple?
|
||||
lda (EVTMGR.EVTPTR),y
|
||||
bpl .99
|
||||
|
||||
ldy #S.EVT.DATALO
|
||||
lda (EVTMGR.EVTPTR),y
|
||||
|
||||
cmp #$31
|
||||
bne .2
|
||||
lda #A2osX.SCREENS.S
|
||||
jsr S.ScreenSelectA
|
||||
bra .8
|
||||
|
||||
.2 cmp #$32
|
||||
bne .3
|
||||
lda #A2osX.SCREENS.C
|
||||
jsr S.ScreenSelectA
|
||||
bra .8
|
||||
|
||||
.3 cmp #$33
|
||||
bne .8
|
||||
lda #A2osX.SCREENS.G
|
||||
jsr S.ScreenSelectA
|
||||
.8 jsr S.DestroyEvent
|
||||
bra S.KernelRun
|
||||
|
||||
.98 lda #A2osX.SCREENS.S
|
||||
jsr S.ScreenSelectA
|
||||
>LDYAI MSG.KRNLPANIC
|
||||
jsr S.SysScrPPSTR
|
||||
bra *
|
||||
|
||||
.99 >LDYAI MSG.EVNTPANIC
|
||||
jsr S.SysScrPPSTR
|
||||
lda (EVTMGR.EVTPTR)
|
||||
jsr S.SysScrPRBYTEA
|
||||
ldy #S.EVT.hDEV
|
||||
lda (EVTMGR.EVTPTR),y
|
||||
jsr S.SysScrPRBYTEA
|
||||
ldy #S.EVT.DATALO
|
||||
lda (EVTMGR.EVTPTR),y
|
||||
jsr S.SysScrPRBYTEA
|
||||
ldy #S.EVT.DATAHI
|
||||
lda (EVTMGR.EVTPTR),y
|
||||
jsr S.SysScrPRBYTEA
|
||||
|
||||
lda #'.'
|
||||
jsr S.SysScrCOUTA
|
||||
ldy #S.EVT.DATAW1
|
||||
lda (EVTMGR.EVTPTR),y
|
||||
jsr S.SysScrPRBYTEA
|
||||
iny
|
||||
lda (EVTMGR.EVTPTR),y
|
||||
jsr S.SysScrPRBYTEA
|
||||
|
||||
lda #'.'
|
||||
jsr S.SysScrCOUTA
|
||||
ldy #S.EVT.DATAW2
|
||||
lda (EVTMGR.EVTPTR),y
|
||||
jsr S.SysScrPRBYTEA
|
||||
iny
|
||||
lda (EVTMGR.EVTPTR),y
|
||||
jsr S.SysScrPRBYTEA
|
||||
|
||||
jsr S.DestroyEvent
|
||||
jmp S.KernelRun
|
||||
*--------------------------------------
|
||||
S.KernelQuit clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* PUBLIC
|
||||
*--------------------------------------
|
||||
* S.ScreenSelectA
|
||||
* IN :
|
||||
* A = Screen to display
|
||||
*--------------------------------------
|
||||
S.ScreenSelectA and A2osX.SCREENS Screen is available ?
|
||||
beq .9 ...not setup up
|
||||
|
||||
cmp #A2osX.SCREENS.S
|
||||
bne .1
|
||||
sta SETTEXT
|
||||
sta SET80DISP
|
||||
sta CLR80STORE
|
||||
sta SETPAGE2
|
||||
sta SETALTCHAR
|
||||
lda #A2osX.SCREENS.S
|
||||
bra .8
|
||||
|
||||
.1 cmp #A2osX.SCREENS.C
|
||||
bne .2
|
||||
sta SETTEXT
|
||||
sta SET80DISP
|
||||
sta SET80STORE
|
||||
sta CLRPAGE2
|
||||
sta SETALTCHAR
|
||||
lda #A2osX.SCREENS.C
|
||||
bra .8
|
||||
|
||||
.2 cmp #A2osX.SCREENS.G
|
||||
bne .9
|
||||
sta CLRMIXED
|
||||
sta SETHIRES
|
||||
sta CLRTEXT
|
||||
sta SETIOUDIS
|
||||
|
||||
sta CLR80DISP
|
||||
sta SETDHIRES
|
||||
sta CLRDHIRES
|
||||
sta SETDHIRES
|
||||
sta CLRDHIRES
|
||||
|
||||
sta SET80DISP
|
||||
sta SETDHIRES
|
||||
sta CLRDHIRES
|
||||
sta SETDHIRES
|
||||
|
||||
lda #A2osX.SCREENS.G
|
||||
|
||||
.8 sta A2osX.ACTIVESCRN
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* S.ExecFileA (R)
|
||||
* in :
|
||||
* A = hMem of FilePath (PSTRING)
|
||||
* out :
|
||||
*--------------------------------------
|
||||
* LS : (8)
|
||||
* 0 = hMem of Loaded File
|
||||
* 2 = PTR to File data
|
||||
* 4 = Data Len
|
||||
* 6 = CMD hMem
|
||||
* 7 = ARGS hMem
|
||||
*--------------------------------------
|
||||
S.ExecFileA jsr S.LoadFileA
|
||||
bcc S.ExecFileAOK
|
||||
rts
|
||||
S.ExecFileAOK >ADDLOCAL 8
|
||||
>STYAL 4 Store File Length
|
||||
txa
|
||||
>STAL 0 hMem of Loaded File
|
||||
jsr S.GetMemPtrA
|
||||
>STYAL 2
|
||||
.1 stz TmpBuffer256
|
||||
.2 >LDYAL 2
|
||||
>STYA ZPQuickPtr1
|
||||
>INCLW 2
|
||||
>DECLW 4
|
||||
lda (ZPQuickPtr1)
|
||||
cmp #$0D
|
||||
beq .3
|
||||
inc TmpBuffer256
|
||||
ldx TmpBuffer256
|
||||
sta TmpBuffer256,x
|
||||
>LDAL 4
|
||||
bne .2
|
||||
>LDAL 5
|
||||
bne .2
|
||||
.3 lda TmpBuffer256
|
||||
beq .4
|
||||
lda TmpBuffer256+1
|
||||
cmp #'*'
|
||||
beq .4
|
||||
lda #'-'
|
||||
jsr S.SysScrCOUTA
|
||||
lda #'>'
|
||||
jsr S.SysScrCOUTA
|
||||
>LDYAI TmpBuffer256
|
||||
jsr S.SysScrPPSTR
|
||||
>PUSHWI TmpBuffer256
|
||||
jsr S.NewPStr
|
||||
bcs .99
|
||||
pha
|
||||
jsr S.ExecCmdLineA
|
||||
jsr S.SysScrPRCode
|
||||
pla
|
||||
jsr S.FreeMemA
|
||||
.4 >LDAL 4
|
||||
.5 bne .6
|
||||
>LDAL 5
|
||||
beq .8
|
||||
.6 jmp .1
|
||||
.8 jsr .99
|
||||
clc
|
||||
rts
|
||||
.99 >LDAL 0
|
||||
jsr S.FreeMemA
|
||||
>REMLOCAL 8
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.ExecCmdLineA >PUSHA
|
||||
>PUSHBI $20 Push SEP=' '
|
||||
>PUSHBI 0 Push Token IDX
|
||||
jsr S.PStrGetTkn
|
||||
bcs .99
|
||||
>STAL 6
|
||||
pha
|
||||
txa
|
||||
>STAL 7
|
||||
pla
|
||||
jsr S.GetMemPtrA
|
||||
>PUSHYA
|
||||
>PUSHWI EXECCMDS
|
||||
jsr S.GetPStrIndex
|
||||
bcs .98
|
||||
asl
|
||||
tax
|
||||
>LDAL 7
|
||||
jsr S.ExecCmdLine
|
||||
bcs .98
|
||||
jsr .98
|
||||
clc
|
||||
rts
|
||||
.98 pha
|
||||
>LDAL 7
|
||||
jsr S.FreeMemA
|
||||
>LDAL 6
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.ExecCmdLine jmp (.1,x)
|
||||
.1 .DA S.SetSysEnvA
|
||||
.DA S.LoadDrvA VCPU!!!!
|
||||
.DA S.CreateProcessA VCPU!!!!
|
||||
*--------------------------------------
|
||||
S.SetSysEnvA >PUSHA Push Cmd Line
|
||||
>PUSHBI $3D Push SEP='='
|
||||
>PUSHBI 0 Push Token IDX
|
||||
jsr S.PStrGetTkn
|
||||
bcs *
|
||||
phx save X,A for discard
|
||||
pha
|
||||
pha
|
||||
txa
|
||||
>PUSHA
|
||||
pla
|
||||
>PUSHA
|
||||
ldy #S.PS.hENV
|
||||
lda TSKMGR.TABLE,y
|
||||
>PUSHA
|
||||
jsr S.SetEnvVarH
|
||||
|
||||
pla disard NAME
|
||||
jsr S.FreeMemA
|
||||
pla discard VALUE
|
||||
jmp S.FreeMemA
|
||||
*--------------------------------------
|
||||
S.PrintSysEnv ldy #S.PS.hENV
|
||||
lda TSKMGR.TABLE,y Get PS #0 ENV
|
||||
jsr S.GetMemPtrA
|
||||
>STYA R.AX
|
||||
.1 lda (R.AX)
|
||||
beq .8 Ending 0 ?
|
||||
>LDYA R.AX
|
||||
jsr S.SysScrPPSTR
|
||||
jsr S.SysScrCROUT
|
||||
lda R.AL
|
||||
sec
|
||||
adc (R.AX) Add len+1 to PTR
|
||||
sta R.AL
|
||||
bcc .1
|
||||
inc R.AH
|
||||
bra .1
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
EXECCMDS >PSTRING "SET"
|
||||
EXECCMDS1 >PSTRING "LOAD"
|
||||
EXECCMDS2 >PSTRING "EXEC"
|
||||
.DA #0
|
||||
*--------------------------------------
|
||||
MSG.INIT0 >PSTRING "\nKernel Startup...\n"
|
||||
MSG.INIT1 >PSTRING "->MemMgr Init"
|
||||
MSG.INIT2 >PSTRING "->TskMgr Init"
|
||||
MSG.INIT3 >PSTRING "->DevMgr Init"
|
||||
MSG.INIT4 >PSTRING "->EvtMgr Init"
|
||||
MSG.INIT5 >PSTRING "EXEC A2osX.Startup...\n"
|
||||
MSG.INIT6 >PSTRING "SYS ENV:\n"
|
||||
MSG.EVNTPANIC >PSTRING "\nEVT:F/hDev/DATA/W1/W2="
|
||||
MSG.KRNLPANIC >PSTRING "\n\n!!!Kernel Panic!!!"
|
||||
*--------------------------------------
|
||||
STARTUP.FILE >PSTRING "A2osX.STARTUP"
|
||||
*--------------------------------------
|
||||
ENV.A2osX >PSTRING "A2OSX"
|
||||
ENV.PATH >PSTRING "PATH"
|
||||
ENV.DRV >PSTRING "DRV"
|
||||
ENV.ETC >PSTRING "ETC"
|
||||
ENV.LIB >PSTRING "LIB"
|
||||
*--------------------------------------
|
||||
.INB SYS/KERNEL.S.BIN
|
||||
.INB SYS/KERNEL.S.DEV
|
||||
.INB SYS/KERNEL.S.ENV
|
||||
.INB SYS/KERNEL.S.EVT
|
||||
.INB SYS/KERNEL.S.FS
|
||||
.INB SYS/KERNEL.S.MEM
|
||||
.INB SYS/KERNEL.S.MLI
|
||||
.INB SYS/KERNEL.S.NET
|
||||
* .INB SYS/KERNEL.S.RDR
|
||||
.INB SYS/KERNEL.S.SCR
|
||||
.INB SYS/KERNEL.S.STR
|
||||
.INB SYS/KERNEL.S.TSK
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S
|
||||
ASM
|
Loading…
Reference in New Issue
Block a user