Kernel 0.94

This commit is contained in:
Rémy GIBERT 2020-11-19 16:34:02 +01:00
parent a650cb83da
commit 67878e93ce
33 changed files with 2790 additions and 639 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -333,21 +333,27 @@ DisableRamDRV php
lda DEVPTRS3D2 lda DEVPTRS3D2
cmp DEVPTRS S0D1=NOVEV cmp DEVPTRS S0D1=NOVEV
bne .1 bne .1
lda DEVPTRS3D2+1 lda DEVPTRS3D2+1
cmp DEVPTRS+1 S0D1=NODEV cmp DEVPTRS+1 S0D1=NODEV
beq .9 S3D2=NODEV, nothing to do beq .9 S3D2=NODEV, nothing to do
.1 ldx DEVCNT .1 ldx DEVCNT
.2 lda DEVLST,x LOOKING FOR $BF, $BB, $B7, $B3 .2 lda DEVLST,x LOOKING FOR $BF, $BB, $B7, $B3
and #$F3 and #$F3
cmp #$B3 cmp #$B3
beq .3 beq .3
dex dex
bpl .2 bpl .2
plp plp
lda #1 No device found, exit with error lda #1 No device found, exit with error
sec sec
rts rts
.3 cpx DEVCNT .3 cpx DEVCNT
beq .5 beq .5
@ -364,13 +370,16 @@ DisableRamDRV php
sta DEVPTRS3D2 sta DEVPTRS3D2
lda DEVPTRS+1 lda DEVPTRS+1
sta DEVPTRS3D2+1 sta DEVPTRS3D2+1
plp plp
jsr MLI jsr MLI
.DA #MLIONLINE .DA #MLIONLINE
.DA MLIONLINE01 .DA MLIONLINE01
clc Success!! clc Success!!
rts rts
.9 plp .9 plp
lda #0 Not detected lda #0 Not detected
sec sec
rts rts

View File

@ -336,20 +336,16 @@ CS.RUN.LL.DISKII
jsr CS.RUN.ZeroPtr1 16 sectors filled with 0, give some time to spin up jsr CS.RUN.ZeroPtr1 16 sectors filled with 0, give some time to spin up
stz CurTrack stz CurTrack
stz CurQTrack
lda TrkCnt lda TrkCnt
sta Counter sta Counter
ldx #0 .1 >SLEEP
.1 jsr CS.RUN.CheckCtrlC
bcs .9
jsr CS.RUN.SeekToX jsr CS.RUN.CheckCtrlC
bcs .9 bcs .9
>SLEEP
>PUSHW L.MSG.LLDISK2 >PUSHW L.MSG.LLDISK2
>PUSHB CurTrack >PUSHB CurTrack
inc inc
@ -374,10 +370,10 @@ CS.RUN.LL.DISKII
lda CurQTrack lda CurQTrack
* clc * clc
adc Stepping adc Stepping
tax tax
bra .1 jsr CS.RUN.SeekToX
bcc .1
.9 pha .9 pha
jsr CS.RUN.MotorOff jsr CS.RUN.MotorOff
@ -390,6 +386,9 @@ CS.RUN.LL.DISKII
>SYSCALL PrintF >SYSCALL PrintF
bcs .9 bcs .9
ldx #0
jsr CS.RUN.SeekToX
bit bVerify bit bVerify
bpl .80 bpl .80
@ -399,10 +398,6 @@ CS.RUN.LL.DISKII
.80 jmp CS.RUN.MotorOff .80 jmp CS.RUN.MotorOff
*-------------------------------------- *--------------------------------------
CS.RUN.LL.DISKII.V CS.RUN.LL.DISKII.V
>PUSHW L.MSG.VERIFY
>PUSHBI 0
>SYSCALL PrintF
lda hTrackBuf lda hTrackBuf
bne .10 bne .10
>LDYAI 512 >LDYAI 512
@ -465,9 +460,8 @@ CS.RUN.LL.DISKII.V
dec Counter dec Counter
bne .3 bne .3
>PUSHW L.MSG.CRLF >LDYA L.MSG.OK
>PUSHBI 0 >SYSCALL PutS
>SYSCALL PrintF
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
@ -495,12 +489,8 @@ CS.RUN.LL.DISKII.VBLK
>PUSHA >PUSHA
>PUSHBI 1 >PUSHBI 1
>SYSCALL PrintF >SYSCALL PrintF
plx
rts .8 plx
.8 lda #C.CR
>SYSCALL PutChar
plx
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN.MotorOn sec CS.RUN.MotorOn sec
@ -520,19 +510,22 @@ CS.RUN.SeekToX >PUSHB DSSS0000
>LIBCALL hLIBBLKDEV,LIBBLKDEV.D2MoveHead >LIBCALL hLIBBLKDEV,LIBBLKDEV.D2MoveHead
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN.ZeroPtr1 >LDYA ZPPtr1 CS.RUN.ZeroPtr1 lda ZPPtr1+1
>STYA ZPPtr2 pha
lda #$AA lda #0
tay tay
.10 sta (ZPPtr2),y .1 sta (ZPPtr1),y
iny iny
bne .10 bne .1
inc ZPPtr2+1 inc ZPPtr1+1
dex dex
bne .10 bne .1
pla
sta ZPPtr1+1
rts rts
*-------------------------------------- *--------------------------------------
@ -671,6 +664,8 @@ CS.RUN.CheckCtrlC
phx phx
phy phy
>SLEEP
ldy #S.PS.hStdIn ldy #S.PS.hStdIn
lda (pPS),y lda (pPS),y
>SYSCALL FEOF >SYSCALL FEOF
@ -709,7 +704,7 @@ MSG.NOSIZE .AZ "Unable to get media size."
MSG.INIT .AZ "Formatting %s, Volname:%s\r\n" MSG.INIT .AZ "Formatting %s, Volname:%s\r\n"
MSG.LL .AZ "Low Level Format %D Blks\r\n" MSG.LL .AZ "Low Level Format %D Blks\r\n"
MSG.LLDISK2 .AZ "\rWriting Track %02d (%02d/%02d)..." MSG.LLDISK2 .AZ "\rWriting Track %02d (%02d/%02d)..."
MSG.VERIFY .AZ "Verifying Track %02d/%02d, Block %05D..." MSG.VERIFY .AZ "\rVerifying Track %02d/%02d, Block %05D..."
MSG.WRITECAT .AZ "Writing Catalog..." MSG.WRITECAT .AZ "Writing Catalog..."
FMT.BLANK .AZ "BLANK%H%H" FMT.BLANK .AZ "BLANK%H%H"
*-------------------------------------- *--------------------------------------

266
BIN/FORTH.S.CL.txt Normal file
View File

