mirror of https://github.com/option8/flyover.git
Add files via upload
This commit is contained in:
parent
bca9930f78
commit
989c92ef9d
|
@ -0,0 +1,784 @@
|
|||
DSK CANYON
|
||||
|
||||
|
||||
**************************************************
|
||||
* To Do:
|
||||
* adjust perspective to lean forward/back
|
||||
* turning/sliding left/right
|
||||
* additional example with light/shadow?
|
||||
* Mode switch for demo purposes.
|
||||
**************************************************
|
||||
* Variables
|
||||
**************************************************
|
||||
TMP EQU $06 ; scratch
|
||||
LOBYTE EQU $00
|
||||
HIBYTE EQU $01
|
||||
|
||||
CHAR EQU $FC ; char/pixel to plot
|
||||
|
||||
BASELINE EQU $FB ; current plotrow to return to
|
||||
PLOTROW EQU $FE ; 0-47 (#00-#30)
|
||||
PLOTCOLUMN EQU $FF ; 0-39 (#00-#28)
|
||||
|
||||
ROLBYTE EQU $FA ; byte for perspective
|
||||
PROGRESS EQU $FD ; byte counter
|
||||
|
||||
CANYONDATALO EQU $02 ; pixel data starts
|
||||
CANYONDATAHI EQU $03 ; memory page
|
||||
|
||||
PERSPECTIVELO EQU $04 ; processing data starts
|
||||
PERSPECTIVEHI EQU $05 ;
|
||||
|
||||
SCREENDATALO EQU $07 ; displayed data starts
|
||||
SCREENDATAHI EQU $08 ; memory page
|
||||
|
||||
HEIGHTBYTE EQU $09 ; how tall to draw
|
||||
CDEND EQU $0A ; hi byte of data end
|
||||
|
||||
HORIZON EQU $0B ; for Demo
|
||||
|
||||
**************************************************
|
||||
* Apple Standard Memory Locations
|
||||
**************************************************
|
||||
CLRLORES EQU $F832
|
||||
LORES EQU $C050
|
||||
TXTSET EQU $C051
|
||||
MIXCLR EQU $C052
|
||||
MIXSET EQU $C053
|
||||
TXTPAGE1 EQU $C054
|
||||
TXTPAGE2 EQU $C055
|
||||
KEY EQU $C000
|
||||
C80STOREOF EQU $C000
|
||||
C80STOREON EQU $C001
|
||||
STROBE EQU $C010
|
||||
SPEAKER EQU $C030
|
||||
VBL EQU $C02E
|
||||
RDVBLBAR EQU $C019 ;not VBL (VBL signal low
|
||||
WAIT EQU $FCA8
|
||||
RAMWRTAUX EQU $C005
|
||||
RAMWRTMAIN EQU $C004
|
||||
SETAN3 EQU $C05E ;Set annunciator-3 output to 0
|
||||
SET80VID EQU $C00D ;enable 80-column display mode (WR-only)
|
||||
CLR80VID EQU $C00C
|
||||
HOME EQU $FC58 ; clear the text screen
|
||||
CH EQU $24 ; cursor Horiz
|
||||
CV EQU $25 ; cursor Vert
|
||||
VTAB EQU $FC22 ; Sets the cursor vertical position (from CV)
|
||||
COUT EQU $FDED ; Calls the output routine whose address is stored in CSW,
|
||||
; normally COUTI
|
||||
STROUT EQU $DB3A ;Y=String ptr high, A=String ptr low
|
||||
|
||||
ALTTEXT EQU $C055
|
||||
ALTTEXTOFF EQU $C054
|
||||
RDPAGE2 EQU $C01C ; high bit set if on page2
|
||||
ROMINIT EQU $FB2F
|
||||
ROMSETKBD EQU $FE89
|
||||
ROMSETVID EQU $FE93
|
||||
|
||||
ALTCHAR EQU $C00F ; enables alternative character set - mousetext
|
||||
|
||||
BLINK EQU $F3
|
||||
SPEED EQU $F1
|
||||
|
||||
BELL EQU $FF3A ; Monitor BELL routine
|
||||
CROUT EQU $FD8E ; Monitor CROUT routine
|
||||
PRBYTE EQU $FDDA ; Monitor PRBYTE routine
|
||||
MLI EQU $BF00 ; ProDOS system call
|
||||
OPENCMD EQU $C8 ; OPEN command index
|
||||
READCMD EQU $CA ; READ command index
|
||||
CLOSECMD EQU $CC ; CLOSE command index
|
||||
|
||||
OPENAPPLE EQU $C061 ; shift down = bit 7
|
||||
|
||||
|
||||
**************************************************
|
||||
* START - sets up various fiddly zero page bits
|
||||
**************************************************
|
||||
|
||||
ORG $2000 ; PROGRAM DATA STARTS AT $2000
|
||||
|
||||
JSR ROMSETVID ; Init char output hook at $36/$37
|
||||
JSR ROMSETKBD ; Init key input hook at $38/$39
|
||||
JSR ROMINIT ; GR/HGR off, Text page 1
|
||||
|
||||
LDA #$00
|
||||
STA BLINK ; blinking text? no thanks.
|
||||
STA LORES ; low res graphics mode
|
||||
STA MIXCLR
|
||||
|
||||
BIT TXTPAGE1
|
||||
JSR CLEARSKY ; clear screen
|
||||
BIT TXTPAGE2
|
||||
JSR CLEARSKY ; clear screen
|
||||
|
||||
|
||||
|
||||
|
||||
* data size 7800
|
||||
* data starts 2500
|
||||
* data ends 9d00 (2500 + 7800)
|
||||
|
||||
* screen size 12c0
|
||||
|
||||
; pixels in memory start at end of program code
|
||||
; 120px per line = #$78
|
||||
|
||||
* LOAD TERRAIN DATA FROM DISK
|
||||
JSR BLOAD
|
||||
|
||||
LDA CDHI ; start of CANYONDATA
|
||||
STA CANYONDATAHI
|
||||
STA SCREENDATAHI
|
||||
|
||||
CLC
|
||||
ADC #$78 ; data is $7800 long
|
||||
STA CDEND
|
||||
|
||||
LDA CDLO ; should be #$00
|
||||
STA CANYONDATALO
|
||||
STA SCREENDATALO
|
||||
|
||||
DEC PDLO
|
||||
|
||||
LDA #$0A
|
||||
STA HORIZON
|
||||
|
||||
* APPEND FIRST SCREEN TO END OF TERRAIN DATA FOR SMOOTH LOOP
|
||||
JSR LOOPTERRAIN ; appends $11D0 (38 lines of 120 bytes)
|
||||
|
||||
|
||||
|
||||
**************************************************
|
||||
* MAIN LOOP
|
||||
**************************************************
|
||||
; 1 - 965,487 cycles
|
||||
; 2 - 822,028 CHECKROW BCC NEXTPIXEL
|
||||
; 3 - 813,377 ADDCHARTOPIXEL
|
||||
; 4 - 765,409 LSR clears high bits.
|
||||
; 5 - 773,160 GRRR.
|
||||
; 6 - reversing render
|
||||
; 7 - 795,705
|
||||
; 8 - 740,233 render only on black
|
||||
; 9 - 801,500 double buffer
|
||||
; 10 - 674,168 added shortcuts
|
||||
; 11 - 630,679 optimized loops for frame,row,column
|
||||
; skip ahead 8 terrain bytes on 00 perspective byte
|
||||
; 12 - 618,134
|
||||
; skip ahead (progress) bytes any time rolbyte = 00.
|
||||
; 13 - 660,294 - MEH.
|
||||
; 14 - 645,099 - checking cycle count for first full screen.
|
||||
; skip ahead if end of row reached before checking perspective 00s
|
||||
; 15 - 573,699 started making macros and ]loops
|
||||
; 572,142
|
||||
; 16 - 568,259 reverse perspective bytes to INC instead of SBC
|
||||
; 17 - 536,209 TAX instead of LDA STA in DRAWPIXEL
|
||||
; 18 - start at top of heightpixel, go down until bg is not X0, skip the rest
|
||||
; 531,472 combine two runs of plotpixel if target == 00.
|
||||
; 19 - 392,381 "shortcutZ"
|
||||
; 20 - 419,717 added page flipping. Maybe do one test and branch?
|
||||
; 21 - 396,788
|
||||
|
||||
|
||||
|
||||
* EACH FRAME
|
||||
NEXTFRAME BIT RDPAGE2 ; hi bit on = on page 2. Set to page 1
|
||||
BPL SETPAGE2 ; hi bit off, set to page 2
|
||||
|
||||
SETPAGE1 BIT TXTPAGE1 ; set to page 1
|
||||
JMP CLEARPAGE
|
||||
|
||||
SETPAGE2 BIT TXTPAGE2
|
||||
|
||||
; clear screen to #$00
|
||||
CLEARPAGE JSR CLEARSKY ; 5,422 cycles (or 3,854 if it's unrolled)
|
||||
|
||||
|
||||
RESETROW LDA #$30 ; start on row 47
|
||||
; LDX #$0A
|
||||
*** modeswitch
|
||||
BIT OPENAPPLE
|
||||
BPL ROW47
|
||||
; LDX #$00
|
||||
LDA #$2F
|
||||
ROW47 STA PLOTROW ;
|
||||
STA BASELINE
|
||||
; STX HORIZON
|
||||
|
||||
|
||||
LDA SCREENDATAHI
|
||||
CMP CDEND ; is screendata looking after the end of CANYONDATA?
|
||||
BCC FRAMEDATA
|
||||
|
||||
RESETDATA LDA CDHI ; if so, set it back to beginning of terrain data
|
||||
STA SCREENDATAHI
|
||||
LDX #$0
|
||||
STX SCREENDATALO
|
||||
|
||||
FRAMEDATA STA CANYONDATAHI
|
||||
LDA SCREENDATALO
|
||||
STA CANYONDATALO
|
||||
|
||||
RESETPERSPECTIVE ; reset perspective processing
|
||||
LDA PDHI ; beginning of "perspective" data
|
||||
STA PERSPECTIVEHI
|
||||
LDA PDLO ;
|
||||
STA PERSPECTIVELO
|
||||
|
||||
|
||||
* EACH ROW
|
||||
RESETCOLUMN
|
||||
|
||||
LDA #$28
|
||||
STA PLOTCOLUMN ; plotcolumn 40
|
||||
|
||||
RESETPROGRESS LDA #$09 ; 8 bits in, decrement each run
|
||||
STA PROGRESS ; zero out ROL count
|
||||
|
||||
GETPERSPECTIVE
|
||||
*** mode switch - 00=3D
|
||||
; LDA MODEBYTE
|
||||
BIT OPENAPPLE
|
||||
BPL INCPERSPECTIVE
|
||||
|
||||
LDA PERSPECTIVELO ; have we loaded 40 bytes (1 line)
|
||||
SEC
|
||||
SBC PDLO
|
||||
CMP #$0F ; 120 bits later...
|
||||
BNE INCPERSPECTIVE
|
||||
|
||||
LDA PDHI ; beginning of "perspective" data
|
||||
STA PERSPECTIVEHI
|
||||
LDA PDLO ;
|
||||
STA PERSPECTIVELO
|
||||
INC PERSPECTIVELO
|
||||
JMP NEXTPERSPECTIVE
|
||||
|
||||
INCPERSPECTIVE INC PERSPECTIVELO
|
||||
BNE NEXTPERSPECTIVE
|
||||
INC PERSPECTIVEHI
|
||||
|
||||
NEXTPERSPECTIVE LDY #$0
|
||||
LDA (PERSPECTIVELO),Y ; read byte from perspective data
|
||||
BNE NEXTROLBYTE
|
||||
|
||||
*** shortcut if zero
|
||||
CLC
|
||||
LDA CANYONDATALO
|
||||
ADC #$08 ; did CANYONDATALO roll over?
|
||||
STA CANYONDATALO
|
||||
BCC JUMPEIGHT
|
||||
INC CANYONDATAHI
|
||||
JUMPEIGHT JMP GETPERSPECTIVE
|
||||
*** shortcut if zero
|
||||
|
||||
|
||||
|
||||
NEXTROLBYTE STA ROLBYTE ; on 00, skip ahead 8 bytes in terrain
|
||||
|
||||
* EACH COLUMN
|
||||
|
||||
*** advance to next row when rendering to column #$FF, reset column to $27, decrement row, etc
|
||||
|
||||
|
||||
NEXTPIXEL DEC PROGRESS
|
||||
BEQ RESETPROGRESS ; progress == 00, reload and get new perspective
|
||||
|
||||
NEXTTERRAIN INC CANYONDATALO ; did CANYONDATALO roll over?
|
||||
BNE ROLLY
|
||||
INC CANYONDATAHI
|
||||
|
||||
ROLLY CLC
|
||||
ROL ROLBYTE
|
||||
BCC NEXTPIXEL ; HI bit rolls into CARRY, grab the color byte.
|
||||
|
||||
|
||||
DEC PLOTCOLUMN ; set up to render on correct column
|
||||
BPL DRAWPIXEL ; if column is still >0, render
|
||||
; column has rolled over to FF. Do next row.
|
||||
NEXTROW
|
||||
DEC PLOTROW ; end of row
|
||||
DEC BASELINE
|
||||
|
||||
LDA PLOTROW ; done with FRAME?
|
||||
CMP HORIZON ; "horizon" at row #$0A (row10)
|
||||
BNE STARTLINE
|
||||
|
||||
DONEROWS ; done with all screen rows, move pointer
|
||||
LDA SCREENDATALO ; SCREENDATA is the starting point of what is displayed
|
||||
CLC ; increment 120 bytes per frame
|
||||
ADC #$78
|
||||
STA SCREENDATALO
|
||||
BCC LOOPTY ; carry set if rolled over
|
||||
INC SCREENDATAHI
|
||||
|
||||
LOOPTY JMP NEXTFRAME
|
||||
|
||||
|
||||
; moved up a row, shortcut to start next terrain line?
|
||||
STARTLINE LDA #$27
|
||||
STA PLOTCOLUMN ; plotcolumn 39
|
||||
|
||||
|
||||
DRAWPIXEL LDY #$0
|
||||
LDA (CANYONDATALO),Y ; read in byte at (CANYONDATALO,HI)
|
||||
STA HEIGHTBYTE ; hang onto the height nibble
|
||||
|
||||
AND #$0F ; strip high nibble - color in low nibble
|
||||
TAX
|
||||
|
||||
*** mode switch - 00=3D mode
|
||||
; LDA MODEBYTE
|
||||
BIT OPENAPPLE
|
||||
BMI TWODMODE
|
||||
|
||||
|
||||
LSR HEIGHTBYTE ; ROR high nibble down to low
|
||||
LSR HEIGHTBYTE
|
||||
LSR HEIGHTBYTE
|
||||
LSR HEIGHTBYTE ; clears low nibble from HEIGHTBYTE
|
||||
SEC
|
||||
LDA PLOTROW
|
||||
SBC HEIGHTBYTE
|
||||
STA PLOTROW
|
||||
JMP WHICHPAGE
|
||||
|
||||
TWODMODE STA HEIGHTBYTE ; mode=1, height of all columns = 1
|
||||
LDA BASELINE
|
||||
STA PLOTROW
|
||||
|
||||
WHICHPAGE ; loop until height = 0
|
||||
BIT RDPAGE2
|
||||
BPL DRAWZ2
|
||||
|
||||
|
||||
DRAWZ PLOTQUICK1
|
||||
CONTINUEPLOT ; plot @ baseline - CHAR IN X
|
||||
; PLOTROW in ACCUMULATOR
|
||||
INC PLOTROW ; inc PLOTROW, going down...
|
||||
LDA PLOTROW
|
||||
CMP BASELINE ; return PLOTROW to baseline
|
||||
|
||||
BCC DRAWZ ; loop and plot next Z
|
||||
JMP NEXTPIXEL
|
||||
|
||||
DRAWZ2 PLOTQUICK2
|
||||
CONTINUEPLOT ; plot @ baseline - CHAR IN X
|
||||
; PLOTROW in ACCUMULATOR
|
||||
INC PLOTROW ; inc PLOTROW, going down...
|
||||
LDA PLOTROW
|
||||
CMP BASELINE ; return PLOTROW to baseline
|
||||
|
||||
BCC DRAWZ2 ; loop and plot next Z
|
||||
JMP NEXTPIXEL
|
||||
|
||||
SHORTCUTZ LDA BASELINE ; no more blank pixels below, skip trying to render them
|
||||
STA PLOTROW
|
||||
JMP NEXTPIXEL
|
||||
|
||||
* EACH COLUMN
|
||||
|
||||
|
||||
; Compare Instruction Results
|
||||
;
|
||||
; Compare Result N Z C
|
||||
; A < Memory * 0 0
|
||||
; A = Memory 0 1 1
|
||||
; A > Memory * 0 1
|
||||
|
||||
|
||||
|
||||
* EACH ROW
|
||||
|
||||
|
||||
|
||||
**************************************************
|
||||
* SUBROUTINES
|
||||
|
||||
|
||||
**************************************************
|
||||
* prints one CHAR at PLOTROW,PLOTCOLUMN - clobbers A,X,Y
|
||||
* Used for every pixel. MACRO.
|
||||
* 61/67 cycles on a shortcut, 79 to render
|
||||
* *** now rendering top of column first. ***
|
||||
**************************************************
|
||||
PLOTQUICK1 MAC
|
||||
; *** CHAR IN X
|
||||
; *** PLOTROW in A
|
||||
LSR ; divide PLOTROW by 2 - odd=CARRY
|
||||
TAY ; get GR row
|
||||
|
||||
LDA LoLineTableL,Y
|
||||
STA LOBYTE
|
||||
LDA LoLineTableH,Y ; *** for page1
|
||||
<<< ; End of Macro
|
||||
|
||||
PLOTQUICK2 MAC
|
||||
; *** CHAR IN X
|
||||
; *** PLOTROW in A
|
||||
LSR ; divide PLOTROW by 2 - odd=CARRY
|
||||
TAY ; get GR row
|
||||
|
||||
LDA LoLineTableL,Y
|
||||
STA LOBYTE
|
||||
LDALT LDA AltLineTableH,Y ; *** for page2
|
||||
<<< ; End of Macro
|
||||
|
||||
|
||||
|
||||
CONTINUEPLOT MAC
|
||||
STAHIBYTE STA HIBYTE ; now word/pointer at $0+$1 points to line on TXT page.
|
||||
|
||||
LDY PLOTCOLUMN ; get the current pixel byte
|
||||
|
||||
GETSCREENPIXEL LDA (LOBYTE),Y ; only render if byte is 00 or X0
|
||||
|
||||
; row 0 or 1?
|
||||
BCC CHECKEVEN ; carry set = rendering on odd row
|
||||
|
||||
CHECKODD BNE DONEPLOTQUICK ; only render odd rows on 00
|
||||
|
||||
RENDERROW1 CLC ; A=0, screen pixel=00, char in X
|
||||
TXA
|
||||
ROL ; rotate the color nibble left x 4
|
||||
ROL
|
||||
ROL
|
||||
ROL ; color in hi nibble
|
||||
JMP PLOTPIXEL
|
||||
|
||||
|
||||
CHECKEVEN ; CARRY CLEAR
|
||||
|
||||
BEQ RENDERBOTH ; shortcut: 00 means rendering onto row 0 (lo nibble)
|
||||
; *** WILL DO BOTH ROWS ***
|
||||
|
||||
STA TMP ; store screen pixel
|
||||
; render on even, only with 00 or X0
|
||||
AND #$0F ; rendering on row 0, clear HI nibble.
|
||||
BNE SHORTCUTZ ; low nibble nonzero, skip. *** shortcut ***
|
||||
|
||||
|
||||
RENDERROW0 TXA ; Color in X, screen pixel in TMP, lo nibble == 0
|
||||
|
||||
ORA TMP ; combine nibbles into A
|
||||
|
||||
JMP PLOTPIXEL
|
||||
|
||||
|
||||
|
||||
RENDERBOTH TXA ; *** WILL DO BOTH ROWS ***
|
||||
STX TMP ; A=0, screen pixel = 0, set lo & hi nibbles to color/char (in X)
|
||||
ROL ; TMP has char in lo nibble.
|
||||
ROL ; ROL A into hi nibble.
|
||||
ROL
|
||||
ROL
|
||||
ORA TMP
|
||||
INC PLOTROW ; increment PLOTROW
|
||||
|
||||
PLOTPIXEL
|
||||
STA (LOBYTE),Y ; write new pixel to screen
|
||||
DONEPLOTQUICK
|
||||
<<< ; End of Macro
|
||||
|
||||
;/PLOTQUICK
|
||||
|
||||
**************************************************
|
||||
* Load "CANYONDATA" into memory at $3000
|
||||
* Used once
|
||||
**************************************************
|
||||
|
||||
|
||||
BLOAD JSR OPEN ;open "CANYONDATA"
|
||||
JSR READ
|
||||
; JSR ERROR
|
||||
JSR CLOSE
|
||||
; JSR ERROR
|
||||
RTS ;Otherwise done
|
||||
|
||||
OPEN JSR MLI ;Perform call
|
||||
DB OPENCMD ;CREATE command number
|
||||
DW OPENLIST ;Pointer to parameter list
|
||||
; JSR ERROR ;If error, display it
|
||||
LDA REFERENCE
|
||||
STA READLIST+1
|
||||
STA CLOSELIST+1
|
||||
RTS
|
||||
|
||||
READ JSR MLI
|
||||
DB READCMD
|
||||
DW READLIST
|
||||
RTS
|
||||
|
||||
CLOSE JSR MLI
|
||||
DB CLOSECMD
|
||||
DW CLOSELIST
|
||||
RTS
|
||||
|
||||
ERROR JSR PRBYTE ;Print error code
|
||||
JSR BELL ;Ring the bell
|
||||
JSR CROUT ;Print a carriage return
|
||||
RTS
|
||||
|
||||
OPENLIST DB $03 ; parameter list for OPEN command
|
||||
DW FILENAME
|
||||
DA MLI-$400 ; buffer snuggled up tight with PRODOS
|
||||
REFERENCE DB $00 ; reference to opened file
|
||||
|
||||
READLIST DB $04
|
||||
DB $00 ; REFERENCE written here after OPEN
|
||||
DB <CANYONDATA,>CANYONDATA ; append to end of program
|
||||
DB $00,$78 ; read to EOF at $7800 (120 * 256)
|
||||
TRANSFERRED DB $00,$00
|
||||
|
||||
CLOSELIST DB $01
|
||||
DB $00
|
||||
|
||||
FILENAME DB ENDNAME-NAME ;Length of name
|
||||
NAME ASC 'CANYONDATA' ;followed by the name
|
||||
ENDNAME EQU *
|
||||
|
||||
|
||||
|
||||
**************************************************
|
||||
* Append one screen from top of terrain to bottom of data for smooth looping
|
||||
* Used once
|
||||
**************************************************
|
||||
|
||||
LOOPTERRAIN
|
||||
|
||||
LDA CDLO ; Setup pointers to move memory
|
||||
STA $3C ; $3C and $3D for source start ($2500)
|
||||
STA $42 ; $42 and $43 for destination ($9d00)
|
||||
|
||||
LDA CDHI
|
||||
STA $3D ; grabbing from top of terrain data
|
||||
CLC
|
||||
ADC #$11 ; screen size = #$11D0 (38 lines x 120 buyes)
|
||||
STA $3F ; appending to end of terrain data
|
||||
ADC #$67 ; 11+66=78
|
||||
STA $43 ; destination HI
|
||||
|
||||
LDA #$CF ; last byte of extra 11D0 = 11CF
|
||||
STA $3E ; $3E and $3F for source end
|
||||
|
||||
MOVEIMAGE LDA #$00 ; Clear ACC, X,Y for smooth operation
|
||||
TAX
|
||||
TAY
|
||||
JSR $FE2C ; F8ROM:MOVE ; Do the memory move
|
||||
|
||||
RTS
|
||||
|
||||
**************************************************
|
||||
* blanks the screen quickly.
|
||||
* Used every frame. Macro?
|
||||
* CLOBBERS A,Y
|
||||
**************************************************
|
||||
CLEARSKY
|
||||
LDA #$00
|
||||
LDY #$78
|
||||
|
||||
BIT RDPAGE2 ; displaying page 2, clear page 1.
|
||||
BMI FILL1 ; and vice versa
|
||||
JMP FILL2
|
||||
|
||||
FILL1 DEY
|
||||
STA $400, Y
|
||||
STA $480, Y
|
||||
STA $500, Y
|
||||
STA $580, Y
|
||||
STA $600, Y
|
||||
STA $680, Y
|
||||
STA $700, Y
|
||||
STA $780, Y
|
||||
BNE FILL1
|
||||
RTS
|
||||
|
||||
FILL2 DEY
|
||||
STA $800, Y
|
||||
STA $880, Y
|
||||
STA $900, Y
|
||||
STA $980, Y
|
||||
STA $a00, Y
|
||||
STA $a80, Y
|
||||
STA $b00, Y
|
||||
STA $b80, Y
|
||||
BNE FILL2
|
||||
RTS
|
||||
|
||||
**************************************************
|
||||
* Data Tables
|
||||
*
|
||||
**************************************************
|
||||
|
||||
|
||||
|
||||
**************************************************
|
||||
* Lores/Text lines
|
||||
* Thanks to Dagen Brock for this.
|
||||
**************************************************
|
||||
Lo01 equ $400
|
||||
Lo02 equ $480
|
||||
Lo03 equ $500
|
||||
Lo04 equ $580
|
||||
Lo05 equ $600
|
||||
Lo06 equ $680
|
||||
Lo07 equ $700
|
||||
Lo08 equ $780
|
||||
Lo09 equ $428
|
||||
Lo10 equ $4a8
|
||||
Lo11 equ $528
|
||||
Lo12 equ $5a8
|
||||
Lo13 equ $628
|
||||
Lo14 equ $6a8
|
||||
Lo15 equ $728
|
||||
Lo16 equ $7a8
|
||||
Lo17 equ $450
|
||||
Lo18 equ $4d0
|
||||
Lo19 equ $550
|
||||
Lo20 equ $5d0
|
||||
* the "plus four" lines
|
||||
Lo21 equ $650
|
||||
Lo22 equ $6d0
|
||||
Lo23 equ $750
|
||||
Lo24 equ $7d0
|
||||
|
||||
; alt text page lines
|
||||
Alt01 equ $800
|
||||
Alt02 equ $880
|
||||
Alt03 equ $900
|
||||
Alt04 equ $980
|
||||
Alt05 equ $A00
|
||||
Alt06 equ $A80
|
||||
Alt07 equ $B00
|
||||
Alt08 equ $B80
|
||||
Alt09 equ $828
|
||||
Alt10 equ $8a8
|
||||
Alt11 equ $928
|
||||
Alt12 equ $9a8
|
||||
Alt13 equ $A28
|
||||
Alt14 equ $Aa8
|
||||
Alt15 equ $B28
|
||||
Alt16 equ $Ba8
|
||||
Alt17 equ $850
|
||||
Alt18 equ $8d0
|
||||
Alt19 equ $950
|
||||
Alt20 equ $9d0
|
||||
* the "plus four" lines
|
||||
Alt21 equ $A50
|
||||
Alt22 equ $Ad0
|
||||
Alt23 equ $B50
|
||||
Alt24 equ $Bd0
|
||||
|
||||
|
||||
|
||||
|
||||
LoLineTable da Lo01,Lo02,Lo03,Lo04
|
||||
da Lo05,Lo06,Lo07,Lo08
|
||||
da Lo09,Lo10,Lo11,Lo12
|
||||
da Lo13,Lo14,Lo15,Lo16
|
||||
da Lo17,Lo18,Lo19,Lo20
|
||||
da Lo21,Lo22,Lo23,Lo24
|
||||
|
||||
; alt text page
|
||||
AltLineTable da Alt01,Alt02,Alt03,Alt04
|
||||
da Alt05,Alt06,Alt07,Alt08
|
||||
da Alt09,Alt10,Alt11,Alt12
|
||||
da Alt13,Alt14,Alt15,Alt16
|
||||
da Alt17,Alt18,Alt19,Alt20
|
||||
da Alt21,Alt22,Alt23,Alt24
|
||||
|
||||
|
||||
** Here we split the table for an optimization
|
||||
** We can directly get our line numbers now
|
||||
** Without using ASL
|
||||
LoLineTableH db >Lo01,>Lo02,>Lo03
|
||||
db >Lo04,>Lo05,>Lo06
|
||||
db >Lo07,>Lo08,>Lo09
|
||||
db >Lo10,>Lo11,>Lo12
|
||||
db >Lo13,>Lo14,>Lo15
|
||||
db >Lo16,>Lo17,>Lo18
|
||||
db >Lo19,>Lo20,>Lo21
|
||||
db >Lo22,>Lo23,>Lo24
|
||||
LoLineTableL db <Lo01,<Lo02,<Lo03
|
||||
db <Lo04,<Lo05,<Lo06
|
||||
db <Lo07,<Lo08,<Lo09
|
||||
db <Lo10,<Lo11,<Lo12
|
||||
db <Lo13,<Lo14,<Lo15
|
||||
db <Lo16,<Lo17,<Lo18
|
||||
db <Lo19,<Lo20,<Lo21
|
||||
db <Lo22,<Lo23,<Lo24
|
||||
|
||||
; alt text page
|
||||
AltLineTableH db >Alt01,>Alt02,>Alt03
|
||||
db >Alt04,>Alt05,>Alt06
|
||||
db >Alt07,>Alt08,>Alt09
|
||||
db >Alt10,>Alt11,>Alt12
|
||||
db >Alt13,>Alt14,>Alt15
|
||||
db >Alt16,>Alt17,>Alt18
|
||||
db >Alt19,>Alt20,>Alt21
|
||||
db >Alt22,>Alt23,>Alt24
|
||||
AltLineTableL db <Alt01,<Alt02,<Alt03
|
||||
db <Alt04,<Alt05,<Alt06
|
||||
db <Alt07,<Alt08,<Alt09
|
||||
db <Alt10,<Alt11,<Alt12
|
||||
db <Alt13,<Alt14,<Alt15
|
||||
db <Alt16,<Alt17,<Alt18
|
||||
db <Alt19,<Alt20,<Alt21
|
||||
db <Alt22,<Alt23,<Alt24
|
||||
|
||||
|
||||
**************************************************
|
||||
* Perspective Table
|
||||
* can I shortcut to next 120px line and cut off trailing 00 bytes?
|
||||
**************************************************
|
||||
PDLO db <PERSPECTIVEDATA
|
||||
PDHI db >PERSPECTIVEDATA
|
||||
PERSPECTIVEDATA
|
||||
HEX 00,00,00,00,00,FF,FF,FF,FF,FF,00,00,00,00,00
|
||||
HEX 00,00,00,00,01,7F,FF,F7,FF,FF,80,00,00,00,00
|
||||
HEX 00,00,00,00,02,FF,FF,F7,FB,FF,40,00,00,00,00
|
||||
HEX 00,00,00,00,05,FF,DF,F7,FD,EF,A0,00,00,00,00
|
||||
HEX 00,00,00,00,0B,EF,DF,F7,BD,F7,D0,00,00,00,00
|
||||
HEX 00,00,00,00,16,EF,DE,F7,BE,FB,E8,00,00,00,00
|
||||
HEX 00,00,00,00,2E,EE,DE,FB,DF,6D,F4,00,00,00,00
|
||||
HEX 00,00,00,00,5D,DD,DE,DB,DB,6E,FA,00,00,00,00
|
||||
HEX 00,00,00,00,BB,BB,B5,BB,DB,6E,ED,00,00,00,00
|
||||
HEX 00,00,00,01,77,57,6D,BB,5B,B7,76,80,00,00,00
|
||||
HEX 00,00,00,02,AE,D7,6D,BB,6D,DB,AB,40,00,00,00
|
||||
HEX 00,00,00,05,5A,D7,6D,BB,6D,AD,D5,A0,00,00,00
|
||||
HEX 00,00,00,0B,5A,D7,6D,B5,B6,D6,AA,D0,00,00,00
|
||||
HEX 00,00,00,16,B5,AA,DB,6B,6D,AD,A9,68,00,00,00
|
||||
HEX 00,00,00,29,6B,5A,DB,6B,6D,56,D4,B4,00,00,00
|
||||
HEX 00,00,00,52,D6,B5,B6,D6,D5,56,95,5A,00,00,00
|
||||
HEX 00,00,00,95,56,B5,B6,D6,D5,54,AA,AD,00,00,00
|
||||
HEX 00,00,01,4A,AD,6B,6D,56,95,55,55,56,80,00,00
|
||||
HEX 00,00,02,AA,AD,6A,6D,55,6A,AA,AA,AA,40,00,00
|
||||
HEX 00,00,05,55,52,D4,DA,AA,AA,AA,AA,AA,A0,00,00
|
||||
HEX 00,00,0A,AA,AA,AA,AA,AA,AA,AA,AA,AA,90,00,00
|
||||
HEX 00,00,14,AA,AA,AA,AA,AA,AA,AA,95,55,28,00,00
|
||||
HEX 00,00,29,52,AA,A5,55,55,55,55,55,4A,94,00,00
|
||||
HEX 00,00,52,A5,55,2A,AA,A9,55,54,AA,A5,4A,00,00
|
||||
HEX 00,00,A5,4A,AA,55,54,A5,4A,AA,55,52,A5,00,00
|
||||
HEX 00,01,4A,95,52,A9,54,A5,2A,55,4A,A9,52,80,00
|
||||
HEX 00,02,95,29,52,A9,54,A5,2A,55,4A,54,A9,40,00
|
||||
HEX 00,05,2A,52,A5,52,A9,4A,4A,52,A5,2A,54,A0,00
|
||||
HEX 00,0A,54,A5,4A,A5,52,94,94,A5,4A,4A,4A,50,00
|
||||
HEX 00,14,A5,52,4A,52,94,A5,24,A5,2A,94,A5,28,00
|
||||
HEX 00,29,25,29,4A,52,94,A5,29,4A,52,94,92,94,00
|
||||
HEX 00,52,49,4A,52,95,49,52,4A,4A,94,A4,92,4A,00
|
||||
HEX 00,A4,AA,92,52,92,49,29,24,94,94,A4,92,95,00
|
||||
HEX 01,4A,A5,24,A4,92,49,24,92,49,25,29,54,92,80
|
||||
HEX 02,92,55,24,A4,92,49,24,92,49,25,25,25,49,40
|
||||
HEX 05,24,92,49,49,24,92,52,49,24,94,92,4A,A5,20
|
||||
HEX 0A,49,24,92,49,24,92,52,49,24,92,4A,92,49,50
|
||||
HEX 12,49,24,92,49,24,95,49,24,92,49,24,92,49,48
|
||||
HEX 24,92,49,24,92,49,24,92,49,24,92,49,24,92,A4
|
||||
HEX 49,24,92,49,24,92,49,24,92,49,24,92,49,24,92
|
||||
|
||||
CDLO db <CANYONDATA
|
||||
CDHI db >CANYONDATA
|
||||
|
||||
DS \
|
||||
|
||||
CANYONDATA EQU *
|
||||
|
||||
|
Binary file not shown.
Loading…
Reference in New Issue