From 66dc5ba535d75f4539fd206f46e072042b5c4681 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Sun, 23 Sep 2018 13:44:03 -0400 Subject: [PATCH] megademo: c64 vapor lock --- megademo/c64_opener.s | 106 +++++++++++++++++++++++++++++---------- megademo/c64_updated.png | Bin 5732 -> 5689 bytes megademo/megademo.dsk | Bin 143360 -> 143360 bytes megademo/megademo.s | 1 + 4 files changed, 81 insertions(+), 26 deletions(-) diff --git a/megademo/c64_opener.s b/megademo/c64_opener.s index 75b27202..1f696abf 100644 --- a/megademo/c64_opener.s +++ b/megademo/c64_opener.s @@ -85,19 +85,53 @@ loopcoB:dex ; 2 c64_split: + ; curtain open + ; 0 = delay 65 + ; 1 = delay 25+18, 4 open, 18 + ; 2 = delay 25+16, 8 open, 16 + ; 3 = delay 25+14, 12 open, 14 + ; 3 = delay 25+12, 16 open, 12 + ; 3 = delay 25+10, 20 open, 10 + ; 3 = delay 25+ 8, 24 open, 8 + ; 3 = delay 25+ 6, 28 open, 6 + ; 3 = delay 25+ 4, 32 open, 4 + ; 3 = delay 25+ 2, 36 open, 2 + ; 3 = delay 25+ 0, 40 open, 0 + + ldx #192 ; 2 +xloop: + lda #14 ; 18-4 ; 2 + jsr delay_a ; 39 + ;=========== + ; 41 + + bit SET_TEXT ; 4 + nop ; 2 + nop ; 2 + bit SET_GR ; 4 + ;=========== + ; 12 + + nop ; 2 + nop ; 2 + lda $0 ; 3 + dex ; 2 + bne xloop ; 3 + ;============ + ; 12 ; kill 65*192 = 12480 ; Try X=24 Y=99 cycles=12475 R5 - nop - lda $0 - - ldy #99 ; 2 -loopcoC:ldx #24 ; 2 -loopcoD:dex ; 2 - bne loopcoD ; 2nt/3 - dey ; 2 - bne loopcoC ; 2nt/3 +; nop +; lda $0 +; +; ldy #99 ; 2 +;loopcoC:ldx #24 ; 2 +;loopcoD:dex ; 2 +; bne loopcoD ; 2nt/3 +; dey ; 2 +; bne loopcoC ; 2nt/3 @@ -106,32 +140,50 @@ loopcoD:dex ; 2 ;====================================================== ; do_nothing should be 4550 ; -10 keyboard handling - ; = 4540 + ; -1 leftover from main screen + ; -15 + ; -12 + ; -46 + ; = 4466 + + ; run the 2Hz counter, overflow at 30 60Hz frames clc ; 2 lda BOTTOM ; 3 adc #1 ; 2 sta BOTTOM ; 3 cmp #30 ; 2 - bne not_thirty ; 3/2 + bne not_thirty ; 3 + ;=========== + ; 15 thirty: + ; -1 lda #0 ; 2 sta BOTTOM ; 3 - lda TOP ; 3 - clc ; 2 - adc #1 ; 2 - sta TOP ; 3 + inc TOP ; 5 + jmp done_thirty ; 3 + ;=========== + ; 12 + not_thirty: + lda TOP ; 3 + lda TOP ; 3 + lda TOP ; 3 + lda TOP ; 3 + ;=========== + ; 12 - - +done_thirty: ; handle the cursor ; FIXME: not aligned well. Do we care? lda TOP ; 3 and #$1 ; 2 - beq cursor_off ; 3/2 + beq cursor_off ; 3 + ;============ + ; 8 cursor_on: + ; -1 ; it's lSB first ; blue is 6 ; 1 1111110 @@ -149,6 +201,8 @@ cursor_on: sta $2F80 ; 59 ; 4 jmp cursor_done ; 3 + ;============ + ; 38 cursor_off: ; blue is 6 ; 1 1010101 @@ -164,20 +218,20 @@ cursor_off: sta $3F00 ; 55 ; 4 sta $2780 ; 57 ; 4 sta $2F80 ; 59 ; 4 - + nop ; 2 + ;============ + ; 38 cursor_done: - - - ; Try X=9 Y=89 cycles=4540 - + ; Try X=17 Y=49 cycles=4460 R6 + nop + nop nop - lda $0 - ldy #89 ; 2 -loopcoE:ldx #9 ; 2 + ldy #49 ; 2 +loopcoE:ldx #17 ; 2 loopcoF:dex ; 2 bne loopcoF ; 2nt/3 dey ; 2 diff --git a/megademo/c64_updated.png b/megademo/c64_updated.png index 5bd05d9d4930ee655503362fad1e96a7407f1578..a3c5ca82065a84fbeba5c887853cec24220fe771 100644 GIT binary patch delta 5399 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

-DFgzu0wa45*Savegmv6NNi^M8j1h_002ovPDHLkV1m*d BfusNc delta 5423 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%0D6LlZxhhhJhVZ9AGx1S1?*PjZl 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