* * New Animated File Format * * * xxx_xxxx_xxxx_xxx is the number of bytes 1-16384 to follow (0 == 1 byte) * * %0xxx_xxxx_xxxx_xxx1 - Copy Bytes - straight copy bytes * %1xxx_xxxx_xxxx_xxx1 - Skip Bytes - skip bytes / move the cursor * %1xxx_xxxx_xxxx_xxx0 - Dictionary Copy Bytes from frame buffer to frame buffer * * %0000_0000_0000_0000- Source Skip -> Source pointer skips to next bank of data * %0000_0000_0000_0010- End of Frame - end of frame * %0000_0000_0000_0110- End of Animation / End of File / no more frames * * other remaining codes, are reserved for future expansion * * * 16 bit opcode * * %1 xxx xxxx xxxx xxx 0 * %0 xxx xxxx xxxx xxx 0 * * X = SRC * Y = DST * * Source Data Stream Copy * Dictionary Copy * xx xxxx xxxx xxxx // up to 16384 length of copy (0 is a copy length of 1 byte, so it's length-1) * * Copy this code to your direct page, please make sure it's aligned to a page * The buffer is hardcoded to be at $012000, to take advantage of fast reads * * pass in a pointer to the start of the compressed stream * ldx #offset in source bank * lda #source bank * we assume all next bank data is sequential from this first bank, but it * wouldn't be hard to work from a list of banks, to make the player more * friendly *--- this code sits at location $0 in the DP register *--- DP may be anywhere in bank 0, but make sure it's PAGE aligned *---- for performance reasons dsk play.l ext EndOfAnimFrame ; ; Defines, for the list of allocated memory banks ; banks_count equ $80 banks_data equ $82 player ent org $0 mx %00 phb sep #$20 ; preserve X sta