mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-07-13 22:29:14 +00:00
megademo: move some more stuff to main file
This commit is contained in:
parent
6fa62ea251
commit
b2b22ce7c5
@ -20,6 +20,7 @@
|
|||||||
28217 -- optimize the erase routine in waterfall
|
28217 -- optimize the erase routine in waterfall
|
||||||
28097 -- move takeoff graphics to megademo
|
28097 -- move takeoff graphics to megademo
|
||||||
28594 -- c64 opener actually works
|
28594 -- c64 opener actually works
|
||||||
|
28483 -- move falling apple to megademo file
|
||||||
|
|
||||||
Graphics sizes:
|
Graphics sizes:
|
||||||
(LG lores=300B)
|
(LG lores=300B)
|
||||||
|
@ -5,8 +5,8 @@ falling_apple:
|
|||||||
|
|
||||||
;===================
|
;===================
|
||||||
; init screen
|
; init screen
|
||||||
jsr TEXT
|
; jsr TEXT
|
||||||
jsr HOME
|
; jsr HOME
|
||||||
bit KEYRESET
|
bit KEYRESET
|
||||||
|
|
||||||
;===================
|
;===================
|
||||||
@ -193,9 +193,9 @@ loop2:
|
|||||||
rts ; 6
|
rts ; 6
|
||||||
|
|
||||||
|
|
||||||
.include "../asm_routines/gr_unrle.s"
|
;.include "../asm_routines/gr_unrle.s"
|
||||||
.include "gr_copy.s"
|
;.include "gr_copy.s"
|
||||||
|
|
||||||
.include "apple_40_96.inc"
|
;.include "apple_40_96.inc"
|
||||||
|
|
||||||
|
|
||||||
|
115
megademo/gr_unrle.s
Normal file
115
megademo/gr_unrle.s
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
;=================
|
||||||
|
; load RLE image
|
||||||
|
;=================
|
||||||
|
; Output is BASH/BASL
|
||||||
|
; Input is in GBASH/GBASL
|
||||||
|
load_rle_gr:
|
||||||
|
lda #$0
|
||||||
|
tay ; init Y to 0
|
||||||
|
sta TEMP ; stores the xcoord
|
||||||
|
|
||||||
|
sta CV ; ycoord=0
|
||||||
|
|
||||||
|
jsr load_and_increment ; load xsize
|
||||||
|
sta CH
|
||||||
|
|
||||||
|
rle_loop:
|
||||||
|
jsr load_and_increment
|
||||||
|
|
||||||
|
cmp #$A1 ; if 0xa1
|
||||||
|
beq rle_done ; we are done
|
||||||
|
|
||||||
|
pha
|
||||||
|
|
||||||
|
and #$f0 ; mask
|
||||||
|
cmp #$a0 ; see if special AX
|
||||||
|
beq decompress_special
|
||||||
|
|
||||||
|
pla ; note, PLA sets flags!
|
||||||
|
|
||||||
|
ldx #$1 ; only want to print 1
|
||||||
|
bne decompress_run
|
||||||
|
|
||||||
|
decompress_special:
|
||||||
|
pla
|
||||||
|
|
||||||
|
and #$0f ; check if was A0
|
||||||
|
|
||||||
|
bne decompress_color ; if A0 need to read run, color
|
||||||
|
|
||||||
|
decompress_large:
|
||||||
|
jsr load_and_increment ; get run length
|
||||||
|
|
||||||
|
decompress_color:
|
||||||
|
tax ; put runlen into X
|
||||||
|
jsr load_and_increment ; get color
|
||||||
|
|
||||||
|
decompress_run:
|
||||||
|
rle_run_loop:
|
||||||
|
sta (BASL),y ; write out the value
|
||||||
|
inc BASL ; increment the pointer
|
||||||
|
bne rle_skip3 ; if wrapped
|
||||||
|
inc BASH ; then increment the high value
|
||||||
|
|
||||||
|
rle_skip3:
|
||||||
|
pha ; store colore for later
|
||||||
|
|
||||||
|
inc TEMP ; increment the X value
|
||||||
|
lda TEMP
|
||||||
|
cmp CH ; compare against the image width
|
||||||
|
bcc rle_not_eol ; if less then keep going
|
||||||
|
|
||||||
|
lda BASL ; cheat to avoid a 16-bit add
|
||||||
|
cmp #$a7 ; we are adding 0x58 to get
|
||||||
|
bcc rle_add_skip ; to the next line
|
||||||
|
inc BASH
|
||||||
|
rle_add_skip:
|
||||||
|
clc
|
||||||
|
adc #$58 ; actually do the 0x58 add
|
||||||
|
sta BASL ; and store it back
|
||||||
|
|
||||||
|
inc CV ; add 2 to ypos
|
||||||
|
inc CV ; each "line" is two high
|
||||||
|
|
||||||
|
lda CV ; load value
|
||||||
|
cmp #15 ; if it's greater than 14 it wraps
|
||||||
|
bcc rle_no_wrap ; Thanks Woz
|
||||||
|
|
||||||
|
lda #$0 ; we wrapped, so set to zero
|
||||||
|
sta CV
|
||||||
|
|
||||||
|
; when wrapping have to sub 0x3d8
|
||||||
|
sec ; this is a 16-bit subtract routine
|
||||||
|
lda BASL
|
||||||
|
sbc #$d8 ; LSB
|
||||||
|
sta BASL
|
||||||
|
lda BASH ; MSB
|
||||||
|
sbc #$3 ;
|
||||||
|
sta BASH
|
||||||
|
|
||||||
|
rle_no_wrap:
|
||||||
|
lda #$0 ; set X value back to zero
|
||||||
|
sta TEMP
|
||||||
|
|
||||||
|
rle_not_eol:
|
||||||
|
pla ; restore color
|
||||||
|
dex
|
||||||
|
bne rle_run_loop ; if not zero, keep looping
|
||||||
|
beq rle_loop ; and branch always
|
||||||
|
|
||||||
|
rle_done:
|
||||||
|
lda #$15 ; move the cursor somewhere sane
|
||||||
|
sta CV
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
load_and_increment:
|
||||||
|
lda (GBASL),y ; load value ; 5?
|
||||||
|
inc GBASL ; 5?
|
||||||
|
bne lskip2 ; 2nt/3
|
||||||
|
inc GBASH ; 5?
|
||||||
|
lskip2:
|
||||||
|
rts ; 6
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -93,6 +93,8 @@ loop_forever:
|
|||||||
.include "lz4_decode.s"
|
.include "lz4_decode.s"
|
||||||
.include "c64_opener.s"
|
.include "c64_opener.s"
|
||||||
.include "falling_apple.s"
|
.include "falling_apple.s"
|
||||||
|
.include "gr_unrle.s"
|
||||||
|
.include "gr_copy.s"
|
||||||
.include "starring.s"
|
.include "starring.s"
|
||||||
.include "starring_people.s"
|
.include "starring_people.s"
|
||||||
.include "check_email.s"
|
.include "check_email.s"
|
||||||
@ -138,6 +140,9 @@ loop_forever:
|
|||||||
; No Alignment Needed
|
; No Alignment Needed
|
||||||
;============================
|
;============================
|
||||||
|
|
||||||
|
; falling_apple
|
||||||
|
.include "apple_40_96.inc"
|
||||||
|
|
||||||
; starring
|
; starring
|
||||||
.include "starring1.inc"
|
.include "starring1.inc"
|
||||||
.include "starring2.inc"
|
.include "starring2.inc"
|
||||||
|
Loading…
Reference in New Issue
Block a user