406 lines
6.6 KiB
Plaintext
406 lines
6.6 KiB
Plaintext
;
|
|
; S:GREDIT2
|
|
;
|
|
FZ EPZ $80
|
|
;
|
|
FGXCOOR EPZ FZ
|
|
FGYCOOR EPZ FZ+1
|
|
FGHIRES EPZ FZ+2 ; 3
|
|
FGBYTE EPZ FZ+4
|
|
FGBCOUNT EPZ FZ+5
|
|
FGRAMCRD EPZ FZ+6
|
|
FGHIRES2 EPZ FZ+8
|
|
FGWIDTH EPZ FZ+10
|
|
;
|
|
; Frame grabber CAPTURE
|
|
;
|
|
FRAMGRAB JSR FRAMPICT
|
|
SEC
|
|
ROR SCALING
|
|
LDX #96
|
|
LDY #70
|
|
STX FGXCOOR
|
|
STY FGYCOOR
|
|
;
|
|
; Invert current position and
|
|
; set countdown timer
|
|
;
|
|
FRAMLOOP ASL KEEPTRAK
|
|
LDX FGXCOOR
|
|
LDY FGYCOOR
|
|
JSR DEVICEST
|
|
FRAMLOP2 JSR FLSHINIT
|
|
JSR DRAWBOX
|
|
INC KEEPTRAK
|
|
;
|
|
^0 LDY #2
|
|
JSR DEVICERD
|
|
BCS >1
|
|
ASL
|
|
BMI >1
|
|
BCS FRAMDON2
|
|
JSR FRAMDEV
|
|
;
|
|
^1 JSR POLEKEY
|
|
BMI >3
|
|
;
|
|
^2 DEC FLASHLO
|
|
BNE <0
|
|
DEC FLASHHI
|
|
BPL <0
|
|
BMI FRAMLOP2
|
|
;
|
|
FRAMDONE PLA
|
|
PLA
|
|
FRAMDON2 JSR RESTSCRN
|
|
JSR CAPBOX
|
|
CLC
|
|
RTS
|
|
;
|
|
^3 PHA
|
|
JSR RESTSCRN
|
|
PLA
|
|
LDX FGXCOOR
|
|
LDY FGYCOOR
|
|
JSR >1
|
|
STX FGXCOOR
|
|
STY FGYCOOR
|
|
JMP FRAMLOOP
|
|
;
|
|
^1 JSR PARSE
|
|
.DA #'I',FRAMUP
|
|
.DA #$0B,FRAMUP
|
|
.DA #'M',FRAMDOWN
|
|
.DA #$0A,FRAMDOWN
|
|
.DA #'J',FRAMLEFT
|
|
.DA #$08,FRAMLEFT
|
|
.DA #'K',FRAMRITE
|
|
.DA #$15,FRAMRITE
|
|
;
|
|
.DA #'N',FRAMNEG
|
|
;
|
|
.DA #'D',FRAMDUBL
|
|
.DA #'A',FRAM2LFT
|
|
.DA #'S',FRAM2RIT
|
|
;
|
|
.DA #$1B,FRAMESC
|
|
.DA #$0D,FRAMDONE
|
|
;
|
|
BRK
|
|
RTS
|
|
;
|
|
FRAMESC PLA
|
|
PLA
|
|
SEC
|
|
RTS
|
|
;
|
|
; Invert screen
|
|
;
|
|
FRAMNEG LDA FRAMIMD0
|
|
EOR #$7F
|
|
STA FRAMIMD0
|
|
STA FRAMIMD1
|
|
STA FRAMIMD2
|
|
;
|
|
; Pop stack, draw screen and return
|
|
; to main loop
|
|
;
|
|
FRAMWERD JSR FRAMPICT
|
|
FRAMWRD2 PLA
|
|
PLA
|
|
JMP FRAMLOOP
|
|
;-----------
|
|
;
|
|
; Toggle double-hires option
|
|
;
|
|
; If not 128k, then ignore
|
|
;
|
|
FRAMDUBL LDA HAS128K
|
|
BPL FRAMWERD
|
|
;
|
|
LDA FRAM2FLG
|
|
EOR #$80
|
|
STA FRAM2FLG
|
|
BNE FRAMWERD
|
|
;
|
|
; Move double hires picture right
|
|
;
|
|
FRAM2RIT LDX FRAM2POS
|
|
DEX
|
|
BPL FRAM2ST
|
|
;
|
|
FRAM2ERR JSR BOOP
|
|
JMP FRAMWRD2
|
|
;
|
|
; Move double hires left
|
|
;
|
|
FRAM2LFT LDX FRAM2POS
|
|
INX
|
|
CPX #21
|
|
BGE FRAM2ERR
|
|
;
|
|
FRAM2ST STX FRAM2POS
|
|
JMP FRAMWERD
|
|
;
|
|
FRAM2FLG HEX 01
|
|
FRAM2POS HEX 00
|
|
;-----------
|
|
;
|
|
; Up
|
|
;
|
|
FRAMUP DEY
|
|
CPY #$FF
|
|
BNE >0
|
|
LDY #YSCRNMAX-1
|
|
;
|
|
; Down
|
|
;
|
|
FRAMDOWN INY
|
|
CPY #YSCRNMAX+1
|
|
BLT >0
|
|
LDY #0
|
|
^0 RTS
|
|
;
|
|
; Left
|
|
;
|
|
FRAMLEFT DEX
|
|
CPX #$FF
|
|
BNE >0
|
|
LDX #XSCRNMAX-1
|
|
;
|
|
; Right
|
|
;
|
|
FRAMRITE INX
|
|
CPX #XSCRNMAX+1
|
|
BLT >0
|
|
LDX #0
|
|
^0 RTS
|
|
;------------
|
|
;
|
|
; Check to see if device moved
|
|
;
|
|
FRAMDEV CPX FGXCOOR
|
|
BNE >0
|
|
CPY FGYCOOR
|
|
BNE >0
|
|
FRAMRTS RTS
|
|
;
|
|
; Device moved
|
|
;
|
|
^0 STX >1+1
|
|
STY >2+1
|
|
JSR RESTSCRN
|
|
^1 LDX #00
|
|
^2 LDY #00
|
|
;
|
|
; Device input clamping
|
|
;
|
|
BIT FRAMRTS
|
|
CPX #XSCRNMAX+1
|
|
BLT >3
|
|
CLV
|
|
LDX #XSCRNMAX
|
|
^3 CPY #YSCRNMAX+1
|
|
BLT >4
|
|
CLV
|
|
LDY #YSCRNMAX
|
|
^4 STX FGXCOOR
|
|
STY FGYCOOR
|
|
BVS FRAMRTS
|
|
JMP DEVICEST
|
|
;
|
|
KEEPTRAK BRK
|
|
;
|
|
; Remove box if necessary
|
|
;
|
|
RESTSCRN LSR KEEPTRAK
|
|
ROR
|
|
ASL KEEPTRAK
|
|
ROL
|
|
BCC FRAMRTS
|
|
;-----------
|
|
;
|
|
; Draw box
|
|
;
|
|
DRAWBOX LDY FGYCOOR
|
|
STY TMP1
|
|
LDY #0
|
|
;
|
|
DRAWBOXL JSR YBASCALC
|
|
LDX #0
|
|
^0 JSR BITCALC
|
|
EOR (FGHIRES),Y
|
|
STA (FGHIRES),Y
|
|
CPX #87
|
|
BEQ >2
|
|
LDA TMP0
|
|
BEQ >1
|
|
CMP #51
|
|
BEQ >1
|
|
LDX #86
|
|
^1 INX
|
|
BNE <0
|
|
;
|
|
^2 LDY TMP0
|
|
INY
|
|
CPY #52
|
|
BLT DRAWBOXL
|
|
RTS
|
|
;
|
|
; Capture box into UNDOBUFF
|
|
;
|
|
CAPBOX LDY #UNDOBUFF
|
|
LDA /UNDOBUFF
|
|
STY TMP2
|
|
STA TMP3
|
|
;
|
|
LDY FGYCOOR
|
|
STY TMP1
|
|
LDY #0
|
|
STY FGBCOUNT
|
|
;
|
|
CAPBOXL JSR YBASCALC
|
|
LDX #0
|
|
^0 JSR BITCALC
|
|
AND (FGHIRES),Y
|
|
CMP #1
|
|
LDA #0
|
|
ROL
|
|
EOR #1
|
|
LSR
|
|
ROL FGBYTE
|
|
INC FGBCOUNT
|
|
LDA FGBCOUNT
|
|
EOR #8
|
|
BNE >1
|
|
;
|
|
STA FGBCOUNT
|
|
LDA FGBYTE
|
|
LDY #0
|
|
STA (TMP2),Y
|
|
INC TMP2
|
|
BNE >1
|
|
INC TMP3
|
|
;
|
|
^1 INX
|
|
CPX #88
|
|
BLT <0
|
|
;
|
|
^2 LDY TMP0
|
|
INY
|
|
CPY #52
|
|
BLT CAPBOXL
|
|
RTS
|
|
;
|
|
; Calc Ybase
|
|
;
|
|
YBASCALC STY TMP0
|
|
LDY TMP1
|
|
INC TMP1
|
|
LDA YBASELO,Y
|
|
STA FGHIRES
|
|
LDA YBASEHI,Y
|
|
STA FGHIRES+1
|
|
RTS
|
|
;
|
|
; Calculate hires X coor
|
|
;
|
|
BITCALC TXA
|
|
CLC
|
|
ADC FGXCOOR
|
|
TAY
|
|
BCC >1
|
|
;
|
|
LDA XBIT+256,Y
|
|
PHA
|
|
LDA XBYTE+256,Y
|
|
TAY
|
|
PLA
|
|
BNE >2
|
|
;
|
|
^1 LDA XBIT,Y
|
|
PHA
|
|
LDA XBYTE,Y
|
|
TAY
|
|
PLA
|
|
^2 RTS
|
|
;-----------
|
|
;
|
|
; Get picture from RAMcard
|
|
;
|
|
FRAMPICT LDA #0
|
|
FRAMPCT2 PHA
|
|
;
|
|
; Transfer line
|
|
;
|
|
TAY
|
|
LDA YBASELO,Y
|
|
STA FGHIRES
|
|
STA FGHIRES2
|
|
STA FGRAMCRD
|
|
LDA YBASEHI,Y
|
|
STA FGHIRES+1
|
|
STA FGHIRES2+1
|
|
LDY #0
|
|
AND #$10
|
|
BEQ >0
|
|
LDY #8
|
|
^0 LDA $C083,Y
|
|
LDA $C083,Y
|
|
LDA FGHIRES+1
|
|
AND #$0F
|
|
ORA #$D0
|
|
STA FGRAMCRD+1
|
|
;
|
|
LDA #39
|
|
BIT FRAM2FLG
|
|
BMI >2
|
|
;
|
|
; Regular hires
|
|
;
|
|
TAY
|
|
^1 LDA (FGRAMCRD),Y
|
|
EOR #00
|
|
FRAMIMD0 = *-1
|
|
STA (FGHIRES),Y
|
|
DEY
|
|
BPL <1
|
|
BMI >4
|
|
;
|
|
; Double hires
|
|
;
|
|
^2 LSR
|
|
STA FGWIDTH
|
|
LDY FRAM2POS
|
|
LDX #0
|
|
STA $C001
|
|
^3 BIT $C055
|
|
LDA (FGHIRES2),Y
|
|
BIT $C054
|
|
EOR #00
|
|
FRAMIMD1 = *-1
|
|
STA (FGHIRES,X)
|
|
INC FGHIRES
|
|
LDA (FGRAMCRD),Y
|
|
EOR #00
|
|
FRAMIMD2 = *-1
|
|
STA (FGHIRES,X)
|
|
INC FGHIRES
|
|
INY
|
|
DEC FGWIDTH
|
|
BPL <3
|
|
STA $C000
|
|
;
|
|
; Next line
|
|
;
|
|
^4 PLA
|
|
CLC
|
|
ADC #1
|
|
CMP #$C0
|
|
BLT FRAMPCT2
|
|
RTS
|
|
;
|
|
;
|
|
;
|
|
ICL "S:GREDIT3"
|