Skip to content

Commit

Permalink
midline: working?
Browse files Browse the repository at this point in the history
  • Loading branch information
deater committed May 18, 2023
1 parent 80af2dd commit 9a9cb95
Show file tree
Hide file tree
Showing 6 changed files with 417 additions and 52 deletions.
17 changes: 14 additions & 3 deletions vaporlock/demo/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@ EMPTYDISK = ../../empty_disk/empty.dsk

all: demo.dsk

demo.dsk: HELLO MIDLINE
demo.dsk: HELLO MIDLINE GOOD
cp $(EMPTYDISK) demo.dsk
$(DOS33) -y demo.dsk SAVE A HELLO
$(DOS33) -y demo.dsk BSAVE -a 0x6000 MIDLINE
$(DOS33) -y demo.dsk BSAVE -a 0x6000 GOOD

###

Expand All @@ -23,10 +24,20 @@ MIDLINE: midline.o
ld65 -o MIDLINE midline.o -C $(LINKERSCRIPTS)/apple2_6000.inc

midline.o: midline.s \
zp.inc hardware.inc
zp.inc hardware.inc sinetable.s
ca65 -o midline.o midline.s -l midline.lst

###

GOOD: good.o
ld65 -o GOOD good.o -C $(LINKERSCRIPTS)/apple2_6000.inc

good.o: good.s \
zp.inc hardware.inc sinetable.s
ca65 -o good.o good.s -l good.lst


###

clean:
rm -f *~ *.o *.lst HELLO MIDLINE
rm -f *~ *.o *.lst HELLO MIDLINE GOOD
271 changes: 271 additions & 0 deletions vaporlock/demo/good.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,271 @@
; a 256-byte midline demo for Outline 2023

; by Vince `deater` Weaver / dSr

; requires an Apple IIe

.include "zp.inc"
.include "hardware.inc"

; 198 bytes -- proof of concept
; 76 bytes -- optimize Apple II Forever printing code
; 183 bytes -- stable window
; 248 bytes -- sine code added
; 274 bytes -- after much frustration, things sorta working
; 261 bytes -- use zp for sine generation
; 257 bytes -- inline sine generation
; 259 bytes -- fix sine generation initialization, shave some message print
; 247 bytes -- start replacing sather delays with something more compact
; 229 bytes -- finish replacing sather delays
; 228 bytes -- optimize and center the middle area
; 226 bytes -- init some of zero page to zero
; 244 bytes -- switch to hires too
; 247 bytes -- clear HGR

sine = $c00 ; location of sine table


midline:

;================================
; Clear screen and setup graphics
;================================

; init $F1-$FF to zero

lda #0
ldx #15
init_loop:
sta $F0,X
dex
bne init_loop

; setup graphics

sta SETMOUSETEXT ; enable mouse text for Apple char

.include "sinetable.s" ; Y is FF after this
; A = 1, X = $40

;====================================================
; setup text page1 screen of "Apple II Forever" text
;====================================================

; X is $40 which is probably OK
; ldx #0
restart:
tay ; reset Y to 0 (or 1 first time through)
inx
beq print_done
print_loop:
lda a2_string,Y
beq restart
jsr COUT ; output char in A to stdout
iny
bne print_loop
print_done:


jsr HGR ; A and Y=0 now
sta FULLGR


;==================================
; get exact vblank region
;==================================
; code by Sather
; "Understanding the Apple IIe"

poll1:
lda VBLANK ; Find end of VBL
bmi poll1 ; Fall through at VBL
poll2:
lda VBLANK
bpl poll2 ; Fall through at VBL' ; 2

lda $00 ;nop3 ; Now slew back in 17029 cycle loops ; 3
lp17029:
; delay 17020

lda #7 ; 2
ldy #96 ; 2
jsr size_delay ; 17012
nop ; 2
nop ; 2

lda VBLANK ; Back to VBL yet? ; 4
nop ; ; 2
bmi lp17029 ; no, slew back ; 2/3



