back to project page

APPLEVISION Disassembly

                   ********************************************************************************
                   * AppleVision, by Bob Bishop.                                                  *
                   * Copyright 1978 Apple Computer, Inc.                                          *
                   ********************************************************************************
                   * The main program is written in Integer BASIC, and uses a trick to embed      *
                   * machine-language code.                                                       *
                   *                                                                              *
                   * This was distributed on cassette tape, and was included on the DOS 3.3       *
                   * System Master disk.                                                          *
                   ********************************************************************************
                   * Disassembly by Andy McFadden, using 6502bench SourceGen v1.5.                *
                   * Last updated 2020/04/25                                                      *
                   ********************************************************************************
                   MON_CH          .eq     $24               ;cursor horizontal displacement
                   MON_CV          .eq     $25               ;cursor vertical displacement
                   SPKR            .eq     $c030             ;RW toggle speaker
                   TXTCLR          .eq     $c050             ;RW display graphics
                   MIXCLR          .eq     $c052             ;RW display full screen
                   HIRES           .eq     $c057             ;RW display hi-res graphics
                   MON_COUT1       .eq     $fdf0

                                   .org    $07d2
                   ; 
                   ; Initial Integer BASIC program:
                   ; 
                   ;     0 LOMEM:1800
                   ;     1 HIMEM:8192: POKE 202,165: POKE 203,27:LOMEM:6144:CLR : GOTO 0
                   ; 
                   ; The HIMEM: statement causes the code to be relocated.  It ends up on the text
                   ; page, and is wiped out when the program starts running.
                   ; 
                   ; The POKEs set the Integer BASIC start-of-program pointer ($CA) to $1BA5.
                   ; 
07d2: 08 00 00 11+                 .bulk   08000011b108070126010010b800200364b2ca0065b1a5000364b2cb0065b21b
                                    +      000311b60018030c035fb0000001

                   ********************************************************************************
                   * Plot a pixel on the hi-res screen.                                           *
                   *                                                                              *
                   * (called from BASIC -- 2048)                                                  *
                   *                                                                              *
                   * On entry:                                                                    *
                   *   $10: X coordinate (0-139)                                                  *
                   *   $11: Y coordinate (0-191)                                                  *
                   *   $12: X coord odd/even flag (0 or 1)                                        *
                   ********************************************************************************
                   ]hptr           .var    $14    {addr/2}

0800: 98           PlotPoint       tya
0801: 48                           pha
0802: 20 26 08                     jsr     GetPixelAddr      ;set up hptr, pixel mask in A-reg
0805: 11 14                        ora     (]hptr),y         ;blend with screen contents
0807: 91 14                        sta     (]hptr),y
0809: 68                           pla
080a: a8                           tay
080b: 60                           rts

080c: 98           Unused1         tya                       ;this erases a pixel
080d: 48                           pha
080e: 20 26 08                     jsr     GetPixelAddr
0811: 49 ff                        eor     #$ff
0813: 31 14                        and     (]hptr),y
0815: 91 14                        sta     (]hptr),y
0817: 68                           pla
0818: a8                           tay
0819: 60                           rts

081a: 98           Unused2         tya                       ;this reads a pixel and returns zero/non-zero in $13
081b: 48                           pha
081c: 20 26 08                     jsr     GetPixelAddr
081f: 31 14                        and     (]hptr),y
0821: 85 13                        sta     $13
0823: 68                           pla
0824: a8                           tay
0825: 60                           rts

                   ; 
                   ; Gets the address of a pixel on the hi-res screen.
                   ; 
                   ; On entry:
                   ;   $10: X coordinate (0-139)
                   ;   $11: Y coordinate (0-191)
                   ;   $12: X coord odd/even flag (0 or 1)
                   ; 
                   ; On exit:
                   ;   $14/15: address of byte
                   ;   A-reg: pixel mask
                   ;   Y-reg: zero
                   ; 
                   ]col_num        .var    $16    {addr/1}   ;0-39
                   ]pixel_num      .var    $17    {addr/1}   ;0-6

0826: 20 47 08     GetPixelAddr    jsr     LineAddrCalc      ;get line address in $14/15
0829: 20 6d 08                     jsr     ColumnCalc        ;get column in $16/17
082c: a5 14                        lda     ]hptr
082e: 18                           clc
082f: 65 16                        adc     ]col_num
0831: 90 02                        bcc     :NoInc
0833: e6 15                        inc     ]hptr+1           ;shouldn't happen?
0835: 85 14        :NoInc          sta     ]hptr
0837: a4 17                        ldy     ]pixel_num        ;convert pixel index to bit mask
0839: b9 40 08                     lda     pixel_table,y
083c: a0 00                        ldy     #$00
083e: 60                           rts

083f: ea                           .junk   1
                   ; 
                   ; Table of hi-res pixel values.
                   ; 