@ -0,0 +1,266 @@
NEW
AUTO 3,1
*--------------------------------------
CL.READN0A tax
CL.READN0X >PUSHW ZPCLBuf
>PUSHW L.FMT.Byte
txa
>PUSHA
>PUSHBI 1
>SYSCALL SPrintF
bcs .9
lda #$ff
sta CL.bReady
* clc
.9 rts
*--------------------------------------
CL.CHARIN tax
bit CL.bEscMode \e ?
bpl .4
cpx #'['
beq .8 \e[
stz CL.bEscMode
txa
ldx #EscChars.Cnt-1
.1 cmp EscChars,x
beq .2
dex
bpl .1
.8 rts invalid \e[ sequence
.2 lda CL.MaxCnt
bne .3
lda EscChars.Remap,x
bra CL.READN0A
.3 txa
asl
tax
jmp (J.ESC,x)
*--------------------------------------
.4 cpx #C.ESC
bne .5
lda #$ff
sta CL.bEscMode
clc
rts
.5 lda CL.MaxCnt
beq CL.READN0X
cpx #C.SPACE
bcc CL.CHARIN.CTRL
cpx #C.DEL
bne CL.Insert
*--------------------------------------
* Erase char BEFORE cursor
*--------------------------------------
lda CL.Len
beq .8
lda CL.Ptr
beq .8
lda #C.BS
>SYSCALL PutChar
dec CL.Ptr
jmp CL.DEL
*--------------------------------------
CL.Insert ldy CL.Len
cpy CL.MaxCnt
beq .8 Buffer full, discard...
iny
sty CL.Len
.1 dey
lda (ZPCLBuf),y Move from Ptr To end of buffer forward...
iny
sta (ZPCLBuf),y
dey
cpy CL.Ptr
bne .1
txa
sta (ZPCLBuf),y
inc CL.Ptr
>SYSCALL PutChar
jsr CL.PrintEOL
dec CL.MaxCnt MaxCnt = 1, don't wait for CR
bne .8
lda #$ff
sta CL.bReady
.8 clc
rts
*--------------------------------------
CL.CHARIN.CTRL cpx #C.CR
beq .8
cpx #C.EOF
beq .9
cpx #3 Ctrl-C
beq CL.CLR
cpx #26 Ctrl-Z
bne .8
jmp CL.SUPPR
.8 jsr CheckLFAfterCR
bcs .9
lda #$ff
sta CL.bReady
clc
.9 rts
*--------------------------------------
CL.CLR lda (ZPCLBuf)
beq CL.Reset.1
.1 lda CL.Ptr
cmp CL.Len
beq .2
inc
sta CL.Ptr
lda #C.FS
>SYSCALL PutChar
bra .1
.2 ldy #0
.3 lda #C.DEL
sta (ZPCLBuf),y
iny
lda (ZPCLBuf),y
bne .3
jsr CL.PrintCLBuf
*--------------------------------------
CL.Reset lda #0
sta (ZPCLBuf)
CL.Reset.1 ldx #CL.Ptr
.1 stz 0,x
inx
cpx #CL.bEscMode+1
bne .1
>LDYA ZPCLBuf
>STYA ZPCLBufPtr
rts
*--------------------------------------
CL.BS lda CL.Ptr
beq .9
dec CL.Ptr
lda #C.BS
>SYSCALL PutChar
.9 rts
*--------------------------------------
CL.NAK lda CL.Ptr
cmp CL.Len
beq .9
inc
sta CL.Ptr
lda #C.FS
>SYSCALL PutChar
.9 rts
*--------------------------------------
* Erase char UNDER cursor
*--------------------------------------
CL.SUPPR lda CL.Len
beq CL.PrintEOL.8
lda CL.Ptr
cmp CL.Len
beq CL.PrintEOL.8
*--------------------------------------
CL.DEL ldy CL.Ptr
.1 iny
lda (ZPCLBuf),y
dey
sta (ZPCLBuf),y
iny
cpy CL.Len
bne .1
dec CL.Len
*--------------------------------------
CL.PrintEOL lda CL.Ptr
.1 cmp CL.Len
beq .2
pha
tay
lda (ZPCLBuf),y
>SYSCALL PutChar
pla
inc
bra .1
.2 lda #C.SPACE
>SYSCALL PutChar
lda CL.Ptr
.3 cmp CL.Len
beq .4
pha
lda #C.BS
>SYSCALL PutChar
pla
inc
bra .3
.4 lda #C.BS
>SYSCALL PutChar
CL.PrintEOL.8 clc
rts
*--------------------------------------
CL.PrintCLBuf ldy #S.PS.hStdOut
lda (pPS),y
>PUSHA
>PUSHW ZPCLBuf
>SYSCALL FPutS
rts
*--------------------------------------
CL.DN
CL.UP clc
rts
*--------------------------------------
MAN
SAVE usr/src/bin/forth.s.cl
LOAD usr/src/bin/forth.s
ASM

769
BIN/FORTH.S.KW.txt Normal file
View File

@ -0,0 +1,769 @@
NEW
AUTO 3,1
*--------------------------------------
KW.Lookup >LDYA L.KEYWORDS
>STYA ZPPtr1
>LDYA ZPCLBufPtr
>STYA ZPPtr2
ldx #0
.1 ldy #$ff
.2 jsr .7 get next valid char in src text
bcs .3
.20 jsr ToUpperCase
eor (ZPPtr1),y match table char ?
asl compare only 7 bits
bne .4 no match...get next table keyword
bcc .2 not last char in this keyword
jsr .7 next char in text...
bcc .4 valid....failed
.8 tya Keyword Len
clc
rts
.3 dey
lda (ZPPtr1),y was last char in this keyword ?
bmi .8
iny
.41 jsr IncPtr1 skip chars to next keyword
.4 lda (ZPPtr1)
bpl .41
jsr IncPtr1
.6 inx
lda (ZPPtr1) Array Ending 0, lookup failed
bne .1
.9 sec
rts
.7 iny
lda (ZPPtr2),y Get Src text char...
beq .9 end of text
jsr IsSpaceOrCR
bcc .9 end of valid chars
clc
rts
*--------------------------------------
KW.DUP lda pStack
sec
sbc #2
bcc .9
lda (pStack)
tax
ldy #1
lda (pStack),y
>PUSHA
txa
>PUSHA
clc
rts
.9 lda #E.STKOVERFLOW
sec
rts
*--------------------------------------
KW.DROP lda pStack
beq .9
inc pStack
beq .9
inc pStack
clc
rts
.9 lda #E.STACKERROR
sec
rts
*--------------------------------------
KW.SWAP ldy #3
lda (pStack),y
pha
dey #2
lda (pStack),y
pha
lda (pStack)
tax
pla
sta (pStack)
txa
sta (pStack),y #2
dey #1
lda (pStack),y
tax
pla
sta (pStack),y
iny
iny #3
txa
sta (pStack),y
clc
rts
*--------------------------------------
KW.OVER lda pStack
sec
sbc #2
bcc .9
ldy #3
lda (pStack),y
>PUSHA
lda (pStack),y
>PUSHA
clc
rts
.9 lda #E.STKOVERFLOW
sec
rts
*--------------------------------------
KW.ROT
*--------------------------------------
KW.mDUP
*--------------------------------------
KW.gR
*--------------------------------------
KW.Rg
*--------------------------------------
KW.R
clc
rts
*--------------------------------------
KW.Add jsr CheckStackPop4
bcs .9
clc
ldy #2
lda (pStack),y
adc (pStack)
sta (pStack),y
inc pStack
lda (pStack),y
adc (pStack)
sta (pStack),y
inc pStack
clc
.9 rts
*--------------------------------------
KW.DAdd >FPU ADD32
clc
rts
*--------------------------------------
KW.Sub jsr CheckStackPop4
bcs .9
sec
ldy #2
lda (pStack),y
sbc (pStack)
sta (pStack),y
inc pStack
lda (pStack),y
sbc (pStack)
sta (pStack),y
inc pStack
clc
.9 rts
*--------------------------------------
KW.Mul
*--------------------------------------
KW.Div
*--------------------------------------
KW.Mod
*--------------------------------------
KW.DivMod
*--------------------------------------
KW.MulDivMod
*--------------------------------------
KW.MulDiv
*--------------------------------------
KW.MAX jsr CheckStackPop4
bcs .9
lda (pStack) LO
ldy #2
cmp (pStack),y
dey #1
lda (pStack),y HI
iny
iny #3
sbc (pStack),y
bcc .1
jsr KW.SWAP
.1 jmp KW.DROP
.9 rts
*--------------------------------------
KW.MIN jsr CheckStackPop4
bcs .9
lda (pStack) LO
ldy #2
cmp (pStack),y
dey #1
lda (pStack),y HI
iny
iny #3
sbc (pStack),y
bcs .1
jsr KW.SWAP
.1 jmp KW.DROP
.9 rts
*--------------------------------------
KW.ABS
*--------------------------------------
KW.DABS
clc
rts
*--------------------------------------
KW.MINUS lda (pStack) LO
eor #$ff
sec
adc #0
sta (pStack)
ldy #1
lda (pStack),y HI
eor #$ff
adc #0
sta (pStack),y
clc
rts
*--------------------------------------
KW.DMINUS lda (pStack) LO
eor #$ff
sec
adc #0
sta (pStack)
ldy #1
lda (pStack),y HI
eor #$ff
adc #0
sta (pStack),y
iny
lda (pStack),y
eor #$ff
adc #0
sta (pStack),y
iny
lda (pStack),y
eor #$ff
adc #0
sta (pStack),y
clc
rts
*--------------------------------------
KW.AND jsr CheckStackPop4
bcs .9
ldy #2
lda (pStack),y
and (pStack)
sta (pStack),y
inc pStack
lda (pStack),y
and (pStack)
sta (pStack),y
inc pStack
clc
.9 rts
*--------------------------------------
KW.OR jsr CheckStackPop4
bcs .9
ldy #2
lda (pStack),y
ora (pStack)
sta (pStack),y
inc pStack
lda (pStack),y
ora (pStack)
sta (pStack),y
inc pStack
clc
.9 rts
*--------------------------------------
KW.XOR jsr CheckStackPop4
bcs .9
ldy #2
lda (pStack),y
eor (pStack)
sta (pStack),y
inc pStack
lda (pStack),y
eor (pStack)
sta (pStack),y
inc pStack
clc
.9 rts
*--------------------------------------
KW.LWR jsr CheckStackPop4
bcs .9
ldy #2
lda (pStack),y
cmp (pStack)
inc pStack
lda (pStack),y
sbc (pStack),y
inc pStack
inc pStack
rol
sta (pStack)
clc
.9 rts
*--------------------------------------
KW.GTR jsr CheckStackPop4
bcs .9
ldy #2
lda (pStack),y
cmp (pStack)
inc pStack
lda (pStack),y
sbc (pStack),y
inc pStack
inc pStack
rol
eor #$80
sta (pStack)
clc
.9 rts
*--------------------------------------
KW.EQ jsr CheckStackPop4
bcs .9
ldy #2
lda (pStack),y
sec
sbc (pStack)
tax
inc pStack
lda (pStack),y
sbc (pStack),y
inc pStack
inc pStack
bcc .1
txa
bne .1
sec
.HS 90 BCC
.1 clc
ror
sta (pStack)
clc
.9 rts
*--------------------------------------
KW.NEGATIVE >PULLA
>PULLA
bpl .9
sec
.HS 90 BCC
.9 clc
ror
sta (pStack)
clc
rts
*--------------------------------------
KW.ZERO >PULLA
tax
>PULLA
bne .9
txa
bne .9
sec
.HS 90 BCC
.9 clc
ror
sta (pStack)
clc
rts
*--------------------------------------
KW.. jsr KW.DUP
bcs .9
ldy #2
lda L.FMT.int16
sta (pStack),y
iny
lda L.FMT.int16+1
sta (pStack),y
>PUSHBI 2
>SYSCALL PrintF
* clc
.9 rts
*--------------------------------------
KW..R
*--------------------------------------
KW.D.
*--------------------------------------
KW.D.R
clc
rts
*--------------------------------------
KW.CR >PUSHW L.MSG.ECHOCRLF
>PUSHBI 0
>SYSCALL PrintF
rts
*--------------------------------------
KW.SPACE lda #C.SPACE
>SYSCALL PutChar
rts
*--------------------------------------
KW.SPACES >PULLA
beq .8
.1 dec
pha
lda #C.SPACE
>SYSCALL PutChar
pla
bne .1
.8 clc
rts
*--------------------------------------
KW.PRINT >LDYAI 256
>SYSCALL GetMem
bcs .9
>STYA ZPPtr1
phx
ldy #$ff
clc
.1 iny
lda (ZPCLBufPtr),y
beq .2
sta (ZPPtr1),y
eor #'"
bne .1
sec
.2 sta (ZPPtr1),y
tya
adc ZPCLBufPtr
sta ZPCLBufPtr
bcc .3
inc ZPCLBufPtr+1
.3 >LDYA ZPPtr1
>SYSCALL PutS
pla
>SYSCALL freemem
jmp NextChar
.9 rts
*--------------------------------------
KW.DUMP
*--------------------------------------
KW.TYPE
*--------------------------------------
KW.COUNT
*--------------------------------------
KW.TERMINAL
clc
rts
*--------------------------------------
KW.KEY >SYSCALL GetChar
bcs .9
>PUSHA
.9 rts
*--------------------------------------
KW.EMIT >PULLA
>SYSCALL PutChar
rts
*--------------------------------------
KW.EXPECT
*--------------------------------------
KW.WORD
*--------------------------------------
KW.NUMBER
*--------------------------------------
KW.STARTSTR
*--------------------------------------
KW.STRADD
*--------------------------------------
KW.STRDBL
*--------------------------------------
KW.SIGN
*--------------------------------------
KW.ENDSTR
*--------------------------------------
KW.HOLD
*--------------------------------------
KW.DECIMAL
*--------------------------------------
KW.HEX
*--------------------------------------
KW.OCTAL clc
rts
*--------------------------------------
KW.FETCHW lda (pStack)
sta ZPAddrPtr
ldy #1
lda (pStack),y
sta ZPAddrPtr+1
lda (ZPAddrPtr)
sta (pStack)
lda (ZPAddrPtr),y
sta (pStack),y
clc
rts
*--------------------------------------
KW.STOREW jsr CheckStackPop4
bcs .9
>PULLW ZPAddrPtr
>PULLA
sta (ZPAddrPtr)
>PULLA
ldy #1
sta (ZPAddrPtr),y
* clc
.9 rts
*--------------------------------------
KW.FETCHB >PULLW ZPAddrPtr
lda (ZPAddrPtr)
>PUSHA
clc
rts
*--------------------------------------
KW.STOREB >PULLW ZPAddrPtr
>PULLA
sta (ZPAddrPtr)
clc
KW.STOREB.RTS rts
*--------------------------------------
KW.FETCHPRINTW jsr KW.FETCHW
bcs KW.STOREB.RTS
jmp KW..
*--------------------------------------
KW.ADDTOW jsr KW.FETCHW
bcs KW.STOREB.RTS
jsr KW.Add
bcs KW.STOREB.RTS
jmp KW.STOREW
*--------------------------------------
KW.CMOVE
clc
rts
*--------------------------------------
KW.FILL >PULLA
bra KW.FILL2
KW.ERASE lda #0
bra KW.FILL2
KW.BLANKS lda #C.SPACE
KW.FILL2 tax
>PULLA
tay
>PULLW ZPAddrPtr
txa
.1 dey
sta (ZPAddrPtr),y
cpy #0
bne .1
clc
rts
*--------------------------------------
KW.HERE >PUSHW ZPUsrBufPtr
clc
rts
*--------------------------------------
KW.PAD >PUSHW ZPPadBuf
clc
rts
*--------------------------------------
KW.ALLOT
KW.nCOMPILE
KW.QUOTE
KW.FORGET
KW.DEFINITIONS
KW.VOCABULARY
KW.FORTH
KW.EDITOR
KW.ASSEMBLER
KW.VLIST
clc
rts
*--------------------------------------
KW.BCOLON
clc
rts
*--------------------------------------
KW.ECOLON
clc
rts
*--------------------------------------
KW.VARIABLE >PUSHB.G hSList
>PUSHW ZPCLBufPtr
>SYSCALL SListNewKey
bcs .9
>STYA ZPKeyID
txa
jsr NextKW
>LDYA L.PUSHADDR
>STYA ZPUsrCodePtr
>PUSHB.G hSList
>PUSHW ZPKeyID
>PUSHWI ZPUsrBufPtr
>PUSHWI 4 BufPtr+CodePtr
>SYSCALL SListAddData
bcs .9
>PULLA
sta (ZPUsrBufPtr)
>PULLA
ldy #1
sta (ZPUsrBufPtr),y
lda ZPUsrBufPtr
clc
adc #2
sta ZPUsrBufPtr
bcc .9
inc ZPUsrBufPtr+1
clc
.9 rts
*--------------------------------------
KW.CONSTANT
*--------------------------------------
KW.ACODE
*--------------------------------------
KW.FCODE
*--------------------------------------
KW.DO
*--------------------------------------
KW.LOOP
*--------------------------------------
PW.pLOOP
*--------------------------------------
KW.I
*--------------------------------------
KW.LEAVE
*--------------------------------------
KW.IF
*--------------------------------------
KW.ELSE
*--------------------------------------
KW.ENDIF
*--------------------------------------
KW.BEGIN
*--------------------------------------
KW.UNTIL
*--------------------------------------
KW.REPEAT
*--------------------------------------
KW.WHILE
clc
rts
*--------------------------------------
KW.COMMENT clc
rts
*--------------------------------------
MAN
SAVE usr/src/bin/forth.s.kw
LOAD usr/src/bin/forth.s
ASM

840
BIN/FORTH.S.txt Normal file
View File

@ -0,0 +1,840 @@
NEW
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
.TF bin/forth
*--------------------------------------
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/mli.i
.INB inc/mli.e.i
*--------------------------------------
USERSPACE.SIZE .EQ 4096
SCRATCH.SIZE .EQ 256
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
ZPCLBuf .BS 2
ZPCLBufPtr .BS 2
ZPFileBuf .BS 2
ZPFileBufPtr .BS 2
ZPPadBuf .BS 2
ZPKeyID .BS 2
ZPUsrBufPtr .BS 2
ZPUsrCodePtr .BS 2
ZPAddrPtr .BS 2
ZPCodePtr .BS 2
ZPPtr1 .BS 2
ZPPtr2 .BS 2
ZPPtr3 .BS 2
CL.Ptr .BS 1
CL.Len .BS 1
CL.bReady .BS 1
CL.bEscMode .BS 1
CL.MaxCnt .BS 1
bCompile .EQ *
ArgIndex .BS 1
ZS.END .ED
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA #0 S.PS.F.EVENT
.DA #0
.DA CS.END-CS.START Code Size (without Constants)
.DA DS.END-DS.START Data SegmentSize
.DA #256 Stack Size
.DA #ZS.END-ZS.START Zero Page Size
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.MSG.GREETINGS .DA MSG.GREETINGS
L.MSG.USAGE .DA MSG.USAGE
L.MSG.ECHOCRLF .DA MSG.ECHOCRLF
L.MSG.DEBUG .DA MSG.DEBUG
L.MSG.ERR .DA MSG.ERR
L.MSG.PROMPT .DA MSG.PROMPT
L.MSG.PROMPTCRLF .DA MSG.PROMPTCRLF
L.FMT.Byte .DA FMT.Byte
L.FMT.int16 .DA FMT.int16
J.ESC .DA CL.BS left arrow
.DA CL.DN
.DA CL.UP
* .DA HIS.GetNext
* .DA HIS.GetPrev
.DA CL.NAK right arrow
L.PUSHADDR .DA PUSHADDR
L.KEYWORDS .DA KEYWORDS
J.KEYWORDS .DA KW.DUP
.DA KW.DROP
.DA KW.SWAP
.DA KW.OVER
.DA KW.ROT
.DA KW.mDUP
.DA KW.gR
.DA KW.Rg
.DA KW.R
.DA KW.Add
.DA KW.DAdd
.DA KW.Sub
.DA KW.Mul
.DA KW.Div
.DA KW.Mod
.DA KW.DivMod
.DA KW.MulDivMod
.DA KW.MulDiv
.DA KW.MAX
.DA KW.MIN
.DA KW.ABS
.DA KW.DABS
.DA KW.MINUS
.DA KW.DMINUS
.DA KW.AND
.DA KW.OR
.DA KW.XOR
.DA KW.LWR
.DA KW.GTR
.DA KW.EQ
.DA KW.NEGATIVE
.DA KW.ZERO
.DA KW..
.DA KW..R
.DA KW.D.
.DA KW.D.R
.DA KW.CR
.DA KW.SPACE
.DA KW.SPACES
.DA KW.PRINT
.DA KW.DUMP
.DA KW.TYPE
.DA KW.COUNT
.DA KW.TERMINAL
.DA KW.KEY
.DA KW.EMIT
.DA KW.EXPECT
.DA KW.WORD
.DA KW.NUMBER
.DA KW.STARTSTR
.DA KW.STRADD
.DA KW.STRDBL
.DA KW.SIGN
.DA KW.ENDSTR
.DA KW.HOLD
.DA KW.DECIMAL
.DA KW.HEX
.DA KW.OCTAL
.DA KW.FETCHW
.DA KW.STOREW
.DA KW.FETCHB
.DA KW.STOREB
.DA KW.FETCHPRINTW
.DA KW.ADDTOW
.DA KW.CMOVE
.DA KW.FILL
.DA KW.ERASE
.DA KW.BLANKS
.DA KW.HERE
.DA KW.PAD
.DA KW.ALLOT
.DA KW.nCOMPILE
.DA KW.QUOTE
.DA KW.FORGET
.DA KW.DEFINITIONS
.DA KW.VOCABULARY
.DA KW.FORTH
.DA KW.EDITOR
.DA KW.ASSEMBLER
.DA KW.VLIST
.DA KW.BCOLON
.DA KW.ECOLON
.DA KW.VARIABLE
.DA KW.CONSTANT
.DA KW.ACODE
.DA KW.FCODE
.DA KW.DO
.DA KW.LOOP
.DA PW.pLOOP
.DA KW.I
.DA KW.LEAVE
.DA KW.IF
.DA KW.ELSE
.DA KW.ENDIF
.DA KW.BEGIN
.DA KW.UNTIL
.DA KW.REPEAT
.DA KW.WHILE
.DA KW.COMMENT
.DA 0
*--------------------------------------
CS.INIT clc
CS.INIT.RTS rts
*--------------------------------------
CS.RUN >PUSHW L.MSG.GREETINGS
>PUSHW A2osX.KVER
>PUSHBI 2
>SYSCALL PrintF
bcs CS.INIT.RTS
jsr CS.RUN.ARGS
bcs CS.INIT.RTS
>LDYAI 256
>SYSCALL GetMem
bcs CS.INIT.RTS
>STYA ZPCLBuf
txa
>STA.G hCLBuf
>LDYAI 256
>SYSCALL GetMem
bcs CS.INIT.RTS
>STYA ZPPadBuf
txa
>STA.G hPadBuf
>LDYAI USERSPACE.SIZE
>SYSCALL GetMem
bcs CS.INIT.RTS
>STYA ZPUsrBufPtr
>STYA.G UsrBuf
txa
>STA.G hUsrBuf
>SYSCALL SListNew
bcs CS.INIT.RTS
>STA.G hSList
stz bCompile
.1 >SLEEP
>LDA.G bDebug
bpl .2
jsr PrintDebugMsg
.2 >LDA.G bTrace
bpl .3
>LDYA ZPFileBufPtr
jsr PrintTraceMsg
.3 jsr CS.FORTH.Run
bcc .1
cmp #MLI.E.EOF
beq .8
cmp #3
beq .99
pha
>LDA.G bExitOnEOF
bmi .9
pla
>PUSHA
>PUSHW ZPCLBuf
>SYSCALL GetErrorMessage
>LDYA ZPCLBuf
>SYSCALL PutS
bra .1
* jsr PrintErrMsg
.9 pla
.99 sec
rts
.8 lda #0 Exit Code = Success
sec
rts
*--------------------------------------
CS.RUN.ARGS inc ArgIndex
lda ArgIndex
>SYSCALL ArgV
bcs .8
>STYA ZPPtr1
lda (ZPPtr1)
cmp #'-'
bne .4
ldy #1
lda (ZPPtr1),y
ldx #OptionVars-OptionList-1
.1 cmp OptionList,x
beq .2
dex
bpl .1
bra .90
.2 ldy OptionVars,x
lda #$ff
sta (pData),y
bra CS.RUN.ARGS
.4 >LDA.G hFileBuf
bne .90
>LDYA ZPPtr1
jsr CS.RUN.LoadFile
bcs .9
>STA.G hFileBuf
bra CS.RUN.ARGS
.8 clc
.9 rts
.90 >PUSHW L.MSG.USAGE
>PUSHBI 0
>SYSCALL PrintF
lda #E.SYN
sec QUIT Process
rts
*--------------------------------------
CS.FORTH.Run >LDA.G hFileBuf
bne CS.FORTH.Run.File
jsr CL.Reset
lda #80
sta CL.MaxCnt
jsr PrintPrompt
bcs .9
.1 >SYSCALL GetChar
bcs .9 I/O error
.2 cmp #3 Ctrl-C
beq .9 CS
jsr CL.CHARIN
bit CL.bReady Something to execute ?
bpl .1
>PUSHW L.MSG.PROMPTCRLF
>PUSHBI 0
>SYSCALL PrintF
jmp CS.RUN.EXEC
.9 rts
CS.FORTH.Run.File
lda (ZPFileBufPtr)
beq .8
ldy #$ff
.3 iny
lda (ZPFileBufPtr),y
sta (ZPCLBuf),y
beq .4
eor #C.CR
bne .3
sta (ZPCLBuf),y
iny
.4 tya
clc
adc ZPFileBufPtr
sta ZPFileBufPtr
bcc .5
inc ZPFileBufPtr+1
.5 lda (ZPCLBuf)
beq CS.FORTH.Run.File
cmp #'#'
beq CS.FORTH.Run.File
>LDYA ZPCLBuf
>STYA ZPCLBufPtr
jmp CS.RUN.EXEC
.8 lda #MLI.E.EOF
sec
rts
*--------------------------------------
CS.RUN.EXEC lda (ZPCLBufPtr)
beq .8
.1 jsr KW.Lookup
bcs .2
tya
jsr NextKW
jsr .7
bcc CS.RUN.EXEC
rts
.2 >PUSHB.G hSList
>PUSHW ZPCLBufPtr
>SYSCALL SListLookup
bcs .5
>STYA ZPKeyID
>PUSHB.G hSList
>PUSHW ZPKeyID
>PUSHWI ZPAddrPtr
>PUSHWI 4 4 bytes
>PUSHWZ From Start
>SYSCALL SListGetData
bcs .9
jmp (ZPCodePtr)
.8 clc
.9 rts
.5 >PUSHW ZPCLBufPtr
>PUSHWI ZPCLBufPtr
>PUSHBI 10
>SYSCALL StrToL
bcs .9
ldy #2
lda (pStack)
sta (pStack),y
inc pStack
lda (pStack)
sta (pStack),y
inc pStack
.6 jsr NextChar Skip SPACE if any
beq .8
jmp .1
.7 txa
asl
tax
jmp (J.KEYWORDS,x)
*--------------------------------------
CS.RUN.LoadFile >PUSHYA
>PUSHBI O.RDONLY
>PUSHBI S.FI.T.TXT
>PUSHWZ Aux type
>SYSCALL LoadTxtFile
bcs .9
phx
txa
>SYSCALL GetMemPtr
>STYA ZPFileBuf
>STYA ZPFileBufPtr
pla
.9 rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT >LDA.G hSList
beq .1
>PUSHA
>SYSCALL SListFree
.1 ldy #hFileBuf
jsr .7
ldy #hUsrBuf
jsr .7
ldy #hCLBuf
.7 lda (pData),y
beq .8
>SYSCALL FreeMem
.8 clc
rts
*--------------------------------------
PrintPrompt >PUSHW L.MSG.PROMPT
>PUSHBI 0
>SYSCALL PrintF
rts
*--------------------------------------
PrintErrMsg >LDYA ZPFileBuf
>STYA ZPPtr1
stz ZPPtr2
stz ZPPtr2+1 Line counter
.1 inc ZPPtr2
bne .2
inc ZPPtr2+1
.2 >LDYA ZPPtr1
>STYA ZPPtr3 save line start
.20 lda (ZPPtr1)
beq .4 EoF
inc ZPPtr1
bne .3
inc ZPPtr1+1
.3 cmp #C.CR
bne .20 Scan until EoL
ldx ZPPtr1
cpx ZPFileBufPtr
lda ZPPtr1+1
sbc ZPFileBufPtr+1
bcc .1 not this line....
.4 >LDA.G bTrace
bmi .5
jsr PrintTraceMsg.3
.5 lda ZPPtr3
cmp ZPFileBufPtr
bne .6
lda ZPPtr3+1
cmp ZPFileBufPtr+1
beq .8
.6 >PUSHBI '-'
ldy #S.PS.hStdErr
lda (pPS),y
>SYSCALL FPutC
inc ZPPtr3
bne .5
inc ZPPtr3+1
bra .5
.8 ldy #S.PS.hStdErr
lda (pPS),y
>PUSHA
>PUSHW L.MSG.ERR
>PUSHW ZPPtr2 Line counter
>PUSHBI 2
>SYSCALL FPrintF
rts
*--------------------------------------
PrintDebugMsg
clc
rts
*--------------------------------------
PrintTraceMsg >STYA ZPPtr3
PrintTraceMsg.3 >PUSHBI '>'
ldy #S.PS.hStdErr
lda (pPS),y
>SYSCALL FPutC
ldy #$ff
.1 iny
lda (ZPPtr3),y
beq .8
cmp #C.CR
beq .8
phy
>PUSHA
ldy #S.PS.hStdErr
lda (pPS),y
>SYSCALL FPutC
ply
bra .1
.8 ldy #S.PS.hStdErr
lda (pPS),y
>PUSHA
>PUSHW L.MSG.ECHOCRLF
>PUSHBI 0
>SYSCALL FPrintF
rts
*--------------------------------------
CheckLFAfterCR ldy #S.PS.hStdIn Check for any extra LF
lda (pPS),y
>SYSCALL FEOF
bcs .9
tay
bne .9
>SYSCALL GetChar
.9 rts
*--------------------------------------
IncPtr1 inc ZPPtr1
bne IncPtr1.8
inc ZPPtr1+1
IncPtr1.8 rts
*--------------------------------------
NextKW clc
adc ZPCLBufPtr
sta ZPCLBufPtr
bcc NextCharNB
inc ZPCLBufPtr+1
*--------------------------------------
NextCharNB lda (ZPCLBufPtr)
beq .8
jsr IsSpaceOrCR
bcs .8
inc ZPCLBufPtr
bne NextCharNB
inc ZPCLBufPtr+1
bra NextCharNB
.8 rts
*--------------------------------------
NextChar lda (ZPCLBufPtr)
beq .8
inc ZPCLBufPtr
bne .8
inc ZPCLBufPtr+1
.8 rts
*--------------------------------------
ToUpperCase cmp #'a'
bcc .8
cmp #'z'+1
bcs .8
eor #$20
.8 clc exit CC to allow Jmp to
rts
*--------------------------------------
IsSpaceOrCR cmp #C.SPACE
beq IsEndKW.8
cmp #C.CR
beq IsEndKW.8
sec
rts
IsEndKW.8 clc
rts
*--------------------------------------
PUSHADDR lda ZPAddrPtr+1
>PUSHA
lda ZPAddrPtr
>PUSHA
rts
*--------------------------------------
CheckStackPop4 lda pStack
sec
sbc #4
bcc .9
clc
rts
.9 lda #E.STACKERROR
sec
rts
*--------------------------------------
.INB usr/src/bin/forth.s.cl
.INB usr/src/bin/forth.s.kw
*--------------------------------------
CS.END
*--------------------------------------
MSG.GREETINGS .AZ "\r\nA2osX-FORTH %d.%d (figForth)\r\n\r\n"
MSG.USAGE .AS "Usage : FORTH <option> file\r\n"
.AS " -D : Debug Mode\r\n"
.AS " -T : Trace On"
MSG.ECHOCRLF .AZ "\r\n"
MSG.DEBUG .AZ "pStack=%H"
MSG.ERR .AZ "^\r\nLine #%D:"
MSG.PROMPT .AZ "\e[?7hOK\r\n> " Enable Line Wrap
MSG.PROMPTCRLF .AZ "\e[?7l\r\n" Disable Line Wrap
FMT.Byte .AZ "%d "
FMT.int16 .AZ "%I "
*--------------------------------------
OptionList .AS "DdTt"
OptionVars .DA #bDebug,#bDebug,#bTrace,#bTrace
*--------------------------------------
EscChars .AS 'DBAC'
EscChars.Cnt .EQ *-EscChars
EscChars.Remap .DA #C.BS,#C.VT,#C.LF,#C.FS
*--------------------------------------
KEYWORDS .AT "DUP" ( n - n n ) Duplicate top of stack.
.AT "DROP" ( n - ) Discard top of stack.
.AT "SWAP" ( n1 n2 - n2 n1 ) Reverse top two stack items.
.AT "OVER" ( n1 n2 - n1 n2 n1 ) Copy second item to top.
.AT "ROT" ( n1 n2 n3 - n2 n3 n1 ) Rotate third item to top.
.AT "-DUP" ( n - n ? ) Duplicate only if non-zero.
.AT ">R" ( n - ) Move top item to return stack.
.AT "R>" ( - n ) Retrieve item from return stack.
.AT "R" ( - n ) Copy top of return stack onto stack.
.AT "+" ( n1 n2 - sum ) Add.
.AT "D+" ( d1 d2 - sum ) Add double-precision numbers.
.AT "-" ( n1 n2 - diff ) Subtract (n1-n2).
.AT "*" ( n1 n2 - prod ) Multiply.
.AT "/" ( n1 n2 - quot ) Divide (n1/n2).
.AT "MOD" ( n1 n2 - rem ) Modulo (remainder from division).
.AT "/MOD" ( n1 n2 - rem quot ) Divide, giving remainder and quotient.
.AT "*/MOD" ( n1 n2 - rem quot ) Multiply, then divide (n1*n2/n3), with double-precision intermediate.
.AT "*/" ( n1 n2 - quot ) Like */MOD, but give quotient only.
.AT "MAX" ( n1 n2 - max ) Maximum.
.AT "MIN" ( n1 n2 - min ) Minimum.
.AT "ABS" ( n - absolute ) Absolute value.
.AT "DABS" ( d - absolute ) Absolute value of double-precision number.
.AT "MINUS" ( n - -n ) Change sign.
.AT "DMINUS" ( d - -d ) Change sign of double-precision number.
.AT "AND" ( n1 n2 - and ) Logical bitwise AND.
.AT "OR" ( n1 n2 - or ) Logical bitwise OR.
.AT "XOR" ( n1 n2 - xor ) Logical bitwise exclusive OR.
.AT "<" ( n1 n2 - f ) True if n1 less than n2.
.AT ">" ( n1 n2 - f ) True if n1 greater than n2.
.AT "=" ( n1 n2 - f ) True if n1 equal to n2.
.AT "0<" ( n - f ) True if top number negative.
.AT "0=" ( n - f ) True if top number zero.
*--------------------------------------
.AT "." ( n - ) Print number.
.AT ".R" ( n u - ) Print number, right-justified in u column.
.AT "D." ( d - ) Print double-precision number.
.AT "D.R" ( d u - ) Print double-precision number in u column.
.AT "CR" ( - ) Do a carriage-return.
.AT "SPACE" ( - ) Type one space.
.AT "SPACES" ( u - ) Type u spaces.
.AT '."' ( - ) Print message (terminated by ").
.AT "DUMP" ( addr u - ) Dump u numbers starting at address.
.AT "TYPE" ( addr u - ) Type u characters starting at address.
.AT "COUNT" ( addr - addr+1 u ) Change length byte string to TYPE form.
.AT "?TERMINAL" ( - f ) True if terminal break request present.
.AT "KEY" ( - c ) Read key, put ASCII value on stack.
.AT "EMIT" ( c - ) Type ASCII character from stack.
.AT "EXPECT" ( addr u - ) Read u characters (or until carriage-return) from input device to address.
.AT "WORD" ( c - ) Read one word from input stream, delimited by c.
.AT "NUMBER" ( addr - d ) Convert string at address to double number.
.AT "<#" ( - ) Start output string.
.AT "#" ( d1 - d2 ) Convert one digit of double number and add character to output string.
.AT "#S" ( d - 0 0 ) Convert all significant digits of double number to output string.
.AT "SIGN" ( n d - d ) Insert sign of n to output string.
.AT "#>" ( d - addr u ) Terminate output string for TYPE.
.AT "HOLD" ( c - ) Insert ASCII character into output string.
.AT "DECIMAL" ( - ) Set decimal base.
.AT "HEX" ( - ) Set hexadecimal base.
.AT "OCTAL" ( - ) Set octal base.
*--------------------------------------
.AT "@" ( addr - n ) Replace word address by contents.
.AT "!" ( n addr - ) Store second word at address on top.
.AT "C@" ( addr - b ) Fetch one byte only.
.AT "C!" ( b addr - ) Store one byte only.
.AT "?" ( addr - ) Print contents of address.
.AT "+!" ( n addr - ) Add second number to contents of address.
.AT "CMOVE" ( from to u - ) Move u bytes in memory.
.AT "FILL" ( addr u b - ) Fill u bytes in memory with b beginning at address.
.AT "ERASE" ( addr u - ) Fill u bytes in memory with zeros.
.AT "BLANKS" ( addr u - ) Fill u bytes in memory with blanks.
.AT "HERE" ( - addr ) Return address above dictionary.
.AT "PAD" ( - addr ) Return address of scratch area.
.AT "ALLOT" ( u - ) Leave a gap of n bytes in the dictionary.
.AT "," ( n - ) Compile number n into the dictionary.
.AT "'" ( - addr ) Find address of next string in dictionary.
.AT "FORGET" ( - ) Delete all definitions above and including the following definition.
.AT "DEFINITIONS" ( - ) Set current vocabulary to context vocabulary.
.AT "VOCABULARY" ( - ) Create new vocabulary.
.AT "FORTH" ( - ) Set context vocabulary to Forth vocabulary.
.AT "EDITOR" ( - ) Set context vocabulary to Editor vocabulary.
.AT "ASSEMBLER" ( - ) Set context vocabulary to Assembler.
.AT "VLIST" ( - ) Print names in context vocabulary.
*--------------------------------------
.AT ":" ( - ) Begin a colon definition.
.AT ";" ( - ) End of a colon definition.
.AT "VARIABLE" ( n - ) Create a variable with initial value n.
* ( - addr ) Return address when executed.
.AT "CONSTANT" ( n - ) Create a constant with value n.
* ( - n ) Return the value n when executed.
.AT "CODE" ( - ) Create assembly-language definition.
.AT ";CODE" ( - ) Create a new defining word, with runtime code routine in high-level Forth.
.AT "DO" ( end+1 start - ) Set up loop, given index range.
.AT "LOOP" ( - ) Increment index, terminate loop if equal to limit.
.AT "+LOOP" ( n - ) Increment index by n. Terminate loop if outside limit.
.AT "I" ( - index ) Place loop index on stack.
.AT "LEAVE" ( - ) Terminate loop at next LOOP or +LOOP.
.AT "IF" ( f - ) If top of stack is true, execute true clause.
.AT "ELSE" ( - ) Beginning of the false clause.
.AT "ENDIF" ( - ) End of the IF-ELSE structure.
.AT "BEGIN" ( - ) Start an indefinite loop.
.AT "UNTIL" ( f - ) Loop back to BEGIN until f is true.
.AT "REPEAT" ( - ) Loop back to BEGIN unconditionally.
.AT "WHILE" ( f - ) Exit loop immediately if f is false.
*--------------------------------------
.AT "(" ( - ) Begin comment, terminated by ).
*--------------------------------------
.DA #0
*--------------------------------------
.DUMMY
.OR 0
DS.START
bDebug .BS 1
bTrace .BS 1
bExitOnEOF .BS 1
hCLBuf .BS 1
hPadBuf .BS 1
hUsrBuf .BS 1
UsrBuf .BS 2
hFileBuf .BS 1
hSList .BS 1
DS.END .ED
*--------------------------------------
MAN
SAVE usr/src/bin/forth.s
ASM

View File

@ -144,7 +144,21 @@ CS.RUN.WAIT >PUSHW L.MSG.SHUTDOWN
.1 >SLEEP .1 >SLEEP
lda bSec ldy #S.PS.hStdIn
lda (pPS),y
>SYSCALL FEOF
bcs .2
tay
bne .2 CC
>SYSCALL GetChar
bcs .9
cmp #$03 Ctrl-C
beq .9 CS
.2 lda bSec
bpl .1 bpl .1
stz bSec stz bSec
@ -157,7 +171,7 @@ CS.RUN.WAIT >PUSHW L.MSG.SHUTDOWN
>SYSCALL PrintF >SYSCALL PrintF
clc clc
rts .9 rts
*-------------------------------------- *--------------------------------------
CS.RUN.PS stz Count CS.RUN.PS stz Count
@ -348,7 +362,7 @@ CS.QUIT clc
rts rts
*-------------------------------------- *--------------------------------------
CS.END CS.END
MSG.USAGE .AS "Usage : SHUTDOWN <NEXT.STSTEM>\r\n" MSG.USAGE .AS "Usage : SHUTDOWN <NEXT.SYSTEM>\r\n"
.AS " -R : Restart System\r\n" .AS " -R : Restart System\r\n"
.AS " -T <seconds> : default to 60" .AS " -T <seconds> : default to 60"
MSG.CRLF .AZ "\r\n" MSG.CRLF .AZ "\r\n"

270
BIN/UNAME.S.txt Normal file
View File

@ -0,0 +1,270 @@
NEW
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
.TF bin/uname
*--------------------------------------
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/mli.e.i
.INB inc/kernel.i
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
ZPPtr1 .BS 2
ZPPtr2 .BS 2
Index .BS 1
Count .BS 1
bHostName .BS 1
bMachineType .BS 1
bCPUType .BS 1
bCPUSpeed .BS 1
bAltCPU .BS 1
bKernelVersion .BS 1
bKernelMode .BS 1
bKernelClk .BS 1
ZS.END .ED
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA #0 S.PS.F.EVENT
.DA #0
.DA CS.END-CS.START Code Size (without Constants)
.DA DS.END-DS.START Data SegmentSize
.DA #32 Stack Size
.DA #ZS.END-ZS.START Zero Page Size
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.MSG.USAGE .DA MSG.USAGE
L.MSG.CRLF .DA MSG.CRLF
L.TYPES .DA TYPE.UNKNOWN
.DA TYPE.IIe
.DA TYPE.IIc
.DA TYPE.IIgs
L.CPUS .DA CPU.65C02
.DA CPU.65R02
.DA CPU.65816
L.CPU.SPEED .DA CPU.SPEED
L.KERNEL.VER .DA KERNEL.VER
L.KERNEL.MODES .DA KERNEL.POLLING
.DA KERNEL.IRQ
.DA KERNEL.PREEMPT
.DA 0
*--------------------------------------
CS.INIT clc
rts
*--------------------------------------
CS.RUN ldy #S.PS.ARGC
lda (pPS),y
beq .8
.1 inc Index
lda Index
>SYSCALL ArgV
bcs CS.RUN.PRINT
>STYA ZPPtr1
lda (ZPPtr1)
cmp #'-'
bne .99
ldy #1
lda (ZPPtr1),y
beq .99
jsr CS.RUN.CheckOpt
bcc .1
.99 >PUSHW L.MSG.USAGE
>PUSHBI 0
>SYSCALL PrintF
lda #E.SYN
sec
rts
.8 lda #$ff
sta bKernelVersion
sta bKernelMode
sta bMachineType
sta bCPUType
sta bCPUSpeed
*--------------------------------------
CS.RUN.PRINT bit bHostName
bpl .1
.1 bit bMachineType
bpl .2
lda A2osX.HWType
asl
tax
>LDYA L.TYPES,x
jsr CS.RUN.PRINTYA
.2 bit bCPUType
bpl .3
lda A2osX.CPUTYPE
asl
and #$0F
tax
>LDYA L.CPUS-2,x
jsr CS.RUN.PRINTYA
.3 bit bCPUSpeed
bpl .4
>PUSHW L.CPU.SPEED
>PUSHW A2osX.CPUSPEED
>PUSHBI 2
jsr CS.RUN.PRINTF
.4 bit bAltCPU
bpl .5
.5 bit bKernelVersion
bpl .6
>PUSHW L.KERNEL.VER
>PUSHW A2osX.KVER
>PUSHBI 2
jsr CS.RUN.PRINTF
.6 bit bKernelMode
bpl .7
ldx #0
bit A2osX.IRQMode
bpl .60
inx
inx
bit A2osX.F
bvc .60
inx
inx
.60 >LDYA L.KERNEL.MODES,x
jsr CS.RUN.PRINTYA
.7 bit bKernelClk
bpl .8
.8 >PUSHW L.MSG.CRLF
>PUSHBI 0
>SYSCALL PrintF
lda #0
sec
rts
*--------------------------------------
CS.RUN.PRINTYA >PUSHYA
>PUSHBI 0
CS.RUN.PRINTF lda Count
beq .1
lda #C.SPACE
>SYSCALL PutChar
.1 >SYSCALL PrintF
inc Count
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT
.8 clc
rts
*--------------------------------------
CS.RUN.CheckOpt ldy #1
lda (ZPPtr1),y
ldx #OptionVars-OptionList-1
.2 cmp OptionList,x
beq .3
dex
bpl .2
sec
rts
.3 ldy OptionVars,x
ldx #$ff
stx 0,y
clc
rts
*--------------------------------------
CS.END
*--------------------------------------
OptionList .AS "HhMmCcSsAaVvKkZz"
OptionVars .DA #bHostName,#bHostName
.DA #bMachineType,#bMachineType
.DA #bCPUType,#bCPUType
.DA #bCPUSpeed,#bCPUSpeed
.DA #bAltCPU,#bAltCPU
.DA #bKernelVersion,#bKernelVersion
.DA #bKernelMode,#bKernelMode
.DA #bKernelClk,#bKernelClk
*--------------------------------------
MSG.USAGE .AS "Usage : UNAME\r\n"
.AS " -H : Hostname\r\n"
.AS " -M : Machine Type/SubType\r\n"
.AS " -C : CPU Type\r\n"
.AS " -S : CPU Speed\r\n"
.AS " -A : Alternate CPU\r\n"
.AS " -V : Kernel Version\r\n"
.AS " -K : Kernel Mode\r\n"
.AS " -Z : Kernel Timing\r\n"
MSG.CRLF .AZ "\r\n"
TYPE.UNKNOWN .AZ "Unknown_HW"
TYPE.IIe .AZ "Apple//e"
TYPE.IIc .AZ "Apple//c"
TYPE.IIgs .AZ "AppleIIgs"
CPU.65C02 .AZ "65c02"
CPU.65R02 .AZ "65r02"
CPU.65816 .AZ "65816"
CPU.SPEED .AZ "%d.%02dmhz"
KERNEL.VER .AZ "A2osX_%d.%02d"
KERNEL.POLLING .AZ "Polling_Mode"
KERNEL.IRQ .AZ "IRQ_Mode"
KERNEL.PREEMPT .AZ "Preemptive_Mode"
*--------------------------------------
.DUMMY
.OR 0
DS.START
DS.END .ED
*--------------------------------------
MAN
SAVE usr/src/bin/uname.s
ASM

View File

@ -58,7 +58,11 @@ A2osX.SLEEP .EQ $BC10
*-------------------------------------- *--------------------------------------
A2osX.SCRNDEVS .EQ $BED0 0=console, 1-8=VT100, 9=GFX A2osX.SCRNDEVS .EQ $BED0 0=console, 1-8=VT100, 9=GFX
A2osX.ASCREEN .EQ $BEDA Active Screen A2osX.ASCREEN .EQ $BEDA Active Screen
* free BEDB -> BEE5 * free BEDB -> BEDF
A2osX.KVER .EQ $BEE0
A2osX.IRQMode .EQ $BEE3
A2osX.FSID .EQ $BEE5
A2osX.CPUTYPE .EQ $BEE6 A2osX.CPUTYPE .EQ $BEE6
A2osX.CPUSPEED .EQ $BEE7 WORD, (->255.99 Mhz) A2osX.CPUSPEED .EQ $BEE7 WORD, (->255.99 Mhz)

View File

@ -2,10 +2,10 @@ NEW
AUTO 3,1 AUTO 3,1
*-------------------------------------- *--------------------------------------
IO.D2.SeekTimeR .EQ 140 LIBBLKDEV Recalibration IO.D2.SeekTimeR .EQ 140 LIBBLKDEV Recalibration
IO.D2.SeekTimeF .EQ 140 LIBBLKDEV Track Formatter IO.D2.SeekTimeF .EQ 68 LIBBLKDEV Track Formatter
IO.D2.SeekTimeB .EQ 140 LIBBLKDEV Boot Block IO.D2.SeekTimeB .EQ 68 LIBBLKDEV Boot Block
IO.D2.SeekTimeP .EQ 60 ProDOS.FX initial IO.D2.SeekTimeP .EQ 68 ProDOS.FX initial
IO.D2.SeekTimeI .EQ 20 ProDOS.FX increment -> until > 128 IO.D2.SeekTimeI .EQ 10 ProDOS.FX increment -> until > 128
*-------------------------------------- *--------------------------------------
IO.D2.Ph0Off .EQ $C080 IO.D2.Ph0Off .EQ $C080
IO.D2.Ph0On .EQ $C081 IO.D2.Ph0On .EQ $C081

View File

@ -239,6 +239,9 @@ goread lda iobuff
sta buff+1 sta buff+1
jmp (dent) jmp (dent)
*-------------------------------------- *--------------------------------------
BB.PhX .HS 00
BB.Phy .HS 0002020404060600
*--------------------------------------
mods .DA #mod1,#mod2,#mod3,#mod4,#mod5,#mod6,#mod7,#mod8,#mod8+1,#mod9 mods .DA #mod1,#mod2,#mod3,#mod4,#mod5,#mod6,#mod7,#mod8,#mod8+1,#mod9
mods.cnt .EQ *-mods mods.cnt .EQ *-mods
chgs .DA #chg1,#chg2,#chg3,#chg4,#chg5,#chg6,#chg7,#$91,#BB.HdrPtr,#BB.HdrTrk chgs .DA #chg1,#chg2,#chg3,#chg4,#chg5,#chg6,#chg7,#$91,#BB.HdrPtr,#BB.HdrTrk
@ -320,47 +323,21 @@ BB.Seek lda BB.HdrTrk get track we're on
.2 dec .2 dec
sta BB.CurrentQTrack sta BB.CurrentQTrack
pha
and #6 and #7
tax
lda BB.PhY,x
ora BB.Slotn0
tay
lda BB.PhX,x
ora BB.Slotn0 ora BB.Slotn0
tax tax
pla php
sei
bcs .3
* Current < Target, must move in
inc
.HS B0 BCS
* Current > Target, must move out
.3 dec
and #6
ora BB.Slotn0
bcc .4
* move out : invert 2 phases
phx
tax
pla
.4 tay
lda IO.D2.Ph0On,x lda IO.D2.Ph0On,x
nop
nop
lda IO.D2.Ph0On,y lda IO.D2.Ph0On,y
nop plp
nop
lda #IO.D2.SeekTimeB lda #IO.D2.SeekTimeB
jsr BB.Wait jsr BB.Wait
@ -376,32 +353,23 @@ BB.Seek lda BB.HdrTrk get track we're on
jsr BB.PhasesOff jsr BB.PhasesOff
bra BB.Read bra BB.Read
*-------------------------------------- *--------------------------------------
BB.PhasesOff bit IO.D2.Ph0Off,x BB.PhasesOff php
nop sei
nop bit IO.D2.Ph0Off,x
ldx IO.D2.Ph0Off,y ldx IO.D2.Ph0Off,y
nop plp
nop
rts rts
*-------------------------------------- *--------------------------------------
BB.Wait phx (3) BB.Wait phx (3)
.1 ldx #17 (2) .1 ldx #20 (2)
.2 dex (2) delay 86 usec. .2 dex (2)
bne .2 (2+) 2 + 5x17 + 2 + 2 bne .2 (3)
ldx BB.Slotn0 (3)
bit IO.D2.DrvOn,x (4) Slow down ACC boards
* sec (2)
* sbc #1 (2)
dec (2) dec (2)
bne .1 (3)
bne .1 (2+)
plx (4) plx (4)

View File

@ -24,28 +24,30 @@ D2Recalibrate >PULLB DrvSlt
jsr CheckDiskII jsr CheckDiskII
bcs .9 bcs .9
ldx Slotn0 ldy Slotn0
lda IO.D2.DrvOn,x lda IO.D2.DrvOn,y
nop
nop
ldy #168 lda #168
.1 lda IO.D2.Ph0Off,x .1 sta IO.D2.Ph0Off,y
dey dec
dey dec
tya pha
and #6 and #6
ora Slotn0 ora Slotn0
tax tay
lda IO.D2.Ph0On,x sta IO.D2.Ph0On,y
lda #IO.D2.SeekTimeR lda #IO.D2.SeekTimeR
jsr D2.Wait100usecA jsr D2.Wait100usecA
tya pla
bne .1 bne .1
jsr D2.Wait25600usec jsr D2.Wait25600usec
@ -65,109 +67,109 @@ D2MoveHead >PULLB MoveTo
jsr CheckDiskII jsr CheckDiskII
bcs .9 bcs .9
ldx Slotn0 lda MoveFrom
ldy Slotn0
.1 lda MoveFrom
cmp MoveTo cmp MoveTo
beq .7 beq .9
jsr .8 php
sei
bcs .2
* Current < Target, must move in
inc
.HS B0 BCS
* Current > Target, must move out
.2 dec
sta MoveFrom
pha pha
bcs .10
and #6
ora Slotn0
tax
pla
bcs .3
* Current < Target, must move in
inc inc
.HS B0 BCS .10 and #6
* Current > Target, must move out
.3 dec
and #6
ora Slotn0 ora Slotn0
bcc .4
* move out : invert 2 phases
phx
tax tax
pla
ora #$80
.4 tay sta .7+1
stz .6+1
lda IO.D2.Ph0On,x lda IO.D2.Ph0On,x
nop nop
nop nop
* lda #IO.D2.SeekTimeF
* jsr D2.Wait100usecA
lda IO.D2.Ph0On,y pla
.1 bcc .2
* Current > Target, must move out
dec
.HS 90 BCC
* Current < Target, must move in
.2 inc
sta MoveFrom
and #7
tay
bcs .3
lda D2.PhIn,y
bcc .4
.3 lda D2.PhOut,y
.4 ora Slotn0
sta .5+1
lsr
bcc .5
asl
ldx .7+1
stx .6+1
sta .7+1
.5 sta $C000
nop nop
nop nop
lda #IO.D2.SeekTimeF lda #IO.D2.SeekTimeF
jsr D2.Wait100usecA jsr D2.Wait100usecA
bra .1 lda MoveFrom
cmp MoveTo
bne .1
.7 jsr D2.Wait25600usec jsr D2.Wait25600usec
clc .6 sta $C000
.8 bit IO.D2.Ph0Off,x
nop nop
nop nop
.7 sta $C000
ldx IO.D2.Ph0Off,y
nop nop
nop nop
.9 rts plp
.9 clc
rts
*-------------------------------------- *--------------------------------------
D2.Wait25600usec D2.Wait25600usec
lda #0 lda #0
D2.Wait100usecA D2.Wait100usecA
phx (3) .1 ldx #20 (2)
.1 ldx #18 (2)
.2 dex (2) .2 dex (2)
bne .2 (3) bne .2 (3)
ldx Slotn0 (3) dec (2)
bit IO.D2.DrvOn,x (4) Slow down ACC boards
sec (2)
sbc #1 (2)
bne .1 (3) bne .1 (3)
plx (4)
rts (6) rts (6)
*/-------------------------------------- */--------------------------------------
* # D2TrkRead16s * # D2TrkRead16s
@ -316,7 +318,17 @@ CheckDiskII pha
adc Slotn0 adc Slotn0
tax tax
lda $C000,x lda $C000,x
ldx Slotn0
lda IO.D2.ReadMode,x
lda IO.D2.RData,x
lda IO.D2.Ph0Off,x
lda IO.D2.Ph1Off,x
lda IO.D2.Ph2Off,x
lda IO.D2.Ph3Off,x
* clc * clc
rts rts
@ -330,8 +342,10 @@ CheckDiskII pha
DrvSpinCheck ldy #0 DrvSpinCheck ldy #0
lda IO.D2.RData,x lda IO.D2.RData,x
.1 cmp IO.D2.RData,x .1 cmp IO.D2.RData,x
bne .8 spinning bne .8 spinning
dey dey
bne .1 bne .1
@ -346,6 +360,7 @@ PutSyncBytePtr2 lda #$7f
.1 jsr PutBytePtr2 .1 jsr PutBytePtr2
dey dey
bne .1 bne .1
rts rts
*-------------------------------------- *--------------------------------------
PutAddrHeadPtr2 ldy #2 PutAddrHeadPtr2 ldy #2
@ -354,6 +369,7 @@ PutAddrHeadPtr2 ldy #2
jsr PutBytePtr2 jsr PutBytePtr2
dey dey
bpl .1 bpl .1
rts rts
*-------------------------------------- *--------------------------------------
PutDataHeadPtr2 ldy #2 PutDataHeadPtr2 ldy #2
@ -362,6 +378,7 @@ PutDataHeadPtr2 ldy #2
jsr PutBytePtr2 jsr PutBytePtr2
dey dey
bpl .1 bpl .1
rts rts
*-------------------------------------- *--------------------------------------
PutTailPtr2 ldy #2 PutTailPtr2 ldy #2
@ -370,6 +387,7 @@ PutTailPtr2 ldy #2
jsr PutBytePtr2 jsr PutBytePtr2
dey dey
bpl .1 bpl .1
rts rts
*-------------------------------------- *--------------------------------------
HeaderCheckSum lda VolNum HeaderCheckSum lda VolNum

View File

@ -22,7 +22,7 @@ TRACK16.GAP2 .EQ 6 60 bits
*Data field = D5AAAD + 342 + CS + DEAAEB = 349 2792 bits *Data field = D5AAAD + 342 + CS + DEAAEB = 349 2792 bits
TRACK16.GAP3 .EQ 17 170 bits TRACK16.GAP3 .EQ 17 170 bits
* ) * )
* 80 + 16 * (14 + 6 + 349 + 17) = 6256 50144 bits * 80 + 16 * (14 + 6 + 349 + 17) = 6256 800 + 50144 bits
*-------------------------------------- *--------------------------------------
TRACK9.LEN .EQ 6511 TRACK9.LEN .EQ 6511
*-------------------------------------- *--------------------------------------
@ -396,6 +396,24 @@ TrkWriter.Start lda IO.D2.ReadProt,x
TrkWriter.Size .EQ *-TrkWriter.Start TrkWriter.Size .EQ *-TrkWriter.Start
.EP .EP
*-------------------------------------- *--------------------------------------
D2.PhIn .DA #IO.D2.Ph3Off 7->0
.DA #IO.D2.Ph1On 0->1
.DA #IO.D2.Ph0Off 1->2
.DA #IO.D2.Ph2On 2->3
.DA #IO.D2.Ph1Off 3->4
.DA #IO.D2.Ph3On 4->5
.DA #IO.D2.Ph2Off 5->6
.DA #IO.D2.Ph0On 6->7
D2.PhOut .DA #IO.D2.Ph1Off 1->0
.DA #IO.D2.Ph0on 2->1
.DA #IO.D2.Ph2off 3->2
.DA #IO.D2.Ph1On 4->3
.DA #IO.D2.Ph3Off 5->4
.DA #IO.D2.Ph2On 6->5
.DA #IO.D2.Ph0Off 7->6
.DA #IO.D2.Ph3On 0->7
*--------------------------------------
ADDR.Head .HS 96AAD5 ADDR.Head .HS 96AAD5
DATA.Head .HS ADAAD5 DATA.Head .HS ADAAD5
TAIL .HS EBAADE TAIL .HS EBAADE

