A2osX/BIN/MEM.S.txt

338 lines
6.0 KiB
Plaintext
Raw Normal View History

PR#3
2015-06-03 18:30:57 +00:00
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
.OR $2000
2015-06-03 18:30:57 +00:00
.TF /A2OSX.BOOT/BIN/MEM
*--------------------------------------
.INB INC/MACROS.I
2015-06-03 18:30:57 +00:00
.INB INC/KERNEL.I
.INB INC/A2OSX.I
2015-06-03 18:30:57 +00:00
.INB INC/A2OSX.API.I
.INB INC/LIBSTR.I
*--------------------------------------
2015-06-03 18:30:57 +00:00
PAGELEN .EQ 22
*--------------------------------------
ZPPTR1 .EQ ZPBIN
ZPPTR2 .EQ ZPBIN+2
*--------------------------------------
2015-06-03 18:30:57 +00:00
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
2015-06-03 18:30:57 +00:00
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.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
.DA 0
*--------------------------------------
2015-06-03 18:30:57 +00:00
CS.INIT >LDYA L.LIBSTR
>LOADLIBYA
bcs .9
sta hLIBSTR
2015-06-03 18:30:57 +00:00
lda #0
ldy #DS.END-DS.START-1
.1 sta (pData),y
dey
bpl .1
2015-06-03 18:30:57 +00:00
ldy #MEM.COUNT Skip SLOT0
lda (pData),y
inc
sta (pData),y
lda (pPs)
ora #S.PS.F.EVENT Now accept events
2015-06-03 18:30:57 +00:00
sta (pPs)
clc
.9 rts
*--------------------------------------
2015-06-03 18:30:57 +00:00
CS.RUN ldy #bCANCEL
lda (pData),y
bne .9
ldy #bSTOP
lda (pData),y
bne .8
2015-06-03 18:30:57 +00:00
ldy #LINE.COUNT
lda (pData),y
bne .1
2015-06-03 18:30:57 +00:00
>PUSHW L.MSG0
>LIBCALL hLIBSTR,LIBSTR.PRINTF
2015-06-03 18:30:57 +00:00
.1 ldy #MEM.COUNT
lda (pData),y
>SYSCALL SYS.GetMemByIDA
>STYA ZPPTR1
lda (ZPPTR1)
bpl .2
2015-06-03 18:30:57 +00:00
ldy #USED.COUNT
lda (pData),y
inc
sta (pData),y
.2 jsr CS.RUN.PRINTMEM
2015-06-03 18:30:57 +00:00
ldy #MEM.COUNT
lda (pData),y
inc
sta (pData),y
cmp MemMgr.LastSlot
beq .9
2015-06-03 18:30:57 +00:00
.8 clc
rts
.9 jsr CS.RUN.PRINTEND
2015-06-03 18:30:57 +00:00
sec
rts
*--------------------------------------
CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device?
lda (pEvent),y
ldy #S.PS.hINDEV
cmp (pPs),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
ldy #bCANCEL
sta (pData),y
bra .8
.1 cmp #$13 Ctrl-S
bne .2
ldy #bSTOP
lda (pData),y
eor #$FF
sta (pData),y
bra .8
.2 ldy #bSTOP
lda #0
sta (pData),y
.8 clc
rts
.9 sec
rts
*--------------------------------------
CS.QUIT lda hLIBSTR
>SYSCALL SYS.UnloadLibA
clc
rts
*--------------------------------------
CS.RUN.PRINTMEM ldy #S.MEM.LEN
lda (ZPPTR1),y
pha
iny
lda (ZPPTR1),y
ply
>PUSHYA
2015-06-03 18:30:57 +00:00
ldy #S.MEM.PTR
lda (ZPPTR1),y
pha
iny
lda (ZPPTR1),y
ply
>PUSHYA
2015-06-03 18:30:57 +00:00
ldy #S.MEM.REFCNT
lda (ZPPTR1),y
>PUSHA
2015-06-03 18:30:57 +00:00
ldy #S.MEM.OWNERPID
lda (ZPPTR1),y
>PUSHA
2015-06-03 18:30:57 +00:00
lda (ZPPTR1)
>PUSHA
2015-06-03 18:30:57 +00:00
ldy #MEM.COUNT
lda (pData),y
>PUSHA
2015-06-03 18:30:57 +00:00
>PUSHW L.MSG1
>LIBCALL hLIBSTR,LIBSTR.PRINTF
2015-06-03 18:30:57 +00:00
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
2015-06-03 18:30:57 +00:00
.1 lda (ZPPTR2),y
ora #$80
cmp #$A0
bcs .2
2015-06-03 18:30:57 +00:00
ora #$20
.2 jsr COUT
iny
cpy #40
bne .1
2015-06-03 18:30:57 +00:00
lda #"}"
jsr COUT
bra .4
.3 >SYSCALL SYS.GetMemPtrA
>PUSHYA
>LIBCALL hLIBSTR,LIBSTR.PRINTP
.4 jsr CROUT
2015-06-03 18:30:57 +00:00
ldy #LINE.COUNT
lda (pData),y
inc
sta (pData),y
cmp #PAGELEN
bne .5
2015-06-03 18:30:57 +00:00
lda #$FF
2015-06-03 18:30:57 +00:00
ldy #bSTOP
sta (pData),y
ldy #LINE.COUNT
lda #0
sta (pData),y
.5 rts
*--------------------------------------
2015-06-03 18:30:57 +00:00
CS.RUN.PRINTEND ldy #MEM.COUNT
>PUSHB (pData),y
ldy #USED.COUNT
>PUSHB (pData),y
>PUSHW L.MSG2
>LIBCALL hLIBSTR,LIBSTR.PRINTF
2015-06-03 18:30:57 +00:00
>PUSHW MemMgr.HiMem
>PUSHW L.MSG3
>LIBCALL hLIBSTR,LIBSTR.PRINTF
2015-06-03 18:30:57 +00:00
>PUSHW MemMgr.Free
>PUSHW L.MSG4
>LIBCALL hLIBSTR,LIBSTR.PRINTF
2015-06-03 18:30:57 +00:00
>PUSHW MemMgr.LoMem
>PUSHW L.MSG5
>LIBCALL hLIBSTR,LIBSTR.PRINTF
2015-06-03 18:30:57 +00:00
lda MemMgr.Free
sec
sbc MemMgr.LoMem
tay
lda MemMgr.Free+1
sbc MemMgr.LoMem+1
2015-06-03 18:30:57 +00:00
>PUSHYA
>PUSHW L.MSG6
>LIBCALL hLIBSTR,LIBSTR.PRINTF
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
2015-06-03 18:30:57 +00:00
ldx #DEVMGR.COUT
jsr pDevJmp
ply
plx
rts
2015-06-03 18:30:57 +00:00
pDevJmp jmp (pDev)
*--------------------------------------
CS.END
2015-06-03 18:30:57 +00:00
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 "High Memory: $%H\n"
MSG4 >CSTRING "Free ULimit: $%H\n"
MSG5 >CSTRING "Low Memory: $%H\n"
MSG6 >CSTRING "\nFree Memory: %D Bytes.\n"
hLIBSTR .BS 1
2015-06-03 18:30:57 +00:00
*--------------------------------------
.DUMMY
.OR 0
DS.START
LINE.COUNT .BS 1
MEM.COUNT .BS 1
USED.COUNT .BS 1
bSTOP .BS 1
bCANCEL .BS 1
DS.END
2015-06-03 18:30:57 +00:00
.ED
*--------------------------------------
MAN
SAVE BIN/MEM.S
ASM