0840: 01 02 04 08+ pixel_table     .bulk   01020408102040

                   ; 
                   ; Calculates a hi-res row address.
                   ; 
                   ; On entry:
                   ;   $11: line number
                   ; 
                   ; On exit:
                   ;   $14/15: address
                   ; 
                   • Clear variables
                   ]yc             .var    $11    {addr/1}
                   ]hptr           .var    $14    {addr/2}

0847: a5 11        LineAddrCalc    lda     ]yc               ;same purpose as Applesoft HPOSN, but very
0849: 0a                           asl     A                 ; different implementation
084a: 0a                           asl     A
084b: 29 1c                        and     #$1c
084d: 85 15                        sta     ]hptr+1
084f: a5 11                        lda     ]yc
0851: 6a                           ror     A
0852: 6a                           ror     A
0853: 6a                           ror     A
0854: 6a                           ror     A
0855: 29 03                        and     #$03
0857: 05 15                        ora     ]hptr+1
0859: 09 20                        ora     #$20              ;hi-res page 1
085b: 85 15                        sta     ]hptr+1
085d: a5 11                        lda     ]yc
085f: 6a                           ror     A
0860: 29 e0                        and     #$e0
0862: 85 14                        sta     ]hptr
0864: 6a                           ror     A
0865: 6a                           ror     A
0866: 29 18                        and     #$18
0868: 05 14                        ora     ]hptr
086a: 85 14                        sta     ]hptr
086c: 60                           rts

                   ; 
                   ; Calculates a pixel position within a line.  Divides by 7, leaving the quotient
                   ; in $16 and the remainder in $17.
                   ; 
                   ; On entry:
                   ;   $10: X coordinate (0-139)
                   ;   $12: odd/even flag (0 or 1)
                   ; 
                   ; On exit:
                   ;   $16: byte offset (0-39)
                   ;   $17: pixel offset (0-6)
                   ; 
                   ]xc             .var    $10    {addr/1}
                   ]odd_even       .var    $12    {addr/1}
                   ]byte_offset    .var    $16    {addr/1}
                   ]pixel_offset   .var    $17    {addr/1}
                   ]tmp            .var    $18    {addr/2}

086d: a9 00        ColumnCalc      lda     #$00
086f: 85 16                        sta     ]byte_offset
0871: a9 e0                        lda     #$e0
0873: 85 18                        sta     ]tmp
0875: a9 20                        lda     #$20
0877: 85 19                        sta     ]tmp+1
0879: a5 10                        lda     ]xc               ;get X coordinate
087b: 85 17                        sta     ]pixel_offset
087d: a0 06                        ldy     #$06
087f: a5 17        :Loop           lda     ]pixel_offset
0881: c5 18                        cmp     ]tmp
0883: 90 0b                        bcc     :Lt
0885: e5 18                        sbc     ]tmp
0887: 85 17                        sta     ]pixel_offset
0889: a5 16                        lda     ]byte_offset
088b: 05 19                        ora     ]tmp+1
088d: 85 16                        sta     ]byte_offset
088f: 18                           clc
0890: 66 18        :Lt             ror     ]tmp
0892: 66 19                        ror     ]tmp+1
0894: 88                           dey
0895: d0 e8                        bne     :Loop
0897: 06 16                        asl     ]byte_offset
0899: a5 17                        lda     ]pixel_offset     ;factor in the odd/even flag
089b: 0a                           asl     A
089c: 05 12                        ora     ]odd_even
089e: c9 07                        cmp     #$07              ;did we hit 7?
08a0: 90 04                        bcc     :Ne7              ;no, branch
08a2: e9 07                        sbc     #$07              ;yes, zero the pixel offset
08a4: e6 16                        inc     ]byte_offset      ; and inc the byte offset
08a6: 85 17        :Ne7            sta     ]pixel_offset
08a8: 60                           rts

                   ********************************************************************************
                   * Clear hi-res page 1 to black.                                                *
                   *                                                                              *
                   * (called from from BASIC -- 2217)                                             *
                   ********************************************************************************
08a9: 8a           ClearScreen     txa                       ;preserve X/Y
08aa: 48                           pha
08ab: 98                           tya
08ac: 48                           pha
08ad: a9 00                        lda     #$00              ;set pointer to hi-res page 1 ($2000)
08af: 85 14                        sta     ]hptr
08b1: a2 20                        ldx     #$20              ;$20 is also used as a counter
08b3: 86 15                        stx     ]hptr+1
08b5: a8                           tay
08b6: 91 14        :Loop           sta     (]hptr),y
08b8: c8                           iny
08b9: d0 fb                        bne     :Loop
08bb: e6 15                        inc     ]hptr+1
08bd: ca                           dex                       ;have we hit $4000?
08be: d0 f6                        bne     :Loop             ;not yet
08c0: 68                           pla                       ;restore X/Y
08c1: a8                           tay
08c2: 68                           pla
08c3: aa                           tax
08c4: 60                           rts