View File

@ -866,6 +866,7 @@ LDR.ScrInit80 sta CLRC3ROM
.DO LOGO .DO LOGO
lda #20 lda #20
sta CV sta CV
jsr VTAB
lda #LOGO.PAKED lda #LOGO.PAKED
sta ZPInBufPtr sta ZPInBufPtr

View File

@ -4,8 +4,6 @@ NEW
XDOS cld no decimal. XDOS cld no decimal.
sty mliy save x and y sty mliy save x and y
stx mlix stx mlix
* pla get processor status
* sta spare1 save it temporarily
ply get processor status ply get processor status
@ -19,9 +17,6 @@ XDOS cld no decimal.
adc #$00 adc #$00
sta mliretn+1 sta mliretn+1
* lda spare1
* pha pull processor status
phy pull processor status phy pull processor status
plp to re-enable interrupts. plp to re-enable interrupts.
@ -50,11 +45,11 @@ XDOS cld no decimal.
sta A3L+1 sta A3L+1
pla pla
sta A3L sta A3L
* ldy #$00
lda XDOS.ParamCnt,x make sure parameter list has the correct # of parameters. lda XDOS.ParamCnt,x make sure parameter list has the correct # of parameters.
beq goclock clock has 0 parameters. beq goclock clock has 0 parameters.
cmp (A3L) ,y cmp (A3L)
bne scperr error if wrong count. bne scperr error if wrong count.
lda XDOS.CmdNums,x get call # again lda XDOS.CmdNums,x get call # again

View File

@ -1,14 +1,15 @@
NEW NEW
AUTO 3,1 AUTO 3,1
*-------------------------------------- *--------------------------------------
XRWDBG .EQ 1 * If Called by ProDOS : SEI
* If Called directly from DEVPTRS vectors : ????
*-------------------------------------- *--------------------------------------
XRW.START cld $D8 to flag language card bank 1 (main) XRW.START cld $D8 to flag language card bank 1 (main)
lda unitnum get unit number. lda unitnum get unit number.
pha pha
lsr lsr
lsr lsr
lsr lsr
@ -19,10 +20,11 @@ XRW.START cld $D8 to flag language card bank 1 (main)
bne .10 bne .10
lda #IO.D2.SeekTimeP lda #IO.D2.SeekTimeP
sta XRW.D2SeekTime-1,x
.10 sta XRW.SeekTime
.10 pla
pla
and #$7F mask off high bit. and #$7F mask off high bit.
sta A2L 0SSS0000 for IO indexing sta A2L 0SSS0000 for IO indexing
@ -45,7 +47,7 @@ XRW.START cld $D8 to flag language card bank 1 (main)
lda #1 lda #1
jsr XRW.Wait100usecA jsr XRW.Wait100usecA
lda XRW.montimeh lda XRW.montimeh
bne .1 bne .1
*-------------------------------------- *--------------------------------------
@ -75,6 +77,8 @@ L59BD lda bloknml
jsr XRW.CheckMotorOn jsr XRW.CheckMotorOn
php SAVE IRQ STATE
php save motor on state : NZ if on php save motor on state : NZ if on
lda #$E8 24 up to 0 lda #$E8 24 up to 0
@ -87,6 +91,7 @@ L59BD lda bloknml
asl get drive # into carry. asl get drive # into carry.
bcc .3 branch if drive 1 selected. bcc .3 branch if drive 1 selected.
inx select drive 2. inx select drive 2.
.3 lda IO.D2.DrvSel1,x .3 lda IO.D2.DrvSel1,x
@ -104,7 +109,7 @@ L59BD lda bloknml
.4 jsr XRW.Wait25600usec 150 ms delay before stepping. .4 jsr XRW.Wait25600usec 150 ms delay before stepping.
dey dey
bne .4 bne .4
php Z set php Z set
.5 plp was motor on ? .5 plp was motor on ?
@ -114,9 +119,9 @@ L59BD lda bloknml
.6 lda #1 .6 lda #1
jsr XRW.Wait100usecA wait 100us for each count in montime jsr XRW.Wait100usecA wait 100us for each count in montime
lda XRW.montimeh lda XRW.montimeh
bmi .6 count up to 0000 bmi .6 count up to 0000
* motor should be up to speed, * motor should be up to speed,
* if it looks stopped then the drive is not present * if it looks stopped then the drive is not present
@ -126,30 +131,34 @@ L59BD lda bloknml
*-------------------------------------- *--------------------------------------
L538E lda A4L get command # L538E lda A4L get command #
bne .1 bne .1
jsr XRW.TestWP 0 = status jsr XRW.TestWP 0 = status
bcs XRW.E.WP bcs XRW.E.WP
bra XRW.E.OK bcc XRW.E.OK
.1 cmp #4 3 = format .1 cmp #4 3 = format
bcs XRW.E.IO bcs XRW.E.IO
cmp #2 Write ? cmp #2 2 = Write, 1 = Read
bne .2
ror XRW.bWrite b7 = 1 if Write
bpl .2
jsr XRW.TestWP jsr XRW.TestWP
bcs XRW.E.WP bcs XRW.E.WP
*-------------------------------------- *--------------------------------------
.2 jsr regrwts .2 sei DISABLE IRQ
jsr XRW.SectorIO
bcs XRW.E.IO bcs XRW.E.IO
inc buf+1 inc buf+1
inc XRW.ReqSector inc XRW.ReqSector
inc XRW.ReqSector inc XRW.ReqSector
jsr regrwts get 2nd half of block jsr XRW.SectorIO get 2nd half of block
dec buf+1 dec buf+1
bcc XRW.E.OK bcc XRW.E.OK
@ -160,49 +169,42 @@ XRW.E.WP lda #MLI.E.WRTPROT
.HS 2C BIT ABS .HS 2C BIT ABS
XRW.E.ND lda #MLI.E.NODEV XRW.E.ND lda #MLI.E.NODEV
plp RESTORE IRQ STATE
sec sec
bra XRW.E.EXIT
.HS 2C BIT ABS XRW.E.OK plp RESTORE IRQ STATE
XRW.E.OK lda #0 clc
lda #0
ldx A2L XRW.E.EXIT ldx A2L
bit IO.D2.DrvOff,x turn off bit IO.D2.DrvOff,x turn off
rts rts
*-------------------------------------- *--------------------------------------
regrwts lda #1 XRW.SectorIO lda #2
sta XRW.RecalibrateCnt sta XRW.RecalibrateCnt
sta XRW.BadSeek sta XRW.BadSeek
lda A4L get command #
lsr set carry = 1 for read, 0 for write.
bcs .1 must prenibblize for write
jsr XRW.PreNibble bit XRW.bWrite
bpl .1
jsr XRW.PreNibble must prenibblize for write
.1 stz XRW.RetryCnt
.1 ldy #64
sty XRW.RetryCnt
.2 jsr XRW.ReadAddr read next address field. .2 jsr XRW.ReadAddr read next address field.
bcc .4 if CC, A = current track bcc .4 if CC, A = current track
.3 dec XRW.RetryCnt one less chance. .3 inc XRW.RetryCnt one less chance.
bne .2 branch to retry. bpl .2 branch if < 128
dec XRW.RecalibrateCnt dec XRW.RecalibrateCnt
sec sec
bmi .9 beq .9
.DO XRWDBG=1
jsr XRW.DEBUG
.FIN
ldx XRW.UnitIndex ldx XRW.UnitIndex
lda #41 lda #41
sta XRW.D2Trk-1,x sta XRW.D2Trk-1,x
lda #0 lda #0
sta XRW.D2VolNum-1,x sta XRW.D2VolNum-1,x
@ -212,67 +214,39 @@ regrwts lda #1
.4 cmp XRW.ReqTrack .4 cmp XRW.ReqTrack
beq .6 beq .6
lda XRW.BadSeek
beq .40 2 bad seeks, already
dec XRW.BadSeek dec XRW.BadSeek
bpl .5 bne .5
ldx XRW.UnitIndex .40 lda XRW.SeekTime
lda XRW.D2SeekTime-1,x bmi .5 seektime = 140
bmi .5
clc clc
adc #IO.D2.SeekTimeI adc #IO.D2.SeekTimeI
sta XRW.SeekTime
ldx XRW.UnitIndex
sta XRW.D2SeekTime-1,x sta XRW.D2SeekTime-1,x
.5 lda XRW.ReqTrack .5 lda XRW.ReqTrack
jsr XRW.Seek jsr XRW.Seek
bra .3 bra .3
.6 lda XRW.AddrField.S is this the right sector ? .6 lda XRW.AddrField.S is this the right sector ?
cmp XRW.ReqSector cmp XRW.ReqSector
bne .3 no, try another sector. bne .3 no, try another sector.
lda A4L read or write ? bit XRW.bWrite
lsr the carry will tell. bpl .7 branch if write
bcc .7 branch if write
jsr XRW.Read jmp XRW.Write
.7 jsr XRW.Read
bcs .3 if bad read bcs .3 if bad read
.9 rts .9 rts
.7 jmp XRW.Write
*--------------------------------------
* determine if motor is stopped
*
* if stopped, controller's shift register will not be changing.
* return y = 0 and zero flag set if it is stopped.
*--------------------------------------
XRW.CheckMotorOn
ldx A2L
XRW.CheckMotorOnX
ldy #0 init loop counter.
.1 lda IO.D2.RData,x read the shift register.
jsr .9 delay
pha
pla more delay.
cmp IO.D2.RData,x has shift reg changed ?
bne .9 yes, motor is moving.
lda #MLI.E.NODEV anticipate error.
dey no, dec retry counter
bne .1 and try 256 times.
.9 rts
*--------------------------------------
XRW.TestWP ldx A2L
lda IO.D2.ReadProt,x test for write protected
lda IO.D2.ReadMode,x
rol write protect-->carry-->bit 0=1
lda IO.D2.RData,x keep in read mode
rts
*-------------------------------------- *--------------------------------------
* preniblize subroutine (16 sector format) * preniblize subroutine (16 sector format)
* *
@ -405,11 +379,13 @@ L596F ldy #$FF index to last byte of data to write.
* on exit: carry set if error (write protect violation). * on exit: carry set if error (write protect violation).
* if no error, acc=uncertain, x=unchanged, y=0, carry clear. * if no error, acc=uncertain, x=unchanged, y=0, carry clear.
*-------------------------------------- *--------------------------------------
XRW.Write lda nbuf2 .LIST ON
sta pcl XRW.Write lda IO.D2.ReadProt,x PREWRITE MODE
.LIST OFF
lda IO.D2.ReadMode,x
bit IO.D2.ReadProt,x PREWRITE MODE lda nbuf2
bit IO.D2.ReadMode,x sta pcl
lda #$FF Self Sync Byte lda #$FF Self Sync Byte
@ -449,7 +425,7 @@ L583D eor nbuf2-1,y (4) xor with current (NO MORE PAGE CROSS)
* ldx A2L (3) restore slot index * ldx A2L (3) restore slot index
ldx >A2L (4) absolute reference to zero page ldx >A2L (4) absolute reference to zero page
sta IO.D2.WLoad,x (5) store encoded byte sta IO.D2.WLoad,x (5) store encoded byte
lda IO.D2.WShift,x (4) handshake lda IO.D2.WShift,x (4) handshake
dey (2) dey (2)
@ -458,7 +434,7 @@ L583D eor nbuf2-1,y (4) xor with current (NO MORE PAGE CROSS)
* end of write byte loop * end of write byte loop
lda pcl (3) get prior nibl (from nbuf2) lda pcl (3) get prior nibl (from nbuf2)
wrefd1 ldy #$00 (2) warning: load value modified by prenib. wrefd1 ldy #$00 (2) warning: load value modified by prenib.
wrefa1 eor $1000,y (4) warning: address modified by prenib. wrefa1 eor $1000,y (4) warning: address modified by prenib.
@ -471,7 +447,7 @@ wrefd2 ldx #$60 (2) warning: value modified by prenib.
wrefa2 lda $1000,y (4) prior nibl. warning: address modified by prenib. wrefa2 lda $1000,y (4) prior nibl. warning: address modified by prenib.
iny (2) all done with this page ? iny (2) all done with this page ?
bne wrefa1 (3-) loop until page end. bne wrefa1 (3-) loop until page end.
lda pch (3) get next (precalculated & translated) nibl. lda pch (3) get next (precalculated & translated) nibl.
beq L58C0 (2+) branch if code written was page aligned. beq L58C0 (2+) branch if code written was page aligned.
@ -526,32 +502,41 @@ wrefd5 ldx #$60 (2) restore slot. warning: modified by prenib
sta IO.D2.WLoad,x (5) sta IO.D2.WLoad,x (5)
lda IO.D2.WShift,x (4) lda IO.D2.WShift,x (4)
ldy #$00 (2) set y = index end mark table. ldy #2 (2) set y = index end mark table.
pha (3) waste another 11 micro-seconds pha (3) waste another 11 micro-seconds
pla (4) pla (4)
nop (2) nop (2)
nop (2)
L58D3 lda XRW.EndDataMark,y (4) dm4, dm5, dm6 and turn off byte. .1 nop (2)
lda XRW.EndMark,y (4) DE AA EB
jsr wnibl (15,6) write it jsr wnibl (15,6) write it
iny (2) dey (2)
cpy #$04 (2) have all end marks been written ? bpl .1 (3) if not.
bne L58D3 (3) if not.
clc (2,9) clc (2)
lda IO.D2.ReadMode,x out of write mode lda #$FF (2)
nop (2)
jsr wnibl (15,6) write turn off byte.
XRW.ReadMode lda IO.D2.ReadMode,x out of write mode
lda IO.D2.WShift,x to read mode. lda IO.D2.WShift,x to read mode.
rts return from write. rts return from write.
* 7-bit nibl write subroutines * 7-bit nibl write subroutines
wnibl9 clc (2) 9 cycles, then write. wnibl9 clc (2) 9 cycles, then write.
wnibl7 pha (3) 7 cycles, then write. wnibl7 pha (3) 7 cycles, then write.
pla (4) pla (4)
wnibl sta IO.D2.WLoad,x (5) nibl write wnibl sta IO.D2.WLoad,x (5) nibl write
ora IO.D2.WShift,x (4) clobbers acc, not carry ora IO.D2.WShift,x (4) clobbers acc, not carry
.LIST ON
XRW.Write.RTS rts (6) XRW.Write.RTS rts (6)
.LIST OFF
*-------------------------------------- *--------------------------------------
* delays a specified number of 100 usec intervals for motor timing. * delays a specified number of 100 usec intervals for motor timing.
* on entry: acc holds number of 100 usec intervals to delay. * on entry: acc holds number of 100 usec intervals to delay.
@ -560,25 +545,16 @@ XRW.Write.RTS rts (6)
* for motor on timing. * for motor on timing.
*-------------------------------------- *--------------------------------------
XRW.WaitSeekTime XRW.WaitSeekTime
* lda #IO.D2.SeekTime lda XRW.SeekTime
phy
ldy XRW.UnitIndex
lda XRW.D2SeekTime-1,y
ply
.HS 2C BIT ABS .HS 2C BIT ABS
XRW.Wait25600usec XRW.Wait25600usec
lda #0 lda #0
XRW.Wait100usecA XRW.Wait100usecA
phx (3) .1 ldx #18 (2)
.1 ldx #16 (2)
.2 dex (2) .2 dex (2)
bne .2 (3) bne .2 (3)
ldx A2L (3)
bit IO.D2.DrvOn,x (4) Slow down ACC boards
inc XRW.montimel (6) inc XRW.montimel (6)
bne .3 (3) bne .3 (3)
@ -586,8 +562,7 @@ XRW.Wait100usecA
.3 dec (2) .3 dec (2)
bne .1 (3) bne .1 (3)
plx (4)
rts (6) rts (6)
*-------------------------------------- *--------------------------------------
* read subroutine (16-sector format) * read subroutine (16-sector format)
@ -599,7 +574,9 @@ XRW.Wait100usecA
* acc=$AA, x=unchanged, y=0, carry clear. * acc=$AA, x=unchanged, y=0, carry clear.
* observe 'no page cross' on some branches !! * observe 'no page cross' on some branches !!
*-------------------------------------- *--------------------------------------
.LIST ON
XRW.Read txa get slot # XRW.Read txa get slot #
.LIST OFF
ora #$8C prepare mods to read routine. ora #$8C prepare mods to read routine.
sta rd4+1 warning: the read routine is sta rd4+1 warning: the read routine is
sta rd5+1 self modified !! sta rd5+1 self modified !!
@ -672,7 +649,7 @@ rd4 ldx IO.D2.RData+$60 warning: self modified
ldy #$AA now read directly into user buffer. ldy #$AA now read directly into user buffer.
bne rd5 always taken. bne rd5 always taken.
L576D sec error L576D sec error
rts rts
ref1 sta $1000,y warning: self modified ref1 sta $1000,y warning: self modified
@ -736,129 +713,118 @@ L57CC sec
L57CD pla place last byte into user buffer L57CD pla place last byte into user buffer
ldy #$55 ldy #$55
sta (buf),y sta (buf),y
.LIST ON
XRW.Read.RTS rts XRW.Read.RTS rts
*-------------------------------------- .LIST OFF
XRW.Reset ldx A2L
lda IO.D2.ReadMode,x turn off write enable X = slot $S0
nop
nop
ldy #4
.1 lda IO.D2.Ph0Off,x
inx
inx
dey
bne .1
rts
*-------------------------------------- *--------------------------------------
* A = target track * A = target track
*-------------------------------------- *--------------------------------------
XRW.Seek ldx XRW.UnitIndex XRW.Seek ldx XRW.UnitIndex
cmp XRW.D2Trk-1,x
beq XRW.Read.RTS
pha save target track pha save target track
jsr XRW.Trk2Qtrk jsr XRW.Trk2Qtrk
sta XRW.TargetQTrack sta XRW.TargetQTrack
.DO XRWDBG=1
jsr XRW.DEBUG3
.FIN
lda XRW.D2Trk-1,x lda XRW.D2Trk-1,x
jsr XRW.Trk2Qtrk jsr XRW.Trk2Qtrk
sta XRW.CurrentQTrack sta XRW.CurrentQTrack
.DO XRWDBG=1
jsr XRW.DEBUG2
.FIN
pla pla
sta XRW.D2Trk-1,x will be current track at the end sta XRW.D2Trk-1,x will be current track at the end
ldx A2L lda XRW.CurrentQTrack
ldy A2L
.1 lda XRW.CurrentQTrack
cmp XRW.TargetQTrack cmp XRW.TargetQTrack
beq .7
jsr .8
bcs .2
* Current < Target, must move in
inc
.HS B0 BCS
* Current > Target, must move out
.2 dec
sta XRW.CurrentQTrack
pha pha
and #6 bcs .10
ora A2L
tax
pla
bcs .3
* Current < Target, must move in
inc inc
.HS B0 BCS .10 and #6
* Current > Target, must move out
.3 dec
and #6
ora A2L ora A2L
bcc .4
* move out : invert 2 phases
phx
tax tax
pla
ora #$80
.4 tay sta .7+1
stz .6+1
lda IO.D2.Ph0On,x lda IO.D2.Ph0On,x
nop nop
nop nop
* jsr XRW.WaitSeekTime
lda IO.D2.Ph0On,y pla
.1 bcc .2
* Current > Target, must move out
dec
.HS 90 BCC
* Current < Target, must move in
.2 inc
sta XRW.CurrentQTrack
and #7
tay
bcs .3
lda XRW.PhIn,y
bcc .4
.3 lda XRW.PhOut,y
.4 ora A2L
sta .5+1
lsr
bcc .5
asl
ldx .7+1
stx .6+1
sta .7+1
.5 sta $C000 SELF MODIFIED
nop nop
nop nop
jsr XRW.WaitSeekTime jsr XRW.WaitSeekTime
bra .1
.7 jsr XRW.Wait25600usec lda XRW.CurrentQTrack
cmp XRW.TargetQTrack
bne .1
.8 bit IO.D2.Ph0Off,x jsr XRW.Wait25600usec
.6 sta $C000 SELF MODIFIED
nop nop
nop nop
.7 sta $C000 SELF MODIFIED
ldx IO.D2.Ph0Off,y
nop nop
nop nop
.8 rts
*--------------------------------------
XRW.Reset ldx A2L
rts lda IO.D2.Ph0Off,x
lda IO.D2.Ph1Off,x
lda IO.D2.Ph2Off,x
lda IO.D2.Ph3Off,x
jmp XRW.ReadMode
*-------------------------------------- *--------------------------------------
XRW.Trk2Qtrk asl x2 XRW.Trk2Qtrk asl x2
sta .1+1 sta .1+1
@ -866,38 +832,40 @@ XRW.Trk2Qtrk asl x2
bit XRW.D2VolNum-1,x bit XRW.D2VolNum-1,x
bpl .1 x4 bpl .1 x4
bvs .1 > $C0 ? (VOL=254) bvs .1 > $C0 ? (VOL=254)
lsr x3 lsr x3
.1 adc #$ff SELF MODIFIED .1 adc #$ff SELF MODIFIED
rts rts
*-------------------------------------- *--------------------------------------
.LIST ON
XRW.ReadAddr ldy #$FC XRW.ReadAddr ldy #$FC
.LIST OFF
sty XRW.CheckSum init nibble counter to $FCFC sty XRW.CheckSum init nibble counter to $FCFC
ldx A2L get slot # ldx A2L get slot #
.1 iny .1 iny
bne .2 counter LO bne .2 counter LO
inc XRW.CheckSum counter HI inc XRW.CheckSum counter HI
beq .99 beq .99
.2 lda IO.D2.RData,x read nibl .2 lda IO.D2.RData,x read nibl
bpl .2 bpl .2
.3 cmp #$D5 address mark 1 ? .3 cmp #$D5 address mark 1 ?
bne .1 bne .1
nop nibl delay nop
.4 lda IO.D2.RData,x .4 lda IO.D2.RData,x
bpl .4 bpl .4
cmp #$AA address mark 2 ? cmp #$AA address mark 2 ?
bne .3 if not, is it address mark 1 ? bne .3 if not, is it address mark 1 ?
ldy #$03 index for 4 byte read ldy #3 index for 4 byte read
.5 lda IO.D2.RData,x .5 lda IO.D2.RData,x
bpl .5 bpl .5
@ -905,105 +873,99 @@ XRW.ReadAddr ldy #$FC
cmp #$96 address mark 3 ? cmp #$96 address mark 3 ?
bne .3 if not, is it address mark 1 bne .3 if not, is it address mark 1
sei ???ALREADY DONE by XDOS.devmgr??? no interrupts until address is tested. lda #0 init Chksum
lda #$00 init checksum
.6 sta XRW.CheckSum
.6 sta XRW.CheckSum
.7 lda IO.D2.RData,x read 'odd bit' nibl .7 lda IO.D2.RData,x read 'odd bit' nibl
bpl .7 bpl .7
rol align odd bits, '1' into lsb. rol align odd bits, '1' into lsb.
sta XRW.Temp4x4 save them. sta XRW.Temp4x4 save them.
.8 lda IO.D2.RData,x read 'even bit' nibl .8 lda IO.D2.RData,x read 'even bit' nibl
bpl .8 bpl .8
and XRW.Temp4x4 merge odd and even bits. and XRW.Temp4x4 merge odd and even bits.
sta XRW.AddrField.C,y store data byte. sta XRW.AddrField.C,y store data byte.
eor XRW.CheckSum eor XRW.CheckSum
dey dey
bpl .6 loop on 4 data bytes. bpl .6 loop on 4 data bytes.
tay if final checksum non-zero, tay if final checksum non-zero,
bne .99 then error. bne .99 then error.
clc
.9 lda IO.D2.RData,x .9 lda IO.D2.RData,x
bpl .9 bpl .9
eor #$DE eor #$DE
bne .99 bne .99
*.10 lda IO.D2.RData,x
* bpl .10
* eor #$AA
* bne .99
ldy XRW.UnitIndex ldy XRW.UnitIndex
lda XRW.AddrField.V ....save time doing it now lda XRW.AddrField.V
sta XRW.D2VolNum-1,y sta XRW.D2VolNum-1,y
lda XRW.AddrField.T Successful Read, update Drive table lda XRW.AddrField.T Successful Read, update Drive table
sta XRW.D2Trk-1,y and exit with A = Trk sta XRW.D2Trk-1,y and exit with A = Trk
clc normal read ok
rts rts
.99 sec .99 sec
.LIST ON
XRW.ReadAddr.RTS
rts
.LIST OFF
*--------------------------------------
* determine if motor is stopped
*
* if stopped, controller's shift register will not be changing.
* return y = 0 and zero flag set if it is stopped.
*--------------------------------------
XRW.CheckMotorOn
ldx A2L
XRW.CheckMotorOnX
ldy #0 init loop counter.
.1 lda IO.D2.RData,x read the shift register.
jsr .9 delay
pha
pla more delay.
cmp IO.D2.RData,x has shift reg changed ?
bne .9 yes, motor is moving.
dey no, dec retry counter
bne .1 and try 256 times.
.9 rts Z if motor OFF
*--------------------------------------
XRW.TestWP ldx A2L
lda IO.D2.ReadProt,x test for write protected
lda IO.D2.ReadMode,x
rol write protect-->carry-->bit 0=1
lda IO.D2.RData,x keep in read mode
rts rts
*-------------------------------------- *--------------------------------------
.DO XRWDBG=1 XRW.PhIn .DA #IO.D2.Ph3Off 7->0
XRW.DEBUG phx .DA #IO.D2.Ph1On 0->1
.DA #IO.D2.Ph0Off 1->2
.DA #IO.D2.Ph2On 2->3
.DA #IO.D2.Ph1Off 3->4
.DA #IO.D2.Ph3On 4->5
.DA #IO.D2.Ph2Off 5->6
.DA #IO.D2.Ph0On 6->7
ldx #26 XRW.PhOut .DA #IO.D2.Ph1Off 1->0
lda XRW.AddrField.V .DA #IO.D2.Ph0on 2->1
jsr XRW.DEBUG.PRINT .DA #IO.D2.Ph2off 3->2
.DA #IO.D2.Ph1On 4->3
lda XRW.AddrField.T .DA #IO.D2.Ph3Off 5->4
jsr XRW.DEBUG.PRINT .DA #IO.D2.Ph2On 6->5
.DA #IO.D2.Ph0Off 7->6
lda XRW.AddrField.S .DA #IO.D2.Ph3On 0->7
jsr XRW.DEBUG.PRINT
inx
lda XRW.ReqTrack
jsr XRW.DEBUG.PRINT
plx
rts
XRW.DEBUG2 phx
ldx #36
bra XRW.DEBUG31
XRW.DEBUG3 phx
ldx #38
XRW.DEBUG31 jsr XRW.DEBUG.PRINT
plx
rts
XRW.DEBUG.PRINT
sta CLRPAGE2
pha
lsr
lsr
lsr
lsr
jsr .7
pla
and #$0F
.7 ora #$B0
cmp #"9"+1
bcc .8
adc #6
.8 sta $700,x
inx
rts
.FIN
*-------------------------------------- *--------------------------------------
.LIST ON .LIST ON
XRW.FREE .EQ $D540-* XRW.FREE .EQ $D540-*
@ -1021,7 +983,7 @@ nbuf2 .BS $56 nibl buffer for read/write of low 2-bits of each byte.
* *
* nibbles in the ranges of $A0-$A3, $C0-$C7, $E0-$E3 are used for * nibbles in the ranges of $A0-$A3, $C0-$C7, $E0-$E3 are used for
* other tables since no valid nibbles are in these ranges. * other tables since no valid nibbles are in these ranges.
* aligned to page boundary + $96 * aligned to page boundary + $96
*-------------------------------------- *--------------------------------------
XRW.Nib2FC .HS 0004 XRW.Nib2FC .HS 0004
* .HS FFFF * .HS FFFF
@ -1046,14 +1008,14 @@ XRW.ReqSector .HS 00
XRW.BadSeek .HS 00 XRW.BadSeek .HS 00
.HS 5054585C606468 .HS 5054585C606468
XRW.00XX0000 .HS 00201030 used in fast prenib. XRW.00XX0000 .HS 00201030 used in fast prenib.
XRW.EndDataMark .HS DEAAEB table using 'unused' nibbles ($C4,$C5,$C6,$C7) XRW.EndMark .HS EBAADE table using 'unused' nibbles ($C4,$C5,$C6,$C7)
* .HS FFFFFFFF * .HS FFFFFFFF
XRW.AddrField.C .HS 00 AddrField Checksum XRW.AddrField.C .HS 00 AddrField Checksum
XRW.AddrField.S .HS 00 AddrField Sector XRW.AddrField.S .HS 00 AddrField Sector
XRW.AddrField.T .HS 00 AddrField Track XRW.AddrField.T .HS 00 AddrField Track
XRW.AddrField.V .HS 00 AddrField Volume XRW.AddrField.V .HS 00 AddrField Volume
.HS 6C .HS 6C
.HS FF XRW.SeekTime .HS 00
*ibstat .HS 00 *ibstat .HS 00
.HS 707478 .HS 707478
.HS FFFFFF .HS FFFFFF
@ -1074,7 +1036,7 @@ XRW.TargetQTrack .HS 00
.HS B0B4B8BCC0C4C8 .HS B0B4B8BCC0C4C8
.HS FFFF .HS FFFF
.HS CCD0D4D8DCE0 .HS CCD0D4D8DCE0
.HS FF XRW.bWrite .HS 00
.HS E4E8ECF0F4F8FC .HS E4E8ECF0F4F8FC
*-------------------------------------- *--------------------------------------
* 6-bit to 2-bit conversion tables: * 6-bit to 2-bit conversion tables:

