From 989c92ef9da73f710e109ab12ff96a27a8026a0e Mon Sep 17 00:00:00 2001 From: Charles Mangin Date: Fri, 5 Mar 2021 09:11:45 -0500 Subject: [PATCH] Add files via upload --- CANYON.6502 | 784 ++++++++++++++++++++++++++++++++++++++++++++++++++++ CANYON.dsk | Bin 0 -> 143360 bytes 2 files changed, 784 insertions(+) create mode 100644 CANYON.6502 create mode 100644 CANYON.dsk diff --git a/CANYON.6502 b/CANYON.6502 new file mode 100644 index 0000000..0b641e8 --- /dev/null +++ b/CANYON.6502 @@ -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 ; 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 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 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 + + DS \ + +CANYONDATA EQU * + + \ No newline at end of file diff --git a/CANYON.dsk b/CANYON.dsk new file mode 100644 index 0000000000000000000000000000000000000000..e09ad46ca3ff98a17d5daa7f12ab3024910fc925 GIT binary patch literal 143360 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

Fo=KF3e3)*w_0}pqBZm#e^P$9`}S5> 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 Ki*qXu_WuC*$yjax literal 0 HcmV?d00001