08c5: 00 00 00                     .junk   3
                   ; 
                   ; Animation randomization limiter.
                   ; 
                   ; Determines which frames can randomly replace which other frames.
                   ; 
                   ; See the BASIC program, lines 540-590.
                   ; 
08c8: 00 00 00 00+ anim_random     .bulk   0000000000000000010101010101010001010001000101000001000101010000
                                    +      000100010001000000010101000100000001000100010000

                   vis
0900: 00 1c 22 2a+ font_glyphs     .bulk   001c222a3a1a023c00081422223e2222001e22221e22221e001c22020202221c
                                    +      001e22222222221e003e02021e02023e003e02021e020202003c02020232223c
                                    +      002222223e222222001c08080808081c002020202020221c0022120a060a1222
                                    +      000202020202023e0022362a2a222222002222262a322222001c22222222221c
                                    +      001e22221e020202001c2222222a122c001e22221e0a1222001c22021c20221c
                                    +      003e080808080808002222222222221c0022222222221408002222222a2a3622
                                    +      00222214081422220022221408080808003e20100804023e003e06060606063e
                                    +      000002040a122000003e30303030303e0000000814220000000000000000003e
                                    +      0000000000000000000808080808000800141414000000000014143e143e1414
                                    +      00083c0a1c281e08000626100804323000040a0a042a122c0008080800000000
                                    +      0008040202020408000810202020100800082a1c081c2a08000008083e080800
                                    +      0000000000080804000000003e00000000000000000000080000201008040200
                                    +      001c22322a26221c00080c080808081c001c22201804023e003e20101820221c
                                    +      00101814123e1010003e021e2020221c003804021e22221c003e201008040404
                                    +      001c22221c22221c001c22223c20100e00000008000800000000000808000804
                                    +      00100804020408100000003e003e00000004081020100804001c221008080008

                   ********************************************************************************
                   * Hi-res character generator output function.                                  *
                   *                                                                              *
                   * CSWL/CSWH ($36/37) is pointed here.                                          *
                   ********************************************************************************
                   ]font_ptr       .var    $0e    {addr/2}
                   ]line_num       .var    $11    {addr/1}
                   ]hptr           .var    $14    {addr/2}

0b00: 48           CharOutput      pha                       ;save char to print
0b01: 8d 50 c0                     sta     TXTCLR            ;make sure we're in hi-res mode
0b04: 8d 52 c0                     sta     MIXCLR
0b07: 8d 57 c0                     sta     HIRES
0b0a: c9 8d                        cmp     #$8d              ;carriage return?
0b0c: f0 3b                        beq     :Skip             ;yup, nothing to output on hi-res
0b0e: 29 3f                        and     #$3f              ;reduce to 0-63
0b10: 0a                           asl     A                 ;multiply by 8
0b11: 0a                           asl     A
0b12: 0a                           asl     A
0b13: 85 0e                        sta     ]font_ptr
0b15: a9 09                        lda     #>font_glyphs
0b17: 69 00                        adc     #$00
0b19: 85 0f                        sta     ]font_ptr+1
0b1b: a5 25                        lda     MON_CV            ;current text line
0b1d: 0a                           asl     A                 ;multiply by 8 (font height)
0b1e: 0a                           asl     A
0b1f: 0a                           asl     A
0b20: 85 11                        sta     ]line_num
0b22: 8a                           txa                       ;preserve X/Y
0b23: 48                           pha
0b24: 98                           tya
0b25: 48                           pha
0b26: a2 08                        ldx     #$08              ;glyphs are 8 rows high
0b28: a0 00                        ldy     #$00              ;just need this for index
0b2a: 20 47 08     :Loop           jsr     LineAddrCalc      ;compute address of start of line
0b2d: 18                           clc
0b2e: a5 14                        lda     ]hptr             ;add current horizontal text position
0b30: 65 24                        adc     MON_CH
0b32: 85 14                        sta     ]hptr
0b34: a5 15                        lda     ]hptr+1
0b36: 69 00                        adc     #$00
0b38: 85 15                        sta     ]hptr+1
0b3a: b1 0e                        lda     (]font_ptr),y     ;read from the glyph
0b3c: 91 14                        sta     (]hptr),y         ;write to the hi-res screen
0b3e: e6 11                        inc     ]line_num         ;advance to next line
0b40: e6 0e                        inc     ]font_ptr         ; and next byte in glyph
0b42: ca                           dex                       ;done 8?
0b43: d0 e5                        bne     :Loop             ;not yet
0b45: 68                           pla                       ;restore A/X/Y
0b46: a8                           tay
0b47: 68                           pla
0b48: aa                           tax
0b49: 68           :Skip           pla
0b4a: 4c f0 fd                     jmp     MON_COUT1         ;let the ROM routine do its thing (updates CV/CH)

                   ********************************************************************************
                   * Show musical animation.                                                      *
                   *                                                                              *
                   * (called from BASIC -- 2893)                                                  *
                   ********************************************************************************
                   • Clear variables
                   ]src_ptr        .var    $0c    {addr/2}
                   ]anim_ptr       .var    $0e    {addr/2}
                   ]pitch          .var    $10    {addr/1}
                   ]yc             .var    $11    {addr/1}
                   ]row_counter    .var    $12    {addr/1}
                   ]counter        .var    $13    {addr/1}
                   ]dst_ptr        .var    $14    {addr/2}

