Kernel 0.93

This commit is contained in:
Rémy GIBERT 2019-04-08 07:07:19 +01:00
parent f52ec163ab
commit 4f38022ae0
5 changed files with 330 additions and 185 deletions

Binary file not shown.

View File

@ -11,7 +11,7 @@ NEW
.INB INC/GFX.I
.INB INC/LIBGUI.I
*--------------------------------------
S.BMP.BM .EQ 0
S.BMP.SIG .EQ 0
S.BMP.SIZE .EQ 2
S.BMP.DATA.OFS .EQ $A
S.BMP.HDR.SIZE .EQ $E
@ -26,21 +26,24 @@ S.BMP .EQ $36
.OR ZPBIN
ZS.START
ZPPTR1 .BS 2
ZPInputBuf .BS 2
ZPInputBufPtr .BS 2
ZPInputBufLen .BS 2
ZPInputDataPtr .BS 2
ZPInputRowBytes .BS 2
ZPBMPRowBytes .BS 2
ZPPIXRowBytes .BS 2
ZPBufPtr .BS 2
ZPLineCount .BS 2
ZPPixelCount .BS 2
ZPOutputBuf .BS 2
ZPOutputRowBytes .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
@ -67,7 +70,6 @@ CS.START cld
.DA CS.DOEVENT
.DA CS.QUIT
L.MSG.USAGE .DA MSG.USAGE
L.MSG.FILE.OK .DA MSG.FILE.OK
L.MSG.HEADER.OK .DA MSG.HEADER.OK
L.MSG.HEADER.KO .DA MSG.HEADER.KO
L.MSG.DONE .DA MSG.DONE
@ -109,7 +111,7 @@ CS.RUN
sta (pData),y
bra .1
.4 >LDA.G hInputBuf
.4 >LDA.G hInputFile
bne .5
jsr CS.RUN.OPENINPUT
bcc .1 scan for any other args
@ -124,15 +126,7 @@ CS.RUN
.7 >LDA.G hOutputFile
beq .99
>LDYAI 256
>SYSCALL getmem
bcs .9
>STYA ZPBufPtr
txa
>STA.G hBuf
>LDA.G BMP.BPP
>LDA.G BMP.Header+S.BMP.BPP
cmp #1
beq CS.RUN.1
jmp CS.RUN.24
@ -140,176 +134,234 @@ CS.RUN
CS.RUN.1 lda #S.BM.F.BBP1
>STA.G PIX.Header+S.BM.F
>LDA.G PIX.Header+S.BM.W
sta ZPBMPRowBytes
sta ZPPIXRowBytes
* >LDA.G PIX.Header+S.BM.W
* sta ZPBMPRowBytes
* sta ZPPIXRowBytes
iny
lda (pData),y
sta ZPBMPRowBytes+1
sta ZPPIXRowBytes+1
* iny
* lda (pData),y
* sta ZPBMPRowBytes+1
* sta ZPPIXRowBytes+1
lda ZPBMPRowBytes
and #%00011111
beq .1
lda ZPBMPRowBytes
and #%11100000
clc
adc #%00100000
bcc .1
* lda ZPBMPRowBytes
* and #%00011111
* beq .1
* lda ZPBMPRowBytes
* and #%11100000
* clc
* adc #%00100000
* bcc .1
inc ZPBMPRowBytes+1
* inc ZPBMPRowBytes+1
*
*.1 lsr ZPBMPRowBytes+1
* ror
* lsr ZPBMPRowBytes+1
* ror
* lsr ZPBMPRowBytes+1
* ror
* sta ZPBMPRowBytes
.1 lsr ZPBMPRowBytes+1
ror
lsr ZPBMPRowBytes+1
ror
lsr ZPBMPRowBytes+1
ror
sta ZPBMPRowBytes
* lda ZPPIXRowBytes
* and #%00000111
* beq .2
* lda ZPPIXRowBytes
* and #%11111000
* clc
* adc #%00001000
* bcc .2
lda ZPPIXRowBytes
and #%00000111
beq .2
lda ZPPIXRowBytes
and #%11111000
clc
adc #%00001000
bcc .2
inc ZPPIXRowBytes+1
* inc ZPPIXRowBytes+1
.2 lsr ZPPIXRowBytes+1
ror
lsr ZPPIXRowBytes+1
ror
lsr ZPPIXRowBytes+1
ror
sta ZPPIXRowBytes
>STA.G PIX.Header+S.BM.RowBytes
*.2 lsr ZPPIXRowBytes+1
* ror
* lsr ZPPIXRowBytes+1
* ror
* lsr ZPPIXRowBytes+1
* ror
* sta ZPPIXRowBytes
* >STA.G PIX.Header+S.BM.RowBytes
lda ZPInputBufPtr
clc
adc ZPInputBufLen
sta ZPInputDataPtr
lda ZPInputBufPtr+1
adc ZPInputBufLen+1
sta ZPInputDataPtr+1
* lda ZPInputBufPtr
* clc
* adc ZPInputBufLen
* sta ZPInputDataPtr
* lda ZPInputBufPtr+1
* adc ZPInputBufLen+1
* sta ZPInputDataPtr+1
jsr CS.RUN.WRITE.HDR
bcs CS.RUN.RTS
* jsr CS.RUN.WRITE.HDR
* bcs CS.RUN.RTS
CS.RUN.1.LOOP inc ZPLineCount
bne .1
inc ZPLineCount+1
beq .8
*CS.RUN.1.LOOP inc ZPLineCount
* bne .1
* inc ZPLineCount+1
* beq .8
.1 lda ZPInputDataPtr
sec
sbc ZPBMPRowBytes
sta ZPInputDataPtr
lda ZPInputDataPtr+1
sbc ZPBMPRowBytes+1
sta ZPInputDataPtr+1
*.1 lda ZPInputDataPtr
* sec
* sbc ZPBMPRowBytes
* sta ZPInputDataPtr
* lda ZPInputDataPtr+1
* sbc ZPBMPRowBytes+1
* sta ZPInputDataPtr+1
>LDYA ZPBufPtr
>STYA ZPPTR1
* >LDYA ZPBufPtr
* >STYA ZPPTR1
ldy #0
* ldy #0
.2 lda (ZPInputDataPtr),y
tax
lda TWIST,x
sta (ZPPTR1)
inc ZPPTR1
bne .3
*.2 lda (ZPInputDataPtr),y
* tax
* lda TWIST,x
* sta (ZPPTR1)
* inc ZPPTR1
* bne .3
inc ZPPTR1+1
* inc ZPPTR1+1
.3 iny
cpy ZPPIXRowBytes
bne .2
*.3 iny
* cpy ZPPIXRowBytes
* bne .2
>PUSHW ZPPIXRowBytes
>PUSHW ZPBufPtr
>LDA.G hOutputFile
>SYSCALL FWrite
bcs CS.RUN.RTS
* >PUSHW ZPPIXRowBytes
* >PUSHW ZPOutputBufPtr
* >LDA.G hOutputFile
* >SYSCALL FWrite
* bcs CS.RUN.RTS
bra CS.RUN.1.LOOP
* bra CS.RUN.1.LOOP
.8 >LDYA L.MSG.DONE
>SYSCALL puts
*.8 >LDYA L.MSG.DONE
* >SYSCALL puts
lda #0
sec
* 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
>LDA.G BMP.Header+S.BMP.W
asl
sta ZPInputRowBytes
>LDA.G BMP.Header+S.BMP.W+1
rol
sta ZPInputRowBytes+1
lda ZPInputRowBytes
clc
adc ZPInputBufPtr
>ADC.G BMP.Header+S.BMP.W
pha
lda ZPInputRowBytes+1
>ADC.G BMP.Header+S.BMP.W+1
tax
iny
lda (ZPInputBufPtr),y
adc ZPInputBufPtr+1
stx ZPInputBufPtr
sta ZPInputBufPtr+1
pla
bit #%00000011
beq .1
and #%11111100
clc
adc #4
bcc .1
inx
.1 sta ZPInputRowBytes
stx ZPInputRowBytes+1
>LDYA ZPInputRowBytes
>SYSCALL getmem
bcs CS.RUN.RTS
>STYA ZPInputBuf
txa
>STA.G hInputBuf
>LDA.G PIX.Header+S.BM.W+1
lsr
tax
>LDA.G PIX.Header+S.BM.W
ror
bcc .2
inc
bne .2
inx
.2 sta ZPOutputRowBytes
stx ZPOutputRowBytes+1
jsr CS.RUN.GetOutputBuf
jsr DEBUG.ClrScr
lda #0
sta ZPCntX
lda #0
lda #$ff
sta ZPCntY
CS.RUN.24.LOOP ldx #2
CS.RUN.24.LOOP inc ZPLineCount
bne .1
inc ZPLineCount+1
beq .8
.1 inc ZPCntY
lda #$ff
sta ZPCntX
jsr CS.RUN.READINPUT
bcs .9
lda ZPOutputBuf
sec
sbc ZPOutputRowBytes
sta ZPOutputBuf
lda ZPOutputBuf+1
sbc ZPOutputRowBytes+1
sta ZPOutputBuf+1
.2 inc ZPPixelCount
bne .3
inc ZPPixelCount+1
beq CS.RUN.24.LOOP
.3 inc ZPCntX
ldx #2
ldy #0
.1 lda (ZPInputBufPtr),y
.4 lda (ZPInputBufPtr),y
sta ZPPixel24,x
iny
dex
bpl .1
bpl .4
lda ZPInputBufPtr
clc
adc #3
sta ZPInputBufPtr
bcc .2
bcc .5
inc ZPInputBufPtr+1
.2 jsr CS.RUN.GetIndexInPalette
.5 jsr CS.RUN.GetNearestColor
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
bra .2
.8 jsr CS.RUN.WRITE
bcs .9
lda #0
sec
rts
.9 rts
*--------------------------------------
CS.RUN.GetIndexInPalette
CS.RUN.GetNearestColor
stz ZPPixelIndex16
lda #$ff
@ -334,7 +386,7 @@ CS.RUN.GetIndexInPalette
inc
.5 phx
*
sta ZBTmpB1
sta ZBTmpW
stz ZBTmpW+1
@ -403,36 +455,30 @@ CS.RUN.OPENINPUT
>PUSHBI 0 Type
>PUSHBI O.RDONLY
>LDYA ZPPtr1
>SYSCALL LoadFile
>SYSCALL fopen
bcs CS.RUN.GetIndexInPalette.RTS
>STYA ZPInputBufLen
>STA.G hInputFile
>PUSHWI S.BMP
>PUSHEA.G BMP.Header
>LDA.G hInputFile
>SYSCALL FRead
bcs CS.RUN.GetIndexInPalette.RTS
txa
>STA.G hInputBuf
>SYSCALL GetMemPtr
>STYA ZPInputBufPtr
>PUSHW ZPInputBufLen
>PUSHBI 2
>LDYA L.MSG.FILE.OK
>SYSCALL printf
lda (ZPInputBufPtr)
>LDA.G BMP.Header+S.BMP.SIG
cmp #'B'
bne .99
ldy #1
lda (ZPInputBufPtr),y
iny
lda (pData),y
cmp #'M'
bne .99
ldy #S.BMP.BPP+1
lda (ZPInputBufPtr),y
>LDA.G BMP.Header+S.BMP.BPP+1
bne .99
dey
lda (ZPInputBufPtr),y
>STA.G BMP.BPP
lda (pData),y
cmp #1
beq .1
@ -440,15 +486,13 @@ CS.RUN.OPENINPUT
bne .99
.1 >PUSHA
ldy #S.BMP.H
lda (ZPInputBufPtr),y
>LDA.G BMP.Header+S.BMP.H
>STA.G PIX.Header+S.BM.H
pha
eor #$ff
sta ZPLineCount
ldy #S.BMP.H+1
lda (ZPInputBufPtr),y
>LDA.G BMP.Header+S.BMP.H+1
>STA.G PIX.Header+S.BM.H+1
>PUSHA
eor #$ff
@ -457,13 +501,11 @@ CS.RUN.OPENINPUT
pla
>PUSHA
ldy #S.BMP.W
lda (ZPInputBufPtr),y
>LDA.G BMP.Header+S.BMP.W
>STA.G PIX.Header+S.BM.W
pha
ldy #S.BMP.W+1
lda (ZPInputBufPtr),y
>LDA.G BMP.Header+S.BMP.W+1
>STA.G PIX.Header+S.BM.W+1
>PUSHA
pla
@ -480,6 +522,24 @@ CS.RUN.OPENINPUT
sec
rts
*--------------------------------------
CS.RUN.READINPUT
>PUSHW ZPInputRowBytes
>PUSHW ZPInputBuf
>LDA.G hInputFile
>SYSCALL FRead
bcs .9
>LDYA ZPInputBuf
>STYA ZPInputBufPtr
>LDA.G BMP.Header+S.BMP.W
eor #$ff
sta ZPPixelCount
>LDA.G BMP.Header+S.BMP.W+1
eor #$ff
sta ZPPixelCount+1
.9 rts
*--------------------------------------
CS.RUN.CREATEOUTPUT
>PUSHWI 0 Aux type
>PUSHBI $CB PIX Type
@ -490,17 +550,62 @@ CS.RUN.CREATEOUTPUT
>STA.G hOutputFile
.9 rts
*--------------------------------------
CS.RUN.WRITE.HDR
>PUSHWI S.BM
CS.RUN.GetOutputBuf
stz ZPPtr1
stz ZPPtr1+1
ldy ZPLineCount
ldx ZPLineCount+1
.1 iny
bne .2
inx
beq .8
.2 lda ZPPtr1
clc
adc ZPOutputRowBytes
sta ZPPtr1
lda ZPPtr1+1
adc ZPOutputRowBytes+1
sta ZPPtr1+1
bra .1
.8 lda ZPPtr1
>STA.G OutputDataLen
clc
adc ZPOutputBuf
sta ZPOutputBuf
lda ZPPtr1+1
>STA.G OutputDataLen+1
adc ZPOutputBuf+1
sta ZPOutputBuf+1
clc
rts
*--------------------------------------
CS.RUN.WRITE >PUSHWI S.BM
>PUSHEA.G PIX.Header
>LDA.G hOutputFile
>SYSCALL FWrite
rts
bcs .9
>PUSHW.G OutputDataLen
>PUSHW ZPOutputBuf
>LDA.G hOutputFile
>SYSCALL FWrite
.9 rts
*--------------------------------------
CS.RUN.WRITE.BUF
.9 rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT >LDA.G hBuf
CS.QUIT >LDA.G hOutputBuf
beq .1
>SYSCALL FreeMem
@ -509,6 +614,11 @@ CS.QUIT >LDA.G hBuf
>SYSCALL FreeMem
.2 >LDA.G hOutputFile
beq .3
>SYSCALL fclose
.3 >LDA.G hInputFile
beq .8
>SYSCALL fclose
@ -542,16 +652,28 @@ DEBUG.ClrScr sta SETMIXED
bpl .1
rts
*--------------------------------------
DEBUG.PLOT pha
DEBUG.PLOT php
sei
pha
lda ZPCntX
cmp #80
bcs .9
lsr
tay
sta CLRPAGE2
bcs .1 CS = main
sta SETPAGE2
.1 lda ZPCntY
cmp #40
bcs .9
lda #39
sec
sbc ZPCntY
lsr
tax
lda SCR.BASEL,x
@ -570,6 +692,11 @@ DEBUG.PLOT pha
.2 ora (ZPPTR1),y
sta (ZPPTR1),y
sta CLRPAGE2
plp
rts
.9 pla
plp
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
@ -583,28 +710,44 @@ OptionList >PSTR "Vv"
OptionVars .DA #bVerbose,#bVerbose
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, %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
*--------------------------------------
*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.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 930B7c00 RED
.HS 1f35D300 DARK.BLUE
.HS bb36ff00 PURPLE
.HS 00760c00 DARK.GREEN
.HS 7e7e7e00 DARK.GRAY
.HS 07a8e000 BLUE
.HS b5afff00 LIGHT.BLUE
.HS 624c0000 BROWN
.HS f9561d00 ORANGE
.HS 9c9c9c00 LIGHT.GRAY
.HS ff81ec00 PINK
.HS 43c80000 LIGHT.GREEN
.HS dccd1600 YELLOW
.HS 5df78400 AQUA
.HS ffffff00 WHITE
*--------------------------------------
PALETTE.BGR .HS 00000000 BLACK
@ -627,13 +770,15 @@ PALETTE.BGR .HS 00000000 BLACK
.DUMMY
.OR 0
DS.START
PIX.Header .BS S.BM
BMP.BPP .BS 1
ArgCount .BS 1
bVerbose .BS 1
hInputFile .BS 1
hInputBuf .BS 1
hOutputFile .BS 1
bVerbose .BS 1
hBuf .BS 1
hOutputBuf .BS 1
OutputDataLen .BS 2
BMP.Header .BS S.BMP
PIX.Header .BS S.BM
DS.END
.ED
*--------------------------------------

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

BIN
test.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

BIN
test2.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB