diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index dcec1305..6312cf94 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/BIN/SH.S.CMD.txt b/BIN/SH.S.CMD.txt index 34fd95ea..93421931 100644 --- a/BIN/SH.S.CMD.txt +++ b/BIN/SH.S.CMD.txt @@ -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 *-------------------------------------- diff --git a/BMP2PIX.S.txt b/BMP2PIX.S.txt index ee7d8580..4551e1a7 100644 --- a/BMP2PIX.S.txt +++ b/BMP2PIX.S.txt @@ -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 diff --git a/PALETTE.bmp b/PALETTE.bmp new file mode 100644 index 00000000..62658f22 Binary files /dev/null and b/PALETTE.bmp differ diff --git a/X.TWIST.G..txt b/X.TWIST.G..txt index 3cd3eafa..b1223dc0 100644 --- a/X.TWIST.G..txt +++ b/X.TWIST.G..txt @@ -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