0b4d: 8a           ShowAnimation   txa                       ;preserve X/Y
0b4e: 48                           pha
0b4f: 98                           tya
0b50: 48                           pha
0b51: a9 ff                        lda     #<anim_data-1
0b53: 85 0e                        sta     ]anim_ptr
0b55: a9 0c                        lda     #>anim_data-$100
0b57: 85 0f                        sta     ]anim_ptr+1
0b59: a0 00                        ldy     #$00              ;must be zero
0b5b: 20 cf 0b     :MainLoop       jsr     GetAnimIndex      ;get index of next animation frame
0b5e: f0 35                        beq     :CheckSound       ;zero, no change to visual
0b60: 10 05                        bpl     :DoVisual         ;draw if not negative
0b62: 68                           pla                       ;restore X/Y
0b63: a8                           tay
0b64: 68                           pla
0b65: aa                           tax
0b66: 60                           rts

0b67: 18           :DoVisual       clc                       ;given index 1-8
0b68: 69 0f                        adc     #>shape_data-$100 ;shape data starts at $1000, 256 bytes each
0b6a: 85 0d                        sta     ]src_ptr+1
0b6c: a9 00                        lda     #$00
0b6e: 85 0c                        sta     ]src_ptr
0b70: a9 56                        lda     #86               ;start drawing at line 86
0b72: 85 11                        sta     ]yc
0b74: a9 24                        lda     #36               ;36 lines high
0b76: 85 12                        sta     ]row_counter
0b78: 20 47 08     :DrawLoop       jsr     LineAddrCalc
0b7b: e6 11                        inc     ]yc
0b7d: 18                           clc
0b7e: a5 14                        lda     ]dst_ptr
0b80: 69 0b                        adc     #11               ;start at column 11
0b82: 85 14                        sta     ]dst_ptr
0b84: a2 07                        ldx     #7                ;7 bytes wide
0b86: b1 0c        :DrawRowLoop    lda     (]src_ptr),y
0b88: 91 14                        sta     (]dst_ptr),y
0b8a: e6 0c                        inc     ]src_ptr
0b8c: e6 14                        inc     ]dst_ptr
0b8e: ca                           dex
0b8f: d0 f5                        bne     :DrawRowLoop
0b91: c6 12                        dec     ]row_counter
0b93: d0 e3                        bne     :DrawLoop
                   ; Play a sound if desired.
0b95: 20 cf 0b     :CheckSound     jsr     GetAnimIndex      ;get sound value
0b98: d0 16                        bne     PlaySound
0b9a: 20 cf 0b                     jsr     GetAnimIndex      ;no sound; get duration
0b9d: f0 bc                        beq     :MainLoop         ;no duration, loop
                   ; Sleep quietly for a bit.
0b9f: aa                           tax
0ba0: a9 10        :SleepLoop1     lda     #$10
0ba2: 85 13                        sta     ]counter
0ba4: 88           :SleepLoop2     dey
0ba5: d0 fd                        bne     :SleepLoop2
0ba7: c6 13                        dec     ]counter
0ba9: d0 f9                        bne     :SleepLoop2
0bab: ca                           dex
0bac: d0 f2                        bne     :SleepLoop1
0bae: f0 ab                        beq     :MainLoop

0bb0: 85 10        PlaySound       sta     ]pitch
0bb2: 20 cf 0b                     jsr     GetAnimIndex      ;get duration
0bb5: a8                           tay
0bb6: a9 08        :OuterLoop      lda     #$08              ;sustain for 8 iterations
0bb8: 85 13                        sta     ]counter
0bba: a6 10        :PlayLoop       ldx     ]pitch
0bbc: 48           :IntraClick     pha                       ;burn a few cycles
0bbd: 68                           pla
0bbe: 48                           pha
0bbf: 68                           pla
0bc0: ca                           dex
0bc1: d0 f9                        bne     :IntraClick
0bc3: 8e 30 c0                     stx     SPKR              ;click
0bc6: c6 13                        dec     ]counter
0bc8: d0 f0                        bne     :PlayLoop
0bca: 88                           dey                       ;end of duration?
0bcb: d0 e9                        bne     :OuterLoop        ;not yet
0bcd: f0 8c                        beq     :MainLoop         ;yes, go back to work

                   ; 
                   ; Advances the animation pointer and returns the value found.
                   ; 
                   ; On entry:
                   ;   $0e/0f: animation pointer
                   ;   Y-reg: 0
                   ; 
                   ; On exit:
                   ;   $0e/0f: incremented
                   ;   A-reg: value at ($0e)
                   ; 
