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

View File

@ -1,24 +1,50 @@
NEW
PREFIX
AUTO 4,1
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
.TF ROOT/BMP2PIX
.TF BIN/BMP2PIX
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/GUI.I
.INB INC/IO.I
.INB INC/GFX.I
.INB INC/LIBGUI.I
*--------------------------------------
ZPPTR1 .EQ ZPBIN
ZPInputBufPtr .EQ ZPBIN+2
ZPInputBufLen .EQ ZPBIN+4
ZPInputDataPtr .EQ ZPBIN+6
ZPBMPRowBytes .EQ ZPBIN+8
ZPPIXRowBytes .EQ ZPBIN+10
ZPBufPtr .EQ ZPBIN+12
ZPLineCount .EQ ZPBIN+14
S.BMP.BM .EQ 0
S.BMP.SIZE .EQ 2
S.BMP.DATA.OFS .EQ $A
S.BMP.HDR.SIZE .EQ $E
S.BMP.W .EQ $12
S.BMP.H .EQ $16
S.BMP.PLANES .EQ $1A
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)
*--------------------------------------
@ -26,11 +52,12 @@ CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA #0 S.PS.F.EVENT
.DA #0
.DA CS.END-CS.START CS
.DA DS.END-DS.START DS
.DA #64 SS
.DA #16 ZP
.DA #ZS.END-ZS.START Zero Page Size
.DA 0
*--------------------------------------
* Relocation Table
@ -46,7 +73,10 @@ L.MSG.HEADER.KO .DA MSG.HEADER.KO
L.MSG.DONE .DA MSG.DONE
.DA 0
*--------------------------------------
CS.INIT
CS.INIT clc
rts
*--------------------------------------
CS.RUN
.1 >INC.G ArgCount
>SYSCALL ArgV
bcs .7
@ -67,7 +97,8 @@ CS.INIT
dex
bne .2
.99 >LDYA L.MSG.USAGE
.99 >PUSHBI 0
>LDYA L.MSG.USAGE
>SYSCALL printf
lda #E.SYN
sec
@ -80,117 +111,33 @@ CS.INIT
.4 >LDA.G hInputBuf
bne .5
jsr CS.INIT.OPENINPUT
jsr CS.RUN.OPENINPUT
bcc .1 scan for any other args
rts
.5 >LDA.G hOutputFile
bne .99
jsr CS.INIT.CREATEOUTPUT
jsr CS.RUN.CREATEOUTPUT
bcc .1 scan for any other args
rts
.9 rts
.7 >LDA.G hOutputFile
beq .99
>LDYAI 256
>SYSCALL getmem
bcs CS.INIT.RTS
bcs .9
>STYA ZPBufPtr
txa
>STA.G hBuf
.8 clc
CS.INIT.RTS rts
>LDA.G BMP.BPP
cmp #1
beq CS.RUN.1
jmp CS.RUN.24
*--------------------------------------
CS.INIT.OPENINPUT
>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
CS.RUN.1 lda #S.BM.F.BBP1
>STA.G PIX.Header+S.BM.F
>LDA.G PIX.Header+S.BM.W
@ -249,13 +196,10 @@ CS.RUN lda #S.BM.F.BBP1
adc ZPInputBufLen+1
sta ZPInputDataPtr+1
>PUSHWI S.BM
>PUSHEA.G PIX.Header
>LDA.G hOutputFile
>SYSCALL FWrite
jsr CS.RUN.WRITE.HDR
bcs CS.RUN.RTS
CS.RUN.LOOP inc ZPLineCount
CS.RUN.1.LOOP inc ZPLineCount
bne .1
inc ZPLineCount+1
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
>SYSCALL printf
>SYSCALL puts
lda #0
sec
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
rts
*--------------------------------------
@ -311,7 +504,11 @@ CS.QUIT >LDA.G hBuf
beq .1
>SYSCALL FreeMem
.1 >LDA.G hOutputFile
.1 >LDA.G hInputBuf
beq .2
>SYSCALL FreeMem
.2 >LDA.G hOutputFile
beq .8
>SYSCALL fclose
@ -319,41 +516,119 @@ CS.QUIT >LDA.G hBuf
.8 clc
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
*--------------------------------------
.INB ROOT/X.TWIST.G
.INB USR/SRC/X.TWIST.G
*--------------------------------------
OptionList >PSTR "Vv"
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.HEADER.OK .AZ "BMP Size : %D x %D pixels\r\n"
MSG.HEADER.KO .AZ "Invalid Input File Format\r\n"
MSG.DONE .AZ "All Done!!!\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"
MSG.DONE .AZ "All Done!!!"
*--------------------------------------
* LOWRES Patette : https://comp.sys.apple2.narkive.com/lTSrj2ZI/apple-ii-colour-rgb
*--------------------------------------
0 #000000
1 #e31e60
2 #604ebd
3 #ff44fd
4 #00a360
5 #9c9c9c
6 #14cffd
7 #d0c3ff
8 #607203
9 #ff6a3c
a #9c9c9c (yes it is the same as #5!)
b #ffa0d0
c #14f53c
d #d0dd8d
e #72ffd0
f #ffffff
PALETTE.RGB .HS 00000000 BLACK
.HS e31e6000 RED
.HS 604ebd00 DARK.BLUE
.HS ff44fd00 PURPLE
.HS 00a36000 DARK.GREEN
.HS 9c9c9c00 DARK.GRAY
.HS 14cffd00 BLUE
.HS d0c3ff00 LIGHT.BLUE
.HS 60720300 BROWN
.HS ff6a3c00 ORANGE
.HS 9c9c9c00 DARK.GRAY
.HS ffa0d000 PINK
.HS 14f53c00 LIGHT.GREEN
.HS d0dd8d00 YELLOW
.HS 72ffd000 AQUA
.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
.OR 0
DS.START
PIX.Header .BS S.BM
BMP.BPP .BS 1
ArgCount .BS 1
hInputBuf .BS 1
hOutputFile .BS 1
@ -363,5 +638,5 @@ DS.END
.ED
*--------------------------------------
MAN
SAVE /A2OSX.BUILD/ROOT/BMP2PIX.S
SAVE USR/SRC/BIN/BMP2PIX.S
ASM

BIN
PALETTE.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

View File

@ -1,6 +1,5 @@
NEW
PREFIX
AUTO 4,1
AUTO 4,1
.LIST OFF
*--------------------------------------
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
*--------------------------------------
MAN
SAVE /A2OSX.BUILD/ROOT/X.TWIST.G
SAVE USR/SRC/X.TWIST.G