lovebyte: finally 1020 bytes

This commit is contained in:
Vince Weaver 2024-02-07 20:53:09 -05:00
parent b2be06be8d
commit 096f0a70c0
6 changed files with 79 additions and 43 deletions

View File

@ -8,7 +8,7 @@ ZX02 = ~/research/6502_compression/zx02.git/build/zx02
all: plasma_mask.dsk
plasma_mask.dsk: HELLO PLASMA_MASK PLASMA_NEW
plasma_mask.dsk: HELLO PLASMA_NEW
cp $(EMPTYDISK) plasma_mask.dsk
$(DOS33) -y plasma_mask.dsk SAVE A HELLO
$(DOS33) -y plasma_mask.dsk BSAVE -a 0x1000 PLASMA_NEW

View File

@ -199,6 +199,9 @@ sin_common:
rts
sixteen:
.byte $85,$00,$00,$00,$00
@ -238,4 +241,11 @@ three_input:
precalc_string:
.byte 'P'|$80,'R'|$80,'E'|$80,'C'|$80,'A'|$80,'L'|$80,'C'|$80,':'|$80,' '|$80,'4'
.byte ' '|$80,' '|$80,' '|$80,' '|$80,' '|$80,' '|$80,' '|$80,' '|$80,'d'|$80,'S'|$80,'r'|$80,0
.byte ' '|$80,' '|$80;,' '|$80,' '|$80
.byte 'D'|$80,'E'|$80,'A'|$80,'T'|$80,'E'|$80,'R'|$80
.byte '<'|$80,'d'|$80,'S'|$80,'r'|$80,'>'|$80
.byte 'M'|$80,'A'|$80,'2'|$80,'E'|$80
.byte ' '|$80
.byte 'G'|$80,'R'|$80,'O'|$80,'U'|$80,'I'|$80,'K'|$80
.byte 0

View File

@ -11,6 +11,15 @@
; 997 -- minor optimization
; 984 -- inline zx02 compress
; 988 -- fix fullscreen
; 1020 -- add precalc countdown
; 1015 -- optimize music (track_h always same)
; 1012 -- optimize next track (4 is a nice power of 2)
; 1011 -- overlap constants
; 1023 -- add credits to precalc
; 1018 -- optimize initializations
; 1025 -- add one more credit
; 1024 -- shrink main loop enough to use bne
; 1020 -- re-arrange functions until smaller, remove a few spaces
.include "hardware.inc"
.include "zp.inc"
@ -32,9 +41,10 @@ plasma_mask:
; init music
; A and Y=0 from HGR
; lda #0
sta FRAME
sta WHICH_TRACK
; we set these when we init the rest of the ZP vars
; sta FRAME
; sta WHICH_TRACK
;===================
; music Player Setup
@ -44,9 +54,11 @@ plasma_mask:
; inline mockingboard_init
.include "tracker_init.s"
.include "mockingboard_init.s"
.include "tracker_init.s"
jsr make_tables
@ -111,11 +123,12 @@ do_plasma:
BP3:
; adjust color
lda WHICH_TRACK
clc
adc #$80
sta display_lookup_smc+2
;=============================
; adjust color palette
; lda WHICH_TRACK
; clc
; adc #$80
; sta display_lookup_smc+2
; ============================================================================
; Precalculate some values (inlined)
@ -185,8 +198,6 @@ display_line_loop:
clc
adc graphics_loc,Y
; sec ; blurgh
; sbc #4 ;
sta INH
ldy #39 ; col 0-39
@ -218,8 +229,8 @@ display_lookup_smc:
dec COMPT2
bne BP3
; beq do_plasma ; bra
jmp do_plasma ; bra
beq do_plasma ; bra
; jmp do_plasma ; bra
@ -236,11 +247,13 @@ lores_colors_lookup:
; green
.byte $00,$44,$CC,$DD,$FF,$DD,$CC,$44,$00,$44,$CC,$DD,$FF,$DD,$CC,$44
.include "make_tables.s"
.include "interrupt_handler.s"
.include "mockingboard_constants.s"
.include "interrupt_handler.s"
.include "mockingboard_constants.s"
graphics_loc:
.byte >dsr_empty-4,>dsr_small-4,>dsr_big-4,>dsr_big2-4
@ -258,3 +271,6 @@ dsr_big2:
; music
.include "mA2E_2.s"

View File

@ -65,6 +65,9 @@ set_notes_loop:
; load next byte
ldy SONG_OFFSET
; could move SONG_OFFSET to this bottom byte but wouldn't
; save any space
track_smc:
lda track0,Y
@ -78,16 +81,27 @@ track_smc:
; if at end, loop back to beginning
inc WHICH_TRACK
ldy WHICH_TRACK
cpy #4 ; looping, hard coded
bne no_wrap
ldy #0
sty WHICH_TRACK
lda WHICH_TRACK
and #$3
sta WHICH_TRACK
tay
clc
adc #$80
sta display_lookup_smc+2
; ldy WHICH_TRACK
; cpy #4 ; looping, hard coded
; bne no_wrap
; ldy #0
; sty WHICH_TRACK
no_wrap:
lda tracks_l,Y
sta track_smc+1
lda tracks_h,Y
sta track_smc+2
; lda ]tracks_h,Y
; sta track_smc+2
lda #>track0 ; always on same page
lda #0
sta SONG_OFFSET
@ -150,11 +164,6 @@ done_start_note:
lda frequencies_low,Y
sta AY_REGS,X ; set proper register value
; visualization
;blah_urgh:
; sta $400,Y
; inc blah_urgh+1
;============================
; point to next
@ -165,10 +174,10 @@ done_start_note:
done_update_song:
dec SONG_COUNTDOWN
bmi set_notes_loop
bpl skip_data
bpl skip_data ; bra
channel_a_volume:
.byte $D,$C,$A,$9
.byte $D,$C,$A;,$9
channel_b0_volume:
.byte $9,$5,$4,$3
channel_b1_volume:
@ -176,8 +185,8 @@ channel_b1_volume:
tracks_l:
.byte <track0,<track0,<track1,<track1
tracks_h:
.byte >track0,>track0,>track1,>track1
; tracks_h:
; .byte >track0,>track0,>track1,>track1
skip_data:

View File

@ -1,12 +1,12 @@
tracker_init:
; A must be 0 when calling this!
; setup initial ay-3-8910 values (this depends on song)
init_registers_to_zero:
ldx #$13 ; zero $70--$83
lda #0
; sta SONG_OFFSET ; also init song stuff
; sta SONG_COUNTDOWN
ldx #$15 ; zero $70--$85
; lda #0
init_loop:
sta AY_REGS,X
dex

View File

@ -32,10 +32,13 @@ SONG_L = $80
SONG_H = $81
SONG_OFFSET = $82
SONG_COUNTDOWN = $83
OCTAVE = $84
REGISTER = $85
A_COUNTDOWN = $86
B_COUNTDOWN = $87
FRAME = $84
WHICH_TRACK = $85
OCTAVE = $86
REGISTER = $87
A_COUNTDOWN = $88
B_COUNTDOWN = $89
Table1 = $A0 ; 40 bytes ($28) A0-C7
Table2 = $C8 ; 40 bytes ($28) C8-EF
@ -50,7 +53,5 @@ Table2 = $C8 ; 40 bytes ($28) C8-EF
XSAVE = $FA
COUNT = $FB
FRAME = $FC
WHICH_TRACK = $FD
INL = $FE
INH = $FF