0bcf: e6 0e        GetAnimIndex    inc     ]anim_ptr
0bd1: d0 02                        bne     :NoInc
0bd3: e6 0f                        inc     ]anim_ptr+1
0bd5: b1 0e        :NoInc          lda     (]anim_ptr),y
0bd7: 60                           rts

0bd8: ff ff 00 00+                 .align  $0100 (40 bytes)
                   ; 
                   ; Values used by code at line 460 in the BASIC program.  Each entry is
                   ; X0,Y0,X1,Y1, and defines the lines that are drawn pixel-by-pixel.
                   ; 
                   ; Only vertical, horizontal, and diagonal lines are possible.
                   ; 
0c00: 00 00 8b 00                  .bulk   00008b00
0c04: 8b 00 8b bf                  .bulk   8b008bbf
0c08: 8b bf 00 bf                  .bulk   8bbf00bf
0c0c: 00 bf 00 00                  .bulk   00bf0000
0c10: 52 14 75 14                  .bulk   52147514
0c14: 75 14 75 34                  .bulk   75147534
0c18: 75 34 52 34                  .bulk   75345234
0c1c: 52 34 52 14                  .bulk   52345214
0c20: 5f 14 63 10                  .bulk   5f146310
0c24: 68 14 64 10                  .bulk   68146410
0c28: 1f 4b 4f 4b                  .bulk   1f4b4f4b
0c2c: 4f 4b 4f 89                  .bulk   4f4b4f89
0c30: 4f 89 1f 89                  .bulk   4f891f89
0c34: 1f 89 1f 4b                  .bulk   1f891f4b
0c38: 21 4e 43 4e                  .bulk   214e434e
0c3c: 43 4e 43 81                  .bulk   434e4381
0c40: 43 81 21 81                  .bulk   43812181
0c44: 21 81 21 4e                  .bulk   2181214e
0c48: 1f 4b 1a 46                  .bulk   1f4b1a46
0c4c: 1a 46 1a 84                  .bulk   1a461a84
0c50: 1a 84 1f 89                  .bulk   1a841f89
0c54: 1a 46 4a 46                  .bulk   1a464a46
0c58: 4a 46 4f 4b                  .bulk   4a464f4b
0c5c: 34 48 20 34                  .bulk   34482034
0c60: 34 48 48 34                  .bulk   34484834
0c64: 1a 7f 0b 7f                  .bulk   1a7f0b7f
0c68: 0b 7f 1f 93                  .bulk   0b7f1f93
0c6c: 1f 93 63 93                  .bulk   1f936393
0c70: 63 93 4f 7f                  .bulk   63934f7f
0c74: 0b 7f 0b 82                  .bulk   0b7f0b82
0c78: 0b 82 1f 96                  .bulk   0b821f96
0c7c: 1f 96 63 96                  .bulk   1f966396
0c80: 63 96 63 93                  .bulk   63966393
0c84: 1f 93 1f 96                  .bulk   1f931f96
0c88: 0f 87 0f ac                  .bulk   0f870fac
0c8c: 4d 97 4d ac                  .bulk   4d974dac
0c90: 21 97 21 bf                  .bulk   219721bf
0c94: 5f 97 5f bf                  .bulk   5f975fbf
0c98: 00 75 1a 75                  .bulk   00751a75
0c9c: 4f 75 7d 75                  .bulk   4f757d75
0ca0: 7d 75 7d 00                  .bulk   7d757d00
0ca4: 7d 75 8b 83+                 .align  $0100 (92 bytes)
                   ; 
                   ; Animation definition.  Each entry has 3 bytes:
                   ; 
                   ;  +00: animation frame (1-8), or 0 if we don't want to change it
                   ;  +01/02: sound pitch and duration
                   ; 
                   ; If $01 is zero, no sound will be played (but it will still pause briefly).
                   ; 
                   ; A negative value for the animation frame ends the sequence.
                   ; 
                   ; There are 92 frames.
                   ; 
