mirror of https://github.com/option8/A2QR.git
Detects 128k, and does double-low-res if available
This commit is contained in:
parent
cb5f9b8943
commit
d1d72c37e1
183
QR.6502
183
QR.6502
|
@ -63,6 +63,43 @@ RDPAGE2 EQU $C01C ; high bit set if on page2
|
|||
ROMINIT EQU $FB2F
|
||||
ROMSETKBD EQU $FE89
|
||||
ROMSETVID EQU $FE93
|
||||
SLOT3STATUS EQU $C017 ; bit 7 only
|
||||
MACHINEID EQU $FBB3
|
||||
|
||||
|
||||
80STOREOFF EQU $C000
|
||||
80STOREON EQU $C001
|
||||
80STORE EQU $C018 ; R7
|
||||
|
||||
80COLOFF EQU $C00C
|
||||
80COLON EQU $C00D
|
||||
80COL EQU $C01F ; R7
|
||||
|
||||
TEXTOFF EQU $C050
|
||||
TEXTON EQU $C051
|
||||
TEXT EQU $C01A ; R7
|
||||
|
||||
MIXEDOFF EQU $C052
|
||||
MIXEDON EQU $C053
|
||||
MIXED EQU $C01B ; R7
|
||||
|
||||
PAGE2OFF EQU $C054 ; MAIN
|
||||
PAGE2ON EQU $C055 ; AUX
|
||||
PAGE2 EQU $C01C ; R7
|
||||
|
||||
HIRESOFF EQU $C056
|
||||
HIRESON EQU $C057
|
||||
HIRES EQU $C01D ; R7
|
||||
|
||||
|
||||
RAMRDOFF EQU $C002 ; MAIN
|
||||
RAMRDON EQU $C003 ; AUX
|
||||
RAMRD EQU $C013 ; R7
|
||||
|
||||
RAMWRTOFF EQU $C004 ; MAIN
|
||||
RAMWRTON EQU $C005 ; AUX
|
||||
RAMWR EQU $C014 ; R7
|
||||
|
||||
|
||||
**************************************************
|
||||
* Let's get this party started
|
||||
|
@ -75,10 +112,21 @@ ROMSETVID EQU $FE93
|
|||
|
||||
|
||||
SETUP JSR ROMINIT ; GR/HGR off, Text page 1
|
||||
LDA #$00
|
||||
STA LORES ; low res graphics mode
|
||||
STA MIXCLR
|
||||
JSR CLEARSCREEN ; BLANK SCREEN
|
||||
STA LORES
|
||||
STA HIRESOFF
|
||||
STA MIXCLR
|
||||
|
||||
JSR Has128K ; do we have DLR?
|
||||
BCC SETUPDONE
|
||||
STA SET80VID ; double low-res mode
|
||||
STA SETAN3 ; double low-res mode
|
||||
|
||||
STA 80STOREON
|
||||
STA PAGE2OFF ; write to MAIN mem, display MAIN DLR page
|
||||
|
||||
|
||||
|
||||
SETUPDONE JSR CLEARSCREEN ; BLANK SCREEN
|
||||
|
||||
|
||||
**************************************************
|
||||
|
@ -468,7 +516,10 @@ CKCOLUMN CMP #$01 ; IS IT #$01? THEN WE'RE DONE HERE.
|
|||
JMP NEXTZIG
|
||||
|
||||
|
||||
DODISPLAY LDX #$0 ; COPY THE QR BYTES TO THE SCREEN.
|
||||
DODISPLAY BIT 80STORE ; 80 column mode, do double-lo-res
|
||||
BMI DODLR
|
||||
|
||||
DOLR LDX #$0 ; COPY THE QR BYTES TO THE SCREEN.
|
||||
|
||||
|
||||
NEXTLINE LDY #$20
|
||||
|
@ -496,8 +547,74 @@ QRDONE JMP QRDONE
|
|||
|
||||
|
||||
|
||||
DODLR ; MOVE GENERATED PIXELS TO DOUBLE LO RES SCREEN
|
||||
LDX #$0
|
||||
|
||||
PAGE1LINE
|
||||
LDA QRLINESHI,X ; QRLINESHI/LO,X INTO LO/HIBYTE
|
||||
STA HIBYTE
|
||||
LDA QRLINESLO,X
|
||||
STA LOBYTE
|
||||
|
||||
INX ; LO RES SCREEN LO/HI INTO COLUMN/ROW
|
||||
LDA LoLineTableL,X ; TARGET DOWN ONE ROW FOR WHITE SPACE AT TOP
|
||||
STA ROW
|
||||
LDA LoLineTableH,X
|
||||
STA COLUMN
|
||||
INC ROW
|
||||
INC ROW ; WHITE SPACE ON LEFT
|
||||
|
||||
LDY #$1F ; 33 COLUMNS
|
||||
|
||||
NEXTP1COL LDA (LOBYTE),Y ; GET QR PIXEL
|
||||
PHA
|
||||
TYA
|
||||
LSR
|
||||
TAY
|
||||
PLA
|
||||
STA (ROW),Y ; STORE AT SCREEN PIXEL
|
||||
TYA
|
||||
ROL
|
||||
TAY
|
||||
DEY
|
||||
DEY
|
||||
BPL NEXTP1COL
|
||||
CPX #$11
|
||||
BNE PAGE1LINE
|
||||
|
||||
LDX #$0
|
||||
STA PAGE2ON
|
||||
PAGE2LINE
|
||||
LDA QRLINESHI,X ; QRLINESHI/LO,X INTO LO/HIBYTE
|
||||
STA HIBYTE
|
||||
LDA QRLINESLO,X
|
||||
STA LOBYTE
|
||||
|
||||
INX ; LO RES SCREEN LO/HI INTO COLUMN/ROW
|
||||
LDA LoLineTableL,X ; TARGET DOWN ONE ROW FOR WHITE SPACE AT TOP
|
||||
STA ROW
|
||||
LDA LoLineTableH,X
|
||||
STA COLUMN
|
||||
INC ROW
|
||||
INC ROW ; WHITE SPACE ON LEFT
|
||||
LDY #$20
|
||||
NEXTP2COL LDA (LOBYTE),Y ; GET QR PIXEL
|
||||
PHA
|
||||
TYA
|
||||
LSR
|
||||
TAY
|
||||
PLA
|
||||
STA (ROW),Y ; STORE AT SCREEN PIXEL
|
||||
TYA
|
||||
ROL
|
||||
TAY
|
||||
DEY
|
||||
DEY
|
||||
BPL NEXTP2COL
|
||||
CPX #$11
|
||||
BNE PAGE2LINE
|
||||
|
||||
JMP QRDONE
|
||||
|
||||
|
||||
*** NEXTQRBYTE
|
||||
|
@ -568,6 +685,10 @@ MASKDONE1 RTS
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
**************************************************
|
||||
* blanks the screen quickly.
|
||||
* CLOBBERS A,Y
|
||||
|
@ -624,6 +745,58 @@ CHECKCHAR ; FOR EACH CHARACTER OF THE MESSAGE, CHECK FOR FF
|
|||
RTS ; OOPS. INVALID CHARACTER.
|
||||
|
||||
|
||||
**************************************************
|
||||
* DO WE HAVE ACCESS TO 80 COLS/DLR MODE?
|
||||
* ADAPTED FROM:
|
||||
* https://github.com/a2-4am/4cade/blob/master/src/hw.memcheck.a
|
||||
**************************************************
|
||||
|
||||
Has128K
|
||||
bit $C082
|
||||
sta 80STOREOFF
|
||||
lda MACHINEID
|
||||
cmp #$A0
|
||||
beq IIE ; Spectrum ED
|
||||
cmp #$06
|
||||
bne @no ; earlier than //e -> no 128K
|
||||
IIE lda SLOT3STATUS
|
||||
bmi @no ; no 80-column card -> no 128K
|
||||
ldx @checklen
|
||||
LOOPC lda @checker,x
|
||||
sta $80,x
|
||||
dex
|
||||
bpl LOOPC
|
||||
jmp $80 ; check if auxmem actually works
|
||||
@checker
|
||||
lda #$EE
|
||||
sta RAMWRTON
|
||||
sta RAMRDON
|
||||
sta $0C00
|
||||
sta $0800
|
||||
lda $0C00
|
||||
cmp #$EE
|
||||
bne @no
|
||||
asl $0C00
|
||||
asl
|
||||
cmp $0C00
|
||||
bne @no
|
||||
cmp $0800
|
||||
bne @yes
|
||||
@no clc
|
||||
db #$24
|
||||
@yes sec
|
||||
@finish sta RAMWRTOFF
|
||||
sta RAMRDOFF
|
||||
rts
|
||||
|
||||
@checklen db *-@checker
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
DS \
|
||||
QRLINE0 HEX 00,F0,F0,F0,F0,F0,00,FF,00,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,FF,00,F0,F0,F0,F0,F0,00
|
||||
QRLINE1 HEX 00,FF,00,00,00,FF,00,FF,FF,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,FF,00,FF,00,00,00,FF,00
|
||||
|
|
24
qrcode.bas
24
qrcode.bas
|
@ -1,18 +1,18 @@
|
|||
10 HOME : PRINT "One moment..." : PRINT CHR$ (4)"BLOAD QRCODE,A$2000"
|
||||
20 VTAB 8: PRINT "This program creates and displays a": PRINT "QR code of 33 by 33 pixels.": PRINT "": PRINT "Choose an encoding type:"
|
||||
30 HTAB 4: VTAB 14: PRINT "[A] for Alphanumeric.": HTAB 4: PRINT "Up to 114 characters. Limited": HTAB 4: PRINT "to upper case letters, numbers,": HTAB 4: PRINT "$ % * + - . / : and spaces."
|
||||
40 HTAB 4: VTAB 19: PRINT "[B] for Bytes.": HTAB 4: PRINT "Limited to 78 ASCII characters."
|
||||
50 VTAB 22: INPUT "Enter A or B :";M$
|
||||
60 IF NOT (M$ = "A" OR M$ = "B" or M$="a" or M$="b") THEN GOTO 50
|
||||
70 IF (M$ = "B" or M$="b") THEN M$ = "B": POKE 8,64: GOTO 700
|
||||
80 IF (M$ = "A" or M$="a") THEN M$ = "A": POKE 8,32: GOTO 800
|
||||
10 HOME : PRINT "ONE MOMENT..." : PRINT CHR$ (4)"BLOAD QRCODE,A$2000"
|
||||
20 VTAB 8: PRINT "THIS PROGRAM CREATES AND DISPLAYS A": PRINT "QR CODE OF 33 BY 33 PIXELS.": PRINT "": PRINT "CHOOSE AN ENCODING TYPE:"
|
||||
30 HTAB 4: VTAB 14: PRINT "[A] FOR ALPHANUMERIC.": HTAB 4: PRINT "UP TO 114 CHARACTERS. LIMITED": HTAB 4: PRINT "TO UPPER CASE LETTERS, NUMBERS,": HTAB 4: PRINT "$ % * + - . / : AND SPACES."
|
||||
40 HTAB 4: VTAB 19: PRINT "[B] FOR BYTES.": HTAB 4: PRINT "LIMITED TO 78 ASCII CHARACTERS."
|
||||
50 VTAB 22: INPUT "ENTER A OR B :";M$
|
||||
60 IF NOT (M$ = "A" OR M$ = "B" OR M$="A" OR M$="B") THEN GOTO 50
|
||||
70 IF (M$ = "B" OR M$="b") THEN M$ = "B": POKE 8,64: GOTO 700
|
||||
80 IF (M$ = "A" OR M$="a") THEN M$ = "A": POKE 8,32: GOTO 800
|
||||
700 HOME : VTAB 8
|
||||
710 PRINT "BYTE MODE:": PRINT "Enter up to 78 ASCII characters:"
|
||||
710 PRINT "BYTE MODE:": PRINT "ENTER UP TO 78 ASCII CHARACTERS:"
|
||||
730 GOTO 1000
|
||||
800 HOME : VTAB 8
|
||||
810 PRINT "ALPHANUMERIC MODE:": PRINT "Enter up to 114 characters:"
|
||||
820 VTAB 16: INVERSE: PRINT "Valid characters:" : PRINT "A-Z 0-9 $ % * + - . / : (space)": NORMAL
|
||||
810 PRINT "ALPHANUMERIC MODE:": PRINT "ENTER UP TO 114 CHARACTERS:"
|
||||
820 VTAB 16: INVERSE: PRINT "VALID CHARACTERS:" : PRINT "A-Z 0-9 $ % * + - . / : (SPACE)": NORMAL
|
||||
1000 VTAB 12: INPUT ">";S$
|
||||
1010 if ((M$ = "A" and len(S$)>114) or (M$ = "B" and len(S$)>78)) then ? "Message too long.": goto 1000
|
||||
1010 IF ((M$ = "A" AND LEN(S$)>114) OR (M$ = "B" AND LEN(S$)>78)) THEN ? "MESSAGE TOO LONG.": GOTO 1000
|
||||
1020 CALL 8192 : REM IF THIS FAILS, THE MESSAGE CONTAINS SOMETHING OUTSIDE THE ALLOWED RANGE
|
||||
1030 HOME : VTAB 5: INVERSE : ? "INVALID CHARACTERS ENTERED. TRY AGAIN.": NORMAL :VTAB 8:GOTO 810
|
||||
|
|
BIN
qrcode.dsk
BIN
qrcode.dsk
Binary file not shown.
Loading…
Reference in New Issue