// ============================================
// triangle-01 - Disassembled Source
// ============================================
// KickAssembler syntax
// Generated by Restore 64 vdisasm-one 1.0 build 1, 2026-03-29 17:54:26
// https://restore64.dev by datucker / Rabenauge
//
// Load address: $0801  End: $0fff  (2047 bytes)
// Entry point:  $0810 (via BASIC SYS 2064)
//
// Code: 721 bytes, Data: 1326 bytes
// Labels: 73, Subroutines: 9
//
// Cross-references: all OK
// ============================================


// --- Region $0810-$08dd ---
.pc = $0810 "main_0810"

main_0810:
        lda #$00
        sta $d011                                   // text mode, screen off, 24 rows, Y-scroll=0
        sta $d020
        sta $d021
        sta $fb
        lda #$90
        jsr $ffd2
        jsr $e544
        ldx #$00
        lda #$01

loc_0829:
        sta $d9c0,x
        inx
        bne loc_0829
        ldx #$00
        lda #$40

loc_0833:
        sta $0400,x
        sta $0500,x
        sta $0600,x
        sta $0700,x
        inx
        bne loc_0833
        jsr sub_0985
        jsr sub_0c19
        lda #$00
        sta $b0
        sta $b2
        lda #$20
        sta $b1
        lda #$fb
        sta $b3
        lda #$25
        sta $b4
        jsr sub_0d00
        jsr sub_0a7b
        jsr sub_0abb
        sei
        lda #$19
        sta $d018                                   // screen=$0400, charset=$2000

loc_0869:
        ldx #$42

loc_086b:
        cpx $d012
        bne loc_086b

loc_0870:
        lda loc_089c,x

loc_0873:
        cpx $d012
        beq loc_0873
        sta $d021
        inx
        cpx #$83
        bne loc_0870
        lda #$c8
        sta $d016                                   // hires, 40 cols, X-scroll=0
        jsr sub_098e
        jsr sub_09b6
        ldx #$c7

loc_088d:
        cpx $d012
        bne loc_088d
.label smc_0893 = * + 1
        lda #$c8                                    // !SMC: modified by $0951
        sta $d016                                   // hires, 40 cols, X-scroll=0
        ldx #$04

loc_0899:
        lda $d012

loc_089c:
        cmp $d012
        beq loc_089c
        txa
        and #$07
        ora #$18
        sta $d011
        inx
.label smc_08ab = * + 1
        cpx #$40                                    // !SMC: modified by $08b6
        bne loc_0899
        ldx $fa
        lda $0c6b,x
        clc
        adc #$01
        sta smc_08ab                                // SMC: modifies $08ab
        inx
        stx $fa
        cpx #$40
        bne loc_08c4
        lda #$00
        sta $fa

loc_08c4:
        ldx #$00

loc_08c6:
        cpx $d012
        bne loc_08c6
        lda #$1b
        sta $d011                                   // text mode, screen on, 25 rows, Y-scroll=3
        lda #$c4
        sta $d016                                   // hires, 38 cols, X-scroll=4
        jsr sub_093f
        jsr sub_0cab
        jmp loc_0869

// --- Region $093f-$0a51 ---
.pc = $093f "sub_093f"
// Referenced by: jsr from $08d5

sub_093f:
        ldx #$02

loc_0941:
        dex
        bpl loc_0945

dat_0944:
        .byte $60                                   // `

loc_0945:
        dec smc_0893
        lda smc_0893
        cmp #$bf
        bne loc_0941
        lda #$c7
        sta smc_0893                                // SMC: modifies $0893
        ldy #$00

loc_0956:
        lda $06f9,y
        sta $06f8,y
        lda $0721,y
        sta $0720,y
        iny
        cpy #$27
        bne loc_0956
        ldy #$00
        lda ($02),y
        asl
        sta $071f
        clc
        adc #$01
        sta $0747
        inc $02
        bne loc_097b
        inc $03

loc_097b:
        lda ($02),y
        bne loc_0982
        jsr sub_0985

loc_0982:
        jmp loc_0941
// Referenced by: jsr from $0842, $097f

sub_0985:
        lda #$20
        sta $02
        lda #$0d
        sta $03
        rts
// Referenced by: jsr from $0885

sub_098e:
        ldx #$26

loc_0990:
        lda $daf8,x
        sta $daf9,x
        lda $db20,x
        sta $db21,x
        dex
        bpl loc_0990
        ldx $fb
        lda $091f,x
        sta $daf8
        sta $db20
        inx
        stx $fb
        cpx #$20
        bne loc_09b5
        lda #$00
        sta $fb

loc_09b5:
        rts
// Referenced by: jsr from $0888

sub_09b6:
        ldy #$64
        lda #$ff