0d00: 02 00 40     anim_data       .bulk   020040
0d03: 07 4d 0c                     .bulk   074d0c
0d06: 02 57 0b                     .bulk   02570b
0d09: 05 62 0a                     .bulk   05620a
0d0c: 03 68 09                     .bulk   036809
0d0f: 05 62 0a                     .bulk   05620a
0d12: 03 57 0b                     .bulk   03570b
0d15: 05 62 0a                     .bulk   05620a
0d18: 07 83 07                     .bulk   078307
0d1b: 03 9d 06                     .bulk   039d06
0d1e: 07 94 06                     .bulk   079406
0d21: 02 83 07                     .bulk   028307
0d24: 03 76 08                     .bulk   037608
0d27: 05 83 07                     .bulk   058307
0d2a: 02 9d 06                     .bulk   029d06
0d2d: 08 83 0f                     .bulk   08830f
0d30: 06 62 0a                     .bulk   06620a
0d33: 08 57 0b                     .bulk   08570b
0d36: 04 4d 19                     .bulk   044d19
0d39: 02 4d 19                     .bulk   024d19
0d3c: 06 4d 0c                     .bulk   064d0c
0d3f: 04 57 0b                     .bulk   04570b
0d42: 02 62 0a                     .bulk   02620a
0d45: 08 57 0b                     .bulk   08570b
0d48: 04 4d 19                     .bulk   044d19
0d4b: 02 57 16                     .bulk   025716
0d4e: 08 57 16                     .bulk   085716
0d51: 02 4d 0c                     .bulk   024d0c
0d54: 08 57 0b                     .bulk   08570b
0d57: 02 62 0a                     .bulk   02620a
0d5a: 07 68 09                     .bulk   076809
0d5d: 05 62 0a                     .bulk   05620a
0d60: 03 57 0b                     .bulk   03570b
0d63: 05 62 0a                     .bulk   05620a
0d66: 07 83 07                     .bulk   078307
0d69: 02 9d 06                     .bulk   029d06
0d6c: 07 94 06                     .bulk   079406
0d6f: 02 83 07                     .bulk   028307
0d72: 07 76 08                     .bulk   077608
0d75: 05 83 07                     .bulk   058307
0d78: 03 9d 06                     .bulk   039d06
0d7b: 07 83 0f                     .bulk   07830f
0d7e: 02 62 0a                     .bulk   02620a
0d81: 06 57 0b                     .bulk   06570b
0d84: 04 4d 19                     .bulk   044d19
0d87: 03 41 1e                     .bulk   03411e
0d8a: 04 41 0f                     .bulk   04410f
0d8d: 02 4d 0c                     .bulk   024d0c
0d90: 05 62 0a                     .bulk   05620a
0d93: 03 57 0b                     .bulk   03570b
0d96: 02 4d 19                     .bulk   024d19
0d99: 08 57 16                     .bulk   085716
0d9c: 02 62 28                     .bulk   026228
0d9f: 04 4d 0c                     .bulk   044d0c
0da2: 02 41 1e                     .bulk   02411e
0da5: 07 4d 0c                     .bulk   074d0c
0da8: 02 41 1e                     .bulk   02411e
0dab: 03 41 1e                     .bulk   03411e
0dae: 07 4d 0c                     .bulk   074d0c
0db1: 02 41 1e                     .bulk   02411e
0db4: 08 4d 0c                     .bulk   084d0c
0db7: 02 41 3d                     .bulk   02413d
0dba: 07 4a 0d                     .bulk   074a0d
0dbd: 03 3a 22                     .bulk   033a22
0dc0: 05 4a 0d                     .bulk   054a0d
0dc3: 07 3a 22                     .bulk   073a22
0dc6: 05 3a 22                     .bulk   053a22
0dc9: 03 4a 0d                     .bulk   034a0d
0dcc: 04 3a 22                     .bulk   043a22
0dcf: 06 4a 0d                     .bulk   064a0d
0dd2: 04 3a 33                     .bulk   043a33
0dd5: 08 34 13                     .bulk   083413
0dd8: 06 31 28                     .bulk   063128
0ddb: 02 31 28                     .bulk   023128
0dde: 04 41 1e                     .bulk   04411e
0de1: 03 41 1e                     .bulk   03411e
0de4: 07 4d 19                     .bulk   074d19
0de7: 05 4d 19                     .bulk   054d19
0dea: 03 57 16                     .bulk   035716
0ded: 02 62 0a                     .bulk   02620a
0df0: 08 57 0b                     .bulk   08570b
0df3: 02 4d 19                     .bulk   024d19
0df6: 07 41 0f                     .bulk   07410f
0df9: 05 3a 11                     .bulk   053a11
0dfc: 07 41 0f                     .bulk   07410f
0dff: 05 4d 0c                     .bulk   054d0c
0e02: 03 62 0a                     .bulk   03620a
0e05: 02 57 0b                     .bulk   02570b
0e08: 08 4d 19                     .bulk   084d19
0e0b: 04 57 16                     .bulk   045716
0e0e: 02 62 28                     .bulk   026228
0e11: 01 00 00                     .bulk   010000            ;blank frame to erase dancer
0e14: ff a0 19                     .bulk   ffa019            ;frame=-1 to end list
0e17: 08 78 21 07+                 .align  $0100 (233 bytes)
                   ; Looks like 256 bytes of nothing useful here.
