Kernel 0.93

This commit is contained in:
Rémy GIBERT 2019-04-06 19:43:33 +01:00
parent 6bf3599ad2
commit c84579c4f8
5 changed files with 459 additions and 175 deletions

Binary file not shown.

View File

@ -606,13 +606,13 @@ CMD.CALL >LDA.G hFuncList
CMD.CALL.YAX stx M32.ACC X=Code to Execute CMD.CALL.YAX stx M32.ACC X=Code to Execute
jsr CORE.ArgV.Dup Y,A = ArgV jsr CORE.ArgV.Dup Y,A = ArgV
bcs .9 bcs CMD.CALL.RTS
sta M32.ACC+2 A=ARGC sta M32.ACC+2 A=ARGC
stx M32.ACC+1 X=ARGV stx M32.ACC+1 X=ARGV
lda #8 lda #8
jsr CORE.StkCheck jsr CORE.StkCheck
bcs .9 bcs CMD.CALL.RTS
lda ZPInputBuf lda ZPInputBuf
jsr CORE.StkPush jsr CORE.StkPush
@ -628,16 +628,20 @@ CMD.CALL.YAX stx M32.ACC X=Code to Execute
ldy #S.PS.ARGC ldy #S.PS.ARGC
lda (pPS),y lda (pPS),y
jsr CORE.StkPush jsr CORE.StkPush old ARGC
lda M32.ACC+2 new ARGC
ldy #S.PS.ARGC
sta (pPS),y
lda M32.ACC+1 new ARGV
ldy #S.PS.hARGV ldy #S.PS.hARGV
lda (pPS),y
jsr CORE.StkPush old ARGV
ldy #S.PS.ARGC
lda M32.ACC+2 new ARGC
sta (pPS),y sta (pPS),y
iny #S.PS.hARGV
lda M32.ACC+1
sta (pPS),y new ARGV
lda M32.ACC new code lda M32.ACC new code
jsr CORE.StkPush jsr CORE.StkPush
@ -650,25 +654,25 @@ CMD.CALL.YAX stx M32.ACC X=Code to Execute
jsr CORE.StkPush jsr CORE.StkPush
clc clc
.9 rts CMD.CALL.9 rts
*-------------------------------------- *--------------------------------------
CMD.EXIT lda (ZPArgVBufPtr) CMD.EXIT lda (ZPArgVBufPtr)
beq CMD.EXIT.A no arg, exit 0 beq .1 no arg, exit 0
>LDYA ZPArgVBufPtr >LDYA ZPArgVBufPtr
jsr EXP.GET jsr EXP.GET
bcs CMD.EXIT.RTS bcs CMD.CALL.9
>SYSCALL AToL >SYSCALL AToL
bcs CMD.EXIT.RTS bcs CMD.CALL.9
>PULLA >PULLA
inc pStack inc pStack
inc pStack inc pStack
inc pStack inc pStack
jsr CMD.EXIT.A .1 jsr CMD.EXIT.A
bcs .9 bcs .9
lda (pData) lda (pData)
bne .8 bne .8
@ -687,22 +691,9 @@ CMD.EXIT.A sta M32.ACC
cmp #$C0 in CALL / . context ? cmp #$C0 in CALL / . context ?
beq .8 beq .8
and #$3F jsr CMD.EXIT.POP
cmp #C.IF bcc .1
beq .1 rts
.2 ldx #2
cmp #C.WHILE
bne CMD.EXIT.99
.3 lda (pData)
.4 dec
dex
bne .4
.5 sta (pData)
bra .1
.8 jsr CORE.StkPull .8 jsr CORE.StkPull
>SYSCALL freemem Code buffer >SYSCALL freemem Code buffer
@ -734,8 +725,27 @@ CMD.EXIT.A sta M32.ACC
lda M32.ACC lda M32.ACC
clc clc
CMD.EXIT.RTS rts CMD.EXIT.RTS rts
*--------------------------------------
CMD.EXIT.POP and #$3F
cmp #C.IF
beq .8
.2 ldx #2
cmp #C.WHILE
bne .9
.3 lda (pData)
.4 dec
dex
bne .4
CMD.EXIT.99 lda #E.STACKERROR sta (pData)
.8 clc
rts
.9 lda #E.STACKERROR
sec sec
rts rts
*-------------------------------------- *--------------------------------------