loc_09ba:
        sta $2407,y
        dey
        bne loc_09ba
        ldy dat_0a51
        ldx $0a59,y
        lda #$00
        sta $2408,x
        sta $2409,x
        sta $240a,x
        ldy $0a52
        ldx $0a59,y
        sta $2410,x
        sta $2411,x
        sta $2412,x
        ldy $0a53
        ldx $0a59,y
        sta $2418,x
        sta $2419,x
        sta $241a,x
        ldy $0a54
        ldx $0a59,y
        sta $2420,x
        sta $2421,x
        sta $2422,x
        ldy $0a55
        ldx $0a59,y
        sta $2428,x
        sta $2429,x
        sta $242a,x
        ldy $0a56
        ldx $0a59,y
        sta $2430,x
        sta $2431,x
        sta $2432,x
        ldy $0a57
        ldx $0a59,y
        sta $2438,x
        sta $2439,x
        sta $243a,x
        ldy $0a58
        ldx $0a59,y
        sta $2440,x
        sta $2441,x
        sta $2442,x
        ldx #$00

loc_0a3c:
        inc dat_0a51,x
        lda dat_0a51,x
        cmp #$20
        bne loc_0a4b
        lda #$00
        sta dat_0a51,x

loc_0a4b:
        inx
        cpx #$08
        bne loc_0a3c
        rts

dat_0a51:
        .byte $1d                                   // .

// --- Region $0a7b-$0ad8 ---
.pc = $0a7b "sub_0a7b"

// Referenced by: jsr from $085d
sub_0a7b: {
        sei
        lda #$00
        tax
loop1:
        sta $2000,x
        sta $2100,x
        sta $2200,x
        sta $2300,x
        inx
        bne loop1
        lda #$33
        sta $01
        ldx #$00
        ldy #$00
loop2:
        lda $d000,y
        sta $2000,x
        lda $d080,y
        sta $2100,x
        lda $d100,y
        sta $2200,x
        lda $d180,y
        sta $2300,x
        inx
        inx
        iny
        cpy #$80
        bne loop2
        lda #$37
        sta $01
        cli
        rts
}
// Referenced by: jsr from $0860

sub_0abb:
        ldx #$00

loc_0abd:
        lda dat_0ad9,x
        sta $0450,x
        lda $0b19,x
        sta $0490,x
        inx
        bne loc_0abd
        ldx #$00
        lda #$ff

loc_0ad0:
        sta $2400,x
        inx
        cpx #$08
        bne loc_0ad0
        rts

// --- Region $0c19-$0c3a ---
.pc = $0c19 "sub_0c19"
// Referenced by: jsr from $0845

sub_0c19:
        ldx #$00

loc_0c1b:
        lda txt_0c3b,x
        asl
        sta $05e8,x
        clc
        adc #$01
        sta $0610,x
        lda $0c53,x
        asl
        sta $0660,x
        clc
        adc #$01
        sta $0688,x
        inx
        cpx #$18
        bne loc_0c1b
        rts

// --- Region $0cab-$0d1d ---
.pc = $0cab "sub_0cab"
// Referenced by: jsr from $08d8

sub_0cab:
        lda $dc01
        cmp #$ef
        beq loc_0cb3
        rts

loc_0cb3:
        jsr $ff81
        lda #$fb
        sta $b1
        lda #$20
        sta $b3
        lda #$00
        sta $b4
        jsr sub_0d00
        ldx #$00

loc_0cc7:
        lda dat_0cd5,x
        sta $0120,x
        inx
        cpx #$2c
        bne loc_0cc7
        jmp $0120

dat_0cd5:
        .byte $ea                                   // .

loc_0cd6:
        nop
        nop
        sei
        lda #$34
        sta $01
        lda #$10
        sta $b1
        lda #$08
        sta $b3
        ldy #$00

loc_0ce7:
        lda ($b0),y
        sta ($b2),y
        iny
        bne loc_0ce7
        inc $b1
        inc $b3
        lda $b1
        cmp #$fc
        bne loc_0ce7
        lda #$37
        sta $01
        cli
        jmp $fce2
// Referenced by: jsr from $085a, $0cc2

sub_0d00:
        sei
        lda #$34
        sta $01
        ldy #$00

loc_0d07:
        lda ($b0),y
        sta ($b2),y
        iny
        bne loc_0d07
        inc $b1
        inc $b3
        lda $b1
        cmp $b4
        bne loc_0d07
        lda #$37
        sta $01
        cli
        rts

// ============================================
// Data blocks
// ============================================

// --- Region $0801-$080f ---
.pc = $0801 "dat_0801"

dat_0801:
        // === BASIC loader stub ===
        .byte $0b,$08                               // next line pointer ($080b)
        .byte $cc,$0d                               // line number 3532
        .byte $9e                                   // SYS token
        .text "2064"                                // SYS 2064 → main_0810
        .byte $00                                   // end of line
        .byte $00,$00                               // end of BASIC program
        .byte $78,$a2,$00                           // x..

// --- Region $08de-$093e ---
.pc = $08de "dat_08de"