0f00: 20 08 9b 15+                 .junk   256

                   ; 
                   ; Animation shape data starts here.  The index (1-8) is added to $0f00.
                   ; 
                   ; Each shape is 7x36.
                   ; 
                   vis vis
1000: 00 00 00 00+ shape_data      .fill   256,$00

                   vis
1100: 00 00 00 00+                 .bulk   00000000000000000000060000000000000f0000000000000f0000000000000f
                                    +      00000000000006000000000000060000000000603f0000000000707f00000000
                                    +      00707f0100000000787f0100000000385f0100000000185f03000000001c1f03
                                    +      000000000c1f0700000000061f0600000000021f0c00000000023f1800000000
                                    +      433f3000000000413f2000000000413f0000000000403f0000000000403b0000
                                    +      000000403b0000000000403b0000000000403100000000004031000000000040
                                    +      3100000000004031000000000040310000000000403100000000004031000000
                                    +      0000402000000000004020000000000060600000000000304001000000000000

                   vis
1200: 00 00 00 00+                 .bulk   00000000200000000000183000000000003c1800000000003c0800000000003c
                                    +      0c000000000018060000000000180700000000007f0300000000407f01000000
                                    +      00607f0100000000787e01000000003c7c01000000000f7c0000000070017c00
                                    +      00000010007c0000000000007e0000000000007e0000000000007e0000000000
                                    +      007f0000000000007f0100000000007701000000000077010000000000670100
                                    +      0000000067010000000000670100000000006301000000004063010000000040
                                    +      6301000000004061000000000040610000000000406100000000004060000000
                                    +      0000604000000000006040000000000020600000000000204001000000000000

                   vis
1300: 00 20 00 00+                 .bulk   0020000000000000604001000000004061030000000000610300000000006303
                                    +      0000000000460100000000004e0100000000007c0f0000000000781f00000000
                                    +      00783f0000000000787701000000007863030000000070030f0000000070033c
                                    +      0000000070032000000000700700000000007007000000000070070000000000
                                    +      700f0000000000780f0000000000780e0000000000780e0000000000380e0000
                                    +      000000380e0000000000380e0000000000380c0000000000381c000000000038
                                    +      1c00000000003018000000000030180000000000301800000000003010000000
                                    +      0000103000000000001030000000000030200000000000182000000000000000

                   vis
1400: 00 00 00 00+                 .bulk   0000000000000000000030000000000000780000000000007800000000000078
                                    +      00000000000030000000000000300000000000407f1f00000000707f7f000000
                                    +      007c7f7f010000000c7c43010000000678010300000003780102000000017801
                                    +      020000000378010200000001780103000000007e0302000000407f0300000000
                                    +      707f0700000000787f0700000000386007000000003060070000000030600700
                                    +      0000007060030000000060400300000000604003000000004040030000000070
                                    +      4003000000000040010000000000600100000000006000000000000060000000
                                    +      00000060000000000000600000000000003000000000000038000000ffff0000

                   vis
1500: 00 00 00 00+                 .bulk   000000000000000000180000000000003c0000000000003c0000000000003c00
                                    +      000000000018000000000000180000000000707f07000000007c7f1f00000000
                                    +      7e7f7f00000000067f6000000000033e4001000000013e0003000000013e0002
                                    +      000000013e0003000000033e0002000000017f0100000000007f070000000040
                                    +      7f1f00000000407f3f00000000400f3800000000400f1800000000400f180000
                                    +      0000000f1c0000000000070c0000000000070c00000000000704000000000007
                                    +      1c0000000000060000000000000e0000000000000c0000000000000c00000000
                                    +      00000c0000000000000c00000000000018000000000000380000000000000000

                   vis
1600: 00 00 00 00+                 .bulk   0000000000000000000060000000000000700100000000007001000000000070
                                    +      01000000000060000000000000600000000000007c0700000000007f0f000000
                                    +      00407f1f00000000607f3f000000007079790000000060786101000000407961
                                    +      00000000007b3100000000007e1900000000007c0d0000000000780900000000
                                    +      00780100000000007c0300000000007c0700000000007e0700000000005f0700
                                    +      000000004f070000000000070700000000000f0700000000001e030000000000
                                    +      7c03000000000070070000000000400f00000000004039000000000060300000
                                    +      00000060100000000000600000000000004000000000000040000000ffff0000

                   vis