View File

@ -97,8 +97,8 @@ WND.Test >PUSHBI S.WND.F.RESIZE+S.WND.F.MOVE+S.WND.F.CLOSE+S.WND.F.MAX+S.WND.F.
>PUSHW MouseData+S.MOUSE.X1 >PUSHW MouseData+S.MOUSE.X1
>PUSHW MouseData+S.MOUSE.Y1 >PUSHW MouseData+S.MOUSE.Y1
>PUSHWI 360 >PUSHWI 360 witdh
>PUSHWI 96 >PUSHWI 96 height
>LIBCALL hLIBGUI,LIBGUI.WND.New >LIBCALL hLIBGUI,LIBGUI.WND.New
bcs CS.QUIT.RTS bcs CS.QUIT.RTS
sta hWND sta hWND

View File

@ -1,16 +1,5 @@
NEW NEW
AUTO 3,1 AUTO 3,1
*--------------------------------------
.DUMMY
.OR FAC 13 Bytes
BIN.hMem .BS 1
BIN.R.CS.Start .BS 2
BIN.R.CS.End .BS 2
BIN.R.End .BS 2
BIN.R.Size .BS 2
BIN.R.Offset .BS 2
BIN.R.Stop .BS 2
.ED
*-------------------------------------- *--------------------------------------
* LoadLib * LoadLib
* in : * in :
@ -106,7 +95,7 @@ BIN.Load.Cleanup.RTS
* Y,A = MEMPTR * Y,A = MEMPTR
* X = hMem of Code Segment * X = hMem of Code Segment
*-------------------------------------- *--------------------------------------
BIN.Load lda CORE.FSID BIN.Load lda A2osX.FSID
bne .11 bne .11
ldx #$ff ldx #$ff

