mirror of
https://github.com/option8/greenscale.git
synced 2024-12-27 19:30:02 +00:00
Bad Apple demo
This commit is contained in:
parent
15a93072c7
commit
0e202e0de2
615
BADAPPLE.s
Normal file
615
BADAPPLE.s
Normal file
@ -0,0 +1,615 @@
|
|||||||
|
DSK GREENSCALE
|
||||||
|
|
||||||
|
**************************************************
|
||||||
|
* Autoplaying version for Bad Apple demo
|
||||||
|
**************************************************
|
||||||
|
* Variables
|
||||||
|
**************************************************
|
||||||
|
|
||||||
|
ROW EQU $FA ; row in pixels - 1-48 (#00-#2F)
|
||||||
|
COLUMN EQU $FB ; col in pixels - 1-40 (#00-#27)
|
||||||
|
|
||||||
|
COLOR EQU $FC ; index color of pixel to plot - #00-#0F
|
||||||
|
PLOTCOLOR EQU $21 ; color to plot - #00-#0F from COLORTABLE
|
||||||
|
CHAR EQU $FD ; byte at PLOTROW,PLOTCOLUMN
|
||||||
|
|
||||||
|
PLOTROW EQU $FE ; row in text page = ROW/2, remainder = nibble
|
||||||
|
PLOTCOLUMN EQU $FF ; col in text page == COLUMN
|
||||||
|
|
||||||
|
IMGLO EQU $CD ; image data addres, LO
|
||||||
|
IMGHI EQU $CE ; image data addres, HI
|
||||||
|
|
||||||
|
SEEDADDRLO EQU $CB ; db <TABLESEED
|
||||||
|
SEEDADDRHI EQU $CC ; db >TABLESEED
|
||||||
|
|
||||||
|
FRAMENUM EQU $1D ; which frame of the anim
|
||||||
|
FRAMES EQU $1E ; total frames
|
||||||
|
|
||||||
|
DELAY EQU $1F ; interframe delay amount.
|
||||||
|
; FF=3FPS $80=10FPS $40=24FPS $20=37FPS $10=43FPS $00=46FPS
|
||||||
|
PAUSED EQU $20 ; paused state - stop animation
|
||||||
|
|
||||||
|
COLORMODE EQU $22 ; which color mode are we in? which table to draw from
|
||||||
|
TABLEOFFSET EQU $23
|
||||||
|
|
||||||
|
AUTOPLAYTIMER EQU $EB ; how many loops has the animation played?
|
||||||
|
AUTOPLAY EQU $EC ; Autoplay mode or not
|
||||||
|
|
||||||
|
**************************************************
|
||||||
|
* 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
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
**************************************************
|
||||||
|
* START - sets up various fiddly zero page bits
|
||||||
|
**************************************************
|
||||||
|
|
||||||
|
ORG $0800 ; PROGRAM DATA STARTS AT $0C00 NOW
|
||||||
|
|
||||||
|
JSR BLOAD ; BLOAD DATA
|
||||||
|
|
||||||
|
JSR HOWMANYFRAMES ; how big is the animation data?
|
||||||
|
|
||||||
|
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 ; For IIGS - bottom 4 lines to GR
|
||||||
|
|
||||||
|
STA PAUSED ; start not paused
|
||||||
|
STA COLORMODE ; start in default, real hardware mode
|
||||||
|
STA AUTOPLAYTIMER ; reset timer for autoplay
|
||||||
|
STA AUTOPLAY ; autoplay off by default
|
||||||
|
DETECTGS
|
||||||
|
SEC ;Set carry bit (flag)
|
||||||
|
JSR $FE1F ;Call to the monitor
|
||||||
|
BCS NOTGS ;If carry is still set, then old machine
|
||||||
|
;BCC ISGS ;If carry is clear, then new machine
|
||||||
|
|
||||||
|
ISGS lda #$01 ; disable SHR for IIgs
|
||||||
|
sta $c029 ; re: John Brooks
|
||||||
|
; need to skip this if on IIe card, otherwise goes to alt ROM
|
||||||
|
|
||||||
|
NOTGS LDA #$30
|
||||||
|
STA DELAY ; start with a modest 30FPS
|
||||||
|
|
||||||
|
lda SETAN3
|
||||||
|
sta CLR80VID ; turn 80 column off
|
||||||
|
|
||||||
|
JSR CLRLORES ; clear screen
|
||||||
|
|
||||||
|
JSR EMULATORCHECK ; check for Virtual II, MicroM8
|
||||||
|
|
||||||
|
LDY COLORMODE ; colormode set by EMULATORCHECK, or 00
|
||||||
|
LDA SEEDSTABLELO,Y ; which "Seed" table to generate from
|
||||||
|
STA SEEDADDRLO
|
||||||
|
|
||||||
|
LDA SEEDSTABLEHI,Y
|
||||||
|
STA SEEDADDRHI
|
||||||
|
|
||||||
|
JSR GENERATETABLE ; create a 256byte table from 16bytes. Magic!
|
||||||
|
|
||||||
|
**************************************************
|
||||||
|
* MAIN LOOP
|
||||||
|
**************************************************
|
||||||
|
|
||||||
|
STARTANIMATION
|
||||||
|
LDA DATAHI ; image data starts at end of code.
|
||||||
|
STA IMGHI
|
||||||
|
LDA DATALO
|
||||||
|
STA IMGLO
|
||||||
|
LDA FRAMES
|
||||||
|
STA FRAMENUM ; frame #0
|
||||||
|
|
||||||
|
EACHFRAME JSR INTERFRAMEDELAY
|
||||||
|
LDX #$00
|
||||||
|
STX PLOTROW
|
||||||
|
LDY #$27 ; Y IS PLOTCOLUMN
|
||||||
|
|
||||||
|
EACHROW LDA LoLineTableL,X
|
||||||
|
STA $0
|
||||||
|
LDA LoLineTableH,X
|
||||||
|
STA $1 ; now word/pointer at $0+$1 points to screen line
|
||||||
|
|
||||||
|
EACHPIXEL LDA (IMGLO),Y ; load byte at IMGLO,IMGHI + COLUMN
|
||||||
|
TAX ; look up color from lookup table
|
||||||
|
WHICHTABLE LDA COLORTABLE,X
|
||||||
|
STA ($0),Y ; store byte at LINE + COLUMN
|
||||||
|
|
||||||
|
DECCOLUMN DEY ; next column of 2 pixels
|
||||||
|
BPL EACHPIXEL ; Y IS PLOTCOLUMN
|
||||||
|
LDY #$27 ; reset to col 0
|
||||||
|
|
||||||
|
INCROW INC PLOTROW
|
||||||
|
LDA IMGLO
|
||||||
|
CLC
|
||||||
|
ADC #$28
|
||||||
|
STA IMGLO
|
||||||
|
BCS INCHI
|
||||||
|
|
||||||
|
CMPROW LDX PLOTROW
|
||||||
|
CPX #$18
|
||||||
|
BNE EACHROW
|
||||||
|
|
||||||
|
LOOPTY DEC FRAMENUM
|
||||||
|
BNE EACHFRAME ; next frame in sequence
|
||||||
|
|
||||||
|
JSR NEXTFILE ; LOAD NEXT FILE IN SEQUENCE
|
||||||
|
JMP STARTANIMATION
|
||||||
|
|
||||||
|
INCHI INC IMGHI
|
||||||
|
BCS CMPROW
|
||||||
|
|
||||||
|
;/MAIN LOOP
|
||||||
|
|
||||||
|
**************************************************
|
||||||
|
* By popular(?) demand - slows down framerate
|
||||||
|
* based on keyboard input
|
||||||
|
**************************************************
|
||||||
|
PAUSE STA PAUSED ; stores #$A0 at PAUSED.
|
||||||
|
STA STROBE
|
||||||
|
|
||||||
|
INTERFRAMEDELAY
|
||||||
|
INC AUTOPLAYTIMER ; played a frame, increment autoplay timer
|
||||||
|
LDA KEY ; check for keydown
|
||||||
|
CMP PAUSED ; space bar = #$A0
|
||||||
|
BEQ UNPAUSE
|
||||||
|
|
||||||
|
LDA PAUSED ; check for paused state
|
||||||
|
BNE INTERFRAMEDELAY ; loop forever until space bar
|
||||||
|
|
||||||
|
|
||||||
|
CHECKDELAY LDA KEY ; check for keydown
|
||||||
|
|
||||||
|
CMP #$A0 ; space bar, pause
|
||||||
|
BEQ PAUSE
|
||||||
|
|
||||||
|
CMP #$AB ; plus
|
||||||
|
BEQ INCDELAY ; if EQ, slow down (INC DELAY)
|
||||||
|
CMP #$BD ; equals
|
||||||
|
BEQ INCDELAY ; if EQ, slow down (INC DELAY)
|
||||||
|
CMP #$AD ; minus
|
||||||
|
BEQ DECDELAY ; if EQ, speed up (DEC DELAY)
|
||||||
|
|
||||||
|
CMP #$C3 ; c
|
||||||
|
BEQ SWITCHCOLOR ; if C switch color mode
|
||||||
|
CMP #$E3 ; C
|
||||||
|
BEQ SWITCHCOLOR ; if C switch color mode
|
||||||
|
|
||||||
|
CMP #$CE ; N
|
||||||
|
BEQ SWITCHDATA ; go to next DATA0* file
|
||||||
|
CMP #$EE ; N
|
||||||
|
BEQ SWITCHDATA ; go to next DATA0* file
|
||||||
|
|
||||||
|
|
||||||
|
CMP #$C1 ; a
|
||||||
|
BEQ AUTOSWITCH ; if A turn on/off autoplay
|
||||||
|
CMP #$E1 ; A
|
||||||
|
BEQ AUTOSWITCH ; if A turn on/off autoplay
|
||||||
|
|
||||||
|
LDA AUTOPLAY
|
||||||
|
BEQ XLOOP ; autoplay = 0, skip the auto switch
|
||||||
|
LDA AUTOPLAYTIMER ; reset timer for autoplay
|
||||||
|
BEQ SWITCHDATA ; auto switch after 256 frames displayed
|
||||||
|
|
||||||
|
|
||||||
|
XLOOP LDX DELAY ; typical delay loop
|
||||||
|
|
||||||
|
DELAYLOOP LDY DELAY
|
||||||
|
|
||||||
|
YLOOP DEY
|
||||||
|
BNE YLOOP
|
||||||
|
|
||||||
|
DEX
|
||||||
|
BNE DELAYLOOP
|
||||||
|
|
||||||
|
RTS
|
||||||
|
;/INTERFRAMEDELAY
|
||||||
|
|
||||||
|
UNPAUSE LDA #$0
|
||||||
|
STA PAUSED
|
||||||
|
STA STROBE
|
||||||
|
JMP CHECKDELAY
|
||||||
|
|
||||||
|
INCDELAY STA STROBE
|
||||||
|
INC DELAY
|
||||||
|
JMP XLOOP
|
||||||
|
|
||||||
|
DECDELAY STA STROBE
|
||||||
|
DEC DELAY
|
||||||
|
JMP XLOOP
|
||||||
|
|
||||||
|
SWITCHCOLOR STA STROBE
|
||||||
|
JSR COLORSWAP
|
||||||
|
JMP XLOOP
|
||||||
|
|
||||||
|
SWITCHDATA STA STROBE
|
||||||
|
JSR NEXTFILE
|
||||||
|
RTS
|
||||||
|
|
||||||
|
AUTOSWITCH STA STROBE
|
||||||
|
LDA AUTOPLAY
|
||||||
|
BEQ AUTOPLAYON ; if it's 0, inc to 1
|
||||||
|
DEC AUTOPLAY ; otherwise, dec to 0
|
||||||
|
JMP AUTOPLAYSET
|
||||||
|
AUTOPLAYON INC AUTOPLAY
|
||||||
|
AUTOPLAYSET RTS
|
||||||
|
|
||||||
|
|
||||||
|
**************************************************
|
||||||
|
* Check to see if I'm running in Virtual II or
|
||||||
|
* real hardware (or a different emulator)
|
||||||
|
* CARRY SET == running in VII
|
||||||
|
**************************************************
|
||||||
|
|
||||||
|
EMULATORCHECK
|
||||||
|
LDX #$00 ; reset X and Y
|
||||||
|
LDY #$00
|
||||||
|
CLC ; CARRY=VII found
|
||||||
|
|
||||||
|
CHKVII ; if C04F is and stays zero, INC X
|
||||||
|
INX ; if X rolls over to zero, it's VII
|
||||||
|
BEQ FOUNDVII
|
||||||
|
LDA $C04F
|
||||||
|
BEQ CHKVII ; 0, then may be VII
|
||||||
|
|
||||||
|
CHKM8 INY ; now to check for MICROM8
|
||||||
|
CPY #$FF
|
||||||
|
BEQ FOUNDM8
|
||||||
|
CMP #$2E
|
||||||
|
BEQ CHKM8 ; it's #$2E. Does it stay that way?
|
||||||
|
|
||||||
|
CLC ;set return value: no Virtual II or M8
|
||||||
|
RTS
|
||||||
|
FOUNDVII
|
||||||
|
SEC ;set return value: found Virtual II
|
||||||
|
JSR COLORSWAP ; otherwise, swap the color table (#1 is VII)
|
||||||
|
RTS
|
||||||
|
|
||||||
|
FOUNDM8 ADC #$80 ; add over 128 = set OVerflow
|
||||||
|
INC COLORMODE ; next color mode
|
||||||
|
JSR COLORSWAP ; otherwise, swap the color table (#2 is M8)
|
||||||
|
RTS
|
||||||
|
|
||||||
|
|
||||||
|
**************************************************
|
||||||
|
* Load "banana" into memory
|
||||||
|
*
|
||||||
|
**************************************************
|
||||||
|
|
||||||
|
|
||||||
|
BLOAD JSR OPEN ;open "DATA"
|
||||||
|
JSR READ
|
||||||
|
JSR CLOSE
|
||||||
|
RTS ;Otherwise done
|
||||||
|
|
||||||
|
OPEN JSR MLI ;Perform call
|
||||||
|
DB OPENCMD ;CREATE command number
|
||||||
|
DW OPENLIST ;Pointer to parameter list
|
||||||
|
BNE ERROR ;If error, display it
|
||||||
|
LDA REFERENCE
|
||||||
|
STA READLIST+1
|
||||||
|
STA CLOSELIST+1
|
||||||
|
RTS
|
||||||
|
|
||||||
|
READ JSR MLI
|
||||||
|
DB READCMD
|
||||||
|
DW READLIST
|
||||||
|
BNE ERROR
|
||||||
|
RTS
|
||||||
|
|
||||||
|
CLOSE JSR MLI
|
||||||
|
DB CLOSECMD
|
||||||
|
DW CLOSELIST
|
||||||
|
BNE ERROR
|
||||||
|
RTS
|
||||||
|
|
||||||
|
ERROR CMP #$46 ; file not found during OPEN? reset to "DATA00"
|
||||||
|
BNE PRINTERROR
|
||||||
|
LDA #$30
|
||||||
|
STA ENDNAME-1
|
||||||
|
STA ENDNAME-2
|
||||||
|
STA ENDNAME-3
|
||||||
|
JMP OPEN
|
||||||
|
PRINTERROR 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 <BEGINDATA,>BEGINDATA ; write to end of code
|
||||||
|
DB $FF,$FF ; read as much as $FFFF - should error out with EOF before that.
|
||||||
|
TRANSFERRED DB $00,$00
|
||||||
|
|
||||||
|
CLOSELIST DB $01
|
||||||
|
DB $00
|
||||||
|
|
||||||
|
FILENAME DB ENDNAME-NAME ;Length of name
|
||||||
|
NAME ASC '/GREENSCALE/DATA/DATA000' ;followed by the name
|
||||||
|
ENDNAME EQU *
|
||||||
|
|
||||||
|
|
||||||
|
**************************************************
|
||||||
|
* How many frames have transferred?
|
||||||
|
* up to 32 ($20) based on TRANSFERRED+1
|
||||||
|
**************************************************
|
||||||
|
HOWMANYFRAMES LDX #$00 ; X=0
|
||||||
|
LDA TRANSFERRED+1 ; LDA TRANSFERRED amt hi byte
|
||||||
|
HOWMANYLOOP CMP FRAMESTABLE,X ; compare A to FRAMESTABLE,X
|
||||||
|
BEQ HOWMANYSET ; if equal, X frames loaded.
|
||||||
|
INX
|
||||||
|
CPX $30 ; out of memory around 41 frames.
|
||||||
|
BEQ HOWMANYSET ; max 32 frames
|
||||||
|
JMP HOWMANYLOOP ; otherwise, INX, Loop
|
||||||
|
HOWMANYSET INX
|
||||||
|
STX FRAMES
|
||||||
|
RTS
|
||||||
|
|
||||||
|
**************************************************
|
||||||
|
* Swap the color table with one for real
|
||||||
|
* hardware/OpenEmulator
|
||||||
|
* This works because the color tables are $FF bytes long.
|
||||||
|
**************************************************
|
||||||
|
|
||||||
|
COLORSWAP INC COLORMODE ; next mode to cycle through
|
||||||
|
|
||||||
|
LDX COLORMODE ; load to X
|
||||||
|
CPX #$05 ; is it now the text mode?
|
||||||
|
BEQ TEXTSWAP
|
||||||
|
; otherwise, be sure to be back in GR
|
||||||
|
STX LORES ; low res graphics mode
|
||||||
|
STX MIXCLR ; For IIGS - bottom 4 lines to GR
|
||||||
|
|
||||||
|
NEWTABLE
|
||||||
|
LDA SEEDSTABLELO,X
|
||||||
|
STA SEEDADDRLO
|
||||||
|
|
||||||
|
LDA SEEDSTABLEHI,X
|
||||||
|
STA SEEDADDRHI
|
||||||
|
|
||||||
|
JSR GENERATETABLE ; create a 256byte table from 16bytes. Magic!
|
||||||
|
|
||||||
|
LDA COLORTABLEHI ; grab table address for LUT
|
||||||
|
STA WHICHTABLE+2 ; put it in the code
|
||||||
|
RTS
|
||||||
|
|
||||||
|
TEXTSWAP STA TXTSET ; set text mode
|
||||||
|
SWAPTABLE LDA TEXTTABLEHI ; grab table address for LUT
|
||||||
|
STA WHICHTABLE+2 ; put it in the code
|
||||||
|
LDX #$FF
|
||||||
|
STX COLORMODE
|
||||||
|
RTS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
**************************************************
|
||||||
|
* Increment the name of the file to be loaded
|
||||||
|
* then trigger the load again.
|
||||||
|
**************************************************
|
||||||
|
NEXTFILE LDY ENDNAME-1 ; last char in ascii filename "DATA000" = #$30
|
||||||
|
INY
|
||||||
|
CPY #$3A ; roll over past "xx9"?
|
||||||
|
BNE SETFILE
|
||||||
|
LDY #$30 ; reset to "0"
|
||||||
|
LDX ENDNAME-2
|
||||||
|
INX
|
||||||
|
CPX #$3A ; roll over past "x90"?
|
||||||
|
BNE SETFILE10
|
||||||
|
LDX #$30 ; reset to "00"
|
||||||
|
INC ENDNAME-3 ; add 100
|
||||||
|
SETFILE10 STX ENDNAME-2
|
||||||
|
SETFILE STY ENDNAME-1
|
||||||
|
JSR BLOAD
|
||||||
|
JSR HOWMANYFRAMES ; how big is the new animation data?
|
||||||
|
LDA #$01
|
||||||
|
STA FRAMENUM ; start new anim at frame 0
|
||||||
|
RTS
|
||||||
|
|
||||||
|
**************************************************
|
||||||
|
* Data Tables
|
||||||
|
*
|
||||||
|
* I was looking up each nibble, then converting
|
||||||
|
* the two nibbles to a full byte, but it's
|
||||||
|
* considerably faster to lookup a full byte at
|
||||||
|
* a time, skipping manipulating nibbles.
|
||||||
|
*
|
||||||
|
**************************************************
|
||||||
|
|
||||||
|
**************************************************
|
||||||
|
* Generates a 256 byte table, given a pattern of
|
||||||
|
* 16 bytes. With more color tables in the program,
|
||||||
|
* this saves me more than 1K of memory
|
||||||
|
**************************************************
|
||||||
|
|
||||||
|
GENERATETABLE
|
||||||
|
; start with address of "seed"
|
||||||
|
LDA #$FF ; TABLEOFFSET = FF
|
||||||
|
STA TABLEOFFSET ; where in the COLORTABLE I'm writing
|
||||||
|
|
||||||
|
LDA #$0F ; for X F to 0
|
||||||
|
STA $07
|
||||||
|
|
||||||
|
GENXLOOP LDA #$0F ; for Y F to 0
|
||||||
|
STA $06
|
||||||
|
|
||||||
|
GENYLOOP
|
||||||
|
; STY $06 ; hang onto Y
|
||||||
|
LDY $07
|
||||||
|
LDA (SEEDADDRLO),Y ; (A=0F)
|
||||||
|
ROL ; ROLx4 (A=20)
|
||||||
|
ROL
|
||||||
|
ROL
|
||||||
|
ROL
|
||||||
|
LDY $06 ; get Y back
|
||||||
|
ADC (SEEDADDRLO),Y ; (A=FF)
|
||||||
|
; STY $06 ; store Y at $06 for safekeeping
|
||||||
|
LDY TABLEOFFSET
|
||||||
|
STA COLORTABLE,Y
|
||||||
|
DEC TABLEOFFSET
|
||||||
|
; LDY $06
|
||||||
|
; DEY
|
||||||
|
DEC $06
|
||||||
|
BPL GENYLOOP ; if Y = FF, next X
|
||||||
|
GENDECX DEC $07
|
||||||
|
BPL GENXLOOP ; if X=FF, done
|
||||||
|
GENRTS RTS
|
||||||
|
;/GENERATETABLE
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
TABLESEED HEX 00,02,01,04,08,03,06,0C,09,05,0A,07,0B,0E,0D,0F
|
||||||
|
V2COLORTABLE HEX 00,02,06,01,04,05,08,03,0C,09,07,0A,0B,0E,0D,0F ; Low res colors from darkest to lightest for Virtual ][
|
||||||
|
MICROM8 HEX 00,02,04,08,0C,01,09,05,06,0E,0D,03,0A,07,0B,0F
|
||||||
|
THREEGRAYSTABLE HEX 00,02,02,02,02,06,06,06,06,06,06,07,07,07,07,0F ; W/B and 3 grays/shades of blue
|
||||||
|
VIDHD HEX 00,02,01,04,08,03,09,05,0A,06,0C,07,0B,0E,0D,0F
|
||||||
|
|
||||||
|
SEEDSTABLEHI db >TABLESEED,>V2COLORTABLE,>MICROM8,>THREEGRAYSTABLE,>VIDHD
|
||||||
|
SEEDSTABLELO db <TABLESEED,<V2COLORTABLE,<MICROM8,<THREEGRAYSTABLE,<VIDHD
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
COLORTABLE DS 256,$FF
|
||||||
|
|
||||||
|
TEXTTABLE ASC " '''````~~~^^",A2,A2 ; Low res colors from darkest to lightest for Virtual ][
|
||||||
|
ASC "..'''````~~~^^",A2,A2 ; A2 = ""
|
||||||
|
ASC "..''~^!ll/?TYYFF"
|
||||||
|
ASC ",,''!ll??TTYY7FF"
|
||||||
|
ASC ",,''!l??TYYY74FF"
|
||||||
|
ASC "__'!/llLI?7499PP"
|
||||||
|
ASC "--'!/lLII?7499PP"
|
||||||
|
ASC "::!/l)>LJJ7499PP"
|
||||||
|
ASC ";;!/l)>CC66999RR"
|
||||||
|
ASC "ii/11)>CCOO999RR"
|
||||||
|
ASC "iil11UUZQGB988RR"
|
||||||
|
ASC "vv1]]EEZQGB888RR"
|
||||||
|
ASC "uu1]]WWZQGB888@@"
|
||||||
|
ASC "oo[[[}}}JJNNMM@@"
|
||||||
|
ASC "wwhhddbbkkKK##**"
|
||||||
|
ASC "mmhhddbbkkKK##&*"
|
||||||
|
|
||||||
|
TEXTTABLEHI db >TEXTTABLE
|
||||||
|
COLORTABLEHI db >COLORTABLE
|
||||||
|
|
||||||
|
|
||||||
|
FRAMESTABLE HEX 03,07,0B,0F,12,16,1A,1E,21,25,29,2D,30,34,38,3C ; how many frames transferred? HI byte lookup table
|
||||||
|
HEX 3F,43,47,4B,4E,52,56,5A,5D,61,65,69,6C,70,74,78
|
||||||
|
HEX 7B,7F,83,87,8A,8E,92,96,99,9D,A1,A5,A8,AC,B0,B4
|
||||||
|
|
||||||
|
**************************************************
|
||||||
|
* 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
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
** 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
|
||||||
|
|
||||||
|
DATALO DB <BEGINDATA
|
||||||
|
DATAHI DB >BEGINDATA
|
||||||
|
|
||||||
|
BEGINDATA EQU *
|
Loading…
Reference in New Issue
Block a user