1700: 00 00 00 00+                 .bulk   0000000000000000004001000000000060030000000000600300000000006003
                                    +      00000000004001000000000040010000000000780f00000000007c3f00000000
                                    +      007e7f00000000007f7f01000000406767030000006061470100000040616700
                                    +      0000000063370000000000661f00000000006c0f000000000064070000000000
                                    +      60070000000000700f0000000000780f0000000000781f0000000000783e0000
                                    +      000000783c000000000038380000000000383c0000000000301e000000000070
                                    +      0f0000000000780300000000007c000000000000670000000000004301000000
                                    +      00004201000000000040010000000000400000000000004000000000ffff0000
                   ; 
                   ; This has some text strings and other stuff, most likely left over from program
                   ; execution while testing.  Integer puts its variables at LOMEM, and the program
                   ; set its LOMEM to $1800.
                   ; 
1800: c1 40 00 39+ Lomem           .junk   933
                   ; 
                   ; Main Integer BASIC program.
                   ; 
1ba5: 37 00 00 5d+ MainProgram     .bulk   3700005da0aaaaaaa0c1d0d0ccc5add6c9d3c9cfcea0aaaaaaa0a0a0a0a0a0a0
                                    +      d7d2c9d4d4c5cea0c2d9a0d2aecaaea0c2c9d3c8cfd0010c14004ec14022b533
                                    +      0072013c1e00c1407028a0a0a0a0a0a0a0c2cfc2a0c2c9d3c8cfd0a0d0d2c5d3
                                    +      c5ced4d3a0aeaeaea0c1d0d0ccc5add6c9d3c9cfcea1a0a0a0a0a0a0a0290109
                                    +      28004d36b9a803012532006fb10a000350b10a00036128aaaaaaa0c1d0d0ccc5
                                    +      add6c9d3c9cfcea0aaaaaa29013437006fb214000350b30300036128c3cfd0d9
                                    +      d2c9c7c8d4a0b1b9b7b8a0c1d0d0ccc5a0c3cfcdd0d5d4c5d2aca0c9cec3ae29
                                    +      01113c0055cb56b1010057b2c4090359cb010946004d36b9a803012650004db2
                                    +      a908036436b1a93f65b00000036436b1ae3f65b00000036436b1b03f65b00000
                                    +      010d5a005cb2cc01035cb272010111640055cb56b1010057b1e8030359cb010e
                                    +      6e0055cb56b1010057b42d00010d78006fb10d000350b10c000110820061c140
                                    +      2acb23cb12b606007201118c0055ca56b1010057b74b000359ca0106960059cb
                                    +      0111a00055cb56b1010057b1e8030359cb0108aa004db24d0b0111b40055cb56
                                    +      b1010057b5f4010359cb0114be006fb10d000350b10d00036128d4c8c529010f
                                    +      c80050b10f00036128c5cec4290111d20055cb56b1010057b1dc050359cb0114
                                    +      dc006fb10d000350b10d00036128a0a0a029010fe60050b10f00036128a0a0a0
                                    +      290111f00055cb56b1010057b4a00f0359cb0108fa005cb31c02010804015fb1
                                    +      6e0001050e015101111801c4d871c313c103c4d971c413c201282201c4c5ccd4
                                    +      c171313fc4d8720360313fc4d97219313fc4d87225c4c5ccd4c171313fc4d972
                                    +      01212c01d871c103d971c203c9cec3d871303fc4d87203c9cec3d971303fc4d9
                                    +      720114360155cc56b1010057c4c5ccd4c112b101000111400164b1100065d803
                                    +      64b1110065d901114a0164b1120065b00000034db200080111540164b1120065
                                    +      b10100034db2000801155e01d871d812c9cec3d803d971d912c9cec3d9010868
                                    +      0159cc035b0115720164b5360065b000000364b5370065b10b0001087c016fb4
                                    +      04000110860150b21900036128c8cfcdc5290111900150b21b00036128d3d7c5
                                    +      c5d42901109a0150b31e00036128c8cfcdc5290113a4016fb10b000350b21500
                                    +      036128cfcf290113ae016fb10f000350b21500036128a7a7290113b8016fb110
                                    +      000350b21500036128aeae290105c2015b0114cc0155cccfc356b3000c57b3a4
                                    +      0c58b40400010cd601c1712e3fcccfc3720110e001c2712e3fcccfc312b10100
                                    +      720110ea01c3712e3fcccfc312b20200720110f401c4712e3fcccfc312b30300
                                    +      720108fe015cb118010108080259cccfc3010512025b01191c02cccfc371b303
                                    +      0d03d3d4712e3fcccfc313b303007201112602602e3fcccfc37216b10100255b
                                    +      010e3002d4d2d9712f3fb707007201223a02602e3fb7070014d3d413b10e0012
                                    +      d4d2d912b2cf087216b0000024b3300201164402d3d471d4d2d912b202000364
                                    +      cccfc365d3d401144e02cccfc371cccfc312b30300035fb3260201

Symbol Table

CharOutput$0b00
ClearScreen$08a9
PlotPoint$0800
ShowAnimation$0b4d