From 5c330415cad8ca4ccdac4e4bc4ea1670e3e9d8b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Fri, 28 Jun 2019 17:15:58 +0200 Subject: [PATCH] Kernel 0.93 --- BIN/CSH.D.txt | 3 +- BIN/CSH.E.txt | 18 +++--- BIN/CSH.I.txt | 3 +- BIN/CSH.R.txt | 3 +- BIN/CSH.S.CORE.txt | 3 +- BIN/CSH.S.txt | 3 +- SYS/KERNEL.S.DEF.txt | 2 +- SYS/KERNEL.S.GP.txt | 4 +- SYS/KERNEL.S.MATH.txt | 1 - SYS/KERNEL.S.NUM.txt | 123 +++++++++++++++++++++++++++++++++++++++++ SYS/KERNEL.S.STDIO.txt | 23 ++++---- SYS/KERNEL.S.TIME.txt | 4 +- 12 files changed, 151 insertions(+), 39 deletions(-) create mode 100644 SYS/KERNEL.S.NUM.txt diff --git a/BIN/CSH.D.txt b/BIN/CSH.D.txt index f45a0cc0..1e01d769 100644 --- a/BIN/CSH.D.txt +++ b/BIN/CSH.D.txt @@ -1,6 +1,5 @@ NEW -PREFIX -AUTO 4,1 + AUTO 3,1 .LIST OFF *-------------------------------------- hFileBuf .BS 1 diff --git a/BIN/CSH.E.txt b/BIN/CSH.E.txt index 503a0f96..ba9200d0 100644 --- a/BIN/CSH.E.txt +++ b/BIN/CSH.E.txt @@ -1,15 +1,15 @@ NEW -PREFIX -AUTO 4,1 + AUTO 3,1 .LIST OFF *-------------------------------------- -CSH.E.SYNTAX .EQ $7F -CSH.E.SOVERFLW .EQ $7E -CSH.E.NOVERFLW .EQ $7D -CSH.E.OOM .EQ $7C -CSH.E.DUP .EQ $7B -CSH.E.UNDEF .EQ $7A -CSH.E.TMISMATCH .EQ $79 +CSH.E.SYNTAX .EQ $C0 +CSH.E.SOVERFLW .EQ $C3 +CSH.E.UNDEF .EQ $C9 +* +CSH.E.NOVERFLW .EQ $D0 +CSH.E.TMISMATCH .EQ $D1 +CSH.E.OOM .EQ $D2 +CSH.E.DUP .EQ $D3 *-------------------------------------- MAN SAVE USR/SRC/BIN/CSH.E diff --git a/BIN/CSH.I.txt b/BIN/CSH.I.txt index d0cd674a..debde35d 100644 --- a/BIN/CSH.I.txt +++ b/BIN/CSH.I.txt @@ -1,6 +1,5 @@ NEW -PREFIX -AUTO 4,1 + AUTO 3,1 .LIST OFF *-------------------------------------- CSH.OPChars .AS "!~+-*/%=&|^&<>" diff --git a/BIN/CSH.R.txt b/BIN/CSH.R.txt index 4e4a74d1..b383cd8a 100644 --- a/BIN/CSH.R.txt +++ b/BIN/CSH.R.txt @@ -1,6 +1,5 @@ NEW -PREFIX -AUTO 4,1 + AUTO 3,1 .LIST OFF *-------------------------------------- L.CSH.BOPS .DA CSH.BOPS diff --git a/BIN/CSH.S.CORE.txt b/BIN/CSH.S.CORE.txt index d17db349..6e4bd0a5 100644 --- a/BIN/CSH.S.CORE.txt +++ b/BIN/CSH.S.CORE.txt @@ -1,6 +1,5 @@ NEW -PREFIX -AUTO 4,1 + AUTO 3,1 .LIST OFF *-------------------------------------- CSH.Q.CONST .EQ %10000000 diff --git a/BIN/CSH.S.txt b/BIN/CSH.S.txt index 00ac3b9d..58acdea5 100644 --- a/BIN/CSH.S.txt +++ b/BIN/CSH.S.txt @@ -1,6 +1,5 @@ NEW -PREFIX -AUTO 4,1 Enable MASM3 auto line num + AUTO 3,1 Enable MASM3 auto line num .LIST OFF .OP 65C02 Target CPU, must match CPU level in header .OR $2000 usualy $2000, but any value > $100 allowed diff --git a/SYS/KERNEL.S.DEF.txt b/SYS/KERNEL.S.DEF.txt index 0de9b9c9..a3bb7e8f 100644 --- a/SYS/KERNEL.S.DEF.txt +++ b/SYS/KERNEL.S.DEF.txt @@ -39,7 +39,7 @@ DRV.BLK.BlkNum .EQ $47 *-------------------------------------- * $5E-$C8 RESERVED APPLESOFT Main/Aux (ROM Call, no need to switch back MainZP) *-------------------------------------- -INDEX .EQ $5E ->$5F +*INDEX .EQ $5E ->$5F LOAD.FAC.FROM.YA RESULT .EQ $62 ->$66 used in FMULT FDIV *-------------------------------------- ZPTMP .EQ $67 ->$84 29 bytes diff --git a/SYS/KERNEL.S.GP.txt b/SYS/KERNEL.S.GP.txt index f65d4748..1f687840 100644 --- a/SYS/KERNEL.S.GP.txt +++ b/SYS/KERNEL.S.GP.txt @@ -214,9 +214,9 @@ GP.RomCall dec IRQ.InKernel .DA $E82E NORMALIZE.FAC.2 (L->F) .DA $E941 LOG .DA $E987 FMULTT.1 - .DA $E9E7 LOAD.ARG.FROM.INDEX + .DA $E9E3 LOAD.ARG.FROM.YA .DA $EA6B FDIVT+2 - .DA $EAFD LOAD.FAC.FROM.INDEX + .DA $EAF9 LOAD.FAC.FROM.YA .DA $EB27 SETFOR (GETFAC) .DA $EBB2 FCOMP diff --git a/SYS/KERNEL.S.MATH.txt b/SYS/KERNEL.S.MATH.txt index b3a092da..5259b47f 100644 --- a/SYS/KERNEL.S.MATH.txt +++ b/SYS/KERNEL.S.MATH.txt @@ -124,7 +124,6 @@ MATH.PullARG ldx #ROM.SETARG MATH.PullFAC ldx #ROM.SETFAC >LDYA pStack - >STYA INDEX jsr GP.ROMCALL lda pStack diff --git a/SYS/KERNEL.S.NUM.txt b/SYS/KERNEL.S.NUM.txt new file mode 100644 index 00000000..9a966f77 --- /dev/null +++ b/SYS/KERNEL.S.NUM.txt @@ -0,0 +1,123 @@ +NEW + AUTO 3,1 +*-------------------------------------- +ACC32.Sign .EQ FAC +ACC32 .EQ FAC+1 +*-------------------------------------- +NUM.A2STR10 jsr NUM.A2ACC32 + clc +*-------------------------------------- +* CS = signed long +* CC = unsigned long +*-------------------------------------- +NUM.ACC322STR10 bcc .1 + + clc + + lda ACC32+3 + bpl .1 + + jsr NUM.ACC32NEG + + sec + +.1 php + + ldx #4 + +.2 stz RESULT,x Clear all 5 bytes + dex + bpl .2 + + sed switch to BCD mode + + ldx #32 let's roll 32 bits + +.3 asl ACC32 + rol ACC32+1 + rol ACC32+2 + rol ACC32+3 + + ldy #4 + +.4 lda RESULT,y + adc RESULT,y + sta RESULT,y + dey + bpl .4 + + dex + bne .3 + + cld + + ldy #0 +* ldx #0 + + plp + bcc .5 + + lda #'-' + sta $102,x + inx + +.5 stz $102,x + +.50 tya + lsr + tay + lda RESULT,y + + bcs .6 + + lsr + lsr + lsr + lsr + +.6 and #$0F + ora #$30 + cmp #$30 + + lda $102,x + sta $102,x + +.7 sta $102,x + inx + +.8 iny + cpy #10 + bne .50 + + stz $102,x + + clc +.99 rts +*-------------------------------------- +NUM.A2ACC32 sta ACC32 + .HS 2C BIT ABS +NUM.ACC32ZERO stz ACC32 + stz ACC32+1 + stz ACC32+2 + stz ACC32+3 + rts +*-------------------------------------- +NUM.ACC32NEG sec + + ldy #0 + ldx #3 + +.1 lda ACC32,y two's complement of X bytes + eor #$ff + adc #0 + sta ACC32,y + iny + dex + bpl .1 + + rts +*-------------------------------------- +MAN +SAVE USR/SRC/SYS/KERNEL.S.NUM +LOAD USR/SRC/SYS/KERNEL.S +ASM diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index e7f34f75..052b1388 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -4,7 +4,6 @@ NEW HEXBUF .EQ FAC K.PrintF.PadL .EQ FAC+4 K.PrintF.PadC .EQ FAC+5 -BCDBUF .EQ ARG 5, enough to handle 10 digits (32bits) HEXBUF.Signed .EQ ARG.SIGN */-------------------------------------- * # putchar (BLOCKING) @@ -397,13 +396,13 @@ K.PrintF.1 stz PrintF.Cnt sec rts *-------------------------------------- -.8 lda PrintF.hFILE +.8 ldx PrintF.hFILE beq .80 Writing to buffer, append \0 >PUSHW PrintF.Cnt Writing to File/dev... >PUSHWI K.IOBuf - lda PrintF.hFILE + txa jsr K.FWrite bcc .81 @@ -559,7 +558,7 @@ PrintF.Hex2Dec ror HEXBUF.Signed ldx #4 -.1 stz BCDBUF,x Clear all 5 bytes +.1 stz RESULT,x Clear all 5 bytes dex bpl .1 @@ -574,9 +573,9 @@ PrintF.Hex2Dec ror HEXBUF.Signed ldy #4 -.3 lda BCDBUF,y - adc BCDBUF,y - sta BCDBUF,y +.3 lda RESULT,y + adc RESULT,y + sta RESULT,y dey bpl .3 @@ -605,7 +604,7 @@ PrintF.Hex2Dec ror HEXBUF.Signed lsr CS if lo nibble (1,3,5,7,9) tay - lda BCDBUF,y + lda RESULT,y bcs .6 @@ -662,10 +661,9 @@ PrintF.F clc .1 tya sec +1 adc pStack - sta INDEX + tay lda pStack+1 - sta INDEX+1 ldx #ROM.SETFAC jsr GP.ROMCALL @@ -1348,6 +1346,7 @@ K.FSeek jsr PFT.CheckNodeA .HS 2C bit abs .99 lda #E.FTB sec +K.FSeek.RTS rts */-------------------------------------- * # FEOF @@ -1365,11 +1364,9 @@ K.FSeek jsr PFT.CheckNodeA * CS : *\-------------------------------------- K.FEOF jsr PFT.CheckNodeA - bcs .9 + bcs K.FSeek.RTS jmp IO.EOF - -.9 rts */-------------------------------------- * # FTell * Return the current value of the file-position indicator diff --git a/SYS/KERNEL.S.TIME.txt b/SYS/KERNEL.S.TIME.txt index 37487f0d..c52d64f1 100644 --- a/SYS/KERNEL.S.TIME.txt +++ b/SYS/KERNEL.S.TIME.txt @@ -30,11 +30,9 @@ TIME.Year .BS 1 * ## RETURN VALUE * S.TIME filled with System date/time *\-------------------------------------- -K.Time >STYA ZPPtr2 +K.Time >PUSHYA >MLICALL MLIGETTIME >LDYAI DATELO - >STYA ZPPtr1 - bra TIME.PTime2TimeP1P2 */-------------------------------------- * # PTime2Time * Convert ProDOS Time To S.TIME