View File

@ -187,10 +187,12 @@ CORE.UpdateParentPS
CORE.GetEvents lda #Evt.Table CORE.GetEvents lda #Evt.Table
sta pEvent point to start of event list sta pEvent point to start of event list
stz CORE.EvtCount reset Size stz CORE.EvtCount reset Size
bit CORE.IRQMode do we have IRQ enabled for Ticks ? bit A2osX.IRQMode do we have IRQ enabled for Ticks ?
bpl .1 no, regular poll bpl .1 no, regular poll
lda IRQ.Tick a Tick ? lda IRQ.Tick a Tick ?
beq .8 no, no event beq .8 no, no event
dec IRQ.Tick dec IRQ.Tick
bra .2 bra .2
@ -198,9 +200,11 @@ CORE.GetEvents lda #Evt.Table
tax tax
eor CORE.VBLState eor CORE.VBLState
bpl .8 no change,no tick bpl .8 no change,no tick
txa txa
sta CORE.VBLState save new sta CORE.VBLState save new
bpl .8 Up2down transition,no tick bpl .8 Up2down transition,no tick
.2 lda #0 .2 lda #0
dec CORE.TickSec dec CORE.TickSec
bne .3 not yet One Sec bne .3 not yet One Sec
@ -211,7 +215,9 @@ CORE.GetEvents lda #Evt.Table
ldx A2osX.ASCREEN ldx A2osX.ASCREEN
cpx #3 devID 3 is /DEV/CONSOLE cpx #3 devID 3 is /DEV/CONSOLE
bne .22 bne .22
sta SYS.BASL0+38 sta SYS.BASL0+38
.22 ldx CORE.TickPerSec .22 ldx CORE.TickPerSec
stx CORE.TickSec stx CORE.TickSec
@ -224,6 +230,7 @@ CORE.GetEvents lda #Evt.Table
.4 inc DevMgr.Timer .4 inc DevMgr.Timer
inc A2osX.TIMER16 inc A2osX.TIMER16
bne .5 bne .5
inc A2osX.TIMER16+1 inc A2osX.TIMER16+1
.5 ldx CORE.TickPer10t .5 ldx CORE.TickPer10t
@ -232,6 +239,7 @@ CORE.GetEvents lda #Evt.Table
ora #S.EVT.F.T10TH ora #S.EVT.F.T10TH
.6 tax Finally, do we have an event ? .6 tax Finally, do we have an event ?
beq .8 no.... beq .8 no....
sta (pEvent) sta (pEvent)
inc CORE.EvtCount Add one event to Queue inc CORE.EvtCount Add one event to Queue
@ -244,8 +252,10 @@ CORE.GetEvents lda #Evt.Table
.8 lda CORE.EvtCount if 0, exit with CS (from cmp), and A=0 "no event" .8 lda CORE.EvtCount if 0, exit with CS (from cmp), and A=0 "no event"
beq .9 beq .9
clc clc
rts rts
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
@ -477,14 +487,12 @@ GP.RomCall.JmpX jmp (.1-FPU.FADD,x)
.DA $ED36 FOUT.1 PrintF .DA $ED36 FOUT.1 PrintF
*-------------------------------------- *--------------------------------------
CORE.VBLState .BS 1 CORE.VBLState .BS 1
CORE.IRQMode .BS 1
CORE.TickPerSec .BS 1 CORE.TickPerSec .BS 1
CORE.TickPer10t .BS 1 CORE.TickPer10t .BS 1
CORE.TickSec .BS 1 CORE.TickSec .BS 1
CORE.Tick10t .BS 1 CORE.Tick10t .BS 1
CORE.CPUStatCnt .DA #100 CORE.CPUStatCnt .DA #100
CORE.LastPSID .DA #0 CORE.LastPSID .DA #0
CORE.FSID .BS 1
*-------------------------------------- *--------------------------------------
CORE.EvtIndex .BS 1 CORE.EvtIndex .BS 1
CORE.EvtCount .BS 1 CORE.EvtCount .BS 1

View File

@ -47,7 +47,7 @@ ZPTMP .EQ $67 ->$84 29 bytes
*-------------------------------------- *--------------------------------------
* X.UNPAK temp ZP (with ZPPtr1 &ZPPtr2) * X.UNPAK temp ZP (with ZPPtr1 &ZPPtr2)
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY UNPAK
.OR ZPTMP .OR ZPTMP
ZPInBufPtr .BS 2 ZPInBufPtr .BS 2
ZPOutBufPtr .BS 2 ZPOutBufPtr .BS 2
@ -77,7 +77,48 @@ ARG32 .EQ ARG+1
* CHARGOT .EQ $B7 * CHARGOT .EQ $B7
TXTPTR .EQ $B8 TXTPTR .EQ $B8
*-------------------------------------- *--------------------------------------
* Memory Map .DUMMY
.OR FAC 13 Bytes
BIN.hMem .BS 1
BIN.R.CS.Start .BS 2
BIN.R.CS.End .BS 2
BIN.R.End .BS 2
BIN.R.Size .BS 2
BIN.R.Offset .BS 2
BIN.R.Stop .BS 2
.ED
*--------------------------------------
.DUMMY
.OR ZPDRV
ENV.BufPtr .BS 1
ENV.VarEndChar .BS 1
ENV.bNoExp .BS 1
ENV.bExp .BS 1
.ED
*--------------------------------------
.DUMMY
.OR ZPTMP 5 Bytes
PS.bTXT .BS 1
PS.hMem .BS 1
PS.MemPtr .BS 2
PS.hFILE .BS 1
.ED
*--------------------------------------
.DUMMY
.OR ZPTMP+8 7 Bytes
PS.Flags .BS 1
PS.ArgV .BS 2
PS.ArgSize .BS 2
PS.NewPSPtr .BS 2
.ED
*--------------------------------------
.DUMMY
.OR ZPTMP+20 7 Bytes
IO.Open.FLAGS .BS 1
IO.Open.TYPE .BS 1
IO.Open.AUXTYPE .BS 2
IO.hFD .BS 1
.ED
*-------------------------------------- *--------------------------------------
A2osX.SaveSM .EQ $100 Aux A2osX.SaveSM .EQ $100 Aux
A2osX.SaveSX .EQ $101 Aux A2osX.SaveSX .EQ $101 Aux

View File

@ -62,7 +62,7 @@ K.OpenDir jsr PFT.CheckPathYA
* A = EC * A = EC
* note : A = 0 means no more entry * note : A = 0 means no more entry
*\-------------------------------------- *\--------------------------------------
.DUMMY .DUMMY ZPTMP,9
.OR ZPTMP 9 Bytes .OR ZPTMP 9 Bytes
K.ReadDir.hBlk .BS 1 K.ReadDir.hBlk .BS 1
K.ReadDir.ECIB .BS 1 K.ReadDir.ECIB .BS 1

View File

@ -10,6 +10,7 @@ DRV.DiskII cld
bcs DRV.RamDrive.9 bcs DRV.RamDrive.9
>STYA pIOCTL >STYA pIOCTL
jmp (.1,x) jmp (.1,x)
.1 .DA DRV.DiskII.STATUS .1 .DA DRV.DiskII.STATUS
.DA DRV.BLK READ .DA DRV.BLK READ
.DA DRV.BLK WRITE .DA DRV.BLK WRITE
@ -116,11 +117,13 @@ DRV.BLK txa
sta DRV.BLK.PARAMS+1 UNITNUM sta DRV.BLK.PARAMS+1 UNITNUM
ldx #3 ldx #3
ldy #S.IOCTL.BUFPTR+3 ldy #S.IOCTL.BUFPTR+3
.1 lda (pIOCTL),y BUF,BLKNUM .1 lda (pIOCTL),y BUF,BLKNUM
sta DRV.BLK.PARAMS+2,x sta DRV.BLK.PARAMS+2,x
dey dey
dex dex
bpl .1 bpl .1
ldy #S.FD.DEV.BUSPTR ldy #S.FD.DEV.BUSPTR
lda (pFD),y lda (pFD),y
sta .3+1 sta .3+1
@ -131,10 +134,12 @@ DRV.BLK txa
jsr GO.ProDOS jsr GO.ProDOS
ldx #5 ldx #5
.2 lda DRV.BLK.PARAMS,x .2 lda DRV.BLK.PARAMS,x
sta $42,x sta $42,x
dex dex
bpl .2 bpl .2
.3 jsr $ffff SELF MODIFIED .3 jsr $ffff SELF MODIFIED
jsr GO.A2osX jsr GO.A2osX
@ -215,8 +220,10 @@ DRV.STATUS.YA >STYA .2+1
ldy #S.IOCTL.STATCODE ldy #S.IOCTL.STATCODE
lda (pIOCTL),y lda (pIOCTL),y
beq .1 beq .1
cmp #S.IOCTL.STATCODE.GETDIB cmp #S.IOCTL.STATCODE.GETDIB
bne .9 bne .9
ldx #S.DIB-1 ldx #S.DIB-1
.HS 2C bit abs .HS 2C bit abs
.1 ldx #3 .1 ldx #3
@ -227,10 +234,12 @@ DRV.STATUS.YA >STYA .2+1
iny iny
lda (pIOCTL),y lda (pIOCTL),y
sta .3+2 sta .3+2
.2 lda $ffff,x SELF MODIFIED .2 lda $ffff,x SELF MODIFIED
.3 sta $ffff,x SELF MODIFIED .3 sta $ffff,x SELF MODIFIED
dex dex
bpl .2 bpl .2
clc clc
rts rts

View File

@ -210,7 +210,7 @@ FS.STAT.YA >PUSHYA
.9 >POP 4 .9 >POP 4
FS.STAT.YA.RTS rts FS.STAT.YA.RTS rts
*-------------------------------------- *--------------------------------------
FS.Stat bit CORE.FSID FS.Stat bit A2osX.FSID
bmi FS.Stat.FX bmi FS.Stat.FX
FS.Stat.203 >MLICALL MLIGETFILEINFO FS.Stat.203 >MLICALL MLIGETFILEINFO
@ -312,7 +312,7 @@ FS.ClrStat ldx #S.STAT-1
dex dex
bpl .1 bpl .1
lda CORE.FSID lda A2osX.FSID
sta K.S.STAT+S.STAT.FSID sta K.S.STAT+S.STAT.FSID
rts rts

View File

