A2osX/SYS/KERNEL.S.MEM.txt

956 lines
18 KiB
Plaintext
Raw Normal View History

2017-12-22 21:24:30 +00:00
NEW
PREFIX /A2OSX.BUILD
2017-12-22 21:24:30 +00:00
AUTO 4,1
2015-03-14 21:48:35 +00:00
*--------------------------------------
2016-08-17 06:25:58 +00:00
ZPMemMgrSPtr .EQ ZPMEMMGR Pointer To Slot selected
ZPMemMgrTmp1 .EQ ZPMEMMGR+2
Mem.ReqSize .EQ ZPMEMMGR+4 store requested Size
Mem.ReqFlags .EQ ZPMEMMGR+6 store requested Flags
ZPSListBlock .EQ ZPMEMMGR+8
ZPSListIndex .EQ ZPMEMMGR+10
ZPSListKey .EQ ZPMEMMGR+12
ZPSListData .EQ ZPMEMMGR+14
2015-03-14 21:48:35 +00:00
*--------------------------------------
* TODO :
2015-06-03 18:30:57 +00:00
* - Create a 256 bytes table
2015-03-14 21:48:35 +00:00
* mapping hMem's to real memory blocks to help
* Garbage collector move blocks
2015-06-03 18:30:57 +00:00
* - mem.ID=0 always used! useful to test if hMem=0
2015-03-14 21:48:35 +00:00
*--------------------------------------
*/--------------------------------------
* # GetMemStat.YA
* ## In:
* Y,A = Ptr to 24 bytes buffer
* ## Out:
* Buffer filled with memory stats
*\--------------------------------------
K.GetMemStat.YA >STYA ZPMemMgrTmp1
ldy #6
.1 lda Mem.Table,y
sta (ZPMemMgrTmp1),y
dey
bpl .1
ldx #6
ldy #14
sta SETREADAUX
.2 lda Mem.Table,x
sta (ZPMemMgrTmp1),y
dey
dex
bpl .2
sta CLRREADAUX
ldx #6
ldy #22
.3 lda DevMgr.Stat,x
sta (ZPMemMgrTmp1),y
dey
dex
bpl .3
rts
*/--------------------------------------
* # GetMem0.YA
* ## In:
* Y,A = Size Requested
* ## Out:
* CC : success
* YA = PTR to Mem (ZERO Initialised)
* X = hMem
* CS :
* A = EC
*\--------------------------------------
K.GetMem0.YA ldx #S.MEM.F.INIT0
.HS 2C bit abs
*/--------------------------------------
* # GetMem.YA
* ## In:
* Y,A = Size Requested
* ## Out:
* CC : success
* YA = PTR to Mem (Uninitialised)
* X = hMem
* CS :
* A = EC
*\--------------------------------------
K.GetMem.YA ldx #0
MEM.GetMem.YAX stx Mem.ReqFlags
sta Mem.ReqSize+1
tya
bit #$0F 16 bytes aligned ?
beq .10 yes, request it
and #$F0 align on 16 bytes
clc
adc #$10
bcc .10
inc Mem.ReqSize+1
.10 sta Mem.ReqSize
>LDYAI Mem.Table
2015-06-03 18:30:57 +00:00
>STYA ZPMemMgrSPtr
ldx #0 Current slot=0
2015-03-15 22:00:40 +00:00
bra .4 skip slot 0, Check if some free slot to reuse first
2015-06-03 18:30:57 +00:00
.1 inx move to next slot
jsr Mem.NextSlot
2015-03-14 21:48:35 +00:00
lda (ZPMemMgrSPtr) Get Flags
bmi .4 in use ?
2015-06-03 18:30:57 +00:00
.2 lda Mem.ReqFlags Found an empty slot
2015-03-14 21:48:35 +00:00
and #S.MEM.F.ALIGN is request needs a page align ?
beq .3
2015-06-03 18:30:57 +00:00
2015-03-14 21:48:35 +00:00
ldy #S.MEM.PTR
lda (ZPMemMgrSPtr),y get LO of PTR
bne .4 not page-aligned
2015-06-03 18:30:57 +00:00
2015-03-14 21:48:35 +00:00
.3 ldy #S.MEM.LEN
lda (ZPMemMgrSPtr),y get LEN of this block
cmp Mem.ReqSize compare with requested size
2015-03-14 21:48:35 +00:00
bne .4
2015-06-03 18:30:57 +00:00
2015-03-14 21:48:35 +00:00
iny
lda (ZPMemMgrSPtr),y
cmp Mem.ReqSize+1
2015-06-03 18:30:57 +00:00
beq .7 requested size matches slot size !!!
.4 cpx Mem.LastSlot any other slot to check?
2015-06-03 18:30:57 +00:00
bne .1 last one, create a new slot
2015-06-03 18:30:57 +00:00
*-------------- Create a New SLOT
lda Mem.ReqFlags
2015-06-03 18:30:57 +00:00
and #S.MEM.F.ALIGN is request needs a page align ?
beq .6
lda Mem.Free target PTR will be page aligned ?
2015-06-03 18:30:57 +00:00
sec
sbc Mem.ReqSize
2015-06-03 18:30:57 +00:00
beq .6 yes, allocate
tay no, reserve a free slot to fill gap
lda #0
jsr Mem.AddSlot X = new slot
2015-06-03 18:30:57 +00:00
bcs .9
.6 >LDYA Mem.ReqSize
jsr Mem.AddSlot X = new slot
2015-06-03 18:30:57 +00:00
bcs .9
2015-03-14 21:48:35 +00:00
*-------------- Reuse this SLOT
.7 lda Mem.ReqFlags get requested flags
2015-03-14 21:48:35 +00:00
ora #S.MEM.F.INUSE mark as in use
sta (ZPMemMgrSPtr)
2015-03-15 22:00:40 +00:00
2015-06-03 18:30:57 +00:00
and #S.MEM.F.INIT0
beq .8
ldy #S.MEM.PTR
lda (ZPMemMgrSPtr),y ZPMemMgrSPtr already set
sta .12+1
iny
lda (ZPMemMgrSPtr),y
sta .12+2
lda Mem.ReqSize
eor #$ff
tay y=not lo count
lda Mem.ReqSize+1
eor #$ff a=not hi count
phx
ldx #0
.11 iny
bne .12
inc
beq .13
.12 stz $ffff,x
inx
bne .11
inc .12+2
bra .11
2015-06-03 18:30:57 +00:00
.13 plx
2015-06-03 18:30:57 +00:00
.8 lda #0
2015-03-14 21:48:35 +00:00
ldy #S.MEM.BIN
sta (ZPMemMgrSPtr),y
2015-06-03 18:30:57 +00:00
inc Mark this slot used by one process
2015-03-14 21:48:35 +00:00
ldy #S.MEM.REFCNT
sta (ZPMemMgrSPtr),y
2015-03-15 22:00:40 +00:00
ldy #S.PS.PID
2015-06-03 18:30:57 +00:00
lda (pPs),y
2015-03-14 21:48:35 +00:00
ldy #S.MEM.OWNERPID
sta (ZPMemMgrSPtr),y
2015-03-15 22:00:40 +00:00
2015-03-14 21:48:35 +00:00
ldy #S.MEM.PTR
lda (ZPMemMgrSPtr),y
pha
iny
lda (ZPMemMgrSPtr),y A = HI PTR
ply Y = LO PTR
clc X = Current hMem
2015-03-15 22:00:40 +00:00
.9 rts
2015-06-03 18:30:57 +00:00
*--------------------------------------
* Mem.AddSlot
2015-06-03 18:30:57 +00:00
* In:
* Y,A = Requested size
* Out:
*--------------------------------------
2017-10-27 14:56:46 +00:00
Mem.AddSlot >STYA ZPMemMgrTmp1 save req size
ldx Mem.LastSlot
2015-06-03 18:30:57 +00:00
inx
beq .99 > 255 ERR:OUT OF SLOT
lda Mem.Free Compute base PTR=FREE-REQ size
2015-03-14 21:48:35 +00:00
sec
2015-06-03 18:30:57 +00:00
sbc ZPMemMgrTmp1
tay save new Mem.Free LO
lda Mem.Free+1
2015-06-03 18:30:57 +00:00
sbc ZPMemMgrTmp1+1
pha save new Mem.Free HI
2015-06-03 18:30:57 +00:00
cpy Mem.LoMem
sbc Mem.LoMem+1
2015-06-03 18:30:57 +00:00
bcc .98 ERR out of mem
jsr Mem.NextSlot X,Y unmodified
tya get back Mem.Free LO
2015-03-15 22:00:40 +00:00
2015-06-03 18:30:57 +00:00
ldy #S.MEM.PTR
sta Mem.Free set as system Mem.Free value
2015-06-03 18:30:57 +00:00
sta (ZPMemMgrSPtr),y store is as base address of new slot
iny
pla get back Mem.Free HI
sta Mem.Free+1
2015-03-14 21:48:35 +00:00
sta (ZPMemMgrSPtr),y
2015-06-03 18:30:57 +00:00
iny
lda ZPMemMgrTmp1 get requested size
sta (ZPMemMgrSPtr),y setup slot LEN
iny
lda ZPMemMgrTmp1+1
2015-03-14 21:48:35 +00:00
sta (ZPMemMgrSPtr),y
2015-06-03 18:30:57 +00:00
stx Mem.LastSlot mark this slot allocated
2015-03-14 21:48:35 +00:00
clc
rts
2015-06-03 18:30:57 +00:00
.98 pla discard new Mem.Free HI
2015-06-03 18:30:57 +00:00
.99 lda #K.E.OOM
2015-06-03 18:30:57 +00:00
sec
rts
*--------------------------------------
Mem.NextSlot lda ZPMemMgrSPtr
2015-06-03 18:30:57 +00:00
clc
adc #S.MEM
2015-06-03 18:30:57 +00:00
sta ZPMemMgrSPtr
bcc .8
inc ZPMemMgrSPtr+1
.8 rts
*/--------------------------------------
* # FreeMem.A
* ## In:
2015-03-14 21:48:35 +00:00
* A = hMem To Free
* ## Out:
* none.
* (X,Y unmodified)
*\--------------------------------------
K.FreeMem.A phy
tay
beq * Slot=0, reserved by Kernel
2015-06-03 18:30:57 +00:00
jsr K.GetMemByID.A X unmodified
2015-03-14 21:48:35 +00:00
lda (ZPMemMgrSPtr)
bpl .9 In use ?
2015-03-14 21:48:35 +00:00
2015-03-15 22:00:40 +00:00
ldy #S.MEM.REFCNT
2015-03-14 21:48:35 +00:00
lda (ZPMemMgrSPtr),y Get count of those referencing this hMem
dec only one left ?
sta (ZPMemMgrSPtr),y
2015-06-03 18:30:57 +00:00
bne .8 no, must be a code segment loaded several times
2015-03-14 21:48:35 +00:00
lda #0 mark this slot as free
sta (ZPMemMgrSPtr)
2015-03-14 21:48:35 +00:00
ldy #S.MEM.BIN
lda (ZPMemMgrSPtr),y Any BINPATH to discard ?
2015-06-03 18:30:57 +00:00
beq .1
2015-03-14 21:48:35 +00:00
jsr K.GetMemByID.A X unmodified
2015-03-14 21:48:35 +00:00
lda (ZPMemMgrSPtr)
2015-06-03 18:30:57 +00:00
bpl * ***MUST BE ALLOCATED***
2015-03-14 21:48:35 +00:00
2015-06-03 18:30:57 +00:00
lda #0 mark BINPATH slot as free
2015-03-14 21:48:35 +00:00
sta (ZPMemMgrSPtr)
.1 lda Mem.LastSlot
2015-06-03 18:30:57 +00:00
beq .8
jsr K.GetMemByID.A X unmodified
2015-03-14 21:48:35 +00:00
lda (ZPMemMgrSPtr)
bmi .8 used, exit
.2 dec Mem.LastSlot free! get previous....
beq .3 empty list: go set Mem.Free=Mem.HiMem
lda Mem.LastSlot
jsr K.GetMemByID.A X unmodified
lda (ZPMemMgrSPtr)
bpl .2 free again! loop
2015-06-03 18:30:57 +00:00
ldy #S.MEM.PTR
lda (ZPMemMgrSPtr),y set Mem.Free...
sta Mem.Free
2015-03-14 21:48:35 +00:00
iny
lda (ZPMemMgrSPtr),y
sta Mem.Free+1
2015-06-03 18:30:57 +00:00
.8 ply
2015-03-14 21:48:35 +00:00
clc
rts
.3 >LDYA Mem.HiMem
>STYA Mem.Free
bra .8
*--------------------------------------
.9 ply discard saved Y
lda $D000
sta .91+1
bit RRAMWRAMBNK2
bit RRAMWRAMBNK2
jsr CORE.PSSelect0 Select PS0 for proper I/O devices
2017-01-12 17:43:45 +00:00
jsr DevMgr.SYS.Control
pla Get PC and sub 2 for calling address
sec
sbc #2
tay
pla
sbc #0
>PUSHYA
>LDYAI K.FreeMem.A.ERR
>SYSCALL PrintF.YA
.91 ldx #$ff
bit $C000,x
bit $C000,x
bra *
2015-03-14 21:48:35 +00:00
*--------------------------------------
K.FreeMem.A.ERR >CSTR "***MemMgr:Attempt to Free an already freed hMem at $%H"
*/--------------------------------------
* # GetMemPtr.A
* ## In:
* A = hMem
* ## Out:
* Y,A = PTR to MemBlock
* (X unmodified)
*\--------------------------------------
K.GetMemPtr.A jsr K.GetMemByID.A
2015-03-14 21:48:35 +00:00
ldy #S.MEM.PTR
lda (ZPMemMgrSPtr),y
2015-06-03 18:30:57 +00:00
pha
2015-03-14 21:48:35 +00:00
iny
lda (ZPMemMgrSPtr),y
2015-06-03 18:30:57 +00:00
ply
2015-03-14 21:48:35 +00:00
rts
*/--------------------------------------
* # GetMemByID.A
* ## In:
* A = hMem
* ## Out:
* Y,A = ZPMemMgrSPtr = PTR to S.MEM
* X unmodified
*\--------------------------------------
* Optimized for :
* Mem.Table is page aligned at $1800
* S.MEM is 8 bytes
2015-03-14 21:48:35 +00:00
*--------------------------------------
.DO Mem.Table=$1800
.ELSE
!!!!!WARNING!!!!!
.FIN
.DO S.MEM=8
.ELSE
!!!!!WARNING!!!!!
.FIN
*--------------------------------------
K.GetMemByID.A sta ZPMemMgrSPtr
lda /Mem.Table/8
asl ZPMemMgrSPtr
rol
asl ZPMemMgrSPtr
rol
asl ZPMemMgrSPtr
rol
2015-03-14 21:48:35 +00:00
sta ZPMemMgrSPtr+1
ldy ZPMemMgrSPtr
2015-03-14 21:48:35 +00:00
rts
*--------------------------------------
* OLD CODE
*--------------------------------------
* stz ZPMemMgrSPtr+1
* asl
* rol ZPMemMgrSPtr+1
* asl
* rol ZPMemMgrSPtr+1
* asl
* rol ZPMemMgrSPtr+1
** clc IMPLICIT
* adc #Mem.Table
* tay
* lda ZPMemMgrSPtr+1
* adc /Mem.Table
* sty ZPMemMgrSPtr
* sta ZPMemMgrSPtr+1
* rts
*/--------------------------------------
* # NewStr.YA
* Create a new copy of this C-String
* ## In:
* Y,A = Ptr to source C-String
* ## Out:
* CC : success
* Y,A = PTR to String
* X = hMem (PSTR)
* CS : error
* A = SYS error code
*\--------------------------------------
K.NewStr.YA >STYA .1+1
>STYA .4+1
ldy #0
lda #0
.1 ldx $ffff,y
beq .2
iny
bne .1
inc
inc .1+2
bne .1
.2 iny Add one for ending 0
bne .3
inc
.3 jsr K.GetMem.YA
bcs .9
>STYA .5+1
phy
pha
ldy #0
.4 lda $ffff,y
.5 sta $ffff,y
beq .8
iny
bne .4
inc .4+2
inc .5+2
bne .4
.8 pla
ply
clc
.9 rts
2018-01-15 06:50:44 +00:00
*/--------------------------------------
* # SListNew
2018-01-15 06:50:44 +00:00
* ## In:
* ## Out:
* A=hMem
2018-01-15 06:50:44 +00:00
*\--------------------------------------
K.SListNew >LDYAI 160 40k Max before out of memory!!!
jsr K.GetMem0.YA
bcs .9
>STYA ZPSListIndex
stx .8+1
2018-01-15 06:50:44 +00:00
>LDYAI 256
jsr K.GetMem0.YA
bcs .9
txa
sta (ZPSListIndex)
2018-01-15 06:50:44 +00:00
.8 lda #$ff SELF MODIFIED
2018-01-15 06:50:44 +00:00
.9 rts
*/--------------------------------------
* # SListGetByID
* ## In:
* PUSHB = hSList
* PUSHW = Key Ptr
* PUSHW = Data Ptr
* PUSHW = KeyID
* ## Out:
*\--------------------------------------
K.SListGetByID >PULLW MEM.IndexOfs
2018-01-15 06:50:44 +00:00
jsr MEM.GetSListParams
2018-01-15 06:50:44 +00:00
ldy MEM.IndexOfs
lda (ZPSListIndex),y
beq .9
2018-01-15 06:50:44 +00:00
jsr K.GetMemPtr.A
>STYA ZPSListBlock
2018-01-15 06:50:44 +00:00
clc
rts
2018-01-15 06:50:44 +00:00
.9 sec
2018-01-15 06:50:44 +00:00
rts
*/--------------------------------------
* # SListAdd
* ## In:
* PUSHB = hSList
* PUSHW = Key
* PUSHW = Data Ptr
* ## Out:
* A=hSList
*\--------------------------------------
K.SListAdd jsr K.SListLookup.I
bcc .9 Lookup succeeded...DUP
sta SETWRITEAUX
ldy #0
.1 jsr MEM.GetKeyCharY
iny
bcc .1
tya
jsr MEM.AddBlockByte
bcs .99
ldy #0
.2 jsr MEM.GetKeyCharY
bcs .3
jsr MEM.AddBlockByte
bcs .99
iny
bra .2
.3 sta CLRREADAUX
lda (ZPSListData)
sta SETREADAUX
tax
jsr MEM.AddBlockByte
bcs .99
ldy #1
.4 sta CLRREADAUX
lda (ZPSListData),y
sta SETREADAUX
jsr MEM.AddBlockByte
bcs .99
iny
dex
bne .4
clc
.HS B0 BCS
.9 sec
.99 sta CLRWRITEAUX
sta CLRREADAUX
rts
*/--------------------------------------
* # SListLookup
* ## In:
* PUSHB = hSList
* PUSHW = Key
* PUSHW = Data Ptr
* ## Out:
* Data Ptr Updated
*\--------------------------------------
K.SListLookup jsr K.SListLookup.I
bcs .9
jsr MEM.GetBlockByte
tax
sta (ZPSListData)
ldy #0
.1 jsr MEM.GetBlockByte
iny
sta (ZPSListData),y
dex
bne .1
sta CLRREADAUX
clc
.9 rts
*--------------------------------------
K.SListLookup.I jsr MEM.GetSListParams
lda (ZPSListIndex)
beq .9
jsr K.GetMemPtr.A
>STYA ZPSListBlock
stz MEM.BlockOfs
jsr MEM.GetBlockByte
beq .9
tax
.1 ldy #0
.2 jsr MEM.GetKeyCharY
bcs .4
iny
sta .3+1
jsr MEM.GetBlockByte
.3 cmp #$ff SELF MODIFIED
bne .4
dex
bne .2
clc
rts
.4 jsr MEM.GetBlockByte skip remaining key chars
dex
bne .4
jsr MEM.GetBlockByte get Data Len
tax
.5 jsr MEM.GetBlockByte skip data bytes
dex
bne .5
tax
bne .1
.9 sec
rts
*/--------------------------------------
* # SListUpdate
* ## In:
* PUSHB = hSList
* PUSHW = Key
* PUSHW = Data Ptr
* ## Out:
*\--------------------------------------
K.SListUpdate jsr K.SListLookup.I
bcs .9
ldy #0
sta CLRREADAUX
lda (ZPSListData)
sta SETREADAUX
tax
jsr MEM.SetBlockByte
bcs .99
ldy #1
.4 sta CLRREADAUX
lda (ZPSListData),y
sta SETREADAUX
jsr MEM.SetBlockByte
bcs .99
iny
dex
bne .4
clc
.HS B0 BCS
.9 sec
.99 sta CLRWRITEAUX
sta CLRREADAUX
rts
*/--------------------------------------
* # SListFree
* ## In:
* A=hSList
* ## Out:
*\--------------------------------------
K.SListFree.A sta .8
sta SETREADAUX
sta SETWRITEAUX
jsr K.GetMemPtr.A
>STYA .1+1
ldx #0
.1 lda $ffff,x SELF MODIFIED
beq .8
jsr K.FreeMem.A
inx
bra .1
.8 lda #$ff SELF MODIFIED
jsr K.FreeMem.A
sta CLRWRITEAUX
sta CLRREADAUX
rts
*--------------------------------------
MEM.GetSListParams
>PULLW ZPSListData
>PULLW ZPSListKey
>PULLA
sta SETREADAUX
jsr K.GetMemPtr.A
>STYA ZPSListIndex
rts
*--------------------------------------
MEM.GetKeyCharY sta CLRREADAUX
lda (ZPSListKey),y
sta SETREADAUX
beq .9
cmp #'0'
bcc .9
cmp #'9'+1
bcc .8
cmp #'A'
bcc .9
cmp #'Z'+1
bcc .8
cmp #'a'
bcc .9
cmp #'z'+1
bcc .8
cmp #'.'
bne .9
cmp #'_'
bne .9
.8 clc
rts
.9 sec
rts
*--------------------------------------
MEM.GetBlockByte
phy
ldy MEM.BlockOfs
lda (ZPSListBlock),y
inc MEM.BlockOfs
bne .8
pha
ldy MEM.IndexOfs
lda (ZPSListIndex),y
beq .9
jsr K.GetMemPtr.A
>STYA ZPSListBlock
* stz MEM.BlockOfs
pla
.8 ply
clc
rts
.9 pla
ply
sec
rts
*--------------------------------------
MEM.AddBlockByte
phy
ldy MEM.BlockOfs
sta (ZPSListBlock),y
inc MEM.BlockOfs
bne .8
inc MEM.IndexOfs
>LDYAI 256
jsr K.GetMem0.YA
bcs .9
>STYA ZPSListBlock
txa
ldy MEM.IndexOfs
sta (ZPSListIndex),y
* stz MEM.BlockOfs
.8 ply
clc
rts
.9 ply
sec
rts
*--------------------------------------
MEM.SetBlockByte
phy
ldy MEM.BlockOfs
sta (ZPSListBlock),y
inc MEM.BlockOfs
bne .8
inc MEM.IndexOfs
ldy MEM.IndexOfs
lda (ZPSListIndex),y
jsr K.GetMemPtr.A
>STYA ZPSListBlock
* stz MEM.BlockOfs
.8 ply
clc
rts
*--------------------------------------
MEM.IndexOfs .BS 1
MEM.BlockOfs .BS 1
*/--------------------------------------
* # LoadStkObj
* Load a file in AUX memory (Stock Objects)
* ## In:
* PUSHW = AUXTYPE (Handled by....
* PUSHB = TYPE ...
* PUSHB = MODE ...
* PUSHW = PATH ...FOpen)
* ## Out:
* Y,A = File Length
* X = hMem of Loaded Object in AUX mem
*\--------------------------------------
K.LoadStkObj >SYSCALL LoadFile
bcs .99
stx .8+1 Save MAIN hMem
>STYA A2L Save LEN temporarly
jsr K.NewStkObj.YA
bcs .9
stx .80+1
>STYA A4L Save Destination Address in AUX
lda .8+1
jsr K.GetMemPtr.A
>STYA A1L Save MAIN base Ptr
pha Add Allocated LEN
tya
clc
adc A2L
sta A2L
pla
adc A2L+1
sta A2L+1 to get End address in A2L/H
sec Main To Aux
jsr AuxMove
.8 lda #$ff SELF MODIFIED
jsr K.FreeMem.A release MAIN memory
.80 lda #$ff Returns AUX hMem
rts
.9 pha
jsr .8
pla
sec
.99 rts
*/--------------------------------------
2018-01-15 06:50:44 +00:00
* # NewStkObj.YA
* ## In:
* Y,A = Size Requested
* ## Out:
2018-01-15 06:50:44 +00:00
* CC : success
* YA = PTR to Mem (Uninitialised)
* X = hMem
* CS :
* A = EC
*\--------------------------------------
2018-01-15 06:50:44 +00:00
K.NewStkObj.YA sta SETREADAUX
sta SETWRITEAUX
2018-01-15 06:50:44 +00:00
jsr K.GetMem.YA
sta CLRREADAUX
2018-01-15 06:50:44 +00:00
sta CLRWRITEAUX
rts
*/--------------------------------------
* # FreeStkObj.A
* ## In:
* A = hMem To Free (AUX Memory)
* ## Out:
* none.
* (X,Y unmodified)
*\--------------------------------------
K.FreeStkObj.A sta SETREADAUX
sta SETWRITEAUX
jsr K.FreeMem.A
sta CLRREADAUX
sta CLRWRITEAUX
rts
*--------------------------------------
2015-03-14 21:48:35 +00:00
MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.MEM
LOAD /A2OSX.SRC/SYS/KERNEL.S
2015-03-14 21:48:35 +00:00
ASM