mirror of
https://github.com/option8/A2QR.git
synced 2024-06-10 00:29:53 +00:00
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
|
ROMINIT EQU $FB2F
|
||||||
ROMSETKBD EQU $FE89
|
ROMSETKBD EQU $FE89
|
||||||
ROMSETVID EQU $FE93
|
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
|
* Let's get this party started
|
||||||
|
@ -75,10 +112,21 @@ ROMSETVID EQU $FE93
|
||||||
|
|
||||||
|
|
||||||
SETUP JSR ROMINIT ; GR/HGR off, Text page 1
|
SETUP JSR ROMINIT ; GR/HGR off, Text page 1
|
||||||
LDA #$00
|
STA LORES
|
||||||
STA LORES ; low res graphics mode
|
STA HIRESOFF
|
||||||
STA MIXCLR
|
STA MIXCLR
|
||||||
JSR CLEARSCREEN ; BLANK SCREEN
|
|
||||||
|
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
|
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
|
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
|
*** NEXTQRBYTE
|
||||||
|
@ -568,6 +685,10 @@ MASKDONE1 RTS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**************************************************
|
**************************************************
|
||||||
* blanks the screen quickly.
|
* blanks the screen quickly.
|
||||||
* CLOBBERS A,Y
|
* CLOBBERS A,Y
|
||||||
|
@ -624,6 +745,58 @@ CHECKCHAR ; FOR EACH CHARACTER OF THE MESSAGE, CHECK FOR FF
|
||||||
RTS ; OOPS. INVALID CHARACTER.
|
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 \
|
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
|
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
|
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"
|
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:"
|
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."
|
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."
|
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$
|
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
|
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
|
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
|
80 IF (M$ = "A" OR M$="a") THEN M$ = "A": POKE 8,32: GOTO 800
|
||||||
700 HOME : VTAB 8
|
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
|
730 GOTO 1000
|
||||||
800 HOME : VTAB 8
|
800 HOME : VTAB 8
|
||||||
810 PRINT "ALPHANUMERIC MODE:": PRINT "Enter up to 114 characters:"
|
810 PRINT "ALPHANUMERIC MODE:": PRINT "ENTER UP TO 114 CHARACTERS:"
|
||||||
820 VTAB 16: INVERSE: PRINT "Valid characters:" : PRINT "A-Z 0-9 $ % * + - . / : (space)": NORMAL
|
820 VTAB 16: INVERSE: PRINT "VALID CHARACTERS:" : PRINT "A-Z 0-9 $ % * + - . / : (SPACE)": NORMAL
|
||||||
1000 VTAB 12: INPUT ">";S$
|
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
|
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
|
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
Block a user