;==============================
; do the cycle counting
;==============================

cycle_start:

;==============================
; top

; 2

top_smc:
ldx #66 ; 2
bne top7 ; bra ; 3/2

top_loop:
pha ; 3
pla ; 4
top7:
; 7
lda #0 ; 2
ldy #3 ; 2
; 11
; want to delay 49

jsr size_delay ; 47
; 58
nop ; 2
; 60
dex ; 2
bne top_loop ; 3/2

;===================================

; middle
; -1
ldx #56 ; 2
bne middle_4 ; bra ; 3


middle_loop:
nop ; 2
nop ; 2
middle_4:
; 4
nop ; 2
lda $0 ; nop3 ; 3
; 9
jsr delay_16_setgr ; 16
; 25
jsr delay_16_settext ; 16
; 41
jsr delay_16_setgr ; 16
; 57
lda $0 ; nop3 ; 3
; 60
dex ; 2
bne middle_loop ; 3/2

; -1
bottom_smc:
ldx #118 ; 2
bne bottom_4 ; bra ; 3

bottom_loop:

nop ; 2
nop ; 2
; 4
bottom_4:
; 4
lda #0 ; 2
ldy #3 ; 2
; 8
; want to delay 50

jsr size_delay ; 47
; 55
lda $0 ; nop3 ; 3
; 58
inx ; 2
cpx #192 ; 2
bcc bottom_loop ; 3/2

; -1

;======================================
; wait 4550 for VBLANK
;======================================
; -1 from before
vblank_start:

; move window

; -1
clc ; 2
lda FRAME ; 3
adc #1 ; 2
sta FRAME ; 3
tay ; save for later ; 2
; 11
lda #0 ; 2
rol ; get carry bit in A ; 2
eor screen_smc+1 ; 4
sta screen_smc+1 ; 4
; 23

screen_smc:
bit LORES ; LORES=C056 HIRES=C057 ; 4
; 27


; FRAME should be in Y
lda sine,Y ; 4 (aligned)
; 31
clc ; 2
adc #2 ; 2
sta top_smc+1 ; 4
adc #56 ; 2
sta bottom_smc+1 ; 4
; 45

; finish delay

; 45
lda #1 ; 2
ldy #241 ; 2
; 49
jsr size_delay ; 4493
; 4542

pha ; 3
pla ; 4
; 4549
jmp cycle_start ; 3
; 4552


; want 4552 here

delay_16_setgr:
bit SET_GR
rts

delay_16_settext:
bit SET_TEXT
rts

;=====================================
; short delay by Bruce Clark
; any delay between 8 to 589832 with res of 9
;=====================================
; 9*(256*A+Y)+8 + 12 for jsr/rts
size_delay:

delay_loop:
cpy #1
dey
sbc #0
bcs delay_loop
delay_12:
rts

a2_string:
; 012345678901234567 8 9
; .byte "Apple II Forever!! ",'@'+$80," ",0
.byte 'A'+$80,'p'+$80,'p'+$80,'l'+$80,'e'+$80,' '+$80
.byte 'I'+$80,'I'+$80,' '+$80,'F'+$80,'o'+$80,'r'+$80
.byte 'e'+$80,'v'+$80,'e'+$80,'r'+$80,'!'+$80,'!'+$80
.byte ' '+$80,'@'+$00,' '+$80,0
2 changes: 2 additions & 0 deletions vaporlock/demo/hardware.inc
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,10 @@ HGR = $F3E2
HPOSN = $F411
HPLOT0 = $F457 ; plot at (Y,X), (A)
HGLIN = $F53A ; line to (X,A),(Y)
XDRAW0 = $F65D
ROM_TEXT2COPY = $F962 ; iigs
ROM_MACHINEID = $FBB3 ; iigs
COUT = $FDED
Loading

0 comments on commit 9a9cb95

Please sign in to comment.