diff --git a/fancy_lores/delay_a.s b/fancy_lores/delay_a.s new file mode 100644 index 00000000..2d0802da --- /dev/null +++ b/fancy_lores/delay_a.s @@ -0,0 +1,25 @@ +; From http://6502org.wikidot.com/software-delay + +; 25+A cycles (including JSR), 19 bytes (excluding JSR) +; +; The branches must not cross page boundaries! +; + + ; Cycles Accumulator Carry flag + ; 0 1 2 3 4 5 6 (hex) 0 1 2 3 4 5 6 + +; jsr delay_a ; 6 6 6 6 6 6 6 00 01 02 03 04 05 06 + +dly0: sbc #7 +delay_a:cmp #7 ; 2 2 2 2 2 2 2 00 01 02 03 04 05 06 0 0 0 0 0 0 0 + bcs dly0 ; 2 2 2 2 2 2 2 00 01 02 03 04 05 06 0 0 0 0 0 0 0 + lsr ; 2 2 2 2 2 2 2 00 00 01 01 02 02 03 0 1 0 1 0 1 0 + bcs dly1 ; 2 3 2 3 2 3 2 00 00 01 01 02 02 03 0 1 0 1 0 1 0 +dly1: beq dly2 ; 3 3 2 2 2 2 2 00 00 01 01 02 02 03 0 1 0 1 0 1 0 + lsr ; 2 2 2 2 2 00 00 01 01 01 1 1 0 0 1 + beq dly3 ; 3 3 2 2 2 00 00 01 01 01 1 1 0 0 1 + bcc dly3 ; 3 3 2 01 01 01 0 0 1 +dly2: bne dly3 ; 2 2 3 00 00 01 0 1 0 +dly3: rts ; 6 6 6 6 6 6 6 00 00 00 00 01 01 01 0 1 1 1 0 0 1 + ; + ; Total cycles: 25 26 27 28 29 30 31 diff --git a/fancy_lores/disp4048d.s b/fancy_lores/disp4048d.s index 9226d766..c37a54a5 100644 --- a/fancy_lores/disp4048d.s +++ b/fancy_lores/disp4048d.s @@ -134,82 +134,34 @@ in_range: ; setup graphics for vapor lock ;============================== - ; Clear Page0 - lda #$0 - sta DRAW_PAGE - lda #$44 - jsr clear_gr + jsr vapor_lock - ; Make screen half green - lda #$11 - ldy #24 - jsr clear_page_loop + ; vapor lock returns with us at beginning of hsync in line + ; 114 (7410 cycles), so with 5070 lines to go + ; GR part + bit LORES ; 4 + bit SET_GR ; 4 + bit FULLGR ; 4 - ;===================================================== - ; attempt vapor lock - ; by reading the "floating bus" we can see most recently - ; written value of the display - ; we look for $55 (which is the grey line) - ;===================================================== - ; See: - ; Have an Apple Split by Bob Bishop - ; Softalk, October 1982 + jsr gr_copy_to_current ; 6+ 9292 - ; Challenges: each scan line scans 40 bytes. - ; The blanking happens at the *beginning* - ; So 65 bytes are scanned, starting at adress of the line - 25 + ; now we have 322 left - ; the scan takes 8 cycles, look for 4 repeats of the value - ; to avoid false positive found if the horiz blanking is mirroring - ; the line (max 3 repeats in that case) + ; 322 - 12 = 310 + ; - 3 for jmp + ; 307 -vapor_lock_loop: ; first make sure we have all zeroes - LDA #$11 -zxloop: - LDX #$04 -wiloop: - CMP $C051 - BNE zxloop - DEX - BNE wiloop + ; Try X=9 Y=6 cycles=307 - LDA #$44 ; now look for our border color (4 times) -zloop: - LDX #$04 -qloop: - CMP $C051 - BNE zloop - DEX - BNE qloop + ldy #6 ; 2 +loopA: ldx #9 ; 2 +loopB: dex ; 2 + bne loopB ; 2nt/3 + dey ; 2 + bne loopA ; 2nt/3 - ; found first line of black after green, at up to line 26 on screen - ; so we want roughly 22 lines * 4 = 88*65 = 5720 + 4550 = 10270 - ; - 65 (for the scanline we missed) = 10205 - 12 = 10193 - - jsr gr_copy_to_current ; 6+ 9292 - ; 10193 - 9298 = 895 - ; Fudge factor (unknown) -30 = 865 - - ; GR part - bit LORES ; 4 - bit SET_GR ; 4 - bit FULLGR ; 4 - - ; Try X=88 Y=2 cycles=893 R2 - - nop - ldy #2 ; 2 -loopA: - ldx #88 ; 2 -loopB: - dex ; 2 - bne loopB ; 2nt/3 - - dey ; 2 - bne loopA ; 2nt/3 - - jmp display_loop + jmp display_loop ; 3 .align $100 @@ -342,6 +294,8 @@ gr_offsets: .include "../asm_routines/gr_unrle.s" .include "../asm_routines/keypress.s" .include "gr_copy.s" +.include "delay_a.s" +.include "vapor_lock.s" pictures: .word apple_low,apple_high diff --git a/fancy_lores/disp4096.s b/fancy_lores/disp4096.s index 84b94d32..d5bacbc1 100644 --- a/fancy_lores/disp4096.s +++ b/fancy_lores/disp4096.s @@ -135,82 +135,34 @@ in_range: ; setup graphics for vapor lock ;============================== - ; Clear Page0 - lda #$0 - sta DRAW_PAGE - lda #$44 - jsr clear_gr + jsr vapor_lock ; 6+ - ; Make screen half green - lda #$11 - ldy #24 - jsr clear_page_loop - - - ;===================================================== - ; attempt vapor lock - ; by reading the "floating bus" we can see most recently - ; written value of the display - ; we look for $55 (which is the grey line) - ;===================================================== - ; See: - ; Have an Apple Split by Bob Bishop - ; Softalk, October 1982 - - ; Challenges: each scan line scans 40 bytes. - ; The blanking happens at the *beginning* - ; So 65 bytes are scanned, starting at adress of the line - 25 - - ; the scan takes 8 cycles, look for 4 repeats of the value - ; to avoid false positive found if the horiz blanking is mirroring - ; the line (max 3 repeats in that case) - -vapor_lock_loop: ; first make sure we have all zeroes - LDA #$11 -zxloop: - LDX #$04 -wiloop: - CMP $C051 - BNE zxloop - DEX - BNE wiloop - - LDA #$44 ; now look for our border color (4 times) -zloop: - LDX #$04 -qloop: - CMP $C051 - BNE zloop - DEX - BNE qloop - - ; found first line of black after green, at up to line 26 on screen - ; so we want roughly 22 lines * 4 = 88*65 = 5720 + 4550 = 10270 - ; - 65 (for the scanline we missed) = 10205 - 12 = 10193 - - jsr gr_copy_to_current ; 6+ 9292 - ; 10193 - 9298 = 895 - ; Fudge factor (unknown) -30 = 865 + ; vapor lock returns with us at beginning of hsync in line + ; 114 (7410 cycles), so with 5070 lines to go ; GR part bit LORES ; 4 bit SET_GR ; 4 bit FULLGR ; 4 - ; Try X=88 Y=2 cycles=893 R2 + jsr gr_copy_to_current ; 6+ 9292 - nop - ldy #2 ; 2 -loopA: - ldx #88 ; 2 -loopB: - dex ; 2 - bne loopB ; 2nt/3 + ; now we have 322 left - dey ; 2 - bne loopA ; 2nt/3 + ; 322 - 12 = 310 + ; - 3 for jmp + ; 307 + + ; Try X=9 Y=6 cycles=307 + ldy #6 ; 2 +loopA: ldx #9 ; 2 +loopB: dex ; 2 + bne loopB ; 2nt/3 + dey ; 2 + bne loopA ; 2nt/3 + + jmp display_loop ; 3 - jmp display_loop .align $100 @@ -342,6 +294,8 @@ gr_offsets: .include "../asm_routines/gr_unrle.s" .include "../asm_routines/keypress.s" .include "gr_copy.s" +.include "vapor_lock.s" +.include "delay_a.s" pictures: .word apple_low,apple_high diff --git a/fancy_lores/vapor_lock.s b/fancy_lores/vapor_lock.s new file mode 100644 index 00000000..dfaf8247 --- /dev/null +++ b/fancy_lores/vapor_lock.s @@ -0,0 +1,238 @@ +; This took a while to track down +; On Apple II/II+ the horiz blanking addr are $1000 higher than on IIe +; So on II+ were outside video area, so unlikely to be our set value +; (unless I foolishly use $ff which some uninitialized mem is set to) +; Lots of this color fiddling is to make sure you don't accidentally +; get runs of colors on IIe due to the horiz blank + +; 0-5 aqua 6-12 = grey, 13 - 20 = yellow, 21-23 = aqua rainbow 14 +; +; +;16 0 YA +;17 1 YA +;18 2 YA +;19 3 YA +;20 4 YA +;21 5 AA +;22 6 AG +;23 7 AG +;0 8 AG +;1 9 AG +;2 10 AG +;3 11 AG +;4 12 AG +;5 13 AY **** +;6 14 GY RAINBOW +;7 15 GY +;8 16 GY +;9 17 GY +;10 18 GY +;11 19 GY +;12 20 GY +;13 21 YA +;14 22 YA +;15 23 YA + + + + ;============================== + ; setup graphics for vapor lock + ;============================== +vapor_lock: + + ; Clear Page0 + lda #$0 + sta DRAW_PAGE + lda #$ee ; full screen white $ff + jsr clear_gr + + lda #$dd + ldy #40 + jsr clear_page_loop ; make bottom half yellow $dd + + lda #$aa + ldy #24 + jsr clear_page_loop ; make middle grey2 $aa + + lda #$ee + ldy #10 + jsr clear_page_loop ; make top half aqua $ee + + ; set up a rainbow to aid in exact lock + + ldy #00 +rainbow_loop: + tya + sta $728+20,Y + iny + cpy #20 + bne rainbow_loop + +;btt: +; jmp btt + + + ;===================================================== + ; attempt vapor lock + ; by reading the "floating bus" we can see most recently + ; written value of the display + ;===================================================== + ; See: + ; Have an Apple Split by Bob Bishop + ; Softalk, October 1982 + + ; Challenges: each scan line scans 40 bytes. + ; The blanking happens at the *beginning* + ; So 65 bytes are scanned, starting at adress of the line - 25 + + ; the scan takes 8 cycles, look for 4 repeats of the value + ; to avoid false positive found if the horiz blanking is mirroring + ; the line (max 3 repeats in that case) + +vapor_lock_loop: + + ; first make sure we have a full line of $aa + + lda #$aa ; 2 +zxloop: + ldx #$04 ; 2 +wiloop: + cmp $C051 ; read the floating bus ; 4 + bne zxloop ; if not, start from scratch ; 2/3 + dex ; we were, dec ; 2 + bne wiloop ; if not 4 of them, restart ; 3/2 + + ; if we get here we read 4 proper pixels, 11 apart (2+4+2+2+3) + ; 0 11 22 33, clock at 34 + ; 1 12 23 34, clock at 35 + ; 2 13 24 35, clock at 36 + ; 3 14 25 36, clock at 37 + ; 4 15 26 37, clock at 38 + ; 5 16 27 38, clock at 39 + ; 6 17 28 39, clock at 40 + + +; X X X X +; X X X X +; X X X X +; X X X X +; X X X X +; X X X X +; X X X X +; 0123456789012345678901234 0123456789012345678901234567890123456789 +; 1 2 1 2 3 +; hsync pixels +; XXXXXXXXXXXXXXXXXXXXXXXXX 4444444444444444444444444444440123456789 + + ; now look for the color change that + ; happens at line 13*8 = 104 + + lda #$dd ; 2 +zloop: + ldx #$04 ; 2 +qloop: + cmp $C051 ; read floating bus ; 4 + bne zloop ; 2/3 + dex ; 2 + bne qloop ; 3/2 + ;============ + ; 11 + + ; Found it! + ; if we get here we read 4 proper pixels, 11 apart (2+4+2+2+3) + ; 0 11 22 33, clock at 34 + ; 1 12 23 34, clock at 35 + ; 2 13 24 35, clock at 36 + ; 3 14 25 36, clock at 37 + ; 4 15 26 37, clock at 38 + ; 5 16 27 38, clock at 39 + ; 6 17 28 39, clock at 40 + + + + +;btt: +; jmp btt + + ; In theory near end of line 104 + + ; now skip ahead 8 lines and read from the rainbow pattern we set + ; up to find our exact location + + ; delay 65 * 8 = 520 + ; we back off a few to make sure we're not in the horiz blank + ; try to delay 510 + + ; *NOTE* sometimes we end up going one (or rarely, two??) lines too far + ; so instead try going 7 lines ahead, and if still dd then one more + + ; so single step until we get a rainbow color + + ; go to next line, -10 + lda #28 ; 2 + jsr delay_a ; delay 25+28 = 53 + ; total delay = 55 + +vl_try_again: + lda #29 ; 2 + jsr delay_a ; delay 25+29 = 54 + ; total delay = 56 + + + + lda $C051 ; 4 + cmp #$dd ; 2 + beq vl_try_again ; 3 + ; -1 + + + ; now near end of line 112 + ;lda $0 ; nop to match old code ; 3 +; nop ; nop to match old code ; 2 + + lda $C051 ; 4 +;kbb: +; jmp kbb + + ; we are in theory on line $728 = 14*8 = 112 + ; so 112*65 = 7280 cycles from start + + ; we are actualy 25+20+A pixels in + ; 7325+A + + ; Our goal is line 114 at 7410 cycles + ; 7410 - 7325 = 85 + + ; so kill 85-A cycles + ; -6 to do subtraction + ; -6 for rts + ; -25 for delay_a overhead + + eor #$ff ; 2 + sec ; 2 + adc #48 ; 2 + + jsr delay_a ; should total 48 cycles + + +done_vapor_lock: + rts ; 6 + + + + + ; Some random related work + ; Docs: + ; Lancaster + ; Bishop + ; Sather + + ; Vaguely relevant but no help with the Apple II+ issue + ; + ; Eamon: Screen display and timing synchronization + ; on the Apple IIe and Apple IIgs + ; + ; Adams: Visually presented verbal stimuli by assembly + ; language on the Apple II computer. + ; Cavanagh and Anstis: Visual psychophysics on the + ; Apple II: Getting started diff --git a/interlace_demo/delay_a.s b/interlace_demo/delay_a.s new file mode 100644 index 00000000..2d0802da --- /dev/null +++ b/interlace_demo/delay_a.s @@ -0,0 +1,25 @@ +; From http://6502org.wikidot.com/software-delay + +; 25+A cycles (including JSR), 19 bytes (excluding JSR) +; +; The branches must not cross page boundaries! +; + + ; Cycles Accumulator Carry flag + ; 0 1 2 3 4 5 6 (hex) 0 1 2 3 4 5 6 + +; jsr delay_a ; 6 6 6 6 6 6 6 00 01 02 03 04 05 06 + +dly0: sbc #7 +delay_a:cmp #7 ; 2 2 2 2 2 2 2 00 01 02 03 04 05 06 0 0 0 0 0 0 0 + bcs dly0 ; 2 2 2 2 2 2 2 00 01 02 03 04 05 06 0 0 0 0 0 0 0 + lsr ; 2 2 2 2 2 2 2 00 00 01 01 02 02 03 0 1 0 1 0 1 0 + bcs dly1 ; 2 3 2 3 2 3 2 00 00 01 01 02 02 03 0 1 0 1 0 1 0 +dly1: beq dly2 ; 3 3 2 2 2 2 2 00 00 01 01 02 02 03 0 1 0 1 0 1 0 + lsr ; 2 2 2 2 2 00 00 01 01 01 1 1 0 0 1 + beq dly3 ; 3 3 2 2 2 00 00 01 01 01 1 1 0 0 1 + bcc dly3 ; 3 3 2 01 01 01 0 0 1 +dly2: bne dly3 ; 2 2 3 00 00 01 0 1 0 +dly3: rts ; 6 6 6 6 6 6 6 00 00 00 00 01 01 01 0 1 1 1 0 0 1 + ; + ; Total cycles: 25 26 27 28 29 30 31 diff --git a/interlace_demo/interlace.s b/interlace_demo/interlace.s index 1d1013b2..4342014a 100644 --- a/interlace_demo/interlace.s +++ b/interlace_demo/interlace.s @@ -134,85 +134,37 @@ in_range: ; setup graphics for vapor lock ;============================== - ; Clear Page0 - lda #$0 - sta DRAW_PAGE - lda #$44 - jsr clear_gr + jsr vapor_lock - ; Make screen half green - lda #$11 - ldy #24 - jsr clear_page_loop - - - ;===================================================== - ; attempt vapor lock - ; by reading the "floating bus" we can see most recently - ; written value of the display - ; we look for $55 (which is the grey line) - ;===================================================== - ; See: - ; Have an Apple Split by Bob Bishop - ; Softalk, October 1982 - - ; Challenges: each scan line scans 40 bytes. - ; The blanking happens at the *beginning* - ; So 65 bytes are scanned, starting at adress of the line - 25 - - ; the scan takes 8 cycles, look for 4 repeats of the value - ; to avoid false positive found if the horiz blanking is mirroring - ; the line (max 3 repeats in that case) - -vapor_lock_loop: ; first make sure we have all zeroes - LDA #$11 -zxloop: - LDX #$04 -wiloop: - CMP $C051 - BNE zxloop - DEX - BNE wiloop - - LDA #$44 ; now look for our border color (4 times) -zloop: - LDX #$04 -qloop: - CMP $C051 - BNE zloop - DEX - BNE qloop - - ; found first line of black after green, at up to line 26 on screen - ; so we want roughly 22 lines * 4 = 88*65 = 5720 + 4550 = 10270 - ; - 65 (for the scanline we missed) = 10205 - 12 = 10193 - - jsr gr_copy_to_current ; 6+ 9292 - ; 10193 - 9298 = 895 - ; Fudge factor (unknown) -30 = 865 + ; vapor lock returns with us at beginning of hsync in line + ; 114 (7410 cycles), so with 5070 lines to go ; GR part bit LORES ; 4 bit SET_GR ; 4 bit FULLGR ; 4 - ; Try X=88 Y=2 cycles=893 R2 + jsr gr_copy_to_current ; 6+ 9292 - nop - ldy #2 ; 2 -loopA: - ldx #88 ; 2 -loopB: - dex ; 2 - bne loopB ; 2nt/3 + ; now we have 322 left - dey ; 2 - bne loopA ; 2nt/3 + ; 322 - 12 = 310 + ; - 3 for jmp + ; 307 + + ; Try X=9 Y=6 cycles=307 + + ldy #6 ; 2 +loopA: ldx #9 ; 2 +loopB: dex ; 2 + bne loopB ; 2nt/3 + dey ; 2 + bne loopA ; 2nt/3 + + jmp display_loop ; 3 - jmp display_loop .align $100 - ;================================================ ; Display Loop ;================================================ @@ -342,6 +294,8 @@ gr_offsets: .include "../asm_routines/gr_unrle.s" .include "../asm_routines/keypress.s" .include "gr_copy.s" +.include "vapor_lock.s" +.include "delay_a.s" pictures: .word k_low,k_high diff --git a/interlace_demo/vapor_lock.s b/interlace_demo/vapor_lock.s new file mode 100644 index 00000000..dfaf8247 --- /dev/null +++ b/interlace_demo/vapor_lock.s @@ -0,0 +1,238 @@ +; This took a while to track down +; On Apple II/II+ the horiz blanking addr are $1000 higher than on IIe +; So on II+ were outside video area, so unlikely to be our set value +; (unless I foolishly use $ff which some uninitialized mem is set to) +; Lots of this color fiddling is to make sure you don't accidentally +; get runs of colors on IIe due to the horiz blank + +; 0-5 aqua 6-12 = grey, 13 - 20 = yellow, 21-23 = aqua rainbow 14 +; +; +;16 0 YA +;17 1 YA +;18 2 YA +;19 3 YA +;20 4 YA +;21 5 AA +;22 6 AG +;23 7 AG +;0 8 AG +;1 9 AG +;2 10 AG +;3 11 AG +;4 12 AG +;5 13 AY **** +;6 14 GY RAINBOW +;7 15 GY +;8 16 GY +;9 17 GY +;10 18 GY +;11 19 GY +;12 20 GY +;13 21 YA +;14 22 YA +;15 23 YA + + + + ;============================== + ; setup graphics for vapor lock + ;============================== +vapor_lock: + + ; Clear Page0 + lda #$0 + sta DRAW_PAGE + lda #$ee ; full screen white $ff + jsr clear_gr + + lda #$dd + ldy #40 + jsr clear_page_loop ; make bottom half yellow $dd + + lda #$aa + ldy #24 + jsr clear_page_loop ; make middle grey2 $aa + + lda #$ee + ldy #10 + jsr clear_page_loop ; make top half aqua $ee + + ; set up a rainbow to aid in exact lock + + ldy #00 +rainbow_loop: + tya + sta $728+20,Y + iny + cpy #20 + bne rainbow_loop + +;btt: +; jmp btt + + + ;===================================================== + ; attempt vapor lock + ; by reading the "floating bus" we can see most recently + ; written value of the display + ;===================================================== + ; See: + ; Have an Apple Split by Bob Bishop + ; Softalk, October 1982 + + ; Challenges: each scan line scans 40 bytes. + ; The blanking happens at the *beginning* + ; So 65 bytes are scanned, starting at adress of the line - 25 + + ; the scan takes 8 cycles, look for 4 repeats of the value + ; to avoid false positive found if the horiz blanking is mirroring + ; the line (max 3 repeats in that case) + +vapor_lock_loop: + + ; first make sure we have a full line of $aa + + lda #$aa ; 2 +zxloop: + ldx #$04 ; 2 +wiloop: + cmp $C051 ; read the floating bus ; 4 + bne zxloop ; if not, start from scratch ; 2/3 + dex ; we were, dec ; 2 + bne wiloop ; if not 4 of them, restart ; 3/2 + + ; if we get here we read 4 proper pixels, 11 apart (2+4+2+2+3) + ; 0 11 22 33, clock at 34 + ; 1 12 23 34, clock at 35 + ; 2 13 24 35, clock at 36 + ; 3 14 25 36, clock at 37 + ; 4 15 26 37, clock at 38 + ; 5 16 27 38, clock at 39 + ; 6 17 28 39, clock at 40 + + +; X X X X +; X X X X +; X X X X +; X X X X +; X X X X +; X X X X +; X X X X +; 0123456789012345678901234 0123456789012345678901234567890123456789 +; 1 2 1 2 3 +; hsync pixels +; XXXXXXXXXXXXXXXXXXXXXXXXX 4444444444444444444444444444440123456789 + + ; now look for the color change that + ; happens at line 13*8 = 104 + + lda #$dd ; 2 +zloop: + ldx #$04 ; 2 +qloop: + cmp $C051 ; read floating bus ; 4 + bne zloop ; 2/3 + dex ; 2 + bne qloop ; 3/2 + ;============ + ; 11 + + ; Found it! + ; if we get here we read 4 proper pixels, 11 apart (2+4+2+2+3) + ; 0 11 22 33, clock at 34 + ; 1 12 23 34, clock at 35 + ; 2 13 24 35, clock at 36 + ; 3 14 25 36, clock at 37 + ; 4 15 26 37, clock at 38 + ; 5 16 27 38, clock at 39 + ; 6 17 28 39, clock at 40 + + + + +;btt: +; jmp btt + + ; In theory near end of line 104 + + ; now skip ahead 8 lines and read from the rainbow pattern we set + ; up to find our exact location + + ; delay 65 * 8 = 520 + ; we back off a few to make sure we're not in the horiz blank + ; try to delay 510 + + ; *NOTE* sometimes we end up going one (or rarely, two??) lines too far + ; so instead try going 7 lines ahead, and if still dd then one more + + ; so single step until we get a rainbow color + + ; go to next line, -10 + lda #28 ; 2 + jsr delay_a ; delay 25+28 = 53 + ; total delay = 55 + +vl_try_again: + lda #29 ; 2 + jsr delay_a ; delay 25+29 = 54 + ; total delay = 56 + + + + lda $C051 ; 4 + cmp #$dd ; 2 + beq vl_try_again ; 3 + ; -1 + + + ; now near end of line 112 + ;lda $0 ; nop to match old code ; 3 +; nop ; nop to match old code ; 2 + + lda $C051 ; 4 +;kbb: +; jmp kbb + + ; we are in theory on line $728 = 14*8 = 112 + ; so 112*65 = 7280 cycles from start + + ; we are actualy 25+20+A pixels in + ; 7325+A + + ; Our goal is line 114 at 7410 cycles + ; 7410 - 7325 = 85 + + ; so kill 85-A cycles + ; -6 to do subtraction + ; -6 for rts + ; -25 for delay_a overhead + + eor #$ff ; 2 + sec ; 2 + adc #48 ; 2 + + jsr delay_a ; should total 48 cycles + + +done_vapor_lock: + rts ; 6 + + + + + ; Some random related work + ; Docs: + ; Lancaster + ; Bishop + ; Sather + + ; Vaguely relevant but no help with the Apple II+ issue + ; + ; Eamon: Screen display and timing synchronization + ; on the Apple IIe and Apple IIgs + ; + ; Adams: Visually presented verbal stimuli by assembly + ; language on the Apple II computer. + ; Cavanagh and Anstis: Visual psychophysics on the + ; Apple II: Getting started