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 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 ;from ProRWTS2 ;file read support sizelo EQU $52 sizehi EQU $53 ldrlo EQU $55 ldrhi EQU $56 ;file open support namlo EQU $57 namhi EQU $58 ;rewind support treeidx EQU $5a blkidx EQU $5e bleftlo EQU $60 blefthi EQU $61 ;API hddopendir EQU $BD03 hddrdwrpart EQU $BD00 hddblockhi EQU $BD06 hddblocklo EQU $BD04 ************************************************** * 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 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 PAUSED ; start not paused STA COLORMODE ; start in default, real hardware mode 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 STA MIXCLR ; For IIGS - bottom 4 lines to GR NOTGS LDA #$30 STA DELAY ; start with a modest 30FPS ; lda SETAN3 ; *** does something strange to low res 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 JSR BLOAD ; BLOAD DATA EACHFRAME LDA DATAHI ; image data starts at end of code. STA IMGHI LDA DATALO STA IMGLO 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 LDA #3 STA sizehi LDA #$C0 STA sizelo LDA #>BEGINDATA STA ldrhi LDA #FILENAME STA namhi LDA #BEGINDATA STA ldrhi LDA #TABLESEED,>V2COLORTABLE,>MICROM8,>THREEGRAYSTABLE,>VIDHD SEEDSTABLELO db 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 BEGINDATA BEGINDATA EQU *