mirror of
https://github.com/thrust26/6502-QR-code-generator.git
synced 2024-12-27 19:29:35 +00:00
added capacity calculation
added a few comments to demo
This commit is contained in:
parent
eefc158261
commit
8a1cec8a92
@ -4,7 +4,6 @@
|
|||||||
|
|
||||||
IF QR_VERSION = 1 ;{
|
IF QR_VERSION = 1 ;{
|
||||||
QR_SIZE = 21 ; 21x21 QR code
|
QR_SIZE = 21 ; 21x21 QR code
|
||||||
QR_CAPACITY = 26
|
|
||||||
IF QR_LEVEL = 0
|
IF QR_LEVEL = 0
|
||||||
QR_DEGREE = 7 ; for version 1, level L QR codes
|
QR_DEGREE = 7 ; for version 1, level L QR codes
|
||||||
ENDIF
|
ENDIF
|
||||||
@ -21,7 +20,6 @@ QR_DEGREE = 17 ; for version 1, level H QR codes
|
|||||||
|
|
||||||
IF QR_VERSION = 2
|
IF QR_VERSION = 2
|
||||||
QR_SIZE = 25 ; 25x25 QR code
|
QR_SIZE = 25 ; 25x25 QR code
|
||||||
QR_CAPACITY = 44
|
|
||||||
IF QR_LEVEL = 0
|
IF QR_LEVEL = 0
|
||||||
QR_DEGREE = 10 ; for version 2, level L QR codes
|
QR_DEGREE = 10 ; for version 2, level L QR codes
|
||||||
ENDIF
|
ENDIF
|
||||||
@ -38,7 +36,6 @@ QR_DEGREE = 28 ; for version 2, level H QR codes
|
|||||||
|
|
||||||
IF QR_VERSION = 3 ;{
|
IF QR_VERSION = 3 ;{
|
||||||
QR_SIZE = 29 ; 29x29 QR code
|
QR_SIZE = 29 ; 29x29 QR code
|
||||||
QR_CAPACITY = 70
|
|
||||||
IF QR_LEVEL = 0
|
IF QR_LEVEL = 0
|
||||||
QR_DEGREE = 15 ; for version 3, level L QR codes
|
QR_DEGREE = 15 ; for version 3, level L QR codes
|
||||||
ENDIF
|
ENDIF
|
||||||
@ -52,6 +49,17 @@ QR_DEGREE = 26 ; for version 3, level M QR codes
|
|||||||
ENDIF
|
ENDIF
|
||||||
ENDIF ;}
|
ENDIF ;}
|
||||||
|
|
||||||
|
; Calculate capacity based on version
|
||||||
|
_QR_VAL SET (QR_VERSION * 16 + 128) * QR_VERSION + 64
|
||||||
|
IF QR_VERSION >= 2
|
||||||
|
_QR_NUM_ALIGN = QR_VERSION / 7 + 2
|
||||||
|
_QR_VAL SET _QR_VAL - ((25 * _QR_NUM_ALIGN - 10) * _QR_NUM_ALIGN - 55)
|
||||||
|
IF QR_VERSION >= 7
|
||||||
|
_QR_VAL SET _QR_VAL - 36
|
||||||
|
ENDIF
|
||||||
|
ENDIF
|
||||||
|
QR_CAPACITY = _QR_VAL / 8
|
||||||
|
|
||||||
QR_MAX_DATA = QR_CAPACITY - QR_DEGREE
|
QR_MAX_DATA = QR_CAPACITY - QR_DEGREE
|
||||||
|
|
||||||
QR_MODE = %0100 ; byte mode
|
QR_MODE = %0100 ; byte mode
|
||||||
@ -423,25 +431,18 @@ QR_TOTAL = QR_MAX_DATA + QR_DEGREE ; 44
|
|||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
MAC _DRAW_FORMAT
|
MAC _DRAW_FORMAT
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
IF QR_SINGLE_MASK = 0
|
IF QR_SINGLE_MASK = 0
|
||||||
.idx = tmpVars
|
.idx = tmpVars
|
||||||
|
|
||||||
ldy #QR_FORMATS-1
|
ldy #QR_FORMATS-1
|
||||||
.loopFormat
|
.loopFormat
|
||||||
sty .idx
|
sty .idx
|
||||||
cpy #8
|
cpy #8
|
||||||
; IF QR_SINGLE_MASK
|
|
||||||
; lda #%10101000
|
|
||||||
; and BitMask,y
|
|
||||||
; bcc .lowFormat
|
|
||||||
; lda #%00100100
|
|
||||||
; ELSE
|
|
||||||
ldx qrPattern
|
ldx qrPattern
|
||||||
lda FormatLo,x
|
lda FormatLo,x
|
||||||
and BitMask,y
|
and BitMask,y
|
||||||
bcc .lowFormat
|
bcc .lowFormat
|
||||||
lda FormatHi,x
|
lda FormatHi,x
|
||||||
; ENDIF
|
|
||||||
and BitMask-8,y
|
and BitMask-8,y
|
||||||
.lowFormat
|
.lowFormat
|
||||||
beq .skipFormat
|
beq .skipFormat
|
||||||
@ -458,7 +459,7 @@ QR_TOTAL = QR_MAX_DATA + QR_DEGREE ; 44
|
|||||||
.skipFormat
|
.skipFormat
|
||||||
dey
|
dey
|
||||||
bpl .loopFormat
|
bpl .loopFormat
|
||||||
ENDIF
|
ENDIF
|
||||||
ENDM
|
ENDM
|
||||||
|
|
||||||
; ********** The user macros start here: **********
|
; ********** The user macros start here: **********
|
||||||
@ -656,7 +657,7 @@ FormatHi
|
|||||||
ENDIF
|
ENDIF
|
||||||
ENDIF ; /QR_SINGLE_MASK = 0
|
ENDIF ; /QR_SINGLE_MASK = 0
|
||||||
|
|
||||||
; position of the 15 type information bits
|
; positions of the 15 type information bits
|
||||||
FormatX1
|
FormatX1
|
||||||
.byte 0, 1, 2, 3, 4, 5, 7, 8
|
.byte 0, 1, 2, 3, 4, 5, 7, 8
|
||||||
.byte 8, 8, 8, 8, 8, 8, 8
|
.byte 8, 8, 8, 8, 8, 8, 8
|
||||||
@ -723,7 +724,7 @@ Generator ; data in reversed order!
|
|||||||
.byte $0d, $1c, $09, $fc
|
.byte $0d, $1c, $09, $fc
|
||||||
ENDIF
|
ENDIF
|
||||||
|
|
||||||
QR_DEGREE = . - Generator ; verify data
|
QR_DEGREE = . - Generator ; verify data size
|
||||||
|
|
||||||
ECHO "QR Code encoding data:", [. - QRCodeData]d, "bytes"
|
ECHO "QR Code encoding data:", [. - QRCodeData]d, "bytes"
|
||||||
_QR_TOTAL SET _QR_TOTAL + . - QRCodeData
|
_QR_TOTAL SET _QR_TOTAL + . - QRCodeData
|
||||||
|
@ -34,15 +34,17 @@
|
|||||||
|
|
||||||
BASE_ADR = $f000
|
BASE_ADR = $f000
|
||||||
|
|
||||||
NTSC = 1
|
NTSC = 1 ; 0 = PAL50
|
||||||
|
|
||||||
; QR Code Generator Switches
|
; QR Code Generator Switches
|
||||||
QR_VERSION = 2 ; 1, 2 or 3 (TODO 1 and 3)
|
QR_VERSION = 2 ; 1, 2 or 3 (TODO 1 and 3)
|
||||||
QR_LEVEL = 1 ; 0 (L), 1 (M), 2 (Q) and 3 (H))
|
QR_LEVEL = 1 ; 0 (L), 1 (M), 2 (Q) and 3 (H))
|
||||||
QR_OVERLAP = 1 ; overlaps input and output data to save RAM (0 not tested!)
|
|
||||||
QR_SINGLE_MASK = 0 ; (-255) if 1 uses only 1 of the 8 mask pattern
|
|
||||||
QR_PADDING = 1 ; (+22) add padding bytes
|
QR_PADDING = 1 ; (+22) add padding bytes
|
||||||
|
|
||||||
|
; Atari 2600 specific QR settings (set to 0 for other platforms)
|
||||||
|
QR_OVERLAP = 1 ; overlaps input and output data to save RAM (defined for version 2 only!)
|
||||||
|
QR_SINGLE_MASK = 0 ; (-255) if 1 uses only 1 of the 8 mask pattern
|
||||||
|
|
||||||
IF QR_VERSION = 1 || QR_VERSION = 3
|
IF QR_VERSION = 1 || QR_VERSION = 3
|
||||||
ECHO ""
|
ECHO ""
|
||||||
ECHO "ERROR: Version", [QR_VERSION]d, "unsupported by demo code"
|
ECHO "ERROR: Version", [QR_VERSION]d, "unsupported by demo code"
|
||||||
@ -148,6 +150,7 @@ CODE_LST_SIZE = . - qrCodeLst
|
|||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
MAC _BLACK_FUNC
|
MAC _BLACK_FUNC
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
|
; blacks all function/alignment and timing pattern
|
||||||
ldx #CODE_LST_SIZE-1
|
ldx #CODE_LST_SIZE-1
|
||||||
.loopBlack
|
.loopBlack
|
||||||
lda BlackGfx,x
|
lda BlackGfx,x
|
||||||
@ -161,6 +164,7 @@ CODE_LST_SIZE = . - qrCodeLst
|
|||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
MAC _BLACK_LEFT
|
MAC _BLACK_LEFT
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
|
; blacks all function/alignment and timing pattern of the left column
|
||||||
ldx #NUM_FIRST + QR_SIZE-1-8
|
ldx #NUM_FIRST + QR_SIZE-1-8
|
||||||
.loopBlackLeft
|
.loopBlackLeft
|
||||||
lda LeftBlack+8,x
|
lda LeftBlack+8,x
|
||||||
@ -172,6 +176,7 @@ CODE_LST_SIZE = . - qrCodeLst
|
|||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
MAC _BLACK_MIDDLE
|
MAC _BLACK_MIDDLE
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
|
; blacks all function/alignment and timing pattern of the middle column
|
||||||
ldx #QR_SIZE-1
|
ldx #QR_SIZE-1
|
||||||
.loopBlackMiddle
|
.loopBlackMiddle
|
||||||
lda GRP1Black,x
|
lda GRP1Black,x
|
||||||
@ -183,6 +188,7 @@ CODE_LST_SIZE = . - qrCodeLst
|
|||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
MAC _BLACK_RIGHT
|
MAC _BLACK_RIGHT
|
||||||
;-----------------------------------------------------------
|
;-----------------------------------------------------------
|
||||||
|
; blacks all function/alignment and timing pattern of the right column
|
||||||
ldx #QR_SIZE
|
ldx #QR_SIZE
|
||||||
.loopBlackRight
|
.loopBlackRight
|
||||||
lda GRP0RBlack-1,x
|
lda GRP0RBlack-1,x
|
||||||
@ -264,7 +270,7 @@ DrawScreen SUBROUTINE
|
|||||||
.enterLoop
|
.enterLoop
|
||||||
sta .tmpFirst ; 3 = 8
|
sta .tmpFirst ; 3 = 8
|
||||||
.endFirst ; @70/69
|
.endFirst ; @70/69
|
||||||
ldy #2 ; 2
|
ldy #-2 ; 2
|
||||||
.loopBlock
|
.loopBlock
|
||||||
sta WSYNC ; 3 @75/74
|
sta WSYNC ; 3 @75/74
|
||||||
;---------------------------------------
|
;---------------------------------------
|
||||||
@ -276,15 +282,15 @@ DrawScreen SUBROUTINE
|
|||||||
sta GRP1 ; 3
|
sta GRP1 ; 3
|
||||||
lda grp0LLst,x ; 4
|
lda grp0LLst,x ; 4
|
||||||
sta GRP0 ; 3
|
sta GRP0 ; 3
|
||||||
SLEEP 17-7 ;10
|
SLEEP 10 ;10 = 24
|
||||||
lda grp0RLst,x ; 4
|
lda grp0RLst,x ; 4
|
||||||
dey ; 2 = 30
|
iny ; 2
|
||||||
cpy #$01 ; 2
|
cpy #1 ; 2
|
||||||
bne .isff ; 2/3
|
bcc .isZero ; 2/3
|
||||||
BIT_B ; 1
|
BIT_B ; 1
|
||||||
.isff
|
.isZero
|
||||||
dex ; 2
|
dex ; 2
|
||||||
sta GRP0 ; 3 = 10 @48
|
sta GRP0 ; 3 = 16 @48
|
||||||
bcs .loopBlock ; 2/3
|
bcs .loopBlock ; 2/3
|
||||||
bpl .loopKernel ; 3/2=5/4
|
bpl .loopKernel ; 3/2=5/4
|
||||||
sta WSYNC
|
sta WSYNC
|
||||||
@ -572,7 +578,7 @@ _QR_TOTAL SET _QR_TOTAL + . - FunctionModulesData
|
|||||||
|
|
||||||
.byte " QR Code Generator Demo V0.3 - (C)2021 Thomas Jentzsch "
|
.byte " QR Code Generator Demo V0.3 - (C)2021 Thomas Jentzsch "
|
||||||
|
|
||||||
; messages MUST not be longer than 26 bytes for version 2, level M!
|
; messages MUST NOT be longer than 26 bytes for version 2, level M!
|
||||||
; Galadriel:
|
; Galadriel:
|
||||||
MessageTbl
|
MessageTbl
|
||||||
Message0
|
Message0
|
||||||
@ -631,4 +637,5 @@ MessagePtrHi
|
|||||||
ECHO "----------------------------------------"
|
ECHO "----------------------------------------"
|
||||||
ECHO "QR Code total:", [_QR_TOTAL]d, "bytes"
|
ECHO "QR Code total:", [_QR_TOTAL]d, "bytes"
|
||||||
ECHO ""
|
ECHO ""
|
||||||
ECHO "QR Code Version, Level (Degree): ", [QR_VERSION]d, ",", [QR_LEVEL]d, "(", [QR_DEGREE]d, ")"
|
ECHO "QR Code Version", [QR_VERSION]d, ", Level (Degree)", [QR_LEVEL]d, "(", [QR_DEGREE]d, "), Capacity", [QR_CAPACITY]d, "bytes"
|
||||||
|
ECHO " -> Message Space", [QR_CAPACITY-QR_DEGREE-2]d, "bytes"
|
||||||
|
Loading…
Reference in New Issue
Block a user