mirror of
https://github.com/option8/A2QR.git
synced 2024-06-10 00:29:53 +00:00
Merge pull request #1 from peterferrie/main
a bit faster, explicit memory init
This commit is contained in:
commit
4e1e69e8a3
224
QR.6502
224
QR.6502
|
@ -112,45 +112,33 @@ GETMESSAGE LDA MESSAGE,Y ; 0
|
||||||
STA $FC
|
STA $FC
|
||||||
JSR MULT45 ; RESULT IN FE,FD
|
JSR MULT45 ; RESULT IN FE,FD
|
||||||
CLC
|
CLC
|
||||||
INY ; 1
|
LDA MESSAGE+1,Y
|
||||||
LDA MESSAGE,Y
|
|
||||||
ADC $FD
|
ADC $FD
|
||||||
STA $FD
|
STA STORAGE+1,Y ; LO BYTE
|
||||||
BCC STOREPAIR
|
|
||||||
INC $FE ; RESULT IN FE,FD
|
|
||||||
STOREPAIR DEY ; 0
|
|
||||||
LDA $FE
|
LDA $FE
|
||||||
|
ADC #0 ; RESULT IN FE,FD
|
||||||
STA STORAGE,Y ; HI BYTE
|
STA STORAGE,Y ; HI BYTE
|
||||||
INY ; 1
|
INY ; 1
|
||||||
LDA $FD
|
|
||||||
STA STORAGE,Y ; LO BYTE
|
|
||||||
INY ; 2
|
INY ; 2
|
||||||
CPY MESSAGELENGTH
|
CPY MESSAGELENGTH
|
||||||
BEQ BUILDQR
|
BCC GETMESSAGE
|
||||||
BCS BUILDQR
|
BCS BUILDQR
|
||||||
JMP GETMESSAGE
|
|
||||||
|
|
||||||
|
|
||||||
**************************************************
|
**************************************************
|
||||||
* Byte mode = ROR each byte in message 4x, append to mode/length bits.
|
* Byte mode = ROR each byte in message 4x, append to mode/length bits.
|
||||||
**************************************************
|
**************************************************
|
||||||
BYTEMODE LDY #$00
|
BYTEMODE LDY #$FF
|
||||||
FINDLENGTH LDX MESSAGE,Y
|
FINDLENGTH INY
|
||||||
BEQ FOUNDLENGTH
|
LDX MESSAGE,Y
|
||||||
INY
|
BNE FINDLENGTH
|
||||||
JMP FINDLENGTH
|
|
||||||
FOUNDLENGTH STY MESSAGELENGTH
|
FOUNDLENGTH STY MESSAGELENGTH
|
||||||
LDX MESSAGELENGTH
|
LDA MESSAGE-1,Y ; LAST BYTE OF MESSAGE
|
||||||
DEX
|
ASL ; LO 4 BITS
|
||||||
LDA MESSAGE,X ; LAST BYTE OF MESSAGE
|
ASL
|
||||||
AND #$0F ; LO 4 BITS
|
ASL
|
||||||
CLC
|
ASL
|
||||||
ROL
|
STA STORAGE,Y ; 4 BITS AT END OF CONVERTED MESSAGE
|
||||||
ROL
|
|
||||||
ROL
|
|
||||||
ROL
|
|
||||||
INX
|
|
||||||
STA STORAGE,X ; 4 BITS AT END OF CONVERTED MESSAGE
|
|
||||||
|
|
||||||
COPYMSG LDX #$0 ; COPY THE MESSAGE TO STORAGE
|
COPYMSG LDX #$0 ; COPY THE MESSAGE TO STORAGE
|
||||||
COPYBYTE LDA MESSAGE,X
|
COPYBYTE LDA MESSAGE,X
|
||||||
|
@ -163,12 +151,10 @@ COPYBYTE LDA MESSAGE,X
|
||||||
LDY #$04
|
LDY #$04
|
||||||
RORMSG LDX #$0
|
RORMSG LDX #$0
|
||||||
CLC
|
CLC
|
||||||
PHP
|
RORBYTE ROR STORAGE,X
|
||||||
RORBYTE PLP
|
|
||||||
ROR STORAGE,X
|
|
||||||
INX
|
INX
|
||||||
PHP ; PRESERVES CARRY
|
TXA ; DON'T USE CPX, PRESERVES CARRY
|
||||||
CPX MESSAGELENGTH ; BECAUSE CPX CLOBBERS IT
|
EOR MESSAGELENGTH
|
||||||
BNE RORBYTE
|
BNE RORBYTE
|
||||||
DEY
|
DEY
|
||||||
BNE RORMSG
|
BNE RORMSG
|
||||||
|
@ -183,7 +169,6 @@ BUILDQR
|
||||||
**************************************************
|
**************************************************
|
||||||
|
|
||||||
LDA MESSAGELENGTH ; NNNNXXXX
|
LDA MESSAGELENGTH ; NNNNXXXX
|
||||||
CLC
|
|
||||||
LDX MODE
|
LDX MODE
|
||||||
CPX #$40
|
CPX #$40
|
||||||
BEQ LSR4X
|
BEQ LSR4X
|
||||||
|
@ -203,32 +188,22 @@ LSR4X LSR
|
||||||
BNE DOALPHAMODE
|
BNE DOALPHAMODE
|
||||||
JMP DOBYTEMODE
|
JMP DOBYTEMODE
|
||||||
|
|
||||||
DOALPHAMODE AND #$1F ; 000NXXXX
|
DOALPHAMODE ; 000NXXXX
|
||||||
|
|
||||||
CLC
|
ASL
|
||||||
ROL ; <- 3X
|
ASL ; <- 3X
|
||||||
ROL
|
ASL ; NXXXX 000
|
||||||
ROL ; NXXXX 000
|
|
||||||
|
|
||||||
LDX #$0
|
ORA STORAGE ; 3 BITS OF FIRST HI BYTE
|
||||||
ORA STORAGE,X ; 3 BITS OF FIRST HI BYTE
|
|
||||||
INY
|
INY
|
||||||
STA MPINTS,Y
|
STA MPINTS,Y
|
||||||
INX
|
|
||||||
INY
|
INY
|
||||||
LDA STORAGE,X ; FIRST LO BYTE
|
LDA STORAGE+1 ; FIRST LO BYTE
|
||||||
STA MPINTS,Y ; HOW CONVENIENT. FIRST PAIR OF BYTES ENDS ON AN 8X BOUNDARY.
|
JSR NEXTQRBYTE ; HOW CONVENIENT. FIRST PAIR OF BYTES ENDS ON AN 8X BOUNDARY.
|
||||||
INY ; SET UP NEXT BYTE OF QR
|
; ALSO INITIALIZES BITCOUNTER
|
||||||
|
|
||||||
* FOR EACH REMAINING PAIR OF BYTES, GET 3 BITS FROM HI, 8 BITS FROM LO
|
|
||||||
LDA #$08
|
|
||||||
STA BITCOUNTER ; CURRENT BIT OF QR ENCODING CYCLE
|
|
||||||
|
|
||||||
LDA MPINTS,Y ; CURRENT BYTE OF QR DATA
|
|
||||||
|
|
||||||
LDX #$02 ; WHICH BYTE OF MESSAGE
|
LDX #$02 ; WHICH BYTE OF MESSAGE
|
||||||
|
|
||||||
NEXTMBYTE ROL STORAGE,X ; HI BYTE - ROL 5X
|
NEXTMBYTE ASL STORAGE,X ; HI BYTE - ROL 5X
|
||||||
ROL STORAGE,X
|
ROL STORAGE,X
|
||||||
ROL STORAGE,X
|
ROL STORAGE,X
|
||||||
ROL STORAGE,X
|
ROL STORAGE,X
|
||||||
|
@ -291,39 +266,31 @@ BIT10 ROL STORAGE,X
|
||||||
JSR NEXTQRBYTE
|
JSR NEXTQRBYTE
|
||||||
NEXTHIBYTE INX
|
NEXTHIBYTE INX
|
||||||
CPX MESSAGELENGTH ; up to 114 BYTES OF MESSAGE
|
CPX MESSAGELENGTH ; up to 114 BYTES OF MESSAGE
|
||||||
BEQ PADBYTES
|
|
||||||
BCS PADBYTES
|
BCS PADBYTES
|
||||||
JMP NEXTMBYTE ; 3 BITS OF HI BYTE AND 8 OF LO BYTE ROTATED INTO QR BYTESTREAM
|
JMP NEXTMBYTE ; 3 BITS OF HI BYTE AND 8 OF LO BYTE ROTATED INTO QR BYTESTREAM
|
||||||
|
|
||||||
|
|
||||||
DOBYTEMODE AND #$0F ; A=MESSAGELENGTH. 0000XXXX
|
DOBYTEMODE ; A=MESSAGELENGTH. 0000XXXX
|
||||||
CLC
|
ASL
|
||||||
ROL
|
ASL
|
||||||
ROL
|
ASL
|
||||||
ROL
|
ASL ; XXXX____
|
||||||
ROL ; XXXX____
|
|
||||||
ORA STORAGE,Y
|
ORA STORAGE,Y
|
||||||
INY
|
BYTEMODELOOP INY
|
||||||
BYTEMODELOOP STA MPINTS,Y
|
|
||||||
CPY MESSAGELENGTH
|
|
||||||
BEQ LASTBYTE
|
|
||||||
LDA STORAGE,Y
|
|
||||||
INY
|
|
||||||
JMP BYTEMODELOOP
|
|
||||||
|
|
||||||
LASTBYTE LDA STORAGE,Y
|
|
||||||
INY
|
|
||||||
STA MPINTS,Y
|
STA MPINTS,Y
|
||||||
JMP PADLOOP
|
LDA STORAGE,Y
|
||||||
|
CPY MESSAGELENGTH
|
||||||
|
BCC BYTEMODELOOP
|
||||||
|
BEQ BYTEMODELOOP
|
||||||
|
BCS PADLOOP
|
||||||
|
|
||||||
* pad to 80 bytes with 0s and 11101100 00010001 (#$EC #$11)
|
* pad to 80 bytes with 0s and 11101100 00010001 (#$EC #$11)
|
||||||
|
|
||||||
PADBYTES LDX BITCOUNTER ; ALWAYS TERMINATE WITH 4 ZEROES
|
PADBYTES LDX BITCOUNTER ; ALWAYS TERMINATE WITH 4 ZEROES
|
||||||
PADBYTES2 CLC
|
db $C9 ; MASK ASL
|
||||||
|
PADBYTES2 ASL
|
||||||
DEC BITCOUNTER
|
DEC BITCOUNTER
|
||||||
BMI PADBITS
|
BPL PADBYTES2
|
||||||
ROL
|
|
||||||
JMP PADBYTES2
|
|
||||||
PADBITS STA MPINTS,Y ; STORE INCOMPLETE BYTE WITH TRAILING ZEROS
|
PADBITS STA MPINTS,Y ; STORE INCOMPLETE BYTE WITH TRAILING ZEROS
|
||||||
CPX #$04 ; NEEDS TO BE AT LEAST 4 FOR TERMINATOR
|
CPX #$04 ; NEEDS TO BE AT LEAST 4 FOR TERMINATOR
|
||||||
BCS PADLOOP
|
BCS PADLOOP
|
||||||
|
@ -342,42 +309,42 @@ PADLOOP INY ; NEXT QR BYTE
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
DOECCBYTES LDX #$0 ; OH, THIS GON' BE FUN.
|
DOECCBYTES LDX #$50 ; OH, THIS GON' BE FUN.
|
||||||
LDA #$50
|
|
||||||
STA BYTECOUNTER ; HOW MANY TIMES HAVE WE BEEN HERE BEFORE?
|
STX BYTECOUNTER ; HOW MANY TIMES HAVE WE BEEN HERE BEFORE?
|
||||||
COPYBYTES LDA MPINTS,X ; COPY COMPLETE MESSAGE BYTES TO STORAGE SPACE AT $8000
|
COPYBYTES LDA MPINTS,X ; COPY COMPLETE MESSAGE BYTES TO STORAGE SPACE AT $8000
|
||||||
STA STORAGE,X
|
STA STORAGE,X
|
||||||
INX
|
ECCSTEP1
|
||||||
CPX #$51 ; DONE ALL 80 BYTES
|
MSGTOEXP TAY ; convert integers in message to exponents
|
||||||
BNE COPYBYTES
|
|
||||||
|
|
||||||
|
|
||||||
ECCSTEP1 LDX #$0 ; convert integers in message to exponents
|
|
||||||
|
|
||||||
MSGTOEXP LDY MPINTS,X ; convert integers in message to exponents
|
|
||||||
LDA INTTOEXP,Y
|
LDA INTTOEXP,Y
|
||||||
STA MPEXP,X
|
STA MPEXP,X
|
||||||
INX
|
LDA #0
|
||||||
CPX #$51
|
STA SCRATCH,X
|
||||||
BNE MSGTOEXP ; MSG EXPONENTS IN MPEXP
|
DEX ; DONE ALL 80 BYTES
|
||||||
|
BPL COPYBYTES
|
||||||
|
STA XORRESULT+$50
|
||||||
|
STA XORRESULT+$51
|
||||||
|
STA XORRESULT+$52 ; SKIPZERO READS OOB
|
||||||
|
|
||||||
|
|
||||||
ECCSTEP2 LDX #$0 ; Multiply the Generator Polynomial by the Lead EXPONENT of the Message Polynomial
|
ECCSTEP2 LDX #$0 ; Multiply the Generator Polynomial by the Lead EXPONENT of the Message Polynomial
|
||||||
STEP2LOOP LDA MPEXP ; mp first exponent
|
STEP2LOOP LDA MPEXP ; mp first exponent
|
||||||
CLC
|
CLC
|
||||||
ADC GENERATOR,X ; ADDED TO each gp exponent
|
ADC GENERATOR,X ; ADDED TO each gp exponent
|
||||||
|
ADC #0 ; MOD 255 ON ROLLOVER > FF ADDS CARRY
|
||||||
TAY
|
TAY
|
||||||
BCC SCRATCHINT ; MOD 255 ON ROLLOVER > FF ADDS CARRY
|
|
||||||
INY
|
|
||||||
SCRATCHINT LDA EXPTOINT,Y ; convert EXPONENTS in RESULT to INTEGERS
|
SCRATCHINT LDA EXPTOINT,Y ; convert EXPONENTS in RESULT to INTEGERS
|
||||||
STA SCRATCH,X ; STORE IN WORK AREA 2
|
STA SCRATCH,X ; STORE IN WORK AREA 2
|
||||||
|
ECCSTEP3 EOR MPINTS,X ; INTEGER TERMS OF MESSAGE
|
||||||
|
STA XORRESULT,X ; RESULT FEEDS INTO STEP 1
|
||||||
INX
|
INX
|
||||||
CPX #$15
|
CPX #$15
|
||||||
BNE STEP2LOOP ; INTEGER RESULTS IN SCRATCH
|
BNE STEP2LOOP ; INTEGER RESULTS IN SCRATCH
|
||||||
|
|
||||||
ECCSTEP3 LDX #$0 ; XOR the result with the message polynomial (INTEGERS)
|
; XOR the result with the message polynomial (INTEGERS)
|
||||||
XORBYTE LDA SCRATCH,X ; INTEGER RESULT OF MULTIPLICATION
|
|
||||||
EOR MPINTS,X ; INTEGER TERMS OF MESSAGE
|
XORBYTE LDA MPINTS,X ; INTEGER TERMS OF MESSAGE
|
||||||
STOREXOR STA XORRESULT,X ; RESULT FEEDS INTO STEP 1
|
STA XORRESULT,X ; RESULT FEEDS INTO STEP 1
|
||||||
INX
|
INX
|
||||||
CPX #$51
|
CPX #$51
|
||||||
BNE XORBYTE
|
BNE XORBYTE
|
||||||
|
@ -410,23 +377,21 @@ XORTOEXP STA MPINTS,Y ; RESULT INTEGERS IN MPINTS
|
||||||
BNE XORTOEXP ; RESULT EXPONENTS IN MPEXP
|
BNE XORTOEXP ; RESULT EXPONENTS IN MPEXP
|
||||||
|
|
||||||
DEC BYTECOUNTER ; DO ECC MATH UNTIL THERE'S 20 REMAINDERS
|
DEC BYTECOUNTER ; DO ECC MATH UNTIL THERE'S 20 REMAINDERS
|
||||||
BEQ ECCDONE
|
BNE ECCSTEP2
|
||||||
JMP ECCSTEP2
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ECCDONE ; XORRESULT CONTAINS 20 ECC BYTES
|
ECCDONE ; XORRESULT CONTAINS 20 ECC BYTES
|
||||||
LDX #$1
|
LDX #$15
|
||||||
LDY #$50
|
LDY #$64
|
||||||
BUILDMSG LDA XORRESULT,X
|
BUILDMSG LDA XORRESULT,X
|
||||||
STA STORAGE,Y
|
STA STORAGE,Y
|
||||||
INX
|
DEY
|
||||||
INY
|
DEX
|
||||||
CPX #$16
|
|
||||||
BNE BUILDMSG ; STORAGE NOW HAS FULL 100 BYTES OF MESSAGE
|
BNE BUILDMSG ; STORAGE NOW HAS FULL 100 BYTES OF MESSAGE
|
||||||
|
|
||||||
RESETBYTE LDA #$0 ; SET UP FOR BYTE/BIT TRACKING
|
RESETBYTE ;;LDA #$0 ; SET UP FOR BYTE/BIT TRACKING
|
||||||
STA BYTECOUNTER
|
;;STA BYTECOUNTER
|
||||||
RESETBIT LDA #$8
|
RESETBIT LDA #$8
|
||||||
STA BITCOUNTER
|
STA BITCOUNTER
|
||||||
|
|
||||||
|
@ -434,9 +399,10 @@ RESETBIT LDA #$8
|
||||||
LDA #$20 ; ROW=33 (0-#$20)
|
LDA #$20 ; ROW=33 (0-#$20)
|
||||||
STA ROW ; COLUMN=33 (0-#$20)
|
STA ROW ; COLUMN=33 (0-#$20)
|
||||||
STA COLUMN
|
STA COLUMN
|
||||||
NEXTZIG CLC ; QRLINE=ROW/2
|
NEXTZIG ; QRLINE=ROW/2
|
||||||
LDA ROW
|
LDA ROW
|
||||||
LSR
|
LSR
|
||||||
|
PHP
|
||||||
TAX ; LINE NUM OF BLANK QR = ROW/2
|
TAX ; LINE NUM OF BLANK QR = ROW/2
|
||||||
LDA QRLINESLO,X
|
LDA QRLINESLO,X
|
||||||
STA LOBYTE
|
STA LOBYTE
|
||||||
|
@ -456,8 +422,7 @@ LONIBBLE AND #$0F
|
||||||
BNE ZAG ; OCCUPIED?
|
BNE ZAG ; OCCUPIED?
|
||||||
JSR SETPIXEL ; GET A BIT FROM THE MESSAGE, AND DEPOSIT INTO THE PIXEL
|
JSR SETPIXEL ; GET A BIT FROM THE MESSAGE, AND DEPOSIT INTO THE PIXEL
|
||||||
ZAG DEY ; ZIG IS DONE/OCCUPIED, TIME TO ZAG - ONE COLUMN TO THE LEFT
|
ZAG DEY ; ZIG IS DONE/OCCUPIED, TIME TO ZAG - ONE COLUMN TO THE LEFT
|
||||||
LDA ROW ; LOST THE CARRY, SO CHECK THE ROW AGAIN
|
PLP ; RESTORE THE CARRY
|
||||||
LSR
|
|
||||||
LDA (LOBYTE),Y ; GET CURRENT QR PIXEL
|
LDA (LOBYTE),Y ; GET CURRENT QR PIXEL
|
||||||
BCC LONIBBLE2
|
BCC LONIBBLE2
|
||||||
AND #$F0
|
AND #$F0
|
||||||
|
@ -482,14 +447,12 @@ DIVBY4 LSR ; DIVIDE STARTING COLUMN BY 2
|
||||||
GOINGUP LDA ROW
|
GOINGUP LDA ROW
|
||||||
BEQ UTURN ; TURN THE CORNER AT ROW 0
|
BEQ UTURN ; TURN THE CORNER AT ROW 0
|
||||||
DEC ROW
|
DEC ROW
|
||||||
LDA COLUMN
|
|
||||||
JMP NEXTZIG ;
|
JMP NEXTZIG ;
|
||||||
|
|
||||||
GOINGDOWN LDA ROW
|
GOINGDOWN LDA ROW
|
||||||
CMP #$20 ; LAST ROW?
|
CMP #$20 ; LAST ROW?
|
||||||
BEQ UTURN ; TURN THE CORNER, ROW 32
|
BEQ UTURN ; TURN THE CORNER, ROW 32
|
||||||
INC ROW ; OTHERWISE, NEXT ROW
|
INC ROW ; OTHERWISE, NEXT ROW
|
||||||
LDA COLUMN
|
|
||||||
JMP NEXTZIG
|
JMP NEXTZIG
|
||||||
|
|
||||||
UTURN LDA COLUMN
|
UTURN LDA COLUMN
|
||||||
|
@ -500,7 +463,6 @@ CKCOLUMN CMP #$01 ; IS IT #$01? THEN WE'RE DONE HERE.
|
||||||
BEQ DODISPLAY
|
BEQ DODISPLAY
|
||||||
DEC COLUMN
|
DEC COLUMN
|
||||||
DEC COLUMN ; TWO COLUMNS OVER FOR NEXT ZIG
|
DEC COLUMN ; TWO COLUMNS OVER FOR NEXT ZIG
|
||||||
LDA COLUMN
|
|
||||||
JMP NEXTZIG
|
JMP NEXTZIG
|
||||||
|
|
||||||
|
|
||||||
|
@ -550,28 +512,20 @@ NEXTQRBYTE STA MPINTS,Y ; STORE COMPLETE BYTE
|
||||||
*** SETPIXEL
|
*** SETPIXEL
|
||||||
|
|
||||||
SETPIXEL CMP #$01 ; ACC IS GOING TO BE EITHER 01 OR 10
|
SETPIXEL CMP #$01 ; ACC IS GOING TO BE EITHER 01 OR 10
|
||||||
BEQ SETLONIBBLE
|
PHP
|
||||||
|
|
||||||
JSR GETNEXTBIT ; LOADS TEMP WITH PROPER F OR 0
|
JSR GETNEXTBIT ; LOADS TEMP WITH PROPER F OR 0
|
||||||
; Y HAS COLUMN OFFSET
|
; Y HAS COLUMN OFFSET
|
||||||
; (LOBYTE) HAS ROW
|
; (LOBYTE) HAS ROW
|
||||||
SETHINIBBLE LDA TEMP
|
EOR (LOBYTE),Y ; MIX BITS
|
||||||
AND #$F0
|
PLP
|
||||||
STA TEMP
|
BEQ SETLONIBBLE
|
||||||
|
|
||||||
LDA (LOBYTE),Y ; GET CURRENT QR PIXEL
|
SETHINIBBLE AND #$F0 ; SEPARATE BITS
|
||||||
AND #$0F ; CLEAR HI NIBBLE
|
|
||||||
JMP SETNIBBLE
|
JMP SETNIBBLE
|
||||||
|
|
||||||
SETLONIBBLE JSR GETNEXTBIT ; LOADS TEMP WITH PROPER F OR 0
|
SETLONIBBLE AND #$0F ; SEPARATE BITS
|
||||||
LDA TEMP
|
|
||||||
AND #$0F
|
|
||||||
STA TEMP
|
|
||||||
|
|
||||||
LDA (LOBYTE),Y ; GET CURRENT QR PIXEL
|
SETNIBBLE EOR (LOBYTE),Y ; MERGE BITS
|
||||||
AND #$F0 ; CLEAR LO NIBBLE
|
|
||||||
|
|
||||||
SETNIBBLE EOR TEMP
|
|
||||||
STA (LOBYTE),Y ; REPLACE QR PIXEL.
|
STA (LOBYTE),Y ; REPLACE QR PIXEL.
|
||||||
RTS
|
RTS
|
||||||
*** SETPIXEL
|
*** SETPIXEL
|
||||||
|
@ -583,32 +537,28 @@ GETNEXTBIT LDA BITCOUNTER ; WHERE WERE WE IN THE ROL SHENANIGANS?
|
||||||
LDA #$08 ; OR ARE WE?
|
LDA #$08 ; OR ARE WE?
|
||||||
STA BITCOUNTER ; IF SO...
|
STA BITCOUNTER ; IF SO...
|
||||||
INC BYTECOUNTER ; NEXT BYTE
|
INC BYTECOUNTER ; NEXT BYTE
|
||||||
NEXTBIT LDX BYTECOUNTER ; ARE WE DONE WITH ALL 100 BYTES?
|
NEXTBIT LDA TEMP
|
||||||
|
LDX BYTECOUNTER ; ARE WE DONE WITH ALL 100 BYTES?
|
||||||
CPX #$64
|
CPX #$64
|
||||||
BEQ MASKDONE
|
BEQ MASKDONE1
|
||||||
DEC BITCOUNTER
|
DEC BITCOUNTER
|
||||||
|
|
||||||
|
|
||||||
CLC
|
ASL STORAGE,X
|
||||||
ROL STORAGE,X
|
|
||||||
BCC WHITEPIXEL
|
|
||||||
BLACKPIXEL LDA #$00
|
|
||||||
BEQ COLORPIXEL ; BRANCH ALWAYS
|
|
||||||
WHITEPIXEL LDA #$FF
|
WHITEPIXEL LDA #$FF
|
||||||
COLORPIXEL STA TEMP
|
BLACKPIXEL ADC #$00
|
||||||
|
COLORPIXEL TAX
|
||||||
|
|
||||||
DOMASK ; JFC ON A POGO STICK! GOTTA MASK THE BITS!
|
DOMASK ; JFC ON A POGO STICK! GOTTA MASK THE BITS!
|
||||||
; MASK PATTERN 1: IF (row) mod 2 == 0 THEN FLIP BIT.
|
; MASK PATTERN 1: IF (row) mod 2 == 0 THEN FLIP BIT.
|
||||||
LDA ROW
|
LDA ROW
|
||||||
LSR
|
LSR
|
||||||
|
TXA
|
||||||
BCS MASKDONE ; ROW IS ODD, ALL DONE.
|
BCS MASKDONE ; ROW IS ODD, ALL DONE.
|
||||||
|
|
||||||
LDA TEMP ; ROW IS EVEN, FLIP THE BIT
|
EOR #$FF ; ROW IS EVEN, FLIP THE BIT
|
||||||
BNE FLIPBIT
|
MASKDONE STA TEMP
|
||||||
DEC TEMP ; TEMP IS ZERO, SET TO FF
|
MASKDONE1 RTS
|
||||||
RTS
|
|
||||||
FLIPBIT INC TEMP ; TEMP IS FF, SET TO ZERO
|
|
||||||
MASKDONE RTS
|
|
||||||
*** GETNEXTBIT
|
*** GETNEXTBIT
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user