@ -110,10 +110,16 @@ Kernel.Init2 sei
Kernel.Init3 sta SETALTZP Kernel.Init3 sta SETALTZP
bit RRAMWRAMBNK1 bit RRAMWRAMBNK1
bit RRAMWRAMBNK1 bit RRAMWRAMBNK1
lda #$ff Make sure we are in Kernel Mode during setup lda #$ff Make sure we are in Kernel Mode during setup
sta IRQ.InKernel sta IRQ.InKernel
stz IRQ.InLib stz IRQ.InLib
lda /K.VER
sta A2osX.KVER
lda #K.VER
sta A2osX.KVER+1
sta SETALTCHAR sta SETALTCHAR
sta CLRMIXED sta CLRMIXED
sta CLRHIRES sta CLRHIRES
@ -167,7 +173,7 @@ Kernel.Init3C >PUSHWI MSG.Init3
jsr HW.Detect jsr HW.Detect
jsr CPU.Init.6502 jsr CPU.Init
jsr CPU.Init.Z80 jsr CPU.Init.Z80
@ -220,11 +226,11 @@ KConfigLoad >LDYAI MSG.KCREAD
eor #MLI.E.BADCALL eor #MLI.E.BADCALL
beq .2 regular ProDOS beq .2 regular ProDOS
ror CORE.FSID Bad file, but ProDOS.FX detected ror A2osX.FSID Bad file, but ProDOS.FX detected
bra .9 bra .9
.1 sec .1 sec
ror CORE.FSID File Present & ProDOS.FX detected ror A2osX.FSID File Present & ProDOS.FX detected
.2 jsr MLI .2 jsr MLI
.DA #MLIOPEN .DA #MLIOPEN
@ -252,7 +258,7 @@ KConfigLoad >LDYAI MSG.KCREAD
.9 >LDYAI MSG.KCREAD.KO .9 >LDYAI MSG.KCREAD.KO
.8 jsr PrintFYA .8 jsr PrintFYA
lda CORE.FSID lda A2osX.FSID
beq .99 beq .99
>LDYAI MSG.PRODOSFX >LDYAI MSG.PRODOSFX
@ -438,7 +444,7 @@ HW.Detect >PUSHWI MSG.HW
rts rts
*-------------------------------------- *--------------------------------------
CPU.Init.6502 >PUSHWI MSG.CPU CPU.Init >PUSHWI MSG.CPU
>PUSHBI 0 >PUSHBI 0
>SYSCALL2 printf >SYSCALL2 printf
jsr Detect6502 A = CPU type jsr Detect6502 A = CPU type
@ -456,127 +462,114 @@ CPU.Init.6502 >PUSHWI MSG.CPU
>SYSCALL2 printf >SYSCALL2 printf
ldy #0 ldy #0
stz A2osX.RANDOM16+1
stz A2osX.CPUSPEED+1
php php
sei sei
ldx A2osX.HZ
lda A2osX.HZ2Cnt-5,x
asl
tax 2 VBL states (up & down)
clc CC for //e
lda MACHID lda MACHID
and #MACHID.T and #MACHID.T
eor #MACHID.T.IIc eor #MACHID.T.IIc
bne .1 beq CPU.Init2c
txa if //c, only one change (IRQ up) lda A2osX.HZ
lsr asl
tax tax
sec CS for //c
.1 bit VBL //e : Wait VBL high....
sta CLRIOUDIS
lda IO.IIC.RDVBLMSK
sta ZPPtr1+1 Save VBLIRQ enable
sta IO.IIC.ENVBL
lda IO.IIC.CLRVBLIRQ
.1 bit VBL Wait VBL high....
bpl .1 bpl .1
bcc .2 skip if //e
lda IO.IIC.CLRVBLIRQ clear //c IRQ
lda #0 reset A = LOW
bra .3
.2 lda VBL //e : wait VBL low .2 lda VBL //e : wait VBL low
bmi .2 bmi .2
*--------------------------------------
.3 nop (2)
nop (2)
nop (2)
nop (2) .3 pha (3)
nop (2) pla (4)
nop (2) pha (3)
pla (4)
nop (2) pha (3)
nop (2) pla (4)
nop (2) pha (3)
pla (4)
nop (2) pha (3)
nop (2) pla (4)
pha (3)
iny (2) pla (4)
bne .4 (2*)
iny
inc A2osX.RANDOM16+1 (6) cpy #100
bne .5
bra .5 (3) 2+6+3
ldy #0
.4 nop (2) inc A2osX.CPUSPEED+1
nop (2)
nop (2)
nop (2) 3+2+2+2+2 if from BNE
.5 eor VBL (4) .5 eor VBL (4)
bpl .3 (2*) bpl .3 (2*)
bcc .51 skip if //e dex
lda IO.IIC.CLRVBLIRQ clear //c IRQ
lda #0 reset A = LOW
.51 dex
bne .3 bne .3
bcc .60 skip if //e bra CPU.InitOK
*--------------------------------------
CPU.Init2c sta CLRIOUDIS
lda IO.IIC.RDVBLMSK
pha Save VBLIRQ enable
bit ZPPtr1+1 Disable VBLIRQ ? sta IO.IIC.ENVBL
bpl .60 lda IO.IIC.CLRVBLIRQ
ldx A2osX.HZ
.1 bit VBL Wait VBL high....
bpl .1
bit IO.IIC.CLRVBLIRQ clear //c IRQ
.3 pha (3)
pla (4)
pha (3)
pla (4)
pha (3)
pla (4)
pha (3)
pla (4)
pha (3)
pla (4)
pha (3)
pla (4)
iny
cpy #100
bne .5
inc A2osX.CPUSPEED+1
ldy #0
.5 bit VBL Wait VBL high....
bpl .3
bit IO.IIC.CLRVBLIRQ clear //c IRQ
dex
bne .3
pla Disable VBLIRQ ?
bpl CPU.InitOk
sta IO.IIC.DISVBL sta IO.IIC.DISVBL
.60 plp
*-------------------------------------- *--------------------------------------
sty A2osX.RANDOM16 CPU.InitOk plp
stz A2osX.CPUSPEED sty A2osX.CPUSPEED
lsr A2osX.RANDOM16+1
ror A2osX.RANDOM16
.7 lda A2osX.RANDOM16
sec
sbc #100
tax
lda A2osX.RANDOM16+1
sbc /100
bcc .8
stx A2osX.RANDOM16
sta A2osX.RANDOM16+1
inc A2osX.CPUSPEED
bra .7
.8 lda A2osX.RANDOM16
sta A2osX.CPUSPEED+1
>PUSHWI MSG.CPU.SPEEDOK >PUSHWI MSG.CPU.SPEEDOK
lda A2osX.CPUSPEED
>PUSHA push CPU speed HI
lda A2osX.CPUSPEED+1 lda A2osX.CPUSPEED+1
>PUSHA push CPU speed HI
lda A2osX.CPUSPEED
>PUSHA push CPU speed LO >PUSHA push CPU speed LO
>PUSHBI 2 >PUSHBI 2
>SYSCALL2 printf >SYSCALL2 printf
>DEBUGOA
rts rts
*-------------------------------------- *--------------------------------------
CPU.Init.Z80 >PUSHWI MSG.Z80 CPU.Init.Z80 >PUSHWI MSG.Z80
@ -943,7 +936,7 @@ IrqMgrInit.TClock
lda #11 lda #11
sta CORE.TickPer10t sta CORE.TickPer10t
sta CORE.Tick10t sta CORE.Tick10t
dec CORE.IRQMode dec A2osX.IRQMode
plp plp
clc clc
rts rts
@ -1007,7 +1000,7 @@ IrqMgrInit.Mouse
sta CORE.IRQ.MOUSE.2+1 sta CORE.IRQ.MOUSE.2+1
jsr IrqMgrInit.HZ2Tick jsr IrqMgrInit.HZ2Tick
dec CORE.IRQMode dec A2osX.IRQMode
plp plp
clc clc
@ -1171,8 +1164,6 @@ Z80Code.Start .HS 31FF00 START: LD SP,000FFH Init Stack
.HS 00 FLAG: .DB 0 .HS 00 FLAG: .DB 0
Z80Code.Size .EQ *-Z80Code.Start Z80Code.Size .EQ *-Z80Code.Start
*-------------------------------------- *--------------------------------------
A2osX.HZ2Cnt .DA #30,#25
*--------------------------------------
Mouse.OFS .HS 05070B0CFB Mouse.OFS .HS 05070B0CFB
Mouse.SIG .HS 38180120D6 Mouse.SIG .HS 38180120D6
*-------------------------------------- *--------------------------------------

View File

@ -88,7 +88,7 @@ IRQ.3 pla Must keep Carry
sta SETPAGE2 sta SETPAGE2
.30 bvc IRQ.4 if not V, skip task switching .30 bvc IRQ.4 if not V, skip task switching
tsx Check Stack if before "dec IRQ.InKernel" tsx Check Stack if before "dec IRQ.InKernel"
cpx #$fc $1ff-PChi-PClo-P = $1fc cpx #$fc $1ff-PChi-PClo-P = $1fc
@ -117,10 +117,6 @@ IRQ.3 pla Must keep Carry
lda /A2osX.SLEEP with RTS=PC IRQ-1 lda /A2osX.SLEEP with RTS=PC IRQ-1
sta $103,x sta $103,x
.5 lda #$60+'S'
eor SYS.BASL0+39
sta SYS.BASL0+39
.8 clc .8 clc
IRQ.4 ldy #$ff Self Modified IRQ.4 ldy #$ff Self Modified

View File

@ -1,7 +1,7 @@
NEW NEW
AUTO 3,1 AUTO 3,1
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY ZPTMP,6
.OR ZPTMP 29 bytes .OR ZPTMP 29 bytes
ZS.START ZS.START
ZPCtxPtr .BS 2 ZPCtxPtr .BS 2

View File

@ -1,13 +1,5 @@
NEW NEW
AUTO 3,1 AUTO 3,1
*--------------------------------------
.DUMMY
.OR ZPTMP+8 7 Bytes
PS.Flags .BS 1
PS.ArgV .BS 2
PS.ArgSize .BS 2
PS.NewPSPtr .BS 2
.ED
*/-------------------------------------- */--------------------------------------
* # ExecL * # ExecL
* ## C / CSH * ## C / CSH
@ -765,14 +757,6 @@ K.Kill.2 ldy #S.PS.hSession
* Y,A = File Length (without ending 0) * Y,A = File Length (without ending 0)
* X = hMem of Loaded File * X = hMem of Loaded File
*\-------------------------------------- *\--------------------------------------
.DUMMY
.OR ZPTMP 5 Bytes
FIO.bTXT .BS 1
FIO.hMem .BS 1
FIO.MemPtr .BS 2
FIO.hFILE .BS 1
.ED
*--------------------------------------
K.LoadTxtFile sec K.LoadTxtFile sec
.HS 90 BCC .HS 90 BCC
*/-------------------------------------- */--------------------------------------
@ -793,12 +777,12 @@ K.LoadTxtFile sec
*\-------------------------------------- *\--------------------------------------
K.LoadFile clc K.LoadFile clc
ror FIO.bTXT ror PS.bTXT
>SYSCALL2 FOpen >SYSCALL2 FOpen
bcs .99 bcs .99
sta FIO.hFILE sta PS.hFILE
jsr FS.FSTAT.A jsr FS.FSTAT.A
bcs .98 bcs .98
@ -809,7 +793,7 @@ K.LoadFile clc
>LDYA K.S.Stat+S.STAT.SIZE >LDYA K.S.Stat+S.STAT.SIZE
bit FIO.bTXT Add 1 to buffer size for ending 0 bit PS.bTXT Add 1 to buffer size for ending 0
bpl .1 bpl .1
iny iny
bne .1 bne .1
@ -819,7 +803,7 @@ K.LoadFile clc
.97 lda #E.FTB .97 lda #E.FTB
.98 pha .98 pha
lda FIO.hFILE lda PS.hFILE
>SYSCALL2 FClose >SYSCALL2 FClose
pla pla
sec sec
@ -828,18 +812,18 @@ K.LoadFile clc
.1 jsr K.GetMem .1 jsr K.GetMem
bcs .96 bcs .96
>STYA FIO.MemPtr >STYA PS.MemPtr
stx FIO.hMem stx PS.hMem
>PUSHWI $ffff >PUSHWI $ffff
>PUSHW FIO.MemPtr >PUSHW PS.MemPtr
lda FIO.hFILE lda PS.hFILE
>SYSCALL2 FRead >SYSCALL2 FRead
bcs .96 bcs .96
sty .7+1 sty .7+1
sta .8+1 sta .8+1
bit FIO.bTXT bit PS.bTXT
bpl .5 bpl .5
pha set ending 0 pha set ending 0
@ -847,10 +831,10 @@ K.LoadFile clc
* clc * clc
adc FIO.MemPtr adc PS.MemPtr
sta .4+1 sta .4+1
pla pla
adc FIO.MemPtr+1 adc PS.MemPtr+1
sta .4+2 sta .4+2
.4 stz $ffff Self Modified .4 stz $ffff Self Modified
@ -858,7 +842,7 @@ K.LoadFile clc
.7 ldy #$ff SELFMODIFIED .7 ldy #$ff SELFMODIFIED
.8 lda #$ff SELFMODIFIED .8 lda #$ff SELFMODIFIED
ldx FIO.hMem ldx PS.hMem
clc clc
rts rts
@ -866,7 +850,7 @@ K.LoadFile clc
jsr .98 FClose jsr .98 FClose
lda FIO.hMem lda PS.hMem
jsr K.FreeMem jsr K.FreeMem
pla pla
sec sec

View File

@ -66,7 +66,7 @@ NEW
* + %011s : 'ABCDEFGH000' * + %011s : 'ABCDEFGH000'
* + %2f : '3.14' * + %2f : '3.14'
*\-------------------------------------- *\--------------------------------------
.DUMMY .DUMMY ZPTMP+5,5 Used by : STDIO2
.OR ZPTMP+5 5 Bytes .OR ZPTMP+5 5 Bytes
PrintF.Cnt .BS 2 PrintF.Cnt .BS 2
PrintF.hFILE .BS 1 PrintF.hFILE .BS 1
@ -258,19 +258,39 @@ PrintF.U clc unsigned long (DWORD)
ldy #4 ldy #4
PrintF.NUM ror ACC32.Sign PrintF.NUM sty .2+1
ror ACC32.Sign save signed/unsigned flag
jsr MATH32.ACC32ZERO jsr MATH32.ACC32ZERO
.1 jsr STDIO.GetStackByte .1 jsr STDIO.GetStackByte
bcs PrintF.B.RTS bcs PrintF.B.RTS
sta ACC32-1,y sta ACC32-1,y PULL 4,2 or 1
dey dey
bne .1 bne .1
bit ACC32.Sign
bpl .4
.2 ldy #$ff SELF MODIFIED
ldx K.PrintF.PadL lda ACC32-1,y Get highest Byte
bpl .4 positive....
lda #$ff
.3 cpy #4
beq .4
iny
sta ACC32-1,y
bra .3
.4 ldx K.PrintF.PadL
ldy K.PrintF.PadC ldy K.PrintF.PadC
rol ACC32.Sign
rol ACC32.Sign get back signed/unsigned flag
jsr MATH32.ACC322STR10 jsr MATH32.ACC322STR10
bra PrintF.StrNum bra PrintF.StrNum
*-------------------------------------- *--------------------------------------

View File

@ -317,14 +317,6 @@ K.RealPath.RemoveAtX
* Y,A = PTR to Expanded String * Y,A = PTR to Expanded String
* X = hMem to Expanded String (C-String) * X = hMem to Expanded String (C-String)
*\-------------------------------------- *\--------------------------------------
.DUMMY
.OR ZPDRV
ENV.BufPtr .BS 1
ENV.VarEndChar .BS 1
ENV.bNoExp .BS 1
ENV.bExp .BS 1
.ED
*--------------------------------------
K.Expand ldy #2 K.Expand ldy #2
lda (pStack),y lda (pStack),y
pha pha

View File

@ -3,7 +3,7 @@ NEW
*-------------------------------------- *--------------------------------------
CURSOR.BLINK.SPEED .EQ 2 CURSOR.BLINK.SPEED .EQ 2
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY ZPDRV
.OR ZPDRV .OR ZPDRV
ZPIOCTL .BS 2 ZPIOCTL .BS 2
ZPBufPtr .BS 2 ZPBufPtr .BS 2

View File

@ -13,14 +13,6 @@ NEW
* A = hFD * A = hFD
* REG File created on ProDOS : T=TXT,X=$0000 * REG File created on ProDOS : T=TXT,X=$0000
*\-------------------------------------- *\--------------------------------------
.DUMMY
.OR ZPTMP+20 7 Bytes
IO.Open.FLAGS .BS 1
IO.Open.TYPE .BS 1
IO.Open.AUXTYPE .BS 2
IO.hFD .BS 1
.ED
*--------------------------------------
K.Open jsr PFT.YAToMLIPATH K.Open jsr PFT.YAToMLIPATH
>PULLB IO.Open.FLAGS >PULLB IO.Open.FLAGS