From 6d0e49df66d30d78d6e89cfe26c3bef4495810dd Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Tue, 15 Jun 2021 13:58:29 -0400 Subject: [PATCH] martymation: too much fun --- graphics/hgr/martymation/Makefile | 16 +- graphics/hgr/martymation/graphics/Makefile | 57 +++- .../hgr/martymation/graphics/new_page0.png | Bin 0 -> 28954 bytes .../hgr/martymation/graphics/new_page1.png | Bin 0 -> 29010 bytes .../graphics/{ => orig}/asteroid.page0 | Bin .../graphics/{ => orig}/asteroid.page1 | Bin graphics/hgr/martymation/marty.s | 262 ++++++++------- graphics/hgr/martymation/marty_original.s | 280 ++++++++++++++++ graphics/hgr/martymation/oregon.s | 314 ++++++++++++++++++ 9 files changed, 803 insertions(+), 126 deletions(-) create mode 100644 graphics/hgr/martymation/graphics/new_page0.png create mode 100644 graphics/hgr/martymation/graphics/new_page1.png rename graphics/hgr/martymation/graphics/{ => orig}/asteroid.page0 (100%) rename graphics/hgr/martymation/graphics/{ => orig}/asteroid.page1 (100%) create mode 100644 graphics/hgr/martymation/marty_original.s create mode 100644 graphics/hgr/martymation/oregon.s diff --git a/graphics/hgr/martymation/Makefile b/graphics/hgr/martymation/Makefile index cca7338d..fb39f94c 100644 --- a/graphics/hgr/martymation/Makefile +++ b/graphics/hgr/martymation/Makefile @@ -7,10 +7,11 @@ EMPTY_DISK = ../../../empty_disk all: marty.dsk -marty.dsk: HELLO MARTY +marty.dsk: HELLO MARTY OREGON cp $(EMPTY_DISK)/empty.dsk marty.dsk $(DOS33) -y marty.dsk SAVE A HELLO $(DOS33) -y marty.dsk BSAVE -a 0x6000 MARTY + $(DOS33) -y marty.dsk BSAVE -a 0x6000 OREGON ### @@ -19,7 +20,7 @@ HELLO: hello.bas ### -MARTY: marty.o +MARTY: marty.o ./graphics/graphics.inc ld65 -o MARTY marty.o -C $(LINKER_SCRIPTS)/apple2_6000.inc marty.o: marty.s @@ -27,5 +28,14 @@ marty.o: marty.s ### +OREGON: oregon.o ./graphics/new.inc + ld65 -o OREGON oregon.o -C $(LINKER_SCRIPTS)/apple2_6000.inc + +oregon.o: oregon.s + ca65 -o oregon.o oregon.s -l oregon.lst + + +### + clean: - rm -f *~ *.o *.lst HELLO MARTY + rm -f *~ *.o *.lst HELLO MARTY OREGON diff --git a/graphics/hgr/martymation/graphics/Makefile b/graphics/hgr/martymation/graphics/Makefile index 49da98a7..ba25b028 100644 --- a/graphics/hgr/martymation/graphics/Makefile +++ b/graphics/hgr/martymation/graphics/Makefile @@ -5,22 +5,61 @@ PNG2HGR = ../../../../utils/hgr-utils/png2hgr LZSA = ~/research/lzsa/lzsa/lzsa B2D = ../../../../utils/bmp2dhr/b2d -all: graphics.inc +all: asteroid.inc new.inc -graphics.inc: \ - asteroid.page0.lzsa asteroid.page1.lzsa - echo "asteroid0_lzsa: .incbin \"asteroid.page0.lzsa\"" > graphics.inc - echo "asteroid1_lzsa: .incbin \"asteroid.page1.lzsa\"" >> graphics.inc +asteroid.inc: asteroid.page0.lzsa asteroid.page1.lzsa + echo "page0_lzsa: .incbin \"asteroid.page0.lzsa\"" > asteroid.inc + echo "page1_lzsa: .incbin \"asteroid.page1.lzsa\"" >> asteroid.inc + +oregon.inc: oregon.page0.lzsa oregon.page1.lzsa + echo "page0_lzsa: .incbin \"oregon.page0.lzsa\"" > oregon.inc + echo "page1_lzsa: .incbin \"oregon.page1.lzsa\"" >> oregon.inc + +new.inc: new.page0.lzsa new.page1.lzsa + echo "page0_lzsa: .incbin \"new.page0.lzsa\"" > new.inc + echo "page1_lzsa: .incbin \"new.page1.lzsa\"" >> new.inc + +### + +asteroid_page0.hgr: asteroid_page0.png + $(PNG2HGR) asteroid_page0.png > asteroid_page0.hgr + +asteroid_page1.hgr: asteroid_page1.png + $(PNG2HGR) asteroid_page1.png > asteroid_page1.hgr + +### + +asteroid.page0.lzsa: asteroid_page0.hgr + $(LZSA) -r -f2 asteroid_page0.hgr asteroid.page0.lzsa + +asteroid.page1.lzsa: asteroid_page1.hgr + $(LZSA) -r -f2 asteroid_page1.hgr asteroid.page1.lzsa + +### + +new_page0.hgr: new_page0.png + $(PNG2HGR) new_page0.png > new_page0.hgr + +new_page1.hgr: new_page1.png + $(PNG2HGR) new_page1.png > new_page1.hgr + +### + +new.page0.lzsa: new_page0.hgr + $(LZSA) -r -f2 new_page0.hgr new.page0.lzsa + +new.page1.lzsa: new_page1.hgr + $(LZSA) -r -f2 new_page1.hgr new.page1.lzsa ### -asteroid.page0.lzsa: asteroid.page0 - $(LZSA) -r -f2 asteroid.page0 asteroid.page0.lzsa +oregon.page0.lzsa: oregon.page0 + $(LZSA) -r -f2 oregon.page0 oregon.page0.lzsa -asteroid.page1.lzsa: asteroid.page1 - $(LZSA) -r -f2 asteroid.page1 asteroid.page1.lzsa +oregon.page1.lzsa: oregon.page1 + $(LZSA) -r -f2 oregon.page1 oregon.page1.lzsa ### diff --git a/graphics/hgr/martymation/graphics/new_page0.png b/graphics/hgr/martymation/graphics/new_page0.png new file mode 100644 index 0000000000000000000000000000000000000000..b8ecb96032f05160c130514a618c0ea8164603cc GIT binary patch literal 28954 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 KRVh=ldGue##JIQs literal 0 HcmV?d00001 diff --git a/graphics/hgr/martymation/graphics/new_page1.png b/graphics/hgr/martymation/graphics/new_page1.png new file mode 100644 index 0000000000000000000000000000000000000000..18d6e1ccba2afbb0a4571ac8dd68cd78743355f4 GIT binary patch literal 29010 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 Ln(`$NEuQ@sZ|m>s literal 0 HcmV?d00001 diff --git a/graphics/hgr/martymation/graphics/asteroid.page0 b/graphics/hgr/martymation/graphics/orig/asteroid.page0 similarity index 100% rename from graphics/hgr/martymation/graphics/asteroid.page0 rename to graphics/hgr/martymation/graphics/orig/asteroid.page0 diff --git a/graphics/hgr/martymation/graphics/asteroid.page1 b/graphics/hgr/martymation/graphics/orig/asteroid.page1 similarity index 100% rename from graphics/hgr/martymation/graphics/asteroid.page1 rename to graphics/hgr/martymation/graphics/orig/asteroid.page1 diff --git a/graphics/hgr/martymation/marty.s b/graphics/hgr/martymation/marty.s index 046a9e90..9a3c1730 100644 --- a/graphics/hgr/martymation/marty.s +++ b/graphics/hgr/martymation/marty.s @@ -12,6 +12,11 @@ HGR_BITS = $1C ; 1C-40 has some things used by hires + +GBASL = $80 +GBASH = $81 +ROW = $82 + ; D0+ used by HGR routines HGR_COLOR = $E4 @@ -38,18 +43,18 @@ martymation: jsr HGR2 ; decompress images - lda #<(asteroid0_lzsa) + lda #<(page0_lzsa) sta getsrc_smc+1 - lda #>(asteroid0_lzsa) + lda #>(page0_lzsa) sta getsrc_smc+2 lda #$20 jsr decompress_lzsa2_fast - lda #<(asteroid1_lzsa) + lda #<(page1_lzsa) sta getsrc_smc+1 - lda #>(asteroid1_lzsa) + lda #>(page1_lzsa) sta getsrc_smc+2 lda #$40 @@ -58,127 +63,158 @@ martymation: jmp start_animation ; at $8503 -label_8506: +display_page: ; $8506 .byte $00 -label_8507: +frame_countdown: ; $8507 .byte $80 -label_8508: +disp_page2: ; $8508 .byte $00 ;label_8509: ; .byte $20 + ;================================ + ; Start Animation + ;================================ +start_animation: ; $853c -start_animation: -label_853c: - ldy #$40 - sty label_858b + ldy #$40 ; set draw page to PAGE2 ($4000) + sty draw_page ldx #$00 - stx label_8506 - inx + stx display_page ; set display page to PAGE1 + + inx ; but move it to PAGE2? + lda SET_GR ; set graphics $C050 lda FULLGR ; set fullscreen $C052 lda HIRES ; enable hires $C057 -label_8550: + +animate_loop: ; $8550 lda PAGE1,X ; set page - txa ; flip low bit (switch page?) - eor #$01 + txa ; switch display page + eor #$01 ; by flipping low bit tax - lda label_858b ; switch draw page + lda draw_page ; switch draw page $4000 <-> $2000 eor #$60 ; 0100 -> 0010, 0010 -> 0100 - sta label_858b + sta draw_page - stx label_8508 + stx disp_page2 ; ??????? lda #$11 - jsr WAIT ; pause + jsr WAIT ; pause a bit - jsr label_8597 + jsr cycle_colors lda KEYPRESS ; check keypress - bpl label_857a -keypressed: + bpl key_not_pressed + +key_was_pressed: sta KEYRESET ; clear keypress cmp #$81 ; check for ^A - beq label_8583 ; exit + beq do_exit ; exit cmp #$9B ; check for ESC - beq label_8583 ; exit -label_857a: - ldx label_8508 - dec label_8507 - bne label_8550 - rts -label_8583: - lda PAGE1 - inc label_8506 + beq do_exit ; exit + +key_not_pressed: + ldx disp_page2 ; get which page to display + dec frame_countdown ; count down frame + bne animate_loop + + jmp animate_loop ; FIXME + + rts ; exit if we hit limit? (why?) + +do_exit: + lda PAGE1 ; flip back to PAGE1 + inc display_page ; increment displayed page? (?) rts + label_858a: .byte $00 -label_858b: +draw_page: .byte $20 label_858c: .byte $01 -label_858d: +col_start: ; $858d .byte $00 label_858e: .byte $00 -label_858f: +col_end: ; $858f .byte $28 -label_8590: - .byte $C0,$80,$55,$2A,$80,$2A,$55 +row_end: ; $8590 + .byte $C0 -label_8597: - lda label_858e - ora label_858c + ;============================== + ; cycle colors + ;============================== + +cycle_colors: + lda label_858e ; ? + ora label_858c ; ? tay -label_859e: - sty $82 - lda label_9100,Y - and #$1f - ora label_858b - sta $81 - lda label_91c0,Y - sta $80 - ldy label_858d -label_85b2: - lda ($80),Y - tax - lda label_85d9,X - sta ($80),Y - iny - asl - asl - lda ($80),Y - bcs label_85c3 - eor #$01 -label_85c3: - tax - lda label_86d9,X - sta ($80),Y - iny - cpy label_858f - bne label_85b2 - ldy $82 +row_loop: + sty ROW ; which ROW we are working on + + lda hires_lookup_high,Y ; set high addr value for current ROW + and #$1f + ora draw_page ; setup for current draw page + sta GBASH + + lda hires_lookup_low,Y ; set low addr value for current ROW + sta GBASL + + ldy col_start +col_loop: + lda (GBASL),Y ; get current value + tax + + lda table1,X ; translate with table1 + sta (GBASL),Y + + iny ; point to next column + + asl ; shift color left by two + asl ; this puts bit 6 into carry + + ; FIXME: could use BIT/V for this? + + lda (GBASL),Y ; get next column + + bcs dont_toggle ; if bit 6 set, leave next alone + eor #$01 ; otherwise toggle low bit + +dont_toggle: + tax + lda table2,X ; translate using table2 + + sta (GBASL),Y ; store out + iny ; point to next column + + cpy col_end ; loop until done + bne col_loop + + ldy ROW ; ROW=ROW+2 iny iny - cpy label_8590 - bcc label_859e + + cpy row_end ; see if we are done + bcc row_loop ; if less than, then loop rts table1: ; $85d9 ... $86d8 -label_85d9: .byte $55,$56,$57,$54,$59,$5a,$5b,$58, $5d,$5e,$5f,$5c,$51,$52,$53,$50 ; 85d9...85e8 .byte $65,$66,$67,$64,$69,$6a,$6b,$68, $6d,$6e,$6f,$6c,$61,$62,$63,$60 ; .byte $75,$76,$77,$74,$79,$7a,$7b,$78, $7d,$7e,$7f,$7c,$71,$72,$73,$70 ; .byte $45,$46,$47,$44,$49,$4a,$4b,$48, $4d,$4e,$4f,$4c,$41,$42,$43,$40 ; ...8618 .byte $15,$16,$17,$14,$19,$1a,$1b,$18, $1d,$1e,$1f,$1c,$11,$12,$13,$10 ; .byte $25,$26,$27,$24,$29,$2a,$2b,$28, $2d,$2e,$2f,$2c,$21,$22,$23,$20 ; -.byte $35,$35,$37,$34,$39,$3a,$3b,$38, $3d,$3e,$3f,$3c,$31,$32,$33,$30 ; ...8648 +.byte $35,$36,$37,$34,$39,$3a,$3b,$38, $3d,$3e,$3f,$3c,$31,$32,$33,$30 ; ...8648 .byte $05,$06,$07,$04,$09,$0a,$0b,$08, $0d,$0e,$0f,$0c,$01,$02,$03,$00 ; + .byte $d5,$d6,$d7,$d4,$d9,$da,$db,$d8, $dd,$de,$df,$dc,$d1,$d2,$d3,$d0 ; .byte $e5,$e6,$e7,$e4,$e9,$ea,$eb,$e8, $ed,$ee,$ef,$ec,$e1,$e2,$e3,$e0 ; ...8678 .byte $f5,$f6,$f7,$f4,$f9,$fa,$fb,$f8, $fd,$fe,$ff,$fc,$f1,$f2,$f3,$f0 ; @@ -190,7 +226,6 @@ label_85d9: table2: ; $86d9 ... $87d8 -label_86d9: .byte $2a,$2b,$2c,$2d,$2e,$2f,$28,$29, $32,$33,$34,$35,$36,$37,$30,$31 ; 86d9...86e8 .byte $3a,$3b,$3c,$3d,$3e,$3f,$38,$39, $22,$23,$24,$25,$26,$27,$20,$21 ; .byte $4a,$4b,$4c,$4d,$4e,$4f,$48,$49, $52,$53,$54,$55,$56,$57,$50,$51 ; @@ -199,6 +234,7 @@ label_86d9: .byte $7a,$7b,$7c,$7d,$7e,$7f,$78,$79, $62,$63,$64,$65,$66,$67,$60,$61 ; .byte $0a,$0b,$0c,$0d,$0e,$0f,$08,$09, $12,$13,$14,$15,$16,$17,$10,$11 ; .byte $1a,$1b,$1c,$1d,$1e,$1f,$18,$19, $02,$03,$04,$05,$06,$07,$00,$01 ; + .byte $aa,$ab,$ac,$ad,$ae,$af,$a8,$a9, $b2,$b3,$b4,$b5,$b6,$b7,$b0,$b1 ; .byte $ba,$bb,$bc,$bd,$be,$bf,$b8,$b9, $a2,$a3,$a4,$a5,$a6,$a7,$a0,$a1 ; .byte $ca,$cb,$cc,$cd,$ce,$cf,$c8,$c9, $d2,$d3,$d4,$d5,$d6,$d7,$d0,$d1 ; @@ -209,46 +245,44 @@ label_86d9: .byte $9a,$9b,$9c,$9d,$9e,$9f,$98,$99, $82,$83,$84,$85,$86,$87,$80,$81 ; +hires_lookup_high: ; $9100 + .byte $20,$24,$28,$2c, $30,$34,$38,$3c + .byte $20,$24,$28,$2c, $30,$34,$38,$3c + + .byte $21,$25,$29,$2d, $31,$35,$39,$3d + .byte $21,$25,$29,$2d, $31,$35,$39,$3d + + .byte $22,$26,$2a,$2e, $32,$36,$3a,$3e + .byte $22,$26,$2a,$2e, $32,$36,$3a,$3e + + .byte $23,$27,$2b,$2f, $33,$37,$3b,$3f + .byte $23,$27,$2b,$2f, $33,$37,$3b,$3f + + .byte $20,$24,$28,$2c, $30,$34,$38,$3c + .byte $20,$24,$28,$2c, $30,$34,$38,$3c + + .byte $21,$25,$29,$2d, $31,$35,$39,$3d + .byte $21,$25,$29,$2d, $31,$35,$39,$3d + + .byte $22,$26,$2a,$2e, $32,$36,$3a,$3e + .byte $22,$26,$2a,$2e, $32,$36,$3a,$3e + + .byte $23,$27,$2b,$2f, $33,$37,$3b,$3f + .byte $23,$27,$2b,$2f, $33,$37,$3b,$3f + + .byte $20,$24,$28,$2c, $30,$34,$38,$3c + .byte $20,$24,$28,$2c, $30,$34,$38,$3c + + .byte $21,$25,$29,$2d, $31,$35,$39,$3d + .byte $21,$25,$29,$2d, $31,$35,$39,$3d + + .byte $22,$26,$2a,$2e, $32,$36,$3a,$3e + .byte $22,$26,$2a,$2e, $32,$36,$3a,$3e + + .byte $23,$27,$2b,$2f, $33,$37,$3b,$3f + .byte $23,$27,$2b,$2f, $33,$37,$3b,$3f + hires_lookup_low: -label_9100: - .byte $20,$24,$28,$2c, $30,$34,$38,$3c - .byte $20,$24,$28,$2c, $30,$34,$38,$3c - - .byte $21,$25,$29,$2d, $31,$35,$39,$3d - .byte $21,$25,$29,$2d, $31,$35,$39,$3d - - .byte $22,$26,$2a,$2e, $32,$36,$3a,$3e - .byte $22,$26,$2a,$2e, $32,$36,$3a,$3e - - .byte $23,$27,$2b,$2f, $33,$37,$3b,$3f - .byte $23,$27,$2b,$2f, $33,$37,$3b,$3f - - .byte $20,$24,$28,$2c, $30,$34,$38,$3c - .byte $20,$24,$28,$2c, $30,$34,$38,$3c - - .byte $21,$25,$29,$2d, $31,$35,$39,$3d - .byte $21,$25,$29,$2d, $31,$35,$39,$3d - - .byte $22,$26,$2a,$2e, $32,$36,$3a,$3e - .byte $22,$26,$2a,$2e, $32,$36,$3a,$3e - - .byte $23,$27,$2b,$2f, $33,$37,$3b,$3f - .byte $23,$27,$2b,$2f, $33,$37,$3b,$3f - - .byte $20,$24,$28,$2c, $30,$34,$38,$3c - .byte $20,$24,$28,$2c, $30,$34,$38,$3c - - .byte $21,$25,$29,$2d, $31,$35,$39,$3d - .byte $21,$25,$29,$2d, $31,$35,$39,$3d - - .byte $22,$26,$2a,$2e, $32,$36,$3a,$3e - .byte $22,$26,$2a,$2e, $32,$36,$3a,$3e - - .byte $23,$27,$2b,$2f, $33,$37,$3b,$3f - .byte $23,$27,$2b,$2f, $33,$37,$3b,$3f - -hires_lookup_high: -label_91c0: .byte $00,$00,$00,$00, $00,$00,$00,$00 .byte $80,$80,$80,$80, $80,$80,$80,$80 .byte $00,$00,$00,$00, $00,$00,$00,$00 @@ -277,4 +311,4 @@ label_91c0: .byte $D0,$D0,$D0,$D0, $D0,$D0,$D0,$D0 .include "decompress_fast_v2.s" -.include "graphics/graphics.inc" +.include "graphics/new.inc" diff --git a/graphics/hgr/martymation/marty_original.s b/graphics/hgr/martymation/marty_original.s new file mode 100644 index 00000000..4466ad5e --- /dev/null +++ b/graphics/hgr/martymation/marty_original.s @@ -0,0 +1,280 @@ +; Martymation implementation + +; based on the animation routines by +; Martin Kahn found on side B of the Broderbund Color Printshop Disk, Side 2 + +; by Vince `deater` Weaver + +; zero page locations + +NIBCOUNT = $00 +HGR_BITS = $1C + +; 1C-40 has some things used by hires + +; D0+ used by HGR routines + +HGR_COLOR = $E4 +HGR_PAGE = $E6 + +; soft-switches +KEYPRESS = $C000 +KEYRESET = $C010 +SET_GR = $C050 +FULLGR = $C052 +PAGE1 = $C054 +HIRES = $C057 + +; ROM routines + +HGR2 = $F3D8 ; set hires page2 and clear $4000-$5fff +HGR = $F3E2 ; set hires page1 and clear $2000-$3fff +HPLOT0 = $F457 ; plot at (Y,X), (A) +HCOLOR1 = $F6F0 ; set HGR_COLOR to value in X +WAIT = $FCA8 ; delay 1/2(26+27A+5A^2) us + +martymation: + + jsr HGR2 + + ; decompress images + lda #<(asteroid0_lzsa) + sta getsrc_smc+1 + lda #>(asteroid0_lzsa) + sta getsrc_smc+2 + + lda #$20 + + jsr decompress_lzsa2_fast + + lda #<(asteroid1_lzsa) + sta getsrc_smc+1 + lda #>(asteroid1_lzsa) + sta getsrc_smc+2 + + lda #$40 + + jsr decompress_lzsa2_fast + + jmp start_animation ; at $8503 + +label_8506: + .byte $00 +label_8507: + .byte $80 +label_8508: + .byte $00 +;label_8509: +; .byte $20 + + +start_animation: +label_853c: + ldy #$40 + sty label_858b + + ldx #$00 + stx label_8506 + inx + lda SET_GR ; set graphics $C050 + lda FULLGR ; set fullscreen $C052 + lda HIRES ; enable hires $C057 +label_8550: + lda PAGE1,X ; set page + + txa ; flip low bit (switch page?) + eor #$01 + tax + + lda label_858b ; switch draw page + eor #$60 ; 0100 -> 0010, 0010 -> 0100 + sta label_858b + + stx label_8508 + + lda #$11 + jsr WAIT ; pause + + jsr label_8597 + + lda KEYPRESS ; check keypress + bpl label_857a +keypressed: + sta KEYRESET ; clear keypress + cmp #$81 ; check for ^A + beq label_8583 ; exit + cmp #$9B ; check for ESC + beq label_8583 ; exit +label_857a: + ldx label_8508 + dec label_8507 + bne label_8550 + rts +label_8583: + lda PAGE1 + inc label_8506 + rts +label_858a: + .byte $00 +label_858b: + .byte $20 +label_858c: + .byte $01 +label_858d: + .byte $00 +label_858e: + .byte $00 +label_858f: + .byte $28 +label_8590: + .byte $C0,$80,$55,$2A,$80,$2A,$55 + +label_8597: + lda label_858e + ora label_858c + tay +label_859e: + sty $82 + lda label_9100,Y + and #$1f + ora label_858b + sta $81 + lda label_91c0,Y + sta $80 + ldy label_858d +label_85b2: + lda ($80),Y + tax + lda label_85d9,X + sta ($80),Y + iny + asl + asl + lda ($80),Y + bcs label_85c3 + eor #$01 +label_85c3: + tax + lda label_86d9,X + sta ($80),Y + iny + cpy label_858f + bne label_85b2 + + ldy $82 + iny + iny + cpy label_8590 + bcc label_859e + + rts + +table1: ; $85d9 ... $86d8 +label_85d9: +.byte $55,$56,$57,$54,$59,$5a,$5b,$58, $5d,$5e,$5f,$5c,$51,$52,$53,$50 ; 85d9...85e8 +.byte $65,$66,$67,$64,$69,$6a,$6b,$68, $6d,$6e,$6f,$6c,$61,$62,$63,$60 ; +.byte $75,$76,$77,$74,$79,$7a,$7b,$78, $7d,$7e,$7f,$7c,$71,$72,$73,$70 ; +.byte $45,$46,$47,$44,$49,$4a,$4b,$48, $4d,$4e,$4f,$4c,$41,$42,$43,$40 ; ...8618 +.byte $15,$16,$17,$14,$19,$1a,$1b,$18, $1d,$1e,$1f,$1c,$11,$12,$13,$10 ; +.byte $25,$26,$27,$24,$29,$2a,$2b,$28, $2d,$2e,$2f,$2c,$21,$22,$23,$20 ; +.byte $35,$36,$37,$34,$39,$3a,$3b,$38, $3d,$3e,$3f,$3c,$31,$32,$33,$30 ; ...8648 +.byte $05,$06,$07,$04,$09,$0a,$0b,$08, $0d,$0e,$0f,$0c,$01,$02,$03,$00 ; +.byte $d5,$d6,$d7,$d4,$d9,$da,$db,$d8, $dd,$de,$df,$dc,$d1,$d2,$d3,$d0 ; +.byte $e5,$e6,$e7,$e4,$e9,$ea,$eb,$e8, $ed,$ee,$ef,$ec,$e1,$e2,$e3,$e0 ; ...8678 +.byte $f5,$f6,$f7,$f4,$f9,$fa,$fb,$f8, $fd,$fe,$ff,$fc,$f1,$f2,$f3,$f0 ; +.byte $c5,$c6,$c7,$c4,$c9,$ca,$cb,$c8, $cd,$ce,$cf,$cc,$c1,$c2,$c3,$c0 ; +.byte $95,$96,$97,$94,$99,$9a,$9b,$98, $9d,$9e,$9f,$9c,$91,$92,$93,$90 ; +.byte $a5,$a6,$a7,$a4,$a9,$aa,$ab,$a8, $ad,$ae,$af,$ac,$a1,$a2,$a3,$a0 ; ...86b8 +.byte $b5,$b6,$b7,$b4,$b9,$ba,$bb,$b8, $bd,$be,$bf,$bc,$b1,$b2,$b3,$b0 ; +.byte $85,$86,$87,$84,$89,$8a,$8b,$88, $8d,$8e,$8f,$8c,$81,$82,$83,$80 ; + + +table2: ; $86d9 ... $87d8 +label_86d9: +.byte $2a,$2b,$2c,$2d,$2e,$2f,$28,$29, $32,$33,$34,$35,$36,$37,$30,$31 ; 86d9...86e8 +.byte $3a,$3b,$3c,$3d,$3e,$3f,$38,$39, $22,$23,$24,$25,$26,$27,$20,$21 ; +.byte $4a,$4b,$4c,$4d,$4e,$4f,$48,$49, $52,$53,$54,$55,$56,$57,$50,$51 ; +.byte $5a,$5b,$5c,$5d,$5e,$5f,$58,$59, $42,$43,$44,$45,$46,$47,$40,$41 ; +.byte $6a,$6b,$6c,$6d,$6e,$6f,$68,$69, $72,$73,$74,$75,$76,$77,$70,$71 ; +.byte $7a,$7b,$7c,$7d,$7e,$7f,$78,$79, $62,$63,$64,$65,$66,$67,$60,$61 ; +.byte $0a,$0b,$0c,$0d,$0e,$0f,$08,$09, $12,$13,$14,$15,$16,$17,$10,$11 ; +.byte $1a,$1b,$1c,$1d,$1e,$1f,$18,$19, $02,$03,$04,$05,$06,$07,$00,$01 ; +.byte $aa,$ab,$ac,$ad,$ae,$af,$a8,$a9, $b2,$b3,$b4,$b5,$b6,$b7,$b0,$b1 ; +.byte $ba,$bb,$bc,$bd,$be,$bf,$b8,$b9, $a2,$a3,$a4,$a5,$a6,$a7,$a0,$a1 ; +.byte $ca,$cb,$cc,$cd,$ce,$cf,$c8,$c9, $d2,$d3,$d4,$d5,$d6,$d7,$d0,$d1 ; +.byte $da,$db,$dc,$dd,$de,$df,$d8,$d9, $c2,$c3,$c4,$c5,$c6,$c7,$c0,$c1 ; +.byte $ea,$eb,$ec,$ed,$ee,$ef,$e8,$e9, $f2,$f3,$f4,$f5,$f6,$f7,$f0,$f1 ; +.byte $fa,$fb,$fc,$fd,$fe,$ff,$f8,$f9, $e2,$e3,$e4,$e5,$e6,$e7,$e0,$e1 ; +.byte $8a,$8b,$8c,$8d,$8e,$8f,$88,$89, $92,$93,$94,$95,$96,$97,$90,$91 ; +.byte $9a,$9b,$9c,$9d,$9e,$9f,$98,$99, $82,$83,$84,$85,$86,$87,$80,$81 ; + + +hires_lookup_high: +label_9100: + .byte $20,$24,$28,$2c, $30,$34,$38,$3c + .byte $20,$24,$28,$2c, $30,$34,$38,$3c + + .byte $21,$25,$29,$2d, $31,$35,$39,$3d + .byte $21,$25,$29,$2d, $31,$35,$39,$3d + + .byte $22,$26,$2a,$2e, $32,$36,$3a,$3e + .byte $22,$26,$2a,$2e, $32,$36,$3a,$3e + + .byte $23,$27,$2b,$2f, $33,$37,$3b,$3f + .byte $23,$27,$2b,$2f, $33,$37,$3b,$3f + + .byte $20,$24,$28,$2c, $30,$34,$38,$3c + .byte $20,$24,$28,$2c, $30,$34,$38,$3c + + .byte $21,$25,$29,$2d, $31,$35,$39,$3d + .byte $21,$25,$29,$2d, $31,$35,$39,$3d + + .byte $22,$26,$2a,$2e, $32,$36,$3a,$3e + .byte $22,$26,$2a,$2e, $32,$36,$3a,$3e + + .byte $23,$27,$2b,$2f, $33,$37,$3b,$3f + .byte $23,$27,$2b,$2f, $33,$37,$3b,$3f + + .byte $20,$24,$28,$2c, $30,$34,$38,$3c + .byte $20,$24,$28,$2c, $30,$34,$38,$3c + + .byte $21,$25,$29,$2d, $31,$35,$39,$3d + .byte $21,$25,$29,$2d, $31,$35,$39,$3d + + .byte $22,$26,$2a,$2e, $32,$36,$3a,$3e + .byte $22,$26,$2a,$2e, $32,$36,$3a,$3e + + .byte $23,$27,$2b,$2f, $33,$37,$3b,$3f + .byte $23,$27,$2b,$2f, $33,$37,$3b,$3f + +hires_lookup_low: +label_91c0: + .byte $00,$00,$00,$00, $00,$00,$00,$00 + .byte $80,$80,$80,$80, $80,$80,$80,$80 + .byte $00,$00,$00,$00, $00,$00,$00,$00 + .byte $80,$80,$80,$80, $80,$80,$80,$80 + .byte $00,$00,$00,$00, $00,$00,$00,$00 + .byte $80,$80,$80,$80, $80,$80,$80,$80 + .byte $00,$00,$00,$00, $00,$00,$00,$00 + .byte $80,$80,$80,$80, $80,$80,$80,$80 + + .byte $28,$28,$28,$28, $28,$28,$28,$28 + .byte $A8,$A8,$A8,$A8, $A8,$A8,$A8,$A8 + .byte $28,$28,$28,$28, $28,$28,$28,$28 + .byte $A8,$A8,$A8,$A8, $A8,$A8,$A8,$A8 + .byte $28,$28,$28,$28, $28,$28,$28,$28 + .byte $A8,$A8,$A8,$A8, $A8,$A8,$A8,$A8 + .byte $28,$28,$28,$28, $28,$28,$28,$28 + .byte $A8,$A8,$A8,$A8, $A8,$A8,$A8,$A8 + + .byte $50,$50,$50,$50, $50,$50,$50,$50 + .byte $D0,$D0,$D0,$D0, $D0,$D0,$D0,$D0 + .byte $50,$50,$50,$50, $50,$50,$50,$50 + .byte $D0,$D0,$D0,$D0, $D0,$D0,$D0,$D0 + .byte $50,$50,$50,$50, $50,$50,$50,$50 + .byte $D0,$D0,$D0,$D0, $D0,$D0,$D0,$D0 + .byte $50,$50,$50,$50, $50,$50,$50,$50 + .byte $D0,$D0,$D0,$D0, $D0,$D0,$D0,$D0 + +.include "decompress_fast_v2.s" +.include "graphics/graphics.inc" diff --git a/graphics/hgr/martymation/oregon.s b/graphics/hgr/martymation/oregon.s new file mode 100644 index 00000000..d5d43efd --- /dev/null +++ b/graphics/hgr/martymation/oregon.s @@ -0,0 +1,314 @@ +; Martymation implementation + +; based on the animation routines by +; Martin Kahn found on side B of the Broderbund Color Printshop Disk, Side 2 + +; by Vince `deater` Weaver + +; zero page locations + +NIBCOUNT = $00 +HGR_BITS = $1C + +; 1C-40 has some things used by hires + + +GBASL = $80 +GBASH = $81 +ROW = $82 + +; D0+ used by HGR routines + +HGR_COLOR = $E4 +HGR_PAGE = $E6 + +; soft-switches +KEYPRESS = $C000 +KEYRESET = $C010 +SET_GR = $C050 +FULLGR = $C052 +PAGE1 = $C054 +HIRES = $C057 + +; ROM routines + +HGR2 = $F3D8 ; set hires page2 and clear $4000-$5fff +HGR = $F3E2 ; set hires page1 and clear $2000-$3fff +HPLOT0 = $F457 ; plot at (Y,X), (A) +HCOLOR1 = $F6F0 ; set HGR_COLOR to value in X +WAIT = $FCA8 ; delay 1/2(26+27A+5A^2) us + +martymation: + + jsr HGR2 + + ; decompress images + lda #<(page0_lzsa) + sta getsrc_smc+1 + lda #>(page0_lzsa) + sta getsrc_smc+2 + + lda #$20 + + jsr decompress_lzsa2_fast + + lda #<(page1_lzsa) + sta getsrc_smc+1 + lda #>(page1_lzsa) + sta getsrc_smc+2 + + lda #$40 + + jsr decompress_lzsa2_fast + + jmp start_animation ; at $8503 + +display_page: ; $8506 + .byte $00 +frame_countdown: ; $8507 + .byte $80 +disp_page2: ; $8508 + .byte $00 +;label_8509: +; .byte $20 + + ;================================ + ; Start Animation + ;================================ +start_animation: ; $853c + + ldy #$40 ; set draw page to PAGE2 ($4000) + sty draw_page + + ldx #$00 + stx display_page ; set display page to PAGE1 + + inx ; but move it to PAGE2? + + lda SET_GR ; set graphics $C050 + lda FULLGR ; set fullscreen $C052 + lda HIRES ; enable hires $C057 + +animate_loop: ; $8550 + lda PAGE1,X ; set page + + txa ; switch display page + eor #$01 ; by flipping low bit + tax + + lda draw_page ; switch draw page $4000 <-> $2000 + eor #$60 ; 0100 -> 0010, 0010 -> 0100 + sta draw_page + + stx disp_page2 ; ??????? + + lda #$11 + jsr WAIT ; pause a bit + + jsr cycle_colors + + lda KEYPRESS ; check keypress + bpl key_not_pressed + +key_was_pressed: + sta KEYRESET ; clear keypress + cmp #$81 ; check for ^A + beq do_exit ; exit + cmp #$9B ; check for ESC + beq do_exit ; exit + +key_not_pressed: + ldx disp_page2 ; get which page to display + dec frame_countdown ; count down frame + bne animate_loop + + jmp animate_loop ; FIXME + + rts ; exit if we hit limit? (why?) + +do_exit: + lda PAGE1 ; flip back to PAGE1 + inc display_page ; increment displayed page? (?) + rts + +label_858a: + .byte $00 +draw_page: + .byte $20 +label_858c: + .byte $01 +col_start: ; $858d + .byte $00 +label_858e: + .byte $00 +col_end: ; $858f + .byte $28 +row_end: ; $8590 + .byte 110 + + ;============================== + ; cycle colors + ;============================== + +cycle_colors: + lda label_858e ; ? + ora label_858c ; ? + tay + +row_loop: + sty ROW ; which ROW we are working on + + lda hires_lookup_high,Y ; set high addr value for current ROW + and #$1f + ora draw_page ; setup for current draw page + sta GBASH + + lda hires_lookup_low,Y ; set low addr value for current ROW + sta GBASL + + ldy col_start +col_loop: + lda (GBASL),Y ; get current value + tax + + lda table1,X ; translate with table1 + sta (GBASL),Y + + iny ; point to next column + + asl ; shift color left by two + asl ; this puts bit 6 into carry + + ; FIXME: could use BIT/V for this? + + lda (GBASL),Y ; get next column + + bcs dont_toggle ; if bit 6 set, leave next alone + eor #$01 ; otherwise toggle low bit + +dont_toggle: + tax + lda table2,X ; translate using table2 + + sta (GBASL),Y ; store out + iny ; point to next column + + cpy col_end ; loop until done + bne col_loop + + ldy ROW ; ROW=ROW+2 + iny + iny + + cpy row_end ; see if we are done + bcc row_loop ; if less than, then loop + + rts + +table1: ; $85d9 ... $86d8 +.byte $55,$56,$57,$54,$59,$5a,$5b,$58, $5d,$5e,$5f,$5c,$51,$52,$53,$50 ; 85d9...85e8 +.byte $65,$66,$67,$64,$69,$6a,$6b,$68, $6d,$6e,$6f,$6c,$61,$62,$63,$60 ; +.byte $75,$76,$77,$74,$79,$7a,$7b,$78, $7d,$7e,$7f,$7c,$71,$72,$73,$70 ; +.byte $45,$46,$47,$44,$49,$4a,$4b,$48, $4d,$4e,$4f,$4c,$41,$42,$43,$40 ; ...8618 +.byte $15,$16,$17,$14,$19,$1a,$1b,$18, $1d,$1e,$1f,$1c,$11,$12,$13,$10 ; +.byte $25,$26,$27,$24,$29,$2a,$2b,$28, $2d,$2e,$2f,$2c,$21,$22,$23,$20 ; +.byte $35,$36,$37,$34,$39,$3a,$3b,$38, $3d,$3e,$3f,$3c,$31,$32,$33,$30 ; ...8648 +.byte $05,$06,$07,$04,$09,$0a,$0b,$08, $0d,$0e,$0f,$0c,$01,$02,$03,$00 ; + +.byte $d5,$d6,$d7,$d4,$d9,$da,$db,$d8, $dd,$de,$df,$dc,$d1,$d2,$d3,$d0 ; +.byte $e5,$e6,$e7,$e4,$e9,$ea,$eb,$e8, $ed,$ee,$ef,$ec,$e1,$e2,$e3,$e0 ; ...8678 +.byte $f5,$f6,$f7,$f4,$f9,$fa,$fb,$f8, $fd,$fe,$ff,$fc,$f1,$f2,$f3,$f0 ; +.byte $c5,$c6,$c7,$c4,$c9,$ca,$cb,$c8, $cd,$ce,$cf,$cc,$c1,$c2,$c3,$c0 ; +.byte $95,$96,$97,$94,$99,$9a,$9b,$98, $9d,$9e,$9f,$9c,$91,$92,$93,$90 ; +.byte $a5,$a6,$a7,$a4,$a9,$aa,$ab,$a8, $ad,$ae,$af,$ac,$a1,$a2,$a3,$a0 ; ...86b8 +.byte $b5,$b6,$b7,$b4,$b9,$ba,$bb,$b8, $bd,$be,$bf,$bc,$b1,$b2,$b3,$b0 ; +.byte $85,$86,$87,$84,$89,$8a,$8b,$88, $8d,$8e,$8f,$8c,$81,$82,$83,$80 ; + + +table2: ; $86d9 ... $87d8 +.byte $2a,$2b,$2c,$2d,$2e,$2f,$28,$29, $32,$33,$34,$35,$36,$37,$30,$31 ; 86d9...86e8 +.byte $3a,$3b,$3c,$3d,$3e,$3f,$38,$39, $22,$23,$24,$25,$26,$27,$20,$21 ; +.byte $4a,$4b,$4c,$4d,$4e,$4f,$48,$49, $52,$53,$54,$55,$56,$57,$50,$51 ; +.byte $5a,$5b,$5c,$5d,$5e,$5f,$58,$59, $42,$43,$44,$45,$46,$47,$40,$41 ; +.byte $6a,$6b,$6c,$6d,$6e,$6f,$68,$69, $72,$73,$74,$75,$76,$77,$70,$71 ; +.byte $7a,$7b,$7c,$7d,$7e,$7f,$78,$79, $62,$63,$64,$65,$66,$67,$60,$61 ; +.byte $0a,$0b,$0c,$0d,$0e,$0f,$08,$09, $12,$13,$14,$15,$16,$17,$10,$11 ; +.byte $1a,$1b,$1c,$1d,$1e,$1f,$18,$19, $02,$03,$04,$05,$06,$07,$00,$01 ; + +.byte $aa,$ab,$ac,$ad,$ae,$af,$a8,$a9, $b2,$b3,$b4,$b5,$b6,$b7,$b0,$b1 ; +.byte $ba,$bb,$bc,$bd,$be,$bf,$b8,$b9, $a2,$a3,$a4,$a5,$a6,$a7,$a0,$a1 ; +.byte $ca,$cb,$cc,$cd,$ce,$cf,$c8,$c9, $d2,$d3,$d4,$d5,$d6,$d7,$d0,$d1 ; +.byte $da,$db,$dc,$dd,$de,$df,$d8,$d9, $c2,$c3,$c4,$c5,$c6,$c7,$c0,$c1 ; +.byte $ea,$eb,$ec,$ed,$ee,$ef,$e8,$e9, $f2,$f3,$f4,$f5,$f6,$f7,$f0,$f1 ; +.byte $fa,$fb,$fc,$fd,$fe,$ff,$f8,$f9, $e2,$e3,$e4,$e5,$e6,$e7,$e0,$e1 ; +.byte $8a,$8b,$8c,$8d,$8e,$8f,$88,$89, $92,$93,$94,$95,$96,$97,$90,$91 ; +.byte $9a,$9b,$9c,$9d,$9e,$9f,$98,$99, $82,$83,$84,$85,$86,$87,$80,$81 ; + + +hires_lookup_high: ; $9100 + .byte $20,$24,$28,$2c, $30,$34,$38,$3c + .byte $20,$24,$28,$2c, $30,$34,$38,$3c + + .byte $21,$25,$29,$2d, $31,$35,$39,$3d + .byte $21,$25,$29,$2d, $31,$35,$39,$3d + + .byte $22,$26,$2a,$2e, $32,$36,$3a,$3e + .byte $22,$26,$2a,$2e, $32,$36,$3a,$3e + + .byte $23,$27,$2b,$2f, $33,$37,$3b,$3f + .byte $23,$27,$2b,$2f, $33,$37,$3b,$3f + + .byte $20,$24,$28,$2c, $30,$34,$38,$3c + .byte $20,$24,$28,$2c, $30,$34,$38,$3c + + .byte $21,$25,$29,$2d, $31,$35,$39,$3d + .byte $21,$25,$29,$2d, $31,$35,$39,$3d + + .byte $22,$26,$2a,$2e, $32,$36,$3a,$3e + .byte $22,$26,$2a,$2e, $32,$36,$3a,$3e + + .byte $23,$27,$2b,$2f, $33,$37,$3b,$3f + .byte $23,$27,$2b,$2f, $33,$37,$3b,$3f + + .byte $20,$24,$28,$2c, $30,$34,$38,$3c + .byte $20,$24,$28,$2c, $30,$34,$38,$3c + + .byte $21,$25,$29,$2d, $31,$35,$39,$3d + .byte $21,$25,$29,$2d, $31,$35,$39,$3d + + .byte $22,$26,$2a,$2e, $32,$36,$3a,$3e + .byte $22,$26,$2a,$2e, $32,$36,$3a,$3e + + .byte $23,$27,$2b,$2f, $33,$37,$3b,$3f + .byte $23,$27,$2b,$2f, $33,$37,$3b,$3f + +hires_lookup_low: + .byte $00,$00,$00,$00, $00,$00,$00,$00 + .byte $80,$80,$80,$80, $80,$80,$80,$80 + .byte $00,$00,$00,$00, $00,$00,$00,$00 + .byte $80,$80,$80,$80, $80,$80,$80,$80 + .byte $00,$00,$00,$00, $00,$00,$00,$00 + .byte $80,$80,$80,$80, $80,$80,$80,$80 + .byte $00,$00,$00,$00, $00,$00,$00,$00 + .byte $80,$80,$80,$80, $80,$80,$80,$80 + + .byte $28,$28,$28,$28, $28,$28,$28,$28 + .byte $A8,$A8,$A8,$A8, $A8,$A8,$A8,$A8 + .byte $28,$28,$28,$28, $28,$28,$28,$28 + .byte $A8,$A8,$A8,$A8, $A8,$A8,$A8,$A8 + .byte $28,$28,$28,$28, $28,$28,$28,$28 + .byte $A8,$A8,$A8,$A8, $A8,$A8,$A8,$A8 + .byte $28,$28,$28,$28, $28,$28,$28,$28 + .byte $A8,$A8,$A8,$A8, $A8,$A8,$A8,$A8 + + .byte $50,$50,$50,$50, $50,$50,$50,$50 + .byte $D0,$D0,$D0,$D0, $D0,$D0,$D0,$D0 + .byte $50,$50,$50,$50, $50,$50,$50,$50 + .byte $D0,$D0,$D0,$D0, $D0,$D0,$D0,$D0 + .byte $50,$50,$50,$50, $50,$50,$50,$50 + .byte $D0,$D0,$D0,$D0, $D0,$D0,$D0,$D0 + .byte $50,$50,$50,$50, $50,$50,$50,$50 + .byte $D0,$D0,$D0,$D0, $D0,$D0,$D0,$D0 + +.include "decompress_fast_v2.s" +.include "graphics/new.inc"