View File

@ -1,24 +1,50 @@
NEW NEW
PREFIX AUTO 3,1
AUTO 4,1
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF ROOT/BMP2PIX .TF BIN/BMP2PIX
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/GUI.I .INB INC/IO.I
.INB INC/GFX.I
.INB INC/LIBGUI.I .INB INC/LIBGUI.I
*-------------------------------------- *--------------------------------------
ZPPTR1 .EQ ZPBIN S.BMP.BM .EQ 0
ZPInputBufPtr .EQ ZPBIN+2 S.BMP.SIZE .EQ 2
ZPInputBufLen .EQ ZPBIN+4 S.BMP.DATA.OFS .EQ $A
ZPInputDataPtr .EQ ZPBIN+6 S.BMP.HDR.SIZE .EQ $E
ZPBMPRowBytes .EQ ZPBIN+8 S.BMP.W .EQ $12
ZPPIXRowBytes .EQ ZPBIN+10 S.BMP.H .EQ $16
ZPBufPtr .EQ ZPBIN+12 S.BMP.PLANES .EQ $1A
ZPLineCount .EQ ZPBIN+14 S.BMP.BPP .EQ $1C
*
S.BMP .EQ $36
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
ZPPTR1 .BS 2
ZPInputBufPtr .BS 2
ZPInputBufLen .BS 2
ZPInputDataPtr .BS 2
ZPBMPRowBytes .BS 2
ZPPIXRowBytes .BS 2
ZPBufPtr .BS 2
ZPLineCount .BS 2
ZPPixel24 .BS 3
ZPPixelScore .BS 3
ZPPixelBest .BS 3
ZPPixelIndex16 .BS 1
ZBTmpB1 .BS 1
ZBTmpW .BS 2
ZPCntX .BS 1
ZPCntY .BS 1
ZS.END .ED
*-------------------------------------- *--------------------------------------
* File Header (16 Bytes) * File Header (16 Bytes)
*-------------------------------------- *--------------------------------------
@ -26,11 +52,12 @@ CS.START cld
jmp (.1,x) jmp (.1,x)
.DA #$61 6502,Level 1 (65c02) .DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1 .DA #1 BIN Layout Version 1
.DA 0 .DA #0 S.PS.F.EVENT
.DA #0
.DA CS.END-CS.START CS .DA CS.END-CS.START CS
.DA DS.END-DS.START DS .DA DS.END-DS.START DS
.DA #64 SS .DA #64 SS
.DA #16 ZP .DA #ZS.END-ZS.START Zero Page Size
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
* Relocation Table * Relocation Table
@ -46,7 +73,10 @@ L.MSG.HEADER.KO .DA MSG.HEADER.KO
L.MSG.DONE .DA MSG.DONE L.MSG.DONE .DA MSG.DONE
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
CS.INIT CS.INIT clc
rts
*--------------------------------------
CS.RUN
.1 >INC.G ArgCount .1 >INC.G ArgCount
>SYSCALL ArgV >SYSCALL ArgV
bcs .7 bcs .7
@ -67,7 +97,8 @@ CS.INIT
dex dex
bne .2 bne .2
.99 >LDYA L.MSG.USAGE .99 >PUSHBI 0
>LDYA L.MSG.USAGE
>SYSCALL printf >SYSCALL printf
lda #E.SYN lda #E.SYN
sec sec
@ -80,117 +111,33 @@ CS.INIT
.4 >LDA.G hInputBuf .4 >LDA.G hInputBuf
bne .5 bne .5
jsr CS.INIT.OPENINPUT jsr CS.RUN.OPENINPUT
bcc .1 scan for any other args bcc .1 scan for any other args
rts rts
.5 >LDA.G hOutputFile .5 >LDA.G hOutputFile
bne .99 bne .99
jsr CS.INIT.CREATEOUTPUT jsr CS.RUN.CREATEOUTPUT
bcc .1 scan for any other args bcc .1 scan for any other args
rts .9 rts
.7 >LDA.G hOutputFile .7 >LDA.G hOutputFile
beq .99 beq .99
>LDYAI 256 >LDYAI 256
>SYSCALL getmem >SYSCALL getmem
bcs CS.INIT.RTS bcs .9
>STYA ZPBufPtr >STYA ZPBufPtr
txa txa
>STA.G hBuf >STA.G hBuf
.8 clc >LDA.G BMP.BPP
CS.INIT.RTS rts cmp #1
beq CS.RUN.1
jmp CS.RUN.24
*-------------------------------------- *--------------------------------------
CS.INIT.OPENINPUT CS.RUN.1 lda #S.BM.F.BBP1
>PUSHWI 0 Aux type
>PUSHBI 0 Type
>PUSHBI O.RDONLY
>LDYA ZPPtr1
>SYSCALL LoadFile
bcs CS.INIT.RTS
>STYA ZPInputBufLen
>PUSHYA
txa
>STA.G hInputBuf
>SYSCALL GetMemPtr
>STYA ZPInputBufPtr
>LDYA L.MSG.FILE.OK
>SYSCALL printf
lda (ZPInputBufPtr)
cmp #'B'
bne .99
ldy #1
lda (ZPInputBufPtr),y
cmp #'M'
bne .99
ldy #$1C BBP LO
lda (ZPInputBufPtr),y
cmp #1
bne .99
iny BBP HI
lda (ZPInputBufPtr),y
bne .99
ldy #$16 H LO
lda (ZPInputBufPtr),y
>STA.G PIX.Header+S.BM.H
pha
eor #$ff
sta ZPLineCount
ldy #$17 H HI
lda (ZPInputBufPtr),y
>STA.G PIX.Header+S.BM.H+1
>PUSHA
eor #$ff
sta ZPLineCount+1
pla
>PUSHA
ldy #$12 W LO
lda (ZPInputBufPtr),y
>STA.G PIX.Header+S.BM.W
pha
ldy #$13 W HI
lda (ZPInputBufPtr),y
>STA.G PIX.Header+S.BM.W+1
>PUSHA
pla
>PUSHA
>LDYA L.MSG.HEADER.OK
>SYSCALL printf
clc
rts
.99 >LDYA L.MSG.HEADER.KO
>SYSCALL printf
lda #E.IBIN
sec
rts
*--------------------------------------
CS.INIT.CREATEOUTPUT
>PUSHWI 0 Aux type
>PUSHBI $CB PIX Type
>PUSHBI O.WRONLY+O.CREATE
>LDYA ZPPtr1
>SYSCALL FOpen
bcs .9
>STA.G hOutputFile
.9 rts
*--------------------------------------
CS.RUN lda #S.BM.F.BBP1
>STA.G PIX.Header+S.BM.F >STA.G PIX.Header+S.BM.F
>LDA.G PIX.Header+S.BM.W >LDA.G PIX.Header+S.BM.W
@ -249,13 +196,10 @@ CS.RUN lda #S.BM.F.BBP1
adc ZPInputBufLen+1 adc ZPInputBufLen+1
sta ZPInputDataPtr+1 sta ZPInputDataPtr+1
>PUSHWI S.BM jsr CS.RUN.WRITE.HDR
>PUSHEA.G PIX.Header
>LDA.G hOutputFile
>SYSCALL FWrite
bcs CS.RUN.RTS bcs CS.RUN.RTS
CS.RUN.LOOP inc ZPLineCount CS.RUN.1.LOOP inc ZPLineCount
bne .1 bne .1
inc ZPLineCount+1 inc ZPLineCount+1
beq .8 beq .8
@ -294,16 +238,265 @@ CS.RUN.LOOP inc ZPLineCount
bra CS.RUN.LOOP bra CS.RUN.1.LOOP
.8 >LDYA L.MSG.DONE .8 >LDYA L.MSG.DONE
>SYSCALL printf >SYSCALL puts
lda #0 lda #0
sec sec
CS.RUN.RTS rts CS.RUN.RTS rts
*-------------------------------------- *--------------------------------------
CS.RUN.24 lda #S.BM.F.BBP4
>STA.G PIX.Header+S.BM.F
ldy #S.BMP.DATA.OFS
lda (ZPInputBufPtr),y
clc
adc ZPInputBufPtr
tax
iny
lda (ZPInputBufPtr),y
adc ZPInputBufPtr+1
stx ZPInputBufPtr
sta ZPInputBufPtr+1
jsr DEBUG.ClrScr
lda #0
sta ZPCntX
lda #0
sta ZPCntY
CS.RUN.24.LOOP ldx #2
ldy #0
.1 lda (ZPInputBufPtr),y
sta ZPPixel24,x
iny
dex
bpl .1
lda ZPInputBufPtr
clc
adc #3
sta ZPInputBufPtr
bcc .2
inc ZPInputBufPtr+1
.2 jsr CS.RUN.GetIndexInPalette
jsr DEBUG.PLOT
inc ZPCntX
lda ZPCntX
>CMP.G PIX.Header+S.BM.W
bne CS.RUN.24.LOOP
stz ZPCntX
inc ZPCntY
lda ZPCntY
>CMP.G PIX.Header+S.BM.H
bne CS.RUN.24.LOOP
lda #0
sec
rts
*--------------------------------------
CS.RUN.GetIndexInPalette
stz ZPPixelIndex16
lda #$ff
sta ZPPixelBest
sta ZPPixelBest+1
sta ZPPixelBest+2
ldy #63
.30 stz ZPPixelScore
stz ZPPixelScore+1
stz ZPPixelScore+2
ldx #2
.40 lda PALETTE.RGB-1,y
sec
sbc ZPPixel24,x
bcs .5
eor #$ff
inc
.5 phx
*
sta ZBTmpB1
sta ZBTmpW
stz ZBTmpW+1
lda #0
ldx #8
.1 lsr ZBTmpW
bcc .2
clc
adc ZBTmpB1
.2 ror
ror ZBTmpW
dex
bne .1
sta ZBTmpW+1
lda ZPPixelScore
clc
adc ZBTmpW
sta ZPPixelScore
lda ZPPixelScore+1
adc ZBTmpW+1
sta ZPPixelScore+1
bcc .3
inc ZPPixelScore+2
.3 plx
dey
dex
bpl .40
lda ZPPixelBest
cmp ZPPixelScore
lda ZPPixelBest+1
sbc ZPPixelScore+1
lda ZPPixelBest+2
sbc ZPPixelScore+2
bcc .8
lda ZPPixelScore
sta ZPPixelBest
lda ZPPixelScore+1
sta ZPPixelBest+1
lda ZPPixelScore+2
sta ZPPixelBest+2
tya
lsr
lsr
sta ZPPixelIndex16
.8 dey
bpl .30
lda ZPPixelIndex16
CS.RUN.GetIndexInPalette.RTS
rts
*--------------------------------------
CS.RUN.OPENINPUT
>PUSHWI 0 Aux type
>PUSHBI 0 Type
>PUSHBI O.RDONLY
>LDYA ZPPtr1
>SYSCALL LoadFile
bcs CS.RUN.GetIndexInPalette.RTS
>STYA ZPInputBufLen
txa
>STA.G hInputBuf
>SYSCALL GetMemPtr
>STYA ZPInputBufPtr
>PUSHW ZPInputBufLen
>PUSHBI 2
>LDYA L.MSG.FILE.OK
>SYSCALL printf
lda (ZPInputBufPtr)
cmp #'B'
bne .99
ldy #1
lda (ZPInputBufPtr),y
cmp #'M'
bne .99
ldy #S.BMP.BPP+1
lda (ZPInputBufPtr),y
bne .99
dey
lda (ZPInputBufPtr),y
>STA.G BMP.BPP
cmp #1
beq .1
cmp #24
bne .99
.1 >PUSHA
ldy #S.BMP.H
lda (ZPInputBufPtr),y
>STA.G PIX.Header+S.BM.H
pha
eor #$ff
sta ZPLineCount
ldy #S.BMP.H+1
lda (ZPInputBufPtr),y
>STA.G PIX.Header+S.BM.H+1
>PUSHA
eor #$ff
sta ZPLineCount+1
pla
>PUSHA
ldy #S.BMP.W
lda (ZPInputBufPtr),y
>STA.G PIX.Header+S.BM.W
pha
ldy #S.BMP.W+1
lda (ZPInputBufPtr),y
>STA.G PIX.Header+S.BM.W+1
>PUSHA
pla
>PUSHA
>PUSHBI 5
>LDYA L.MSG.HEADER.OK
>SYSCALL printf
.9 rts
.99 >LDYA L.MSG.HEADER.KO
>SYSCALL puts
lda #E.IBIN
sec
rts
*--------------------------------------
CS.RUN.CREATEOUTPUT
>PUSHWI 0 Aux type
>PUSHBI $CB PIX Type
>PUSHBI O.WRONLY+O.CREATE
>LDYA ZPPtr1
>SYSCALL FOpen
bcs .9
>STA.G hOutputFile
.9 rts
*--------------------------------------
CS.RUN.WRITE.HDR
>PUSHWI S.BM
>PUSHEA.G PIX.Header
>LDA.G hOutputFile
>SYSCALL FWrite
rts
*--------------------------------------
CS.DOEVENT sec CS.DOEVENT sec
rts rts
*-------------------------------------- *--------------------------------------
@ -311,7 +504,11 @@ CS.QUIT >LDA.G hBuf
beq .1 beq .1
>SYSCALL FreeMem >SYSCALL FreeMem
.1 >LDA.G hOutputFile .1 >LDA.G hInputBuf
beq .2
>SYSCALL FreeMem
.2 >LDA.G hOutputFile
beq .8 beq .8
>SYSCALL fclose >SYSCALL fclose
@ -319,41 +516,119 @@ CS.QUIT >LDA.G hBuf
.8 clc .8 clc
rts rts
*-------------------------------------- *--------------------------------------
DEBUG.ClrScr sta SETMIXED
sta CLRTEXT
ldx #19
.1 lda SCR.BASEL,x
sta ZPPTR1
lda SCR.BASEH,x
sta ZPPTR1+1
lda #0
ldy #39
.2 sta SETPAGE2
sta (ZPPTR1),y
sta CLRPAGE2
sta (ZPPTR1),y
dey
bpl .2
dex
bpl .1
rts
*--------------------------------------
DEBUG.PLOT pha
lda ZPCntX
lsr
tay
sta CLRPAGE2
bcs .1 CS = main
sta SETPAGE2
.1 lda ZPCntY
lsr
tax
lda SCR.BASEL,x
sta ZPPTR1
lda SCR.BASEH,x
sta ZPPTR1+1
pla
bcc .2
asl
asl
asl
asl
.2 ora (ZPPTR1),y
sta (ZPPTR1),y
sta CLRPAGE2
rts
*--------------------------------------
SCR.BASEL .HS 00.80.00.80.00.80.00.80.28.A8.28.A8.28.A8.28.A8.50.D0.50.D0.50.D0.50.D0
SCR.BASEH .HS 04.04.05.05.06.06.07.07.04.04.05.05.06.06.07.07.04.04.05.05.06.06.07.07
*--------------------------------------
CS.END CS.END
*-------------------------------------- *--------------------------------------
.INB ROOT/X.TWIST.G .INB USR/SRC/X.TWIST.G
*-------------------------------------- *--------------------------------------
OptionList >PSTR "Vv" OptionList >PSTR "Vv"
OptionVars .DA #bVerbose,#bVerbose OptionVars .DA #bVerbose,#bVerbose
MSG.USAGE .AZ "Usage : BMP2PIX BMP-File \r\n -V : Verbose Mode\r\n" MSG.USAGE .AS "Usage : BMP2PIX BMP-File \r\n"
.AZ " -V : Verbose Mode\r\n"
MSG.FILE.OK .AZ "BMP Loaded, %D Bytes Read\r\n" MSG.FILE.OK .AZ "BMP Loaded, %D Bytes Read\r\n"
MSG.HEADER.OK .AZ "BMP Size : %D x %D pixels\r\n" MSG.HEADER.OK .AZ "BMP Size : %D x %D pixels, %d bit(s)/pixel\r\n"
MSG.HEADER.KO .AZ "Invalid Input File Format\r\n" MSG.HEADER.KO .AZ "Invalid Input File Format"
MSG.DONE .AZ "All Done!!!\r\n" MSG.DONE .AZ "All Done!!!"
*-------------------------------------- *--------------------------------------
* LOWRES Patette : https://comp.sys.apple2.narkive.com/lTSrj2ZI/apple-ii-colour-rgb * LOWRES Patette : https://comp.sys.apple2.narkive.com/lTSrj2ZI/apple-ii-colour-rgb
*-------------------------------------- *--------------------------------------
0 #000000 PALETTE.RGB .HS 00000000 BLACK
1 #e31e60 .HS e31e6000 RED
2 #604ebd .HS 604ebd00 DARK.BLUE
3 #ff44fd .HS ff44fd00 PURPLE
4 #00a360 .HS 00a36000 DARK.GREEN
5 #9c9c9c .HS 9c9c9c00 DARK.GRAY
6 #14cffd .HS 14cffd00 BLUE
7 #d0c3ff .HS d0c3ff00 LIGHT.BLUE
8 #607203 .HS 60720300 BROWN
9 #ff6a3c .HS ff6a3c00 ORANGE
a #9c9c9c (yes it is the same as #5!) .HS 9c9c9c00 DARK.GRAY
b #ffa0d0 .HS ffa0d000 PINK
c #14f53c .HS 14f53c00 LIGHT.GREEN
d #d0dd8d .HS d0dd8d00 YELLOW
e #72ffd0 .HS 72ffd000 AQUA
f #ffffff .HS ffffff00 WHITE
*--------------------------------------
PALETTE.BGR .HS 00000000 BLACK
.HS 601ee300 RED
.HS bd4e6000 DARK.BLUE
.HS fd44ff00 PURPLE
.HS 60a30000 DARK.GREEN
.HS 9c9c9c00 DARK.GRAY
.HS fdcf1400 BLUE
.HS ffc3d000 LIGHT.BLUE
.HS 03726000 BROWN
.HS 3c6aff00 ORANGE
.HS 9c9c9c00 DARK.GRAY
.HS d0a0ff00 PINK
.HS 3cf51400 LIGHT.GREEN
.HS 8dddd000 YELLOW
.HS d0ff7200 AQUA
.HS ffffff00 WHITE
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY
.OR 0 .OR 0
DS.START DS.START
PIX.Header .BS S.BM PIX.Header .BS S.BM
BMP.BPP .BS 1
ArgCount .BS 1 ArgCount .BS 1
hInputBuf .BS 1 hInputBuf .BS 1
hOutputFile .BS 1 hOutputFile .BS 1
@ -363,5 +638,5 @@ DS.END
.ED .ED
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE /A2OSX.BUILD/ROOT/BMP2PIX.S SAVE USR/SRC/BIN/BMP2PIX.S
ASM ASM

BIN
PALETTE.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

View File

@ -1,6 +1,5 @@
NEW NEW
PREFIX AUTO 4,1
AUTO 4,1
.LIST OFF .LIST OFF
*-------------------------------------- *--------------------------------------
TWIST .DA #%00000000,#%10000000,#%01000000,#%11000000,#%00100000,#%10100000,#%01100000,#%11100000 TWIST .DA #%00000000,#%10000000,#%01000000,#%11000000,#%00100000,#%10100000,#%01100000,#%11100000
@ -37,4 +36,4 @@ TWIST .DA #%00000000,#%10000000,#%01000000,#%11000000,#%00100000,#%10100000,#%
.DA #%00011111,#%10011111,#%01011111,#%11011111,#%00111111,#%10111111,#%01111111,#%11111111 .DA #%00011111,#%10011111,#%01011111,#%11011111,#%00111111,#%10111111,#%01111111,#%11111111
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE /A2OSX.BUILD/ROOT/X.TWIST.G SAVE USR/SRC/X.TWIST.G