dat_08de:
        .byte $09,$05,$0d,$01,$01,$0d,$05,$09,$09,$05,$0d,$01,$01,$0d,$05,$09 // ................
        .byte $09,$05,$0d,$01,$01,$0d,$05,$09,$09,$05,$0d,$01,$01,$0d,$05,$09 // ................
        .byte $09,$05,$0d,$01,$01,$0d,$05,$09,$09,$05,$0d,$01,$01,$0d,$05,$09 // ................
        .byte $09,$05,$0d,$01,$01,$0d,$05,$09,$09,$05,$0d,$01,$01,$0d,$05,$09 // ................
        .byte $00,$02,$02,$02,$02,$0a,$0a,$0a,$0a,$07,$07,$07,$07,$01,$01,$01 // ................
        .byte $01,$01,$01,$01,$01,$07,$07,$07,$07,$0a,$0a,$0a,$0a,$02,$02,$02 // ................
        .byte $02                                   // .

// --- Region $0a52-$0a7a ---
.pc = $0a52 "Program $0a52"
        .byte $00,$03,$06,$09,$0c,$0f,$12,$03,$03,$04,$04,$05,$05,$05,$05,$05 // ................
        .byte $05,$05,$05,$05,$04,$04,$03,$03,$02,$01,$01,$00,$00,$00,$00,$00 // ................
        .byte $00,$00,$00,$00,$00,$01,$01,$02,$02   // .........

// --- Region $0ad9-$0c18 ---
.pc = $0ad9 "dat_0ad9"

dat_0ad9:
        // === Data block (320 bytes, $0ad9-$0c18) ===
        .fill 19, $80
        .byte $81                                   // .

dat_0aed:
        // === Fill data (38 bytes, $0aed-$0b12) ===
        .fill 38, $80
        .byte $82,$82,$82                           // ...

dat_0b16:
        // === Fill data (36 bytes, $0b16-$0b39) ===
        .fill 36, $80
        .byte $83,$83,$83,$83,$83                   // .....

dat_0b3f:
        // === Fill data (34 bytes, $0b3f-$0b60) ===
        .fill 34, $80
        .byte $84,$84,$84,$84,$84,$84,$84           // .......

dat_0b68:
        // === Fill data (32 bytes, $0b68-$0b87) ===
        .fill 32, $80
        .fill 9, $85
        .fill 30, $80
        .fill 11, $86
        .fill 28, $80
        .fill 13, $87
        .fill 26, $80
        .fill 15, $88
        .fill 13, $80

// --- Region $0c3b-$0caa ---
.pc = $0c3b "txt_0c3b"

txt_0c3b:
        .text "        "
        .byte $14,$12,$09,$01,$0e,$07,$0c,$05       // ........

txt_0c4b:
        .text "        -"

txt_0c54:
        .encoding "screencode_mixed"
        .text "cracking par excellence$"
        .byte $22                                   // double quote
        .text " "
        .encoding "petscii_upper"
        .byte $1f,$1d,$1c,$1a,$19,$17,$16,$14,$13,$11,$10,$0f,$0e,$0d,$0c,$0b // ................
        .byte $0a,$09,$08,$07,$06,$06,$05,$05,$04,$04,$04,$04,$04,$04,$04,$04 // ................
        .byte $04,$04,$05,$05,$06,$06,$07,$08,$09,$0a,$0b,$0c,$0d,$0e,$0f,$10 // ................
        .byte $11,$13,$14,$16,$17,$19,$1a,$1c,$1d,$1f,$20,$22,$23 // .......... "#

// --- Region $0d1e-$0e86 ---
.pc = $0d1e "dat_0d1e"

dat_0d1e:
        .byte $00,$00                               // ..

txt_0d20:
        .text "          "

txt_0d2a:
        .encoding "screencode_mixed"
        .text "scratch of triangle brings you another crap-game called "
        .byte $22                                   // double quote
        .text "real ghostbusters"
        .byte $22                                   // double quote
        .text " (c"
        .encoding "petscii_upper"

txt_0d78:
        .text ") 1989 "
        .byte $01,$03,$14,$09,$16,$09,$13,$09,$0f,$0e // ..........

txt_0d89:
        .text ".   "

txt_0d8d:
        .encoding "screencode_mixed"
        .text "thanx to thanatos for the original"
        .encoding "petscii_upper"

txt_0daf:
        .text "!!   "

txt_0db4:
        .encoding "screencode_mixed"
        .text "during game, press run/stop to proceed to next level"
        .encoding "petscii_upper"

txt_0de8:
        .text "!!   "

txt_0ded:
        .encoding "screencode_mixed"
        .text "i'm in a hurry, so i'll just send a few greetings to"
        .encoding "petscii_upper"

txt_0e21:
        .text ":   "

txt_0e25:
        .encoding "screencode_mixed"
        .text "online   dcs   cosmos   x-ray   radwar   and the rest"
        .encoding "petscii_upper"

txt_0e5a:
        .text "!!           "
        .byte $0c,$01,$14,$05,$12,$20,$04,$15,$04,$05 // ..... ....

txt_0e71:
        .text "!!                 "
        .byte $00                                   // string terminator
        .byte $ff                                   // .

dat_0e86:
        // === Fill data (1 bytes, $0e86-$0e86) ===
        .